I’ve just finished reading Joel Spolsky’s “Duct Tape Programmers” and jwz’s response to it.
These posts strike a chord with me, especially that Spolsky spends the entirety of the article praising “The Duct-Tape Programmer” before he urges you not to try it. Mr. Spolsky should consider this situation:
I’ve just got off a job where the on-staff programmers were absolutely adamant that CakePHP be deployed in _every_ conceivable usage. The manager was brand-new, fresh out of college, with no mentionable experience. The other developer was a contracted freelancer who has never been exposed to any “decent” work (unless you count his own, which, of course, he does).
Neither one of these people know about Joel Spolsky, Jamie Zawinsky, Aaron Seigo, or almost any other important software commentator or developer, and they make very few strides toward self-improvement.
When I left this team, they were weeks behind schedule because the naive and helpless manager/developer was unable to match his task and the contracted developer’s blinding arrogance and selfish motives regularly incited rewrites (of everyone’s code, never just his own), and caused the whole system to run completely amok. What they’ve completed is horrendously slow and unintuitive.
Mr. Spolsky, when you implore your readers not to follow in jwz’s footsteps of judgment and application, is this what you envision? Because this is where it leads. Obsession with fads or hyperfocus on one area of good practice and other symptoms of programming elitism do no good to someone actually interested in developing or maintaining functional software. Both employees in the above scenario had often-prattled lines to back up their incompetence (“premature optimization”, which I, regrettably, taught them, was their favorite), but the fact is that the principles and strategies these things represent are no good without context.
No one should ever hire someone who’s not a “duct-tape programmer” as Joel defines it, because they’re not actually “duct-tape programmers”, they’re the only the competent players in the field. Good programming is all about good judgment.
Computers are fast these days, and can take a lot of crappy programming, but unnecessarily wasteful solutions do tend to add up to a noticeable detriment in any sizable application. Sometimes this is a valid tradeoff, but sometimes it isn’t; good programming is all about finding the right balance.
I can’t tell you how many hours the contracted programmer wasted debugging functions deep within the netherparts of CakePHP when a faster, better, and more suitable custom component could have been built much faster and maintained much easier. That’s an example of a bad programmer because no matter how well he knows the target platform, he’s going to regularly misapply that knowledge.
Spolsky’s description paints the duct-tape programmer as an ignoramus, a programmer who’d just as well stick to pre-1990 languages, methods, and conventions, but that’s clearly not the case with jwz, who was one of the first third-party developers for the Palm Pre. jwz, like all other good programmers, simply knows how and when to avoid cruft and how and when to leverage existing work.
So, when Joel says the “duct-tape programmer”, what he really means is the “pragmatic, profitable programmer, the only kind of programmer you should ever hire or use; a ‘good’ programmer”. These programmers do follow the changes in the field and they do play with new technologies and methods. They simply know when to experiment, when to complicate, when to simplify, and when to ship.
There’s not necessarily anything wrong with C++, Java, Flash, or any of the thousands of other tools out there, most of which were developed for a Good Reason(tm); you just have to have the judgment to know when, where, and how to deploy them such that the product will perform adequately and business needs will be met.
Do yourself a favor and pattern your next hire after jwz; get a programmer with the know-how and the wisdom, because one is useless without the other.