Dennis Forbes on Software and Technology   Subscribe to RSS


About the Author
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 13 years.




The Feed Bag
Feb 24 - TED

 
Wednesday, May 16 2007

Every now and then I browse over to the popular Coding Horror blog: It's like turning on an episode of the A-Team and collapsing into a comfortable couch on a hot summer day, ice cubes clinking around in a sweaty cup of lemonade.

It's a nice way to zone out, distracting my consciousness from a vexing problem in hopes that a background process running in the Brain.ThreadPool completes and returns a solution.

A recent entry, C# and the Compilation Tax, piqued my interest, reminding me of a prior entry I posted about Edit and Continue (where I discussed the potential over-reliance on automated helpers.)

In his post, the Coding Horror author observes that in actual use .NET has evolved into a single language environment, with C# increasingly dominating (though it's doppelgänger, VB.NET, is only a marginally different variant -- C# is the Lexus ES300 to VB.NET's Toyota Camry).

Who knew? Would you also believe that the Java Virtual Machine can be targeted by languages other than Java?

Cats and dogs getting along! Microsoft and Linux making up (see also: Microsoft the Patent Troll)! Robert Mugabe the economic development champion!

He goes on to note his disappointment that the Visual Studio IDE doesn't support automatic, continuous compilation for C# projects, which would enable it to quickly highlight egregious mistakes in his code.

In the comments to his post, I offered up the opinion that the reliance upon such a piece of functionality might be detrimental to the craft of software development.

Jeff,

I encourage you to go a week with minimal automated code-correctness checks. When you've gotten to the point where you rely upon continuous automated checks (which can miss a tremendous number of problems where the code is syntactically and type correct, but logically broken), you've seriously harmed your craftsmanship.

[Link]

Dennis Forbes on May 15, 2007 07:10 AM

Mr Atwood replied-

Dennis,

Ah yes, that old logical trap. Better tooling makes us weak! It's a crutch we begin to rely on that cheapens our craft!

This is even debunked all the way back in Mythical Man-Month:

"There is a widespread recognition that debugging is the hard and slow part of system programming, and slow turnaround is the bane of debugging. So the logic of interactive programming seems inexorable."
http://www.codinghorror.com/blog/archives/000026.html

And then, as for the logical fallacy of "easy tools make you weak":

"So let's get real. Bad programmers write bad code. Good programmers write good code. RAD lets bad programmers write bad code faster. RAD does NOT cause good programmers to suddenly start writing bad code."
http://www.codinghorror.com/blog/archives/000090.html

This isn't a zero-sum game; better tools let good programmers work faster. The bad programmers, well, it doesn't really matter what you give them because the output will be the same: disappointing.

Logical fallacy...zero-sum...a reference to the Mythical Man-Month...add in "orthogonal" and you've got a Score:5 on your hands.

In between appeals to authority -- Jeff is a big fan of Code Complete and the Mythical Man-Month, always ready to quote them as the indisputable, final word on all matters relating to software development -- Jeff makes the critical, err, "logical fallacy" of presuming that my questioning of his automatic compilation dependency (to avoid assigning literal integers to strings, apparently) is an indictment of all accouterments of software development.

Hardly, Jeff. It might make for a convenient strawman, but it's certainly not the argument being presented.

I'm not calling for a return to punch-card programming, or even back to the days when we'd reference our 50lbs of Visual C++ reference material to lookup the parameters of an API function.

I even think IntelliSense is quite a great little bit of functionality.

When you're randomly typing garbage into your editor, complaining that the continuous invocation of the compilation shortcut is cramping your style (and your fingers), however, you've developed a serious problem.

Sometimes these features are there to coddle a beginner, carefully keeping them within the painted lines and away from the dangerous electrical sockets along the wall. That would explain why it was a more important feature in VB.NET than C#...not that VB.NET is any more trivial -- it's just a syntactic variant -- but it is the language that beginner programmers are generally guided into.

And to his last point: My experience has been that the best developers just naturally start using less and less "helpers", to the extreme where you have incontestably great developers like Linus Torvalds arguing against fundamental helpers like interactive debuggers.

Many readers may be wondering why the kernel does not have any more advanced debugging features built into it. The answer, quite simply, is that Linus does not believe in interactive debuggers. He fears that they lead to poor fixes, those which patch up symptoms rather than addressing the real cause of problems. Thus, no built-in debuggers.

I'm certainly nowhere near as extreme as Mr. Torvalds -- indeed, apparently Linus has softened his stance somewhat -- but I wouldn't dare to claim his experienced perspective "debunked" because Fred Brooks -- operating in an environment where what is defined as "immediacy" would be glacially slow by today's standards, and whose metrics had nothing to do with Edit and Continue or continuous automatic compilation -- can be selectively reinterpreted and applied against a completely different world.

Sorry, Jeff, but I don't buy the infinite monkeys on an infinite number of keyboards model of software development. I can only envision tools like continuous compilation and edit and continue as the hand-holding of beginners, and the crutch of hacks.

Reader Comments

Dennis, I'm glad you blogged this, it's an excellent topic for discussion and worthy of more than just a few back and forth comments buried in a blog entry.

> I don't buy the infinite monkeys on an infinite number of keyboards model of software development.

Regardless of whether or not you're buying it, that's what we actually have. That's why I'm an advocate of designing practical systems that accommodate what actually happens in the real world, rather than the way we wish things worked.

For every one Linus Torvalds, there are ten thousand programmers who aren't Linus Torvalds.
Jeff Atwood @ 5/16/2007 1:18:51 PM
I think you have a point, Dennis. I recently read an article demonstrating some of the cool things you could do with Vim, so I decided to use it for a week and see if I could experience the Vim epiphany that many report after using it for a while. At work we do the vast majority of our projects in Java using the Eclipse IDE, and during my week of Vim, I noticed how reliant I had become on all of Eclipse's handy "intelligent" features. I found that I rely heavily on code completion for finding methods on classes that I've imported, and frequently don't actually commit the names of the methods to memory. Instead, I would just hit Ctrl+Space and wander through the methods until I found what I was looking for. Obviously, I didn't have this functionality in Vim, so I had to take the time to really learn how to use all the classes/methods I was using, rather than simply relying on the IDE to do all the remembering for me. Just one small example of how the advanced features of an IDE can make you a little soft.
Ry @ 5/30/2007 11:25:53 PM
So is it similarly "soft" when you don't remember the specifics of an excellent article on a particular type of bug, but you know how to find it when you need it?

More specifically, is it so vitally important to remember that the name of the method is 'addNewMember()' vs' 'appendNewMember()' in a library you use once or twice a month if you know what functionality you need when you invoke it?

I don't have a concrete answer for either of these, and I don't even know if there is one that applies to everyone.
Chris Winters @ 5/31/2007 12:45:37 PM
And spell checking is a crutch for writers, simply a hand-holding measure for folks who are not able to write.

After all, spell checking sometimes corrects your spelling with the wrong word! A human editing process could never make this mistake.

And what about this keyboard crap? Typos didn't exist before this bane was leashed upon the world! Clearly, this is merely a shortcut for incompetent writers to produce more poorly-written garbage.

God forbid that there is a feature that expedites the process of detecting typographical errors. I know you type perfectly all the time and don't make minor syntax errors.

Oh wait, there is at least one in this very blog entry!

Someone who cannot see the difference between "its" and "it's" are clearly beginners and hacks who do not deserve to write anything.

Furthermore, if you cannot master the syntax and grammar of your own, human, personal language, how can you criticize others for wanting tools that help correct typographical errors in another language?

Dennis, does it get lonely up there on that pedestal?
TM @ 6/2/2007 11:08:50 AM
Hi there TM,

>I know you type perfectly all the time and don't make minor syntax errors.

Firstly, TM, I'm not a professional writer. If I _were_ a professional writer, I assure you that I would have gone over every word and phrase carefully, auditing my own creations to the point of perfection.

But I'm not. And I don't pretend to be.

Secondly, TM, exaggerating my point far beyond what I've actually stated -- to a point that I've specifically excluded -- pretty much proves that you've completely missed the point, or at least that you won't even try to understand the point.
Dennis Forbes @ 6/2/2007 3:38:12 PM
I've got here through Jeffs CodingHorror blog.

I disagree with you, that an interactive compiler makes a good programmer bad and a bad programmer lazy.

Well the second part is probably true.

Anyway, when I write code, I like Netbeans a lot. It also has an interactive compiler. So while I write some Java, I see the syntax errors I make right away. And there are quite a lot of them. And I don't believe I'm a bad coder. It's just that I get warned when I forget a closing bracket or parenthesis.

A writer does not need to be good in grammar to write great stories.
sobani @ 6/3/2007 11:04:36 AM
> A writer does not need to be good in grammar to write great stories.

A reasonable metaphor, but you're using it poorly. A writer _does_ need to be understood, or no one will be willing to slog through his words to get to the story underneath.

No one will read a great story expressed poorly, because it is painful and tedious to read, at best. Similarly, no one will use a great program expressed poorly (if such a thing can exist), especially fellow programmers. A program's interface is not inseparable from it's expression, as a story's is. But they aren't completely decoupled. A poorly expressed program will be tedious to use, hard to understand, and painful to maintain or extend.

With all that said, I fall somewhere in the middle of Jeff and Dennis.

I don't think these things are crutches. I have some writing skill, and I am an excellent speller. However, I am no concert pianist. Sometimes my fingers hit the wrong keys and I don't notice. Sometimes my hands skip a word because my mind is moving to fast. I'm sure we've all experienced the amazing ability of our minds to "autocorrect" something somewhere between the words we see on the page and the meaning we see in our mind. I don't trust my eyes that well. Yes, I need to re-read and carefully edit my compositions, regardless of the human or computer language they are written in. But it's a waste of my time and energy to have to check my syntax manually at every level from the letters on up.

I believe that a good programmer will "need" these things very rarely, and a careless programmer will rely on them _instead of_ developing their own knowledge and skill.

For a good programmer, the only time it saves is that of waiting for the full compile before they notice their typo. It's a convenience, and a luxury. I'll use it if it's available. But I'm not so spoiled as to find untenable an environment that lacks it.
WaterBreath @ 6/4/2007 3:02:25 PM

Add Comment

Name *:

Email Address:

(your email address is not displayed)
Website:

Comment *:


Dennis Forbes