As a programmer by trade and inclination, I'm occasionally called upon to answer questions about the craft. My favorite question is, "What's the most important ability for someone who wants to get into programming." One of the reasons I like this question is I have a canned answer, "A high frustration tolerance."

People usually think I'm kidding, so I have to explain. "No, really. Every problem and mistake a programmer encounters is a product of their own labor. There is no one else to blame, no tool with which to find flaw. If you are lucky enough to see a project from beginning to end, the only walls you bang your head against are those that you built yourself. That's true frustration."

For some reason, this answer scares the hell out of people. How rarely we are forced to take responsibility for our actions. To most people it must seem repugnant. However, I must move perseverance down to quality number two; I've had an epiphany.

Yesterday I taught a simple class I called "C#.NET Client/Server WinForms: From Scratch to App" Basically, I showed how to go from an empty project to something pulling data from a server, populating DataSets and binding to Form widgets. I threw in some Design Patterns and Object theory, just to let them know I was really only talking to developers.

The class went well and even the non developers siting in seemed impressed. The other developers complained that the uninitiated might believe, after watching my show, that doing such projects was easy; I promised to show off more pitfalls next time.

One of our developers, the least experienced, is stuck. So, at the end of my presentation, I'm asked to just show everyone how to look at the problem. While I'm dubious about embarrassing the guy in front of everyone, there is no way I can back out. I try to be gentle.

"What's the problem," I ask. Response, "DataSet isn't getting loaded." "Ok," I say, "let's walk the code." And, we proceed to debug.

Debugging is to coding what defence is to martial arts. You can teach anyone how to throw a punch, it's not getting hit with one that's the real trick. Debugging is known by other names in other fields, most commonly it's called diagnostics or troubleshooting.

It's a simple skill, really. It requires two things; experience and logic. The experience part cannot be taught, though the groundwork can be laid ( i.e. "education"). Logic can be taught. but rarely seems to be. You usually either have it or you don't.

What ability does a programmer most need? Diagnostics; troubleshooting. Perseverance is the ability to continue to bang your head against a wall, rather than give up. However, in order to get anywhere, you must be always banging your head against different walls, until you run out of blocks and you stumble forward into the answer.

If you have no diagnostic ability, you'll always be banging your head against the same damn wall. Through blind luck, the wall might give and be overcome. But, without fully understanding how the wall got there, you'll be doomed to be blocked by it again.

Basically, programming is an exercise in self learning. Making mistakes is a fundamental part of learning. Repeating mistakes means that a lesson hasn't been learnt yet.

I have a personal mantra I say to myself when I feel a head banging coming on; "No effort's ever wasted, always make new mistakes."
Tags:
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting
.

Profile

baavgai: (Default)
baavgai

Links

Most Popular Tags

Powered by Dreamwidth Studios

Style Credit

Expand Cut Tags

No cut tags