Thursday, March 21, 2013

PSA: Do take the undergraduate compilers class

We just closed our hiring cycle for summer interns at Quark. During this period, we vetted tons of transcripts and resumes from top tier universities including CMU, Berkeley, and Stanford. Our hiring standards are demanding, and I personally did a lot of interviewing. Congratulations to Kevin and Kevin.

If you're a Cal student, I have very specific knowledge of the classes offered. Once upon a time, CS 162 (Operating Systems) and CS 164 (Compilers) were considered core classes in the CS curriculum. They were required of all CS graduates. In this day of "applications first" approach to CS, CS 162 is still required but CS 164 is now optional.

From the perspective of a hiring manager, however, taking CS164 early in your undergraduate career signals several very positive things:

  1. You're not intimidated by challenging classes that require lots of coding. The ability to do well in CS 164 depends very much on your ability to utilize tools, write a lot of code, and test and debug at a meta-level that none of the other classes require.
  2. You're not satisfied with understanding computers at the topmost abstraction layers. You want to dig beneath the abstraction layer of a programming language and understand how they work, down to the point of producing assembly for the machine to execute. The reason CS162 and CS164 were required in the past was that digging beneath those abstraction layers was highly prized for anyone doing any kind of work. (CS152 is very nice as well, since you now get down to the logic layer --- knowing how to do anything at the transistor level isn't necessary, but it's also useful)
  3. CS164 requires full use of almost all data structures you were taught in your data structures class. You'll build parse trees. You'll use symbol tables. You'll need to walk trees and do type-checking. CS164 integrates all the knowledge you got from data structures. Getting this in early in your career will only benefit you.
  4. People who take CS164 will not balk at writing a parser, or even designing a whole new programming language or DSL in order to better solve a problem. This approach of meta-programming (or Meta-Object Protocols) is very useful and the skills necessary to implement it in a non-LISP environment are only available for people who know how to write compilers and other language translators.
I know it's fashionable now to deride the traditional computer science education with its emphasis on hardcore topics. But when I interview students with the traditional computer science education versus students without, the difference is clear: the former are much better problem solvers, and write better code. Ultimately, they'll make better hires and will get more and better job offers.

So for those at Cal: take CS162 and 164 as early as you can. For those elsewhere, please don't neglect your systems classes. They'll make you stronger engineers.
Post a Comment