Saturday, May 8, 2010

The joys and woes of Software Engineering

Here I was, cheerfully browsing the web when I came across a post on www.codinghorror.com that mentioned Steve McConnel noting in his book Code Complete that "the average programmer reads less than one technical book per year"This made me stop and think. I have been working as a programmer for almost two years. And how many technical books have I read? None! I felt alarmed and worried at the same time. As if I've been just drifting along. I decided it was time to take some corrective measures. So I did the most obvious thing: Search the net for the best books for developers by finding the common ones among multiple lists. The conceited programmer in me was embarrassed to find out that out of the top 10 or so recommended, I had read only one (K&R). However, the bibliophile in me was delighted to find out that there were so many good books out there just waiting to be read. So then began my mission to get my hands on the 5 most important ones. Here's the list

Code Complete 2
PeopleWare: Productive Projects and Teams
The Mythical Man-Month
Thinking in Java
The Design of Everyday Things

Now, I don't really read a lot of magazines coz frankly, most of them are crap. The only ones I do consider worth reading are Fortune and Digit. But when I got a mail from the company library announcing the arrival of this month's Harvard Business Review, I thought: since it's so respected, let's give it a try. It turned out to be pretty good. It's when I went to return it that my eyes fell on "The Mytical Man-Month" by Fredrick P. Brooks. Imagine my joy when one of the most recommended software engineering books was lying in front of me just when I was searching for it. I pre-empted the book I was currently reading (1984 by George Orwell) and took this one up since I had to return it in a week. It actually took me three weeks to finish because I could read it only one hour per weekday during my commute to office. (When you exercise and do yoga in the morning, work all day, play badminton in the evening and game dota all weekend, you don't really have a lot of free time left).

The book is quite useful in a few ways:
1. It's like a history lesson of the evolution of software
2. It's a handy guide to managing s/w projects that are built from scratch

However, the reason I'm writing about it is the wonderful insight the author has given about what attracts people to the profession. I am going to use artistic license to reproduce what Brooks calls the Joys and the Woes of the craft. I hope this is as useful to the student contemplating a career in programming as to the seasoned programmer in understanding his profession better.

The Joys of the Craft
1. That surge of euphoria that you feel when you create something.
2. The pleasure of making things that will be helpful or useful to other people.
3. The fascination of creating complex puzzle-like objects and watching them work together.
4. The joy of always learning which comes from the non-repeating nature of the task.
5. The delight in working with such an easily manipulated medium.

The Woes of the Craft
1. The onus of performing perfectly: Human beings are not accustomed to being perfect, and few areas of human activity demand it.
2. Someone else decides what work you are to do.
3. The dependence on other people's programs that are often badly designed or implemented.
4. Designing grand concepts is fun; finding nitty little bugs is just work.
5. Optimism tends to make you underestimate the effort/time required which leads you to feeling awful when you can't keep to even your own schedule.
6. The work you've done becomes obsolete in a very short time.