Why should I take CS 131?
First of all, you should take CS 131 to find out more about the magic behind computer systems! We realize that different people have taken different prior courses, however, and below we try to give an idea why CS 131 is the right choice for you at various stages of the CS curriculum.Why should I take CS 131 if ...
- ... I've completed the intro sequence (CS 16/18/10)?
- ... I've already taken CS 33?
- ... I've completed CS 15/17?
- ... I'm planning to take higher-level systems courses?
- ... I'm planning to take higher-level courses outside of systems?
I've completed the intro sequence (CS 16/18/19). Why should CS 131 be my first systems course?
- CS131 assumes no prior systems knowledge: We'll start with the C programming, and slowly build upon concepts you learned in your intro sequence.
- Industry relevance: CS131 will not only introduce fundamental systems concepts like the infrastructure that goes into running a program, it will also focus heavily on how these concepts are utilized in industry today and why they're critical to scaling and optimizing modern technology. We'll prioritize the most relevant and fundamental systems concepts, so that even if you don't pursue upper-level systems courses, you'll be able to apply these concepts to other CS courses at Brown, CS side projects, and Software Engineering careers.
- CS33 vs. CS131: As with many course decisions at Brown, the choice between cs131 and cs33 comes down to what you’re hoping to get out of the courses. If you’re excited about the crux of how computers actually work, cs33 will cover how code is translated into instructions known as assembly that can be understood by the computer, how to read and write assembly, how data types like integers and floating point numbers are represented in binary, and how the various components of the operating system work together to maintain processes and memory. While CS33 goes into great depth into some really important systems concepts, students learn in different ways, and it’s entirely possible that you’re not interested in the low-level quite yet. CS131 will touch on how a computer is organized, how processes are run, and how memory works, but it will focus more heavily on how concurrency and distributed systems can scale and optimize your program -- concepts that allow tech companies to handle hundreds of millions of users at a time, that take advantage of multithreading and multiprocessing to make code run hundreds of times faster, and that connect billions of users across the internet.
And if after taking CS131 or CS33, you’re very excited about systems programming, you always have the option to take CS33 to get some depth on the low-level details of the hardware-software interface you learn in CS131 or to take CS131 to get some perspective on how large-scale systems operate today.
I've taken CS 33 already. Why should I also take CS 131?
- Taking CS33 concepts to a higher level: CS33 focuses on the low-level (on assembly and data), while CS131 will spend more time on developing higher-level concepts (like concurrency and distributed systems). We'll start off by explaining machine organization and memory using a low-level language like C, and then we'll go on to explore concurrency using a language more widely used in industry like C++ or Go.
- Will I learn anything new? The best way to know what you'll learn in CS131 is to check out our course outline. Each topic blocks lists questions that we'll strive to help you answer -- try answering them yourself, and if you feel like you don't quite know the answers, but you're intrigued, perhaps CS131 is a great class for you. It will clear up and build upon fundamental concepts you've learned in CS33, and you'll get an 1000-level credit that counts towards your concentration.
- Understanding the why: It's easy to get lost in the implementation details in CS33 – you spend a lot of time figuring out how to write and read assembly or why your signals aren't being sent to your foreground process correctly, and sometimes the use cases aren't that obvious. CS131 is an opportunity to take a step back, and think about why systems are critical to optimizing and scaling software engineering and to explore more thoroughly the systems infrastructures that our world currently runs on.
I've completed CS 15 or CS 17. Why should I take CS 131 alongside CS 16 or CS 18?
If you're really excited about programming and can't wait to learn more about systems programming, you should consider taking CS131. Other than feeling comfortable with iterating through for and while loops, working with basic data structures and data types like arrays, strings, and ints, and being passionate about Computer Science, CS131 will teach you the rest!
The upper-level systems courses I plan to take seem to require CS 33/32. Why should I take CS 131?
CS131 is a new course, so it won't initially be recognized as an intermediate course. However, this year, CS131 will qualify as an 1000-level course, and we are working to get CS131 accepted as an alternative prerequisite for some higher-level systems coureses (e.g., distributed systems, networks). Systems courses with significant low-level programming (e.g., operating systems) will continue to require CS33 as a prerequisite, but taking CS33 will be easier if you have taken CS131. That said, even without intermediate credit, there are still many great reasons to take CS131 -- you'll learn very interesting and applicable material, you'll get 1000-level credit, and CS131 may be great preparation for a summer internship in industry that you plan to do in summer 2020!
I plan to take upper-level courses outside of systems. Why should I take CS 131?
CS131 will provide you enough breadth and depth to make you comfortable with core systems concepts that you may encounter in upper-level courses, in industry or in research going forward. You will miss out on low-level details if you chose CS131 over CS33, but these details will be less crucial to you if you plan to focus e.g., on AI courses. Plus, you will learn additional material and become a better software engineer compared to not taking any systems course!