2008 January 24 — CLUEHQ
Random Thoughts from a Computer Science Student…
Random header image... Refresh for more!

Computer Science Education

It seems like there are a lot of people that have distinct opinions about CS education today. The more I look, the more I find articles written by other prominent computer scientists on what they see as really key deficiencies in CS curricula. One of the more interesting and entertaining posts comes from a Google employee. In this long and humorous post, Steve Yegge talks about compilers and why they are key to understanding the discipline of CS:

The first reason Compiler Construction is such an important CS course is that it brings together, in a very concrete way, almost everything you learned before you took the course.

You can’t fully understand how compilers work without knowing machine architecture, because compilers emit machine code. It’s more than just instructions; compilers need to understand how the underlying machine actually operates in order to translate your source code efficiently.

Incidentally, “machines” are just about anything that can do computations. Perl is a machine. Your OS is a machine. Emacs is a machine. If you could prove your washing machine is Turing complete, then you could write a compiler that executes C code on it.

But you knew that already.

You can’t understand how modern compilers work without knowing how Operating Systems work, because no self-respecting machine these days runs without an operating system. The OS interface forms part of the target machine. Sure, you can find people working on five- to ten-year mainframe projects that ultimately run no faster than a PC from Costco, and they may dispense with the operating system due to time constraints, plus the fact that they have a worldwide market of one customer. But for most of us, the OS is part of the machine.

You won’t understand how compilers work unless you’ve taken a theory of computation course. The theory of computation reads like part one of chapter 1 of a compilers book. You need all of it.

I’m taking CSCI E-207 (Introduction to Formal Systems and Computation) as the very last course in my program at Harvard Extension. Given that the orientation of the school with respect to CS coursework is clearly biased towards [Read more →]

January 24, 2008   2 Comments