Separating the Women from the Girls (Or I Know How to Malloc, Do You?)

Joel Spolsky complains that kids today don’t know how to use pointers and they don’t get recursion. Why? Because all the top universities are switching from C and C++ to Java for their teaching language. Now Spolsky can’t tell the difference between smart programmers and dumb ones. Smart ones, you see, know how to manage pointers and they think recursively. But even dumb ones can get through a Java course, according to Spolsky. They’re no longer weeded out by difficult-to-use features of the languages used to teach programming.

I disagree with most of what he says but most of all with the idea that there is one kind of person who should learn computer science—the kind of person he is. Computer science is a pretty wide and varied field. I don’t think anyone benefits if we limit the programmer priesthood to a few anointed pointerheads. Hmmm, could that suggest an alternative explication of the classic poem O Pointy Birds? Should I have named my blog O Pointy Bird instead of Anne 2.0, given the potential demise of the Web 2.0 appellation in 2006?

I like this critique of Spolsky’s essay by a guy named Ned Batchelder not least because it’s called “Joel Spolsky is a crotchety old man” [via reddit]. Batchelder points out that he finds assembly language occasionally useful in debugging but he doesn’t therefore think every programmer should know assembly language:

Assembly language can be very helpful, but if you’re working in Java (or Python or Ruby or PHP or Perl), there isn’t much call for it. So should it be taught? Hard to say. Understanding it will definitely give you a deeper understanding of what’s really going on, and many areas of software engineering still require its use. But if students don’t take a semester of assembly language, they can take a semester of something else instead, something that may be more helpful in the long run. UI design? Finance? There are lots of things I never learned in college that would be handy now.

Yeah. And the CS student who broadens him- or herself with some language or human-computer interaction or accounting or sociology classes might turn out to be a far more valuable employee.

There are so many jobs having to do with computing that don’t require pointers or recursion or assembly language or even programming for that matter. I’m not saying that computer science shouldn’t involve programming. It should. But the last thing the computing world needs is to narrow itself into an esoteric mathematical subject that only one certain type of person wants or is able to study. That gets me to the one complaint I have with Batchelder’s article: he talks about the need to “separate the men from the boys.” What???? Women and girls like to program too and plenty of them can handle pointers just fine when the situation calls for it.

Perhaps the problem is not the teaching practices of university computer science departments but rather Spolsky’s recruiting practices. Here are a couple useful articles on interviewing programmers that might help.

4 Comments

  1. Adam Cooper
    Posted January 2, 2006 at 11:31 pm | Permalink

    I think I agree in principle with your critique of Spolsky, but in spirit I have to side with him. Perhaps it’s chauvinistic, but to some extent I feel like it’s the difference between a doctor and a nurse (and believe me, I use this analogy only with great hesitation, since I have low regard for the medical field generally). Nurses have a lot of hands-on experience, and often have a genuinely superior bedside manner or instincts to many doctors, but when the time comes for my gall bladder to come out then, dammit, I want the person who has the in-depth knowledge and training, even if she (or he) is a mumbly dork.

    I barely know Java, with my background being chiefly in C and C++, so I am probably just being crochety (at the very least I’m being uninformed…). I remember when I was getting my BS in Comp Sci (93-97) the contrast was always between the CS department, and the “Information Technology” department over at the business school. There, the students got a decent familiarity with common apps and development tools, and were polished, easy to talk to, always knew sports scores, and made very pretty resumes; meanwhile we comp sci students burned nights away juggling background threads to drive robots or writing our own compilers and generally living a much smellier, weirder, dorkier existence.

    I can’t argue which is more useful– it was the late nineties so we all got magnificent jobs– but I did notice that the IT kids just did not have the same generalized problem solving skills. Sometimes it doesn’t matter what the particulars of your training are, just as long as they provide for a difficult, challenging experience. I never used, say, Prolog in any real job, and only barely used any knowledge of assembly-level programming. However, I think going through the crucible of study and practice brought about some emergent properties of flexibility and endurance that the IT guys didn’t get Certainly I knew what recursion was, for crying out loud. I don’t really think you can call yourself a programmer without at least understanding it. Maybe you can “work in the computer world,” but you’re not a programmer (that’s a generic “you”, btw Anne– I know you know what recursion is! :) I’m just venting at large).

    Times have changed of course, and the tools out there now are so much more powerful and easier to use. But someone has to write the tools.

  2. Posted January 3, 2006 at 2:39 am | Permalink

    Adam, how nice to see you here. I agree with many of the points you make. In some ways, this post of mine reflects how my new blogging setup (Firefox with a quick-blogging extension) allows me to post more half-baked ideas than ever before. On the plus side, it may provoke people to comment when they otherwise wouldn’t.

    Yeah, I don’t see how anyone could be a real computer scientist or programmer and not get recursion. I mean, how are you going to deal with any sort of tree structure if you don’t get recursion? And how can you not get it, anyway? It’s just not that hard.

    I never thought pointers were hard either, and if someone can’t get them, well, maybe they shouldn’t be on the tech end of computing. On the other hand, maybe pointers don’t need to be introduced in the earliest CS classes. If they scare people away, not because those people can’t do them, but because those people don’t have confidence or haven’t gotten truly excited about CS yet… well, we could lose some good people who, if they started with a more forgiving language like Java, might get excited enough to later get the memory management bit.

    I guess what it comes down to is me. I got weeded out of computer science without taking a single class because everyone complained how hard the intro CS class was. I thought, “wow, I can’t do that… look at all these smart people who find it so hard.” Then, when I finally did take the classes as a grad student I found them exhilarating and easy. If CS had been more appealing to me, I could have avoided a lot of pain later on, in the form of worrying about not having a CS degree and having to go back to school to firm up my tech background, and so forth. I still don’t know assembly language. I think my time is better spent now on higher level issues, though.

    As for nurses vs. doctors or IT vs. CS, I think they could be orthogonal at least in certain cases. The nurse-midwives who delivered my baby knew so much about normal pregnancy and delivery. They approached it from a completely different perspective than obstetricians, who are trained surgeons. Similarly, the hospice nurses I observed when I was a volunteer knew all sorts of things about comforting a patient, things doctors didn’t know. I wouldn’t want to do without nurses or doctors during a health crisis. The different perspectives don’t substitute for one another. It’s similar for IT, with its focuses on encoding business rules in software, compared with CS, with its focus on everything computational. They don’t replace each other. People who might be really good at IT because of their ability to cut through the crap of business processes and bureaucracies might be miserable at developing an efficient sorting algorithm. But how many people need to write sorting algorithms vs. contending with the weird things that go on in the corporate world these days?

  3. Adam Cooper
    Posted January 4, 2006 at 1:13 am | Permalink

    You summed it up nicely when you said “it’s just not that hard.” Maybe that’s what bugs me. I mean, there’s some straightforward math involved in computer science, but it’s quite comprehensible. I guess realistically no one cares whether your program runs in n(lg n) or n^2 time anymore, but having a rudimentary grasp of the stuff doesn’t seem like too much to ask.

    Surely on a practical level much of software development is just trial & error. But you must possess a general sense of how to go about solving problems when you get to the trial and error part. That doesn’t always come from a quick course in Java or whatever.

    Of course, there’s software development and then there’s software development. Your original post was about “jobs having to do with computing”, and that’s casting a pretty big net. I guess for 75% of the “development situations” out there don’t really call for anything very in-depth, while probably *more* than 75% call for a good ability to sit through a meeting or communicate with your boss about your progress.

    I still think the doctor comparison I made before works, though. Having a baby doesn’t really qualify as a *medical* event in my mind. :) People have been doing that quite successfully without “trained” (or even any) help for a while now. However, something that requires a legitimate scholastic background (say developing a course of radiation treatment, or doing a hip replacement, or removing a gall bladder) is different, methinks. I’d rather not have my midwife perform any of those things, no matter how good her bedside manner is.

  4. Posted January 6, 2006 at 6:18 pm | Permalink

    I wouldn’t want a midwife performing gall bladder removal surgery on me but I wouldn’t want an obstetrician doing so either. Each would be the wrong person for the job. I wouldn’t even want an obstetrician attending me during pregnancy and childbirth. They have the wrong toolset and experience for low-risk cases. They are trained as surgeons and do not have the experience midwives do of comforting and helping women during long hours of labor. Their mindset is a medical one. Many OBs arrange childbirth so it’s comfortable and convenient for them, not for the mother or baby.

    However, midwives are a special case of nurse and I’m not sure how well my argument translates to generic doctor vs. generic nurse, which is what you originally said.

    I guess what I’m thinking is that nurses and doctors don’t substitute for each other and neither do CS geeks and smooth IT product managers. Since Joel was talking about CS geeks, I’m not sure where I’m going with this. But it’s been interesting talking about it. I’m sure it’s a topic I’ll return to often, because I want to know how computer science and related fields should be taught in a way to attract and retain those people who have an important contribution to make to the field.

One Trackback

  1. By tech decentral » Jingle Bells, XML on December 9, 2006 at 5:22 pm

    […] Programmers vs. web developers, hmmmm… What distinguishes a programmer from a web developer? That programmers know how to use pointers? Used to be you couldn’t call yourself a programmer if you didn’t know assembler. Those days are gone (I think, but I’m biased–I never learned assembly language programming). Now the question is: are you a web designer, a web developer, or a real programmer? […]

Post a Comment

Comments are moderated. Rude comments may be edited or deleted.

Your email is never published nor shared. Required fields are marked *

*
*