Auto Ads by Adsense

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.


KevinX said...

You hired two engineers named Kevin? You've got to be kidding.

I agree with having high standards. This is esp. important for people doing reliable backend, storage, systems, etc. What about frontend, graphics, designers?

systemBuilder said...

My wife is a computer engineer and at her school (a top school in canada) they were asked to do everything from operating systems work to signal processing coding and circuit analysis.

unfortunately, they were not asked to write parsers to recognize grammars.

when faced with a need to do this, most people will utterly fail without the theory-put-into-practice that a compiler course (NOT an automata theory course) provides. The theory of parsing, translating, and compiling is the most "magical" part of the field of computer science, it integrates all the data structures knowledge and gives you some of the skills necessary to do language translation (which includes file format conversion) in a provably optimal way, and it gives you insight into grammar design! No other course in a compsci curriculum adds more value!

When a computer engineer takes a class where they start by learning about logic functions and truth tables and end up microcoding a microarchitecture of their own design by the semster's end, that course is ALSO magic !!