Sep 01

Why Bother Going to College

In response to James Padolsey's blog post on his apprehension to studying Java before his first-year studying computer science.

University is unlike anything youve done, and unfortunately anything else youre going to do unless you really love the study of computer science. I recently graduated from university with a degree in Computer Engineering, taking roughly similar courses as a Comp Sci (except we also took harder classes related to engineering that were straight out of unrelated engineering disciplines, like thermodynamics, statics (bridges), and materials science).

Almost everybody enrolled in the computer science department started out years before school, programming in somethingusually web development (esp. Javascript, the bad parts). A healthy number of them drop out of the program and switch to math/physics/management or even art history. They drop comp sci not because they are dumb, or have a slower intake of the sheer volume of dense material fed to them. Its because they discover that the internals, things like how primitives are actually allocated in different ways in memory, sometimes even to your advantage to use the right one, are not as interesting as they had hoped. Low-level course material, such as transistor logic, VHDL, networking, operating systems (easily one of the most challenging and rewarded courses taught in computer science), and systems programming, are all above and beyond what most contractor/freelancers will face while they are busy earning 25% more than their comp sci cousins.

But the difference is worth a lot. Take a look at that one, systems programming. Here is a short description of whats taught:

EECS 337 Systems Programming - 4 credits Lexical analyzers; symbol tables and their searching; assemblers, one-pass and two-pass, conditional assembly, and macros; linkers and loaders; interpreters, pcodes, threaded codes; introduction to compilation, grammar, parsing, and code generation; preprocessors; text editors, line-oriented and screen-oriented; bootstrap loaders, ROM monitors, interrupts, and device drivers. Laboratory. Prereq: EECS 233 and EECS 281.

If you want to write code that does anything that involves automated decision making, the true back-end of great companies to work for or start, you need to actually study and learn about these low-levels to build better decision trees (data structures alone make it worthwhile) and neural networks. There are so many fascinating topics out there, and they are all more expressive than having to design web sites for clients.

I absolutely love the study of artificial intelligence, and am working on a project where the meat of the project is in the AI that feeds the site, but I dont write algorithms or architect systems for a living. I write Javascript code (and Python on the back-end serving up the front-end), designing a web app for publishers to create photo galleries. Its not quite the academic challenge I get on my project, but you also have to be very, very good at computer science to get recognized and to make big contributions, even to small companies (think startups).

Computer Science is a rich and engaging degree, and while it isnt for many who think it is, those who stick with it all 4 (to 5) years end up very happy. This is the golden age of software. Theres a lot of upheaval which will forge new empires, and I bet something as notable as the few winners of the California gold rush of the 19th century didnt even have the prestige that good engineers have. Think of all the famous and very wealthy nerds. Think about that when youre slogging through decimal floating-point arithmetics in binary by hand.


2:52 p.m. on September 2nd, 2009
1 Jonathan says...
Nicely put.&nbsp; You couldnt be more right about systems programmers vs.<span style='font-style: italic;'></span> contractors/freelancers.&nbsp; Browsing through the Apollo 11 command module source code that was recently open sourced just simply amazes me in every way.
2:53 p.m. on September 3rd, 2009
2 James Padolsey says...
Thanks Samuel for this extremely insightful response; just re-reading it makes me excited about Uni. And you're right, AI is awesome!<br><br>Some of the low-level stuff concerns me but I'll hopefully find it okay; it's not so much the complexity that worries me but, like you said, a possible lack of interest. <br>Think of all the famous and very wealthy nerds. Think about that when youre slogging through decimal floating-point arithmetics in binary by hand.That'll keep me going :)
2:54 p.m. on September 3rd, 2009
3 Tom Stewart says...
<div>I hope you realize that the core science of anything engineering, physics, computer engineering, computer science, etc. is mathematics. Everything described in the EECS 337 Systems Programming course blurb is rooted in applied mathematics; the art of problem solving.&nbsp;Dont kid yourself, computer engineering is basically a combination of computer science and electrical engineering, with more emphasis on the latter discipline.</div><br><div>I disagree with your statement about systems programmers vs. contractors/freelancers because it's a&nbsp;stereotype. It's really about how one goes about acquiring and applying knowledge after attaining your CE and my CS degree. &nbsp;The green will take care of itself based on the variety of opportunities and experience.</div>

Comments are closed.

That's all the comments I'm taking for this post. Email me your thoughts:

Samuel Clay is the founder of NewsBlur, a personal RSS news reader for web, iOS, and Android. He is also the founder of Turn Touch, beautiful control for your smart home.

He lives in San Francisco, California. In another life in New York, he worked at the New York Times on DocumentCloud, an open-source repository of primary source documents contributed by journalists.

You can read about his past and present projects at

Follow @samuelclay on Twitter.

You can email Samuel at He loves receiving email from new people. Who doesn't?