Recommended classes for computer science majors

csic-at-nightThis semester I am TA’ing a computer systems course. The most common questions I’m getting (aside from project help requests) are regarding classes to take it upcoming semesters. So, to that end, I thought I’d elaborate on my views regarding classes recommended for computer science majors. (I’m couching this discussion in generic terms, but after any mention of a course I’ve included the University of Maryland, College Park course numbers). From my perspective, their four courses that every computer scientist should aspire to take: algorithms, data structures , operating systems, and compilers.

Algorithms is an easy choice, is the foundation upon which all applied computer science and programming is built upon. Without at least some exposure to ideas presented in an algorithms course (CMSC 451), most programmers are at best groping in the dark. With a thorough grounding in algorithms one can be relatively confident that your code is not tragically ineffective — or blatantly attempting the impossible. Everything I’ve said about algorithms applies equally well to a data structures course (CMSC 420), so I’ll just leave it there.

An operating systems course is important because for most students it’s the only time they are forced to build upon code they themselves have written. In the classic version of an OS course (CMSC 412) students build operating system as a series of projects. Project 2 builds upon project 1 which in turn was built upon project 0; the situation that is rarely offered otherwise in an academic setting. That experience alone, beyond the simple exposure to the inner workings of an often intimidating part of our computing environment, is worth the price of admission. Lastly, and possibly most importantly, a good compilers course is key to being successful computer scientist or programmer.

Of all things taught in university computer science curriculum, compiler theory (CMSC 430) might be the only thing that a student could not discover or teach themselves. It is highly unlikely that all but the brightest students would accidentally stumble upon — or brute force their way into — the correct implementation of a compiler. Additionally, a compiler class gives the budding programmer a chance to build code using an intermediary tool. Exposure to this method of programming is both enlightening and frustrating to students, but increasingly common, if not critical, to computing in the future.

That is not to say that there aren’t other good and important classes for CS students to take, but these four courses get my vote as key to any computer science curriculum.

So what, dear reader, is your opinion?

6 replies on “Recommended classes for computer science majors”

Comments are closed.