Category | Difficulty |
---|---|
Labs | 8 |
Assignments | 6 |
Exam | 7 |
This class is the next big step for programming courses after 15-122, and is arguably even more time consuming. That being said, 213 can be very rewarding, as it gives students lots of great experience with complex programming projects which can be valuable for students when applying for software internships. The weekly programming labs are the bulk of the work, and are what the course is built around.
- Labs: The labs are what define 213. They take a lot of time and are very involved.
- Assignments: There are weekly written assignments which contain 1-3 questions that require single paragraph answers. The questions in each assignment are mostly based on the lectures that were held during that week.
- Exam: There is just a final exam and no midterm exam. The exam is pretty challenging, but you have way more time than you need while you are taking it. Plus, they give you a lot of practice questions that you should take advantage of if you want to do well in the exam.
- Skim over the book when you can - it follows along with lecture well b/c professor Bryant wrote it. In addition, the book goes over implementations for parts of the labs. Overall, the book is very well-written, so use it to your advantage.
- Start the labs as soon as you can and ask for help during recitations.
- Use the practice server for the exam - the questions on the server are very similar to the real exam. If you don't have time to practice all the questions while the exam server is live, you can try to download and compile all the questions beforehand, so you can do them at your own pace.
- Save your late days for the later labs like
malloc
andproxy
- If you get a bad TA for your recitation, it is definitely worth the trouble to switch sections. Recitation can be very helpful if you have the right TA
- The lectures can be really boring b/c they usually just go through slides
- If you think you have a creative way of doing one of the labs in a different way, make absolutely sure that it will work because there's usually a preferred way for each lab to be done
- Later on in the class, you will probably find
gdb
useful as a debugging tool to analyze your code when it is not working. As easy and powerful as print statements may be, you will definitely findgdb
extremely useful if you can learn to use it well. It will help you step through code, trace where you are at any moment, and overall help you develop stronger debugging skills. - Learning
vim
andtmux
. Although there is no requirement to develop on terminal in most CS classes, learning how to work in a terminal environment can be a very useful skill to pick up for lower-level programming classes, and extend into your work. While sublime and visual studio code are easy to use and have nice GUIs, there are more efficient methods to develop in terminal if you set it up right. The setup cost and learning curve is quite steep for doing the in-terminal experience, so many people tend to shy away from it. - Starting from
malloc
, the course staff starts to stress documentation a lot. They should be teaching it much earlier, as documentation is a very underrated skill that is neglected in many courses at CMU. If possible, you should look intodoxygen
as a framework for you to document your code. - If you enjoyed 213 a lot, you should consider taking
15-410: Operating Systems
.
- Computer Systems: A Programmer's Perspective, 3/E. Textbook used for this class.
- Operating Systems Concepts. If you're looking for more in-depth knowledge about systems. I don't know why they use dinosaurs for their cover, but because of it, people refer to this text as the
dinosaur book
. - doxygen. Documentation.
- vim as an ide This is a bit outdated because people prefer neovim, but many of the packages are still relevant. Just look out for the
nvim
corresponding versions.