Home

Previous Entry | Next Entry

Joel Spolsky is wrong

  • Dec. 29th, 2005 at 11:43 AM
Gray Alien Hat
Joel Spolsky has a new essay up on the perils of teaching Java in Computer Science schools. His point boils down to "Java is not hard enough, so the marginal students aren't dropping out."

I say Joel is wrong. Or, rather, he is so right that he is wrong.

Let's start with where Joel is right: Forcing students to learn pointers and functional programming is a good way to weed out the kids who don't have the natural talent to be great programmers. If you are focused on creating stars (or, as Joel is, on recognizing and recruiting stars as employees) you need some way to separate the sheep from the goats, and sheep who have problems understanding recursion are never going to understand doubly de-referenced pointers or continuations.

Let me stop here for a moment and point out that I believe star programmers have a natural talent, something that cannot be taught. And, in the case of stars, the only thing a difficult CompSci program is doing is helpfully mark them as such. Because they have this natural talent they will pick up whatever they need as they go even if they never see the inside of a CompSci classroom!

What Joel wants is for the schools to mark the stars for him. He wants to be able to select from incoming resumes by looking for the appropriate degree, even if it means he is going to miss out on the stars who, for whatever reason, didn't have a chance to go to a fancy school with a LISP programming requirement. (If you read his essay linked above you will note the irony: he expends considerable wordage castigating HR departments who GREP for Java in the resumes.) This is the first reason Joel is wrong.

The second reason is more subtle; the world needs more than the few star programmers we have can give. Yes, if you are hiring Software Architects, Programmer Leads, Systems Programmers, or Tool Developers you need stars. But the world has changed in a fundamental way in the last generation; we are so dependent on software in business and government that, without it, things would collapse. The amount of code that needs to be written exceeds the capability of the stars. (This despite the fact that a star is considerably more effective individually.) You need programmers in the trenches who will never be stars but, given clear specifications and a good software architecture as a framework (created by stars), can fill in the gaps for you.

In fact, I believe just about everyone can learn to program — and should. Let me give you an example based on singing; pretty much everyone can sing and, with a little training, most people can sing fairly well. Certainly some people have a natural talent for singing and will eclipse the rest, but if the world needed singers in every bar and church chorus you couldn't get enough stars to do it. You would need to train mediocre singers and have them sing songs written and made famous by the stars. Furthermore, if you wanted people singing in every business you would probably want some of your sales clerks, dock workers, and wait-persons to be able to sing as part of their job. In fact you would probably want singing taught to everyone in public schools, partially so that most people could sing and partially so that you could identify the future stars early, and encourage them.

Programming should be the same way. To some extent the ability to write small programs and understand how programs work is an essential ability that nearly everyone should have. Yet Joel is right when he says 'dumbing down CompSci' is a bad thing. But he is missing the real point: Everyone should learn some programming and as many people as possible should learn programming to the Java/C#/Visual Basic level. What we truly need (and what Joel is really asking for) is a Juilliard of computer programming.

But, before that can happen, we need to acknowledge that programming stars are born, not made. And, like all divas, programming stars tend to be more difficult personally. This a shift the business world seems to have trouble with. Witness the focus of so many businesses (including Joel's) on CompSci degrees (even dubious ones) over accomplishments in the real world.

And, yes, I am bitter about that for a reason.

Comments

[info]darkgeek wrote:
Dec. 29th, 2005 09:33 pm (UTC)
"In fact, I believe just about everyone can learn to program — and should."

I feel strongly that every educated person should understand the basic outline of quantum mechanics.

"Ok, sure, anyone can learn calculus -- but at what rate?!"

Anytime someone says that everyone should learn something, the person is ignoring two things. First, no matter what you think, not everyone can learn whatever it is you think is necessary to this. It's not that uncommon to be quite literate but unable to do basic math (i.e., liberal arts/humanities majors), a level of logic skills prerequisite to programming. Second, the lives of the vast majority of will not automagically be improved if everyone else learns the same sorts of skills or field of knowledge. This can be more generall stated as, whatever you think that everyone needs to learn, you are wrong. How would a singer's life be made better by knowing computer science, or mechanics, or calculus, or anything under the sun? Maybe it would, but there is no way to know a priori, hence any such statement must be incorrect. Further, if everyone could write code, almost nobody would be paid well to do it because you could always find some sucker who would write code nearly as good but for half the price (not quite Zeno's paradox, but close).

Not to mention the fact that CS is pure logic and, strictly speaking, doesn't require a computer any more than Kepler did to work through 70 iterations to converge on fits for orbital parameters by hand. Or the fact that programming is not the same thing as computer science (yes, the traditional comp sci person's hobbyhorse). Or the fact that I've just thrown out three fragments in a row for emphasis (take that, composition majors!). Computers just make things a lot faster and easier since people have to carry less in their heads while doing so. I figured these things out as a physics undergrad taking leveling courses in case I decided to go to grad school in CS because I'd have arguments with my friend, the head TA for our CS department's introductory classes.
[info]jackwilliambell wrote:
Dec. 29th, 2005 09:54 pm (UTC)
I certainly didn't mean that everyone should learn programming to the extent that I would trust them to write a program a company depends on. I mean they should learn enough to script repetitive tasks and to understand why the programs the company depends on work the way they do.

What I am saying is that programming should be something everyone knows a little about, many people can do at a workmanlike level, and a few (naturally talented) folk do as masters of the craft. But that is a shift in the way programmers are viewed and, among other things, requires recognizing that programmers are not equal. And the main reason they aren't equal is the same reason that not every guitar player can be Jimi Hendrix.

CompSci or no CompSci.
[info]darkgeek wrote:
Dec. 29th, 2005 10:05 pm (UTC)
I wasn't thinking so much about level of ability or talent or development, but more about the fact that not everyone is equiped, whether by inherent ability or by environment while growing up, to do everything. These statements, everyone should learn X, presuppose that everyone has the ability to do X. It just ain't so.

Though the stratification of a field, that's sorry to see, because it means stricter credentialization in the future...
[info]darkgeek wrote:
Dec. 29th, 2005 10:44 pm (UTC)
Ok, less a**hatery, more substantive commentary. He's got it right, but refuses to accept either the implications or the obvious truths he's jsut states. Or maybe, not refuses but rather dislikes. A university is not a vocational school, but he wants CS departments to act as that was their function. Oh, Mr. Hiring Manager wants the university to do part of his job. Well, tought s***. If my department started doing that instead of doing what they were supposed to do, I'd start an uproar. He says this and doesn't even bother to comment further, as if the mere invocation of the argument is its own rebuttal. And he expects me to believe that he knows how to do logic!

But enough with the explicit, let's get medieval. Spolsky doesn't want computer scientists, he wants applied mathematicians. Take his obsession with "fixed point theory", which his description paints as a generalization of the calculus of variations (he even used the word functional, with a different meaning, but failed to have his memory jogged about the mathematical meaning and behavior of functionals -- how's that for your mental agility!). This not something your run-of-the-mill freshmen at the best schools will grasp instantly. Notice that while Sussman's CS Scheme book is a standard at MIT, Sussman's Physics Scheme book is a nice afterthought, i.e., it's a standard at exactly zero schools. Meaning, after having just perused the intro MIT curriculum/format (an "active engagement" scheme, little 's'), I can personally guarantee you that the MIT physics department is not using that book, both because it is Langrangians from day one and because the book would have to be rewritten to be used in an active engagement environment.

And if Mr. Spolsky wants a weed-out course, he should come back after taking a class that uses David Griffiths' quantum book.
[info]jackwilliambell wrote:
Dec. 29th, 2005 11:00 pm (UTC)
Actually Joel is an accomplished programmer, and understands the craft very well. (Most of the time I agree with Joel's essays and, even when I do not, I enjoy them.) The trouble is that Joel is now running a business and must hire programmers, which is changing his viewpoint somewhat.

And, as to David Griffiths' quantum book, I'm afraid that would weed me out. I often say that I understand just enough math to comprehend the Theory of Relativity, but only enough math to appreciate how I will never truly grok Quantum Theory. (Let's leave aside String Theory for now, I can mentally visualize up to four dimensions but my math and my visualization abilities break down above that. So a lot of String Theory is just hand-waving for me.)

My point? I'm a damn good programmer in general, and I understand object orientation at a deep level in particular. I can use software patterns to design software architectures and APIs. I know how things work underneath the hood, so Joel's Law of Leaky Abstractions doesn't cause me much trouble. I can learn a new programming language or API in a couple of weeks and be more proficient than most programmers who have years of experience with those technologies in a couple of months. But I am never going to be a physicist. That requires a talent I just don't have...
[info]darkgeek wrote:
Dec. 30th, 2005 12:13 am (UTC)
That requires a talent I just don't have...
Which is what I was saying.

I'm glad to know that Mr. Spolsky is good at what he does. And if he weren't, I doubt you'd find what he has to say useful or worth commentary, eh? Still, that's what I gathered from his description of what he wants to see coming out a CS program. Mainly I was truly and deeply irked by his implicit message that the world should be ordered so as to make his job easier, which won't extend the same courtesy to the rest of us (which is why I started a separate thread for my assessment of his post, separating it from my commentary on your post).
[info]jry wrote:
Dec. 30th, 2005 12:29 am (UTC)
Garrison Keillor's Writer's Almanac was celebrating Max Planck's birthday back on the 14th and included this statement:

The Danish physicist Niels Bohr once said that a person who was not shocked by quantum theory did not understand it, and the physicist Richard Feynman once said that while only a modest number of people truly understand the theory of relativity, no one understands quantum mechanics.
[info]jry wrote:
Dec. 30th, 2005 12:30 am (UTC)
Oops, not Planck's birthday, the anniversary of the publication of his theory of quantum mechanics.
[info]mcjulie wrote:
Dec. 30th, 2005 07:36 pm (UTC)
Hmmm
I still don't know if I'm a programmer, for real -- although, for the past 15 years, most of my money has come from programming, it's just Visual Basic. And now PHP. And ENTIRELY self-taught (I flunked out of the one CompSci class I took in college. Because it was stultifyingly dull.) I always feel like "real" programmers know stuff I don't know. But sometimes I think I have a better understanding of underlying data design because I'm not distracted by all the stuff I know -- I'm entirely results oriented. My routines always start as a series of logical statements in plain English.

I don't think we can assume that most people are even capable of learning programming to the Visual Basic level. Heck, I run into people who can't even learn HTML.

I mean, I would have assumed that anyone who wasn't actually brain-damaged was capable of opening up a VB window and changing one word to a different word, or commenting out a single line of code, when they have been given EXPLICIT instructions about what to do. And yet...

Maybe it's generational. I haven't yet TRIED to explain HTML or VB to anyone under twenty-five.
[info]jackwilliambell wrote:
Dec. 31st, 2005 03:35 am (UTC)
Re: Hmmm
I guess I wasn't clear enough in the essay.

What I meant was that most people (prefereably just about everyone) should learn at least HTML and some Javascript, or to that level with whatever language. And as many people as possible (recognizing that some can't) should learn to the Java or VB level — these are the worker-bee programmers I talked about.

As for the rest? Well, these are the natural talents I mention, and they should learn to the extent of their ability. And they will with or without a CompSci school because people with some talent tend to become obsessive about the thing they have a talent for. (That is one of the signs of having a talent, I think.)

Latest Month

May 2008
S M T W T F S
    123
45678910
11121314151617
18192021222324
25262728293031

Tags

web statistics
Powered by LiveJournal.com
Designed by Naoto Kishi