While out on a jog recently, I found myself listening to an episode of .NET Rocks, in which the discussion covered the surprising percentage of developers still using Winforms and the general topic of using licensed controls written by third parties. This started a train of thought in my head that might end in mild controversy, but I think it’s worth exploring a bit.
Two profiles (well, more like caricatures) of developer came to mind, standing in stark contrast to one another. First is this Winforms developer that is more or less cobbling together spare parts to build applications. He uses a WYSIWYG editor, employs some kind of “database form wizard” to bind a GUI widget directly to a table, plops a slew of obscure third party controls into the code, and ships some kind of Franken-app not actually involving much code. The second profile rounds out the dichotomy and consists of the foundational crafter. This person builds her own tools and controls using low level language constructs and the command line, and assembles these works of art into ever-higher layers of abstraction until shipping a hand-crafted app.
If I’m running a business, give me the first person.
Undoubtedly, the crafter harbors a better, more fundamental grasp of the principles of computer science, and she undoubtedly offers the most versatility. If she can build a compiler, use that to build a text editor, use that to build a source control system, use that to build a web server, and use that to build the sexiest, popping-ist, UX-friendliest website you’ve ever seen, she is the most employable, most full stackable programmer ever. The business will never encounter a situation beyond her grasp. But who cares, if the business just needs a checkbox added to a battleship gray, outdated Windows application?
I practice test driven development. I rail against the evils of copy and paste programming. I counsel clients on the dangers of technical debt and feature slow down. I advocate wholesale for clean code. And because of all these things, I understand that every single line of code you write is an incremental business liability. So why would I take the cobbler over the crafter? Don’t get me wrong — if I had to pick one of the two of them to write a given module, I would take the crafter. But for approach, I would take the cobbler because the cobbler makes most of the code someone else’s problem while the crafter makes it all my problem.
What I really want is someone with the chops of a crafter and the reluctance to write more code than necessary of a cobbler.