Computer Science Education — 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 the more vocational/practical skills area, it’s really interesting that they offer a course like Formal Systems at what is ostensibly an “extension” school. Formal Systems is no picnic; it’s a CS course where you hardly ever touch a computer (if at all) except to write up your assignments.

He offers some ideas about why more students don’t follow the path of enlightenment he so clearly advocates:

One reason many programmers don’t take compilers is that they’ve heard it’s really, really hard. It’s often the “capstone” course of a CS program (OS often being the other one), which means it’s a sort of “optional rite of passage” that makes you a Real Programmer and puts hair on your chest, regardless of gender or chest-hair preference.

If you’re trying to plan out a schedule that gets you to graduation before the money runs out, and hopefully with a GPA that doesn’t cause prospective employers to summon the guard dogs on you, then when you hear the phrase “optional rite of passage”, who can blame you if you look for alternatives?

It’s funny that there is this aversion to “real” CS classes. People sometimes tell me I’m crazy for taking such hard classes in an undergraduate program. Formal Systems, for example, is supposed to be a graduate level class at HES. It’s only recently become clear to me just how valuable these classes are.

When you get your first good dose of how adjusting something as simple as whether you iterate across the rows of an array or across the columns when computing some value can improve the speed of your code by 10%, you start to appreciate the subtle insight that comes from understanding how the representation of data in memory has a real impact on how hard a problem is to solve. I’m only just now beginning to understand this but I wouldn’t have a clue unless I had been turned on to this way of thinking by my algorithms class.

That’s why I’m heartened to see that HES offers a class in Compilers: CSCI E-295 Compiler Design and Implementation. I’d be happier if the class was available via distance education but it’s good to see that you at least have the option.

Of course, if I’m lucky, I can take it at Columbia.

2 comments

1 John Holland { 03.24.08 at 8:38 pm }

What other C.S. and Math courses at HES did you use to complete your major in Computer science?

How much of the degree were you able to complete at a distance?

Since I also would like to complete an undergraduate degree in Computer science I find your web sit very informative, and i hope you will keep it up through your M.S.

Thanks

2 richard { 03.25.08 at 3:52 pm }

Completion of my degree via distance is a bit complicated but I’ll try to answer as much as I can.

I started my education in the very traditional way: I went to university. I got about 3/4 of the way through before I had to leave.

When I applied at Harvard Extension, I was aware that they require 64 hours to be taken from Harvard to qualify for the degree. That translates to 16 classes. They also required a writing class that is only offered on campus so I had to commute to Boston in order to take that class. After that semester, I didn’t take any further classes on campus.

A new requirement is that 16 credit hours must be earned on campus. That translates to 4 courses. If you are smart, you can get this done in one year or one semester on-campus if you plan right and don’t work during the process. A friend of mine is doing it 2 courses at a time over two semesters commuting from Michigan.

The question about which classes I took is a little more complicated. HES requires 32 credit hours for a “field of study” in Computer Science. My set of classes were a mix of theory classes and practical programming classes. I took the usual set of intro classes, data structures, algorithms, etc. I also took classes in networks and cryptography.

As for math classes, I took almost all of my math classes in m first two years. The only one that really counts for CS is Discrete Mathematics which you can take on-campus at HES. Another good one is Number Theory but that isn’t offered via HES.

I hope this helps.

Leave a Comment