Monday, June 04 2007

Jeff Atwood, of Coding Horror fame, recently rebutted my post "Beginners and Hacks", which itself was a reply to his post "C# and the Compilation Tax".

Jeff makes some great points, but at the outset I have to disagree with his statement "The present model of software development is clearly monkeys all the way down. And if you're offended to be lumped in with the infinite monkey brigade, I'd say that's incontestable proof that you're one of us."

No, Jeff, I don't develop via the Infinite Monkeys Model. It disturbs me that any professional in this industry would volunteer for such a pejorative.

While humility is often a good thing, there is a limit. Every developer can't be Linus Torvalds or John Carmack, but every single developer should still have professional self-respect, and a desire to do and be the best that they can.

As for my denial of membership in the worldwide IMB representing "incontestable proof" that I'm among that group, that comment had me reminiscing about a shop I worked in about a decade ago: A new hire had proposed a questionable set of development changes, some of which I was passionately opposed to. He dismissed such disagreement via a hilarious bit of circular reasoning--

a) If you passionately disagree, you are being "defensive"

b) If you're being defensive per the definition given in a), it must be because you are wrong.

It's a simple, comforting way of dismissing opposing perspectives: Everyone who disagrees is just being defensive because they're wrong. It was so remarkable that it has always stuck with me as an example of self-delusional perception.

Jeff goes on to compare his apparent utter dependence on continuous compilation code checking with squiggle-line spell-checking. Even if I were to accept that simile, which I don't at all, let's humor that comparison for a moment.

I've written about the importance of correct spelling before, and have lauded the integration of automatic, continuous spellchecking in Firefox. I'm typing this entry in Microsoft Word, which has helpfully alerted me to several misspellings (mostly the result of typos).

I greatly appreciate these tools, and how they help me with the craft of writing.

Yet I'm not a professional writer. I am, in actuality, a hack and a beginner.

By noting that differentiation, am I then saying that a professional, dedicated-to-the-craft writer would actively abhor such a tool (see the Frank Navasky character from You've Got Mail as just such an anti-technology luddite)?

Of course not, and that is not and has never been the argument I'm making. Those who jump to such a conclusion are just being defensive, and thus, we have learned, must be wrong. No I'm not calling for editing in notepad, or making shoes like we made them 150 years ago.

Instead I'd wager that you'd find the average professional writer, dedicated to the craft of putting words to print, has dramatically less dependency on such accoutrements than "beginners and hacks": They have elevated their creations to the point where something as rudimentary as spelling no longer represents a significant part of their "problem". They compose their creations so carefully that they're less likely to have such errors in the first place: When every line is a conscientious, careful, considered work of art, it's less likely that a typo-detection utility is as important.

For a blowhard blogger like me, vomiting paragraphs of raw thought into an editor, this sort of handholding is much more important, and the use of spell-checking actually speaks directly to my point. Writing is not my craft, and these literary creations aren't craftsmanship. I've even been known to mix up it's and its on occasion, to the delight of my critics.

This brings us to the crux of the whole "debate": It was never about the advanced functionality of tools, or even the use of said features or whether they "annoy" me or not, but instead I'm speaking to a growing trend of laziness and carelessness in coding, where developers emit screens of code (probably gloating about their remarkable LOC achievements), and after spending as much time fixing up the many automatically detected errors they spend weeks trying to diagnose the much more insidious logic, design and usage errors that almost certainly permeate their creation.

If their work is so carelessly authored that they consider continuous automated correctness checks a heavily leaned upon, necessary feature of their environment, then I wouldn't put much stock in the quality otherwise.

That is the problem that I argued against, simply stating that when you feel naked and abandoned without these assistants, finding yourself automatically doing frequent compilations to catch egregious mistakes, then you've probably lost touch of the craft, and one's work isn't getting the loving attention it deserves.

   

Reader Comments

Hmm.. good post, I agree with most of it...

but it seems pretty personal, why don't you just write him an e-mail ?

w/r
Arnor @ 6/4/2007 2:14:17 PM
A very good day to you Arnor.

I would say that me and Jeff are simply in disagreement on this point, and we both have our respective positions. I enjoy Coding Horror and enjoys Jeff's writing.
Dennis Forbes @ 6/4/2007 2:39:20 PM
Thanks for raising good points.

I think your most recent post, though, is a bit revisionist. You claim to be only speaking about those who feel naked and abandoned without these assistants. Your previous post, however, especially it's pithy and emphatic conclusion ("I can only envision tools like continuous compilation and edit and continue as the hand-holding of beginners, and the crutch of hacks") left a clear impression that you felt no small amount of disdain for anyone who takes advantage of continuous compilation.

Continuous compilation is simply a tool. A good artist knows how to use a tool well, while a hack will misuse a tool. Rather than painting with the broad continuous-compilation-is-for-hacks brush, I'd appreciate reading some nuanced unpacking of how tools can be well used and mis-used. (where's Firefox's green squiggle-line to highlight mixed metaphors?)
glen @ 6/4/2007 3:17:35 PM
I see your point, i am a beginer and i have worked with Vi and gcc for a long time, and now, am working with VB.Net and i don't see why are you are arguing for.

This feature it is kind of annoying and sometimes helpful but i don't need it, and i don't think that anyone would ever need it, becuse it is just a STUPID FEATURE.

--i don't speak english
zimio @ 6/4/2007 3:37:14 PM
> where's Firefox's green squiggle-line to highlight mixed metaphors

Ha! =) That goes a bit beyond grammar checking. If we can map the light spectrum onto the different levels of abstraction of writing... Red is spelling, the lowest level. Green is a few steps higher at grammar. The underlining of mixed metaphors would be _at least_ violet... maybe ultraviolet. ;)
WaterBreath @ 6/4/2007 3:42:36 PM
Let me make another analogy, this time to the game of Golf. In golf, the professionals are the ones with the best equipment. The clubs that hit the farthest, with the least slice and the greatest back spin. Does Tiger Woods disdane the use of these high tech tools as a "crutch" for "hackers"? No. And why not? Because he wants to win; and will use any tool that will help him be a winner. He doesn't play with a $200 set of clubs and second hand balls just to show he 'can'. A software professional should be no different. If continuous compilation shows up an unused variable and saves me from committing a crucial bug into a clients production system, I'm all for it.
Andreas Mross @ 6/7/2007 12:55:02 AM
> if continuous compilation shows up
> an unused variable and saves me
> from committing a crucial bug into
> a clients production system, I'm
> all for it.

Any problem caught by continuous compilation will be caught by explicit compilation, so your example is meaningless.

If I understand Dennis' point, I think he is more concerned about a developer's reliance on such a feature as a mechanism to validate every keystroke which *may* possibly lead to intellectual laziness or complete ignorance of what he or she may be doing. If I need instant feedback to validate everything I'm doing I'm clearly in the wrong profession.

Incidentally, when I'm really tired I tend to rely too much on the compiler to catch simple and obvious problems. I see it as an indicator that I need to stop working.
Tim Lowes @ 6/7/2007 2:20:58 PM
From Code Complete:

"The point of this book is to show how to rise above the cycle of hacking something together and running it to see if it works. Compiling before you're sure your program works is often a symptom of the hacker mindset. If you're not caught in the hacking-and-compiling cycle, compile when you feel it's appropriate. But be conscious of the tug most people feel toward "hacking, compiling, and fixing" their way to a working program."

Does continuous compilation encourage the "hacking, compiling, and fixing" cycle? I say yes.
Pete M @ 6/8/2007 1:20:47 PM

Add Comment

Name *:

Email Address:

(your email address is not displayed)
Website:

Comment *:



About the Author
Dennis Forbes Dennis Forbes is a Toronto-based software architect. While focused primarily on the .NET and SQL Server worlds, Dennis frequently ventures outside of this comfort zone into game development and image processing. He has been published in several industry magazines, has been quoted in the Wall Street Journal and has been interviewed by NPR.

He is a vice president and lead software architect at an innovative New York City hedge fund back-office services firm.

Dennis has been working on solutions for the financial, telecommunications, and power generation markets for over 15 years.





 

Dennis Forbes