As software engineers, we study computer systems (or computer architecture) to understand how our programs ultimately work and how the machine expects our data to be encoded. The immediate benefit is the ability to write faster, more efficient, and secure code.
In the long term, understanding computer systems provides even more benefits. Every abstraction between us and the hardware introduces leaks. This course will provide the foundational principles for creating robust mental models and more effective analysis.
We will start with how the machine encodes data, including binary representations such as text. Then we will move on to programming in C and assembly to better understand the interface provided by the computer for executing programs. Finally, we will look at two important aspects for improving program performance: using the processor microarchitecture and CPU caches (memory hierarchy).
The course will primarily consist of a sequence of tasks for each topic. You should aim to solve each task, using provided solutions and additional explanations as needed. There will also be several workshops to help connect the topics.
Oz Nova is the founder of CS Primer (csprimer.com) and a co-founder of Bradfield School of Computer Science — an unusually rigorous CS-fundamentals education brand aimed at self-taught engineers filling in the formal computer-science foundations they didn't get from a four-year degree. The CS Primer course catalog goes deeper into the fundamentals than essentially any other paid online platform.
The course catalog covers compilers and language design, computer networks (from sockets through application protocols), distributed systems, computer architecture, operating systems, databases at the storage-engine level, and the algorithms / data-structures material taught at the level of a serious CS undergraduate course rather than an interview-prep cheat sheet.
The CourseFlix listing under this source carries 7 CS Primer courses spanning that range. Material is paid; CS Primer runs on per-course or membership pricing on the original platform. Courses are aimed at working software engineers ready to fill the foundational CS gaps that compound across a career.
Watch Online 78 lessons
This is a demo lesson (10:00 remaining)
You can watch up to 10 minutes for free. Subscribe to unlock all 78 lessons in this course and access 10,000+ hours of premium content across all courses.
As in any field, strong fundamental knowledge forms the foundation for everything else. That is why this course is your first step on the path to a profession..
1h 30m
Frequently asked questions
What prior knowledge is required before enrolling in this course?
This course does not explicitly list prerequisites, but a basic understanding of programming concepts and familiarity with C programming would be beneficial. The course delves into programming in C and assembly language, so prior exposure to these areas will help in understanding the course material. Additionally, a general grasp of computer science fundamentals, such as data encoding and binary representation, will be advantageous.
What projects or tasks will I complete during the course?
The course includes a sequence of tasks for each topic, which you are encouraged to solve. These tasks are designed to apply the concepts learned, such as understanding binary representations, programming in C and assembly, and optimizing performance using processor microarchitecture and CPU caches. Workshops are also included to help connect these topics and deepen understanding.
Who is the target audience for this course?
This course is aimed at software engineers and computer science students interested in gaining a deeper understanding of computer systems and architecture. It is suitable for those who want to improve their ability to write efficient and secure code by understanding how programs interact with hardware. The course will benefit anyone looking to strengthen their mental models and analysis skills in computer systems.
How does this course compare in depth and scope to similar courses?
The course provides foundational principles in computer systems, focusing on data encoding, C and assembly programming, and system performance. It covers specific topics like IEEE754 floating point numbers, UTF-8 encoding, and bitwise operations, which may not be as extensively covered in other introductory courses. Its focus on practical tasks and workshops allows for a hands-on approach to learning these concepts.
What specific tools or platforms are explored in this course?
This course explores programming in C and assembly language, and introduces tools such as Valgrind for memory debugging, LLDB for debugging, and the C pre-processor for macros and conditional inclusion. It also covers topics related to processor microarchitecture and CPU caches, providing a comprehensive look at the tools and platforms relevant to computer systems.
What is not covered in this course that I might need to learn elsewhere?
The course does not cover high-level programming languages beyond C and assembly, nor does it delve into specific software development methodologies or frameworks. While it provides a strong foundation in computer systems, those looking to learn about operating systems, networking, or specific application development may need to seek additional courses.
How much time should I expect to commit to this course?
The course consists of 78 lessons, with the first 60 covering a wide range of foundational topics in computer systems. The time commitment will vary depending on your familiarity with the subject matter and the depth to which you engage with the tasks and workshops. You should allocate sufficient time to solve the tasks, review provided solutions, and participate in workshops to fully benefit from the course content.