Educating programmers

On Thursday, Dec. 29th, Joel Spolsky, in a post called “The Perils of JavaSchools,” flashed his “old school” credentials by complaining that kids these days have it too easy, because they are allowed to use Java in learning programming, and therefore he contends that they don’t know nearly as much as they should, because they didn’t have to learn programming the way he did. In particular he said …

Instead what I’d like to claim is that Java is not, generally, a hard enough programming language that it can be used to discriminate between great programmers and mediocre programmers. It may be a fine language to work in, but that’s not today’s topic. I would even go so far as to say that the fact that Java is not hard enough is a feature, not a bug, but it does have this one problem.

If I may be so brash, it has been my humble experience that there are two things traditionally taught in universities as a part of a computer science curriculum which many people just never really fully comprehend: pointers and recursion.

The Perils of JavaSchools – Joel on Software

Now I’m not a programmer, nor do I play one on TV, but I do find programming fascinating, and I am awed by the attention to detail that it demands of those who do it. So when I read Joel’s critique of allowing the use of Java in schools, I thought of my new friend, Colm Smyth, who is a former Sun employee and Java programmer. I wrote Colm and asked his opinion of Joel’s critique. Colm has responded with a rebuttal at his site. Colm said, among other things, …

Joel contends that a programming language “can be used to discriminate between great programmers and mediocre programmers”; I believe that kind of discrimination is not the purpose of a language; instead a portfolio of abstract and real-world problems and projects should be used to demonstrate mastery of a language and (more importantly) the computer science concepts that it embodies (object-orientation, concurrency & synchronization, garbage collection, references, protecting state against unintended change, etc.)


Continuing to quote Colm’s rationale, he says …

The root problem in education is not only one of computer science however. A friend of mine who teaches Maths and Physics at secondary level in Germany often bemoans the simplification of the curriculum and the end of year examinations. Parents continue to put pressure on schools to reduce the “stress” of education. Conversely the software industry as a whole wants to hire developers who have a broad and pragmatic deep skill-set, able to solve abstract and concrete problems in a variety of ways and who can “hit the ground running”. This latter quality is a combination of computer science, problem-solving and interpersonal skills, none of which are measured by mastery of a programming language.

In summary, there is nothing wrong with using Java to enable students to practice computer science concepts, but those concepts must still be taught.


Through the years, I’ve spent a lot of time reading books on programming, trying to get a grasp of the terms and concepts. I even bought a used copy of Microsoft’s C programming software, but in the absence of an instructor’s guidance and the demands of a curriculum, I’ve made it no further than a slight familiarity with a few terms and a vague understanding of some concepts. I’ve yet to program my first useful application and I don’t anticipate a career in programming. So, I’m sure I would be one of those that Joel’s strategy would be designed to weed out, but I believe that I am sufficiently intelligent to learn to program some simple applications that perform tasks that I want for my own purposes. I intend to continue to pursue the goal of conquering this challenge this year, just to see if I can do it. Engaging in this kind of mental discipline is one way to ward off the ravages of an aging mind I think. At least it is worth a try.

In keeping with that, I’ve ordered a copy of NetBeans (a Java framework for programming), and we’ll see how this goes. Perhaps on January 1, 2007, I’ll be able to report that I’ve finally succeeded in doing some productive programming, even if I may have taken what Joel Spolsky would contend is the “easy way” out.

Who knows whether the world is better off if we set the bar high to keep out the “mediocre” programmers or whether it is better to make available any and all tools so that even those who aren’t superstars may contribute what they have to offer? I do know that nature opts for abundance and variety and allows natural selection to sort out the wheat from the chaff. Because of that, I believe that there are always going to be differing levels of success that that infinite variety achieves. And in my opinion, that is a good thing and as it should be.


2 thoughts on “Educating programmers

  1. Colm Smyth

    Hi Perry,

    It can be hard to find a time and space to really learn something that is challenging and new. I’ve been programming in some form since I was 15 years old, and there are quite a few programmers around who start earlier than that.

    In college, students supplement their theory with practical projects. Here are some of the projects I found interesting or even useful:
    – concordance program – reads in a piece of text and outputs the number of occurences of each word; the output may be in either alphabetical order or in order of decreasing prevalence; it ignores certain stop-words (and, as, of it, the, a, there, are, be, then, etc.)
    – calendar program – outputs a monthly or yearly calendar for any given period
    – Eliza program – simulates the part of a Rogerian psychologist by detecting certain patterns in the user’s input (e.g. “I am XYZ…” might be responded with “Why do you say you are XYZ?”)

    Before starting with any of those, you might implement the classic echo program that simply echos all the user’s input back on the screen.

    If Eliza doesn’t light your fire, try converting formatted text (like this message) into standard HTML (including recognising lists, *bold text*, and URLs). Or maybe implement a program for creating a HTML thumbmail view of a folder of images.

    If you are writing a program and get stuck, drop me a line and I’ll try to help.

    All the best,

  2. perry Post author

    Thank you for the suggestions, Colm. One challenge I have faced in previous attempts to learn to program was to that of “what” to create. I like your suggestions and once I receive the programming tools I have ordered, I’ll see how they work out. Also I appreciate your kind offer of assistance that I will probably take advantage of when I run into that inevitable wall somewhere along the line.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s