Debugging Skill : The holy grail of Software Engineer

Okay, It’s been almost 300 days since I took the resolution to become a better programmer. Over the years, I have been through several windings in my career, but for some strange reason 2012 has made my brain stick into one particular interest which is “Programming”. The decision was an easy one to take, but sticking to my gut to ensure I follow my resolution was the difficult part. With the myriad number of programming languages that runs around me boasting from structural to procedural to functional to templating to what not ! I don’t care a damn ! It was tough to focus on one particular language. I did some merry-go-round trips through Ruby & rails, Java,PHP, Python before finally settling with Java & Python for the time being. I read several articles the one’s written by very accomplished hackers/programmers such as Paul Graham, Steve Yegge, Joel spolsky ( I  hope pronounced it right), Jeff Atwood ( The coding horror guy), Peter Norvig and many others. I read about the qualities of several programming languages , notably C ( by Jamie Zawinski - he swears by it and dislikes C++), Bruce Merry a topcoder programmer( likes C++ and its speed), Petr Mitrichev another TopCoder programmer(likes Java because it helps him to write code with less errors), some others like Ruby because it is better than Python, and few other like Python because it is easy to learn and good for prototyping.

So with incredible amount or versions of thought available around it was tough to make choices. But, then open courses such as the ones provided my MIT helped to focus my mind on Python as a beginner language and I would say at least I am not scared about programming anymore. If you had asked me to code some mathematical function or algorithm a year back I would have taken my bags and walked away, because I was damn scared to code. Sticking to simple basics and learning incrementally helped a lot in the last 300 odd days. I focused more on basics and concepts rather than learning programming language syntax and semantics. Also, I actually learned to code difficult problems like puzzles available from SPOJ/Uva Online Judge. It was an interesting period where I observed myself and the way I coded. I feel I am moving from a programmer who worried and learned about the syntax of programming languages to someone who thinks about the underlying algorithm and mathematical concepts. It really helps actually.

I am reading books on Algorithms by Skiena, CLRS & B R Pries. Also, I have Concrete Mathematics by D K Knuth. This is a long term plan hence it will take its own time. But, the results are good so far. I have started to use my brain like the way a software engineer should actually do.

But of all , the most important lesson learned in this 300 odd days is that one should develop debugging skills to be a competent or above average programmer. In these time technology changes and one version become obsolete in a matter of months. When new version is out, you tend to still work with some old code in sections of your program, which may cause errors. There are times when you end up reading code written by another programmer, it may not make any sense. But, if you develop debugging skills you can sail through this kinda situations without much difficulty. You might ask me, what makes you say this? All I can say is, a whole night of debugging and reading  code to find out the reason for a bug in a python program eventually led me to notice that the error was the result of improper indentation of Python code.

A good lesson learned after 300 x 24 hrs is “ DEBUGGING SKILL IS AS OR MORE IMPORTANT THAN THE ABILITY TO WRITE CODE”. Time is a good teacher, unfortunately it kill all its pupils. I hope to learn a lot in the few remaining days of 2012.