I strongly recommend all CS students learn CSAPP or its corresponding course once in their undergraduate, preferably the summer of freshman, as a system programming course. To solve the problem that most universities, including CUHK(SZ), do not provide such a system programming course, I advise all engaging students should join our WeChat group to learn and discuss together.
Note: For the Chinese version, you may refer to my answer on Zhihu:
If you would like to join our WeChat group, scan the following QR Code:
(Sorry, it has exceeded 200 members. Please add my WeCom first.)
I am a student graduating from CUHKSZ in 2021, majoring in Computer Science and Engineering. I have been the Undergraduate Student Teaching Fellow for 5 semesters on the following courses: CSC1002, CSC3002, CSC3050, CSC3100, and ERG3010. For more of my background, you can see my other posts or my personal website.
CS Students Should Learn CSAPP As Early As Possible
CS students should learn CSAPP after gaining sufficient knowledge of C programming and before they learn computer architecture and operating systems.
In my opinion, I regret I did not know CSAPP in my freshman year and wasted some time in other areas. I learned full-stack programming in my first year, including Django, React, and WeChat Mini Program. Moreover, I learned some primary ML and Deep Learning in my sophomore. However, I gave up ML study since I was not fluent in math and statistics.
Because CS162 in UC Berkeley can be transferred as the operating course, I took it in the summer of 2019. Before taking this course, I had no much interest in computer systems. I thought systems have been well defined, and I only needed to remember those concepts and configurations for the exams. When I attended OS in Berkeley, I felt pretty difficult to do the labs, although I had years of OI experiences in high school.
Starting from my junior year, I began my systems research and touched some system software source codes. My research in the spring of 2020 is about optimizing Redis, so I had the experience of modifying the source code of Redis in ANSI C and YCSB in Java. It is my first time to have fun in systems programming, and it makes my mind further study computer systems.
In my senior year, I am busy with graduate school applications and preparing for interviews. I start learning CSAPP at that time by videos on Bilibili and doing lab projects. I am impressed by this course! It is not very difficult to understand, especially when I have learned computer architecture and OS before. Still, the most valuable contribution is that it connects the whole computer system and explains it comprehensively. It facilitates students with the programming tools to learn computer systems by coding and gives them a big picture of computer systems.
Some may argue that this course is not deep enough. However, I consider it as the characteristic of this course. It provides CS students the whole concept to understand computer systems, and its labs help them understand every aspect. The tradeoff is that no one can be an expert in all concepts in one semester, so I think using one semester to build the big picture is good enough. Then, one may choose one’s favorite direction to learn more profound, like assembly language, OS, network, or give up studying computer systems.
Therefore, I would like to learn CSAPP in my summer of freshman if I had another chance. Maybe I would be puzzled. I could build my big picture at the start of my CS study. I could solve the problems when I further learn architecture and OS in the following semesters and learn them more comprehensively.
The Importance of CSAPP on CS Courses
To have a comprehensive understanding of the importance of CSAPP on CS courses, I collect 44 surveys from students on their attitudes towards CSAPP, 11 of whom have learned it before.
Among these 11 students, I ask them the importance of CSAPP in the following courses: C Programming, Computer Architecture (CSC3050), Operating Systems (CSC3150), Data Structures (CSC3100), Computer Network, and Parallel Computing (CSC4005). (The code within braces is the corresponding course code at CUHK(SZ)). The result is as follows:
We can see that the most relevant courses are Computer Architecture and Operating Systems, which are also two main content in CSAPP. By learning CSAPP, we can understand assembly language, the CPU, the essential compilation and linker, and OS components like memory systems. Its labs have excellent quality, even better than most homework we have.
Besides, other courses are also relevant to CSAPP. For example, you can practice C programming because most labs use C. When solving lab problems, you can practice data structures, especially those frequently used in system programming. You can even learn socket programming, which helps you learn computer networks.
Studying System Programming
From my perspective, system programming is the programming of systems and frameworks (relative to application programming). For example, if you would like to design a compiler, you need to choose a data structure to store your finite state machine. Moreover, you need to consider the thread-safe problem when you build a small server.
Learning system programming is hard because ML and AI are the hottest topics in both industry and academy. Since system programming has a relatively high bar, it is never the hottest research area. However, I also think system programming is a cool thing, where you can build your own server, database, or even compiler. Although others may not understand system programming’s importance, every CS programmer will use system software, making system programming cool stuff.
However, because the bar of systems is relatively high, most CS Ph.D. fresh graduates are in AI; thus, universities may not be able to provide system programming courses now. Therefore, system programming becomes an essential course that requires self-learning.
Difficulties of Self-Learning CSAPP
We also collect data from students who would like to learn CSAPP:
The principal problems are feeling hard to keep learning and having nowhere to ask questions. It is common to give up self-learning. I am also this kind of person on a subject that I do not have much passion for. Moreover, many CS forums and resources in China are of low quality. For courses that require self-learning, we may not ask professors nor TA.
Join Our WeChat Group
To solve learning system programming problems and help build potential systems researchers’ connections, we create a WeChat Group for CSAPP. Join our group, and you can freely discuss issues of CSAPP and know other students interested in computer systems. More importantly, we plan to have camps lasting for one or two months to help all students learn CSAPP together.
Welcome to join our CSAPP WeChat Group!