Hackers and Painters
Paul Graham's Hackers and Painters argues, correctly, that making fine software resembles painting more closely than engineering.
What hackers and painters have in common is that they're both makers. Along with composers, architects, and writers, what hackers and painters are trying to do is make good things. They're not doing research per se, though if in the course of trying to make good things they discover some new technique, so much the better.
I think Graham is wrong about scientists -- science is a lot like painting, too. He's got computer science dead to rights, though, when he calls is "a grab bag of tenuously related areas thrown together by an accident of history, like Yugoslavia." Like the other fields that call themselves a science -- Political Science, Social Science -- Computer Science isn't a science, and tends to waste energy hiding that embarrassing detail. And I think that he's exactly right when he says that
if you can figure out a way to get in a design war with a company big enough that its software is designed by product managers, they'll never be able to keep up with you
I certainly hope that's correct. But I think Graham is simple wrong about science.
Scientists don't learn science by doing it, but by doing labs and problem sets. Scientists start out doing work that's perfect, in the sense that they're just trying to reproduce work someone else has already done for them. Eventually, they get to the point where they can do original work. Whereas hackers, from the start, are doing original work; it's just very bad,
Labs and problem sets are just learning the mechanics -- how to turn on the machine, where the keys are, how to use the editor. They take a little more time in the sciences because some of the machinery is a little more dangerous than an iBook. You can't let people figure out Dewar flasks and vacuum lines in their dorm room, or you'll get lots of broken glassware underfoot. But it's the same stuff. (A lot of lab time is spent studying the equivalent of COBOL and JCL; there are reasons for it, but physicists and chemists dislike the situation just as much as you'd expect)
Scientists learn the hard part of doing science -- finding problems worth studying and learning how to find answers to questions nobody though to ask before -- in precisely the way programmers learn: by working right next to a real scientist for a few years, by studying good work, and by doing science.