More On Painters and Photogs
Well, it seems that reddit loves a good metaphor. A number of people read yesterday’s post when it was on the front page of reddit, and I wanted to clarify a few points that people raised.
First, I never intended to imply that there are two “classes” of programmers, what I called painters and photographers. What there are are two different approaches that ultimately reach the same plateau. I would consider the traditional CS approach with an emphasis on mathematics, theory, formal proof, etc. to be equivalent to learning to paint. You don’t just sit down and paint a masterpiece on your first go. It takes practice and time.
The new “easy” approach is the photography approach. This isn’t because photography is actually any easier than painting; it’s not, and any professional photographer (or painter) could tell you that. But it seems easier, because everyone has taken a picture before and they’re familiar with the tool (or so they think). This is the “let’s make programming easy” approach, but I feel that it will ultimately cause some problems for the students after they get out of school. The reason it will cause problems is that these students, for the most part, won’t even know that they’re missing a piece of the picture, until it’s too late. Maybe they’ll notice when they get to an advanced class, and they don’t know what’s going on. Maybe they won’t notice until they get into industry and have to do a lot of catching up. In the worst case, they may discover that they don’t even like programming, once they find out what’s actually involved.

Someone else pointed out that there are a lot more professional photographers than painters, so that’s where the money’s at, so why bother to learn to paint? Fair enough, but learning to be a professional photographer is just as hard as learning to be a painter, it’s just a question of where the pain is. I don’t think I really expressed that very well in my original post, and I apologize for any confusion. They used to teach painting. Now they’re trying to teach photography, but in the end they’re not really teaching anything at all.
Secondly, people thought I was a member of the hoity-toity, ivory tower, programming “elite” that programs everything in Haskell and likes to talk about monads or something. I barely know what a monad is. All of my day-to-day work is done in C# and C++, because these are languages for actually accomplishing general purpose tasks. If I were going to write a compiler or an interpreter, I would consider using something like OCAML, because I know that it has many features designed specifically for that purpose. Java absolutely has a place in a CS curriculum, but so does C or assembly and so does a functional language like Scheme or Haskell. And so does discrete math, theory of computation, and complexity theory. CS is about more than programming, and for people who just want to learn to program, we should perhaps offer an alternative, rather than watering down computer science.
In this vein, several people referred me to a recent Joel on Software post where he suggests that we need a BFA type degree in software engineering; a “Julliard for Programmers.” Although he suggests throwing theory to the curb almost entirely, which I can’t completely get behind, I agree with about 90% of what he suggests for his curriculum idea.
I’m certainly not of the opinion that high-level == bad and low-level == good. I don’t think I’m going out on a limb here when I say that most good developers program in a high-level language, but understand what’s going on at a low-level.
I’ll close by saying the single most applicable thing I learned as an undergrad. It was in my software engineering course, where our team did a web application for a client in town. The TA for the class told us: “The single most important element of your grade is whether or not the client is happy.” Make the client happy, and none of the rest of it really matters. He’s the one who ultimately pays your salary anyways.

January 22nd, 2008 at 11:45 am
As a self-educated “engineer”–and self-educated photographer, I just have to say, yes, photography is *easier* than painting. Of course its easier than painting. This is self-evident, even if you’re using a 1920’s russian rangefinder, focusing blind and developing yourself, its easier than painting. So there.
January 22nd, 2008 at 12:58 pm
Oh come now…the metaphor doesn’t have to be absolutely perfect to still apply.