Tools or People? by Bruce Nielson

What matters more to the outcome of a software project? Good tools or good people? Okay, that one is a no brainer, right? We all know people matter more than tools, right?

But try this thought experiment. Take an average group of programmers today and set them up in a contest with the brainiest programmers of 1000 years ago. Who wins?

No, no, no, that's not right because computers didn't exist 1000 years ago. But isn't a computer just a tool? So apparently tools matter in some cases.

So let’s make this more fair by flashing forward to, say, the 1950s and retry the thought experiment. Again, the average programmers in 2009 will win hands down on a productivity basis. They can make more complex programs using Java or .Net then the 1950s programmers could ever dream of. So again, tools do appear to matter more than we given them credit for.

The problem is that the “tools vs. people” dichotomy we talk about doesn’t really exist. Apparently, what we mean when we say that “people are more important than tools” is that given roughly modern tools, one new snazzy tool isn't going to make much of a difference and it's certainly not going to cause your productivity to go through the roof. However, over longer periods of time, changes to paradigms, as supported by tools, can and will significantly increase a programmer’s productivity.

Tools allow a person to be more productive by changing the level of abstraction the programmer is forced to think at. 1950's programmers had to us machine language or punch cards or, gulp, both. No matter how smart they were, they were limited in their productivity by the tools. Today's programmers use modern compilers that allow code in something similar to English, virtual machines, automatic garbage collection, built in error handling, build tools, automated unit tests, etc. Throw in there a nice GUI-based drag and drop interface and now you're talking real productivity gains. So tools matter and they matter a lot.

With each new tool paradigm, we get closer and closer to the way a real human thinks. When we are dealing with punch cards and machine language the amount of translation between what the programmer is able to think and the way to implement it is huge. With modern tools, the gap has narrowed and thus productivity has climbed to match.

Now if you followed my argument above, we have uncovered that real source of productivity in software – a programmer’s ability to think! The basic unit of productivity in software has always been a “thought unit” (whatever that is.) No matter how good your tools get, the best programmers will always be the clear thinkers that require less thinking to accomplish their goals.

Tools are used to make thinking easier and more human-like and nothing more. So it turns out tools are really just a way to remove obstacles that naturally exists between the programmer's ability to think and the computer's need for formalized instructions.

Published Wednesday, November 25, 2009 12:17 PM by BruceNielson


# re: Tools or People?

Friday, December 04, 2009 10:55 AM by Nathan Zaugg

Yes but 1,000 monkeys using Visual Studio for 1,000 years still couldn't make anything nearly as crappy as Internet Explorer! ;)

Interesting thought.  I've been playing around with some low-level device drivers and I'd say that there is perhaps another aspect.  When writing a win-forms application I have to be conscious of what thread is manipulating my GUI controls and some synchronization between other threads, data concurrency, etc., but more or less the business rules are expressed in a logical, straight forward way.

When working on a device driver there are about 100 other things you need to keep in your head and if you forget one -- BAM, CRASH, ZING! So I think that being able to limit the number of things one has to tip-toe around helps a lot!  A beginner is going to be kind of like a bull in a china shop!

Having said that there are ways for the programmer to compensate.  When I play the Saxophone I need to have correct application of pressure on the reed, the right amount of air flow coming from the correct muscles, phrasing, articulation, tempo, rhythm, pitch, fingering, etc.  It is said that to play properly there are 75 things your brain has to do at once!  It's impossible to bring all of those things into conscious though so you actually have to program your brain to take care of some of those things automatically by practicing a lot!  Eventually it will be like typing where you don't have to think about which keys to press you just think of the letter.

That applies to programming.  When you first get started as a beginner you "sound" horrible!  Just like with the music, a beginner is violating rules left and right because they either can't keep them straight in their head or are blissfully unaware of them.  

Even modern tools require a lot of training.  Once you have the tools figured out well enough you should be able to do your job effectively although the tools are becoming more complex but the number of other things you need to keep in your head goes down.  I suppose you could argue that one tools is becoming more complex while the other is becoming less complex but I don't think you could say that is has become easier to program.  I can only see the complexity of tools going up while the ability to express "thought units" goes up.  Tools help but productivity, but sometimes at the cost of complexity.

While writing device drivers is tricky because the environment in which I am writing the code is complex, .NET is tricky because there is a large number of tools and patterns that have to be mastered.  The interesting thing is that drivers aren't really going change very much from year to year where a tool like .NET changes so frequently you have to re-learn a lot just to keep up.

# re: Tools or People?

Friday, December 04, 2009 6:07 PM by BruceNielson

Interesting points, Nate.

I think you are right that *in a sense* things get more complicated as the tools improve. For example, back in the 1980s, it was possible for a person to know literally everything there was to know about IBM PC computers. And they could do it by reading a single book.

But nowadays, that's impossible. In fact, specialization is a must.

In that sense, I'd say things are more "complicated" now by far than back then.

But in another sense, I might say that what is really happening is that we are "chunking" at a higher level of thought. We get more "thought units" because we now program at a higher level of abstraction.

In that sense, we might say things are "less complicated" because it take fewer "thought units" to do equivalent work. In other words, it's less complex. (Compare a description of a box by taking it's measurements compare to a molecule by molecule description.)

But, and this is the important part, because we are at a higher level of thought abstraction, we are capable of more complex thoughts.

Thus we come full circle and end up with essentially equivalently complicated software to back in the 1950s, except now the information domain is spread over more people (more complex) and requires deeper and deeper levels of knowledge if you don't want to be constantly fighting Sploski's "Law of Leaky Abstractions."

# Sure It’s the People – But Which People?

Friday, December 11, 2009 12:21 PM by Software Psychology

So if we admit that software is really about human intelligence, not tools , then we know that human