Thursday, April 9, 2009

Useful advice in unlikely places.

I'm reading a book called:
Code Complete: A Practical Handbook of Software Construction

It's a book on software construction.It's a sort of good bedtime read.I came across a chapter called "Personal character" .

Baffled, I returned to the front cover to make sure I'm reading code complete: a book on software construction.I was surprised to see a chapter dedicated to the human nature in a book on software.Curious,I continued to read on.

The author argues that it is not intelligence but personal character and values which makes one a good programmer or keeps him a good programmer.I discovered spiritual advice in the most unlikely place.I will try to capture the essence of that one chapter here which applies to everyone.

Excerpts:
Engineers in every discipline learn the limits of the tools and materials they work with.If you are an electrical engineer, you know the conductivity.......... ......If you are a software engineer, your basic building material is human intellect and your primary tool is you.

.....................
....The whole job of programming is building air castles-it;s one of the most purely mental activities you can do.Consequently, when software engineers study the essential properties of their tools and raw materials, they find that they're studying people-intellect,character, and other attributes that are less tangible than wood, concrete, and steel.

He goes on to answer the question he poses- Isn't personal character off topic? The intense inwardness of programming makes personal character especially important.You know how difficult it is to put in eight concentrated hours in one day....had the experience of being burned out one day from concentrating too hard the day before..........days on which you have worked well from 8am to 2 pm and then felt like quitting..you didn't quit though....you pushed on.......and then spent the rest of week fixing what you wrote from 2 to 5.

Your employer can't force you to be a good programmer.(God can't force you to be good.) A lot of times your employer isn't even in a position to judge.......If you want to be great,you're responsible for making yourself great.It's a matter of your personal character.

......You can't do anything about your intelligence, so the classical wisdom goes,but you can do something about your character.It turns out that character is more decisive factor in the makeup of a superior programmer.

"We become authorities and experts in the practical and scientific spheres by so many separate acts and hours of work.If a person keeps faithfully busy each hour of the working day,he can count on waking up some morning to find himself one of the competent ones of his generation"--William James.

  • Necessary qualities:
  • Intelligence and humility.
  • Curiosity.
  • Intellectual honesty.
  1. -Refusing to pretend you're an expert when you're not.
  2. -Readily admitting your mistakes.
  • Creativity and discipline.
  • Laziness:Laziness manifests itself in several ways:
  1. --deferring an unpleasant task.
  2. --Doing an unpleasant task quickly to get it out of the way.
  3. --writing a tool to do the unpleasant task so that you never have to do the task again.

Good character is mainly a matter of having the right habits.To be a great programmer,develop the right habits,and the rest will come naturally.

"Any fool can defend his or her mistakes-and most fools do"--Dale Carnegie.


I always wondered why I asked the questions I used to ask.Reading this chapter of the book brought me little closer to the answer of this question.
Author goes on to mention that programming is one of the purest form of mental activity one can go through.(like other art forms,I guess.)To be able to do this day in and day out I need to have a clear and clean mind and this made me to start asking questions whose answers I need to make me happy.

The reverse is also true.I have come across bad programmers who are almost always bad people(i.e bad habits or bad ethics or just bad.)

love,
despo

PS:This is in no way intended to glorify the profession of software engineering or demean other profession.The word software engineer/programmer can be in most cases replaced with human being in this article.Hence I shared it.
"I walk the lonely roads,the only one that I've ever known."