Comfort with meaninglessness the key to good programmers
boingboing.net
boingboing.net
Programming isn't nearly as well understood as those other fields you mentioned. I also think it's harder than all of those things.
A skilled carpenter or vacuum-cleaner engineer might not produce a masterpiece every time. But the result will probably be a house that doesn't fall down, or a thing that picks up some dust for at least a little while. Vacuum cleaners are a well-understood technology, and while carpentry projects do occasionally go nonlinear (if you change the specs mid-project, or a freak windstorm blows up, or they discover a natural spring while digging your basement, or... well, just go read Mr. Blandings Builds His Dream House, one of the greatest engineering books of all time ;) they are nonetheless relatively predictable, and the more experienced the carpenter the fewer surprises you can expect.
Now go read Dreaming in Code, which shows that even if you are Mitch "I Built Lotus" Kapor and you hire Andy "Mac OS 1.0" Hertzfeld your software project may fly straight into a wall: You may blow the schedule by a factor of five, and the budget by a factor of ten, and still not ship anything. [1] It has happened. People who write books about corporate IT throw around numbers like fifty percent when discussing the odds that a given software project will succeed. And the reason why programmers don't stop talking about this is that it is vitally important that our clients understand the risk in advance! Which they often don't. Nothing in their everyday experience with plumbers, dentists, and caterers has prepared them for it.
---
[1] Note: These numbers are not the ones from Dreaming in Code. I made them up. ;) I actually have yet to finish Dreaming in Code. It induces painful flashbacks.
It seems like we make so much noise because we are the feudal lords of the online fiefdom. If you were to spend all your time in wood shops for example, you'd wonder why carpenters complain so much.
If you want to get different results, you have to change the rules of the game.
The test shows that those who consistently apply the same meaning to the types of questions they are presented with end up being the best programmers.
I dealt with a batch of 60 identical PCs that would occasionally fail in odd ways during the disk imaging process, and upon further inspection would fail memtest spectacularly. It didn't make sense, as they were stable when running an operating system, just not in memtest or while imaging. Plus the memory tested fine in other computers!
I eventually figured out that while the BIOS was in real mode, the USB controller would write to extended memory when the USB mouse sent it events. They would have no problems with the mouse unplugged, and the problem went away with a BIOS update. It took a lot of yelling to figure this out!
So, the tested students who focus on the syntactical context of variables and keywords will probably be better at understanding programs than those who focus on their understanding of these words' semantics. The problem is not "meaning" itself, but that they are using the wrong frame of reference to derive meaning.
Perhaps a better distinction, then, is objective vs subjective meaning. Those who look for the objective frame of reference to infer meaning will understand programs better. Once they do so, they can analyze programs more semantically. For instance, now that I've been exposed to many languages, I know something called "print," occurring in a certain position on a line, probably outputs textual information somewhere, such as stdout.
1) Can this mindset be taught?
2) Can this mindset be taught to anyone?
3) Can this mindset be taught more easily to the young than the old?
4) Is this mindset a disadvantage in some areas? E.g. does it hurt you if you're a psychologist or a novelist?
I'd love to see some research to answer those questions.
It depends on what kind of novelist you want to be, I think. A good illustration of the differences comes from Brandon Sanderson in his essay on "hard" versus "soft" magic. Hard systems give the reader the satisfaction of solving puzzles and difficulties along with the characters. Soft systems preserve a feeling of mystery and wonder. Both can make for good writing.
On the one end you have Tolkien, and on the other, Asimov.
http://www.brandonsanderson.com/article/40/Sandersons-First-...
As far as the article goes, it says that no other successful predictors have been found for programming aptitude, but when I looked at one of the references cited, it didn't even include HS GPA or SAT scores. I would be surprised if there was no correlation there.
This is precisely why I find that the hardest programming language to learn is your second. To learn the first, you just memorize some arbitrary rules. To learn the second, you must develop abstractions for both, and realize how they differ.
I think that would have been better worded to read "mindlessness".
http://secretgeek.net/camel_kay.asp
In addition to his work on Smalltalk and OOP, Kay spent a major portion of his career on the problem of how to teach students to program.