Skip to content

Latest commit

 

History

History
55 lines (43 loc) · 4.23 KB

18213.md

File metadata and controls

55 lines (43 loc) · 4.23 KB

15/18-213: Introduction to Computer Systems

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.

What to expect

  • 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.

How to do well

  • 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 and proxy

What to watch out for

  • 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

For the overachiever

  • 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 find gdb 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 and tmux. 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 into doxygen as a framework for you to document your code.
  • If you enjoyed 213 a lot, you should consider taking 15-410: Operating Systems.

Resources