When carpenters learn their trade, they do so by seeing others. They see other carpenters hammer nails and saw wood. Same thing with surgeons. They see other surgeons operate. But it’s not like that for programmers. They’re “taught” programming in school, or teach they themselves, but they don’t literally see other programmers work. In the carpenter analogy, it’s as if you were taught the theory of how to hammer nails, then had to go do it for the rest of your professional life, and every other carpenter worked in a closed room.
Due to high quality open source, it’s easy to see the final output of world-class programmers. Just download the source, and start reading it. But what about the nuts and bolts, the mechanics? You can’t see the seemingly insignificant things that you have to repeat a thousand times over to get to clean and working code. Working your editor or IDE. Running the build. Running the tests. Keyboard shortcuts. Customizations. Shell scripts. Sketching out designs. Sketching out pseudo-code. Writing a ton of code, then having to back out of it and start over.
Great artists and writers often leave behind a large amount of work exhaust other than their finished masterpieces: notebooks, sketches, letters and journals. These auxiliary work products are as important as the finished item in understanding them and their work. But in programming, all that is shunned. The only thing that counts is the finished code, checked in. But one could often learn a lot more from that dirty piece of code, strewn with commented-out sections, that got thrown away.
That’s probably the reason programmers are such voracious readers of what other programmers write about their tools and tricks. It’s a tiny peek into their actual “hammering.” That’s also why (now I know) it irks me so much when I see another programmer use a tool inefficiently. For example, wade through menus and sub-menus for 30 seconds to accomplish something when you could do it in half a second with a keyboard shortcut. Or keep typing in the same long commands and not write a shell script for it.
We’re all coding blind, each in our own little bubble.