I’ve been thinking a lot about programming pedagogy lately and today had the occasion to start looking for a good “first book” for a friend who wanted to introduce his son to programming.  Along the way, I came across an old post from the Joel on Software blog on getting “Back to Basics.”

Do take a look at the original post, especially if you are interested in programming.  I find it interesting for at least a few reasons:

It advocates the philosophical approach of doing the small things well.  Both as a musician and as a programmer, I’ve been taught that the only way to build a quality product or performance is to dive right down in the details of each building block — each line of code or note and phrase of a piece — and make sure it is the best it can possibly be.  Otherwise, to borrow from the parable, you are building your house on sand.  This is why Steve Jobs insisted that the inside components of a Mac be elegantly designed and finished, even though the user will never see them.  This is also why in music school, myself and my colleagues often spent an hour or more a day on nothing but scales.

It respects the concept of personal responsibility.  On first blush, this seems like a bit of a stretch.  But think about it.  If you are taught programming using nothing but “sexy” high level languages like Java, C#, etc., you’re never going to worry about mundane details such as efficient string concatenation.  But then, the rest of your team uses your string library for all their code, which gets called thousands or millions of times, and then all of a sudden you have wasted resources, memory leaks, etc.

It encourages intrinsic pride in our work.  No one may ever see the details of what I write, but I have the pride of knowing that each method, each line of code I write is as efficient, effective and elegant as it can possibly be.  I am not writing for the accolades of the user, or even the boss, but for the work itself.  By the way, as a Christian I find this compelling as well.  Every task we complete as workers is ultimately an act of worship to the God who made us and is our provider.  By creating and sustaining the best we know how, we are emulating Him and giving Him glory.

All this, by the way, is why I have felt and argued that the aspiring programmer (maybe even more generally, “technologist”) should study a theory-based major focused on the fundamentals, such as computer science, rather than a more trendy, “business-y” blended program.

I may not know a given new language; but as I am learning and using it, I understand the fundamental concepts on which it is based, and I have the tools to ask the universal questions.  Is this code efficient?  Is it maintainable?  Will it scale?  This is why we must always go Back to Basics.


Written on March 31st, 2012 , Tech

Leave a Reply

Your email address will not be published. Required fields are marked *

COMMENTS
    Ryan M. Pruden commented

    I used to like elegant code, but it’s often times slower. I was implementing on an Atom core the other day, and did you know that unrolling while loops yields a 1.3x speedup? There’s really not a good way to build this into compilers, so you’re left with sloppy code that runs faster than lightning. Also, shifts are slow… and short method calls…

    Reply
    March 31, 2012 at 4:02 pm
    Travis Miller commented

    That’s a really good point — I suppose I could disprove my own thesis in a way because I would argue that you’re really deciding on an efficiency trade off — machine (speed / ugliness / low level language) vs human / developer (elegance / high level language)

    Reply
    March 31, 2012 at 4:29 pm
    Travis Miller commented

    That being said, having a respect for (and balance of) both obviously gives you the best of both worlds (and agrees with my thesis — kind of).

    Reply
    March 31, 2012 at 4:34 pm

Rehearsing Creation is proudly powered by WordPress and the Theme Adventure by Eric Schwarz
Entries (RSS) and Comments (RSS).

Rehearsing Creation

Musings on faith, technology, the arts, and life