Well-rounded coding education

Michael Barnathan asked, on my 2008 introductory article, for my thoughts on

I’m [Michael] drawing up plans for a new type of university with a multidisciplinary curriculum that takes advantage of the fusion of principles from different disciplines.

His project’s web site is at http://www.projectpolymath.org/, aiming

to simultaneously acquire breadth and depth of knowledge in time comparable to that required to obtain a traditional single-subject university degree

I think his toughest challenge is actually convincing other people that his university degree offerings are on par with, and even better than, other conventional university degrees.

That said, my eye was caught by

Rather than studying individual majors, students focus on problems and concentrate on their primary approaches to these problems.

It’s problem-centric, so other skills come into play.

Say you’re an artist and you want to paint something. Just being a brilliant creative person isn’t enough. Do you want to use a particular type of brush? Do you know how to mix colours together to get that special hue and tone? Do you care about the quality of your painting canvas?

Joel Spolsky says there should be a degree program where it would

consist of a practical studio requirement developing significant works of software on teams with very experienced teachers, with a sprinkling of liberal arts classes for balance.


You might be able to major in Game Development and work on a significant game title, for example, and that’s how you spend most of your time, just like a film student spends a lot of time actually making films and the dance students spend most of their time dancing.

It’s similar to Michael’s idea of education. The other areas of your education enhance your primary focus. Just browse through some game development sites such as GameDev and MadMonkey. You’ll find many articles on game development that have little to do with coding itself, ranging from application of artificial intelligence to the physics in cloth simulation. And here you thought game developers were all about coding skills…

Then there’s Clayton Shier who wrote about the importance of math in computer science courses, of knowing a subject outside of programming.

And Bryan Hughes said that

Coding is actually a small part of the real software engineering package.

on a forum post discussing recognisable traits of a good programmer (look for Nova Dragoon near the end of the post).

Not convinced yet? Jeff Atwood talks about how we should teach computer science, with subjects such as project deployment and source control. Topics that have little to do with coding itself, yet make you a better programmer. There’s something important he mentioned too:

Today’s computer science students should develop software under conditions as close as possible to the real world, or the best available approximation thereof.

It’s something that on hindsight, I should have paid more attention to. In the academic environment,

  • I worked mostly alone (no people skills training for working in teams)
  • Collaboration was frowned upon (they think of it as copying or cheating)
  • Source control was non-existent (still is in my present employment…)
  • Deployment was non-existent (instructor/professor simply compiled your code and ran it)
  • Mostly theoretical or well-defined problems were given (real world problems are much more complicated, usually people-based)

The usual problems fall into topics like finding shortest path with Dijkstra, drawing the Sierpinski Triangle, or manipulating huge matrices for LU decomposition or QR decomposition (killed lots of brain cells too because of the math involved…).

During my university education, there was only 1 semester where I attended a specific course on programming, with C. Half my time was on math. The other half was on solving scientific problems with programming, using the knowledge I had on that one course in that one semester.

When I started working as a programmer, there were lots of programming stuff I needed to do and learn. Like SQL, VB.NET and Javascript. There were also a lot of non-programming stuff. Like writing documentation, talking with users and working with other team members.

Being a good programmer is more than just coding.

And that’s the point. That’s the whole point of this blog. Now, isn’t it time for you to get a well-rounded coding education?

  1. Tony

    Actually that Math in CS article was written by Clayton Shier (edited by me). He’s a somewhat regular guest author on my blog, so it might not have been as apparent. I do support his point of view though 😉

  2. Vincent Tan

    Aaahhh, I was wondering why the article was signed “clayton”. My bad. I’ve corrected my article to credit him properly. Thanks.

Comments are closed.