Ten Years of Professional Programming
_“Man thrives, oddly enough, only in the presence of a challenging environment.” _— L. Ron Hubbard
“Be the worst guy in every band you’re in.” – Pat Metheny
“There are always two parties; the establishment and the movement.” – Ralph Waldo Emerson
Today I am completing the first decade of my career as a professional programmer, and I thought this was a good time to jot down a few thoughts and undertake a whirlwind tour of the last decade. It is just a sweet and pure coincidence that I am sharing the tenth anniversary with the agile manifesto – it was signed on the day I turned pro! And one of the goals is to see whether I can keep this post short!
As I had written before, the programming virus was firmly implanted in my brain by my good friend Apple with that now-famous-among-my-circle story of copy a string using 1 line of C code. By the time I finished graduation, I was sort of good in C (thanks to the K&R book) and by the time I joined cdac, I had already read the Stroustrup book. Believe me, it made a huge difference to me at cdac – difference between being wide eyed and learning stuff for the first time, and being good at what you do and helping your classmates with their lab assignments in the lab. It also freed me to read the Gosling book while we were doing the C++ course. And by the time, I had finished the third one, I was a firm convert to the “reading a book is as important as hacking things together or striving to learn stuff by [having not much knowledge but still] doing things. These books also taught me another important lesson – that there is nothing wrong in being a programmer for life since most of the books were written by people who have been programming for 20 years or more!
The First Four Years
It was on Feb 12, 2001 that I joined – along with a bunch of cdac classmates – my first firm in the beautiful and cool Bangalore. The first year was spent doing mundane bug fixes for a long standing, big VB6 project, befitting my fresher status, but a couple of interesting things happened towards the end of the year – a) many team members underwent VB6 certification (and I got introduced to the world of brain dumps though being the naive guy that I was, I kept well away from the dumps and still cleared the exam with a very good score, though it took me about to month to prepare), and b) I got involved with a bunch of seniors to explore this new thing called .net beta! It was sort of love at first time when I saw the C# language from beta times, but it took me many more years before I was to work on an official C# project. Looking back, it gives me immense pride that I was the one who taught the group about delegates (method pointers) and event handling – and it was the countless hours spent struggling with K&R and Stroustrup that made it possible though I was also learning delegates with the rest of them!
In 2002, I was moved to a banking project and it was being developed using Borland Delphi. Moving from VB to Delphi was like a breath of fresh air, as I was back in a language that was as powerful as C++ – being able to work with full oops and pointers – but had a different syntax. I devoured the Borland documentation of the Object Pascal language, and am thankful for the seniors who allowed us the time to learn it properly. I am glad I could do some pretty good and useful stuff in the project, and it was during this project that the actual transformation from being an yet another programmer to being a real professional started, with the Dan Read articles on programming – something that I had already documented that elsewhere in this blog. Thanks to him, I came across the names and works of stalwarts like Martin Fowler, Steve McConnel, Jerry Weinberg, Fred Brooks, and Pete McBreen, so those articles in many ways shaped my thought process, attitude, approach, career, and the way I looked at programming. I am thankful to my then manager, for lighting that spark with an innocuous mail about programming principles! I am also thankful to have bumped into my friend Harikumar during this time from whom I learnt a few important points: a) the importance of continuous reading/learning if you want to be good, b) learn a tool completely, and c) most importantly, you can still have a good career in IT without indulging in office politics. It was also during the early days of Bangalore life that I read about putting a shark in the fish tank and I immediately liked the concept.
I bought my first computer in 2003 with the express intention of doing .net certification, and I am glad to report that I am yet to achieve that dream, 8 years on ;)! But though I didn’t accomplish that, I managed to start my love affair with the web as a rich and varied source of learning about programming.
The Next Three Years
I shifted out of Bangalore to Chennai in 2005 since my parents were not able to adjust to the cooler climes of Bangalore. I was and am not a big fan of the hot Chennai climate, but having stayed here for 6 years now, I think I have sort of either started liking it or more likely, resigned myself to the fate :). This switch to Chennai had an interesting background story as well.
A good friend of mine wanted to shift out of my first firm and wasn’t averse to moving to Chennai (and anyways, another colleague from the first firm was already in Chennai with my current firm) and this guy had his heart in advanced data related stuff though he was good in practical Delphi as well, and he wanted some help with the theory of Delphi and OOPS. I him with that, and we had a long session that went right past the midnight sitting in the corridor of the awesome Prestige Meridian building. The next day, he aced the interview, and met me and said that may be I too should try, and since the thought of parents not liking Bangalore was in the back of my mind (and his mind), I decided to give it a shot. It was 1pm by the time I finished coffee and discussion with my friend, and since the walk-in was to end at 1530 hrs, I began the hectic “go home, eat lunch asap, update the resume which hasn’t been updated for quite a while, take a printout by visiting multiple internet cafes (since the first few cafes either didn’t had the printer or it was there but not working), rush to Shivaji Nagar to attend the walkin”. Anyways, I managed to just reach a few minutes past the closing time, and I think I was the last one allowed to register. The rest as they say is my[his]tory!
In Chennai, I continued to work with Delphi, and managed to build some pretty ordinary and pretty cool stuff (that eventually no one used since the requirement was scrapped when the management at the client changed), started this blog, continued reading books, bought a house, got married, and sort of settled down. But I always have this nagging feeling (nay fear) in the back of my mind that I need to get better and decided to put a shark in the fish tank, and so I started looking out for .net projects since Delphi was dying a quite slow death with Borland selling it off.
The Next Two Years
I worked in both Delphi and Visual Foxpro for about 6 months, and finally made the switch to .net. It was a pretty challenging project with lots to absorb for someone doing their first official .net project – .net, cab/scsf, csla, mocks, xmpp, the works! I made the first and only onsite trip of my career to the beautiful Sydney, thankfully during the warmer periods there. I am glad that I could rise up to the steep learning curve and the challenges involved in that project. I was also lucky enough to have homemade semya payasam (gheer) and dinner while I was there though I actually don’t have any close friends or relatives there (thanks a bunch again, Mini!). I came back after the brief 3 month stint with a handful of beautiful memories, continued learning and working, and paused blogging and started tweeting. Of course, ever since Google Reader launched, it has been my faithful companion as well – helping widen my horizons and enrich my knowledge in many fields.
The Tenth Year
When I started the 10th year of my career, I had sort of challenged myself to be good at things other than the C family of languages (I consider Delphi to be pretty much similar to C++ in terms of concepts involved and supported). I was hooked to Ruby blogs for a long time and had only heard praises about Ruby – be it from the Pragmatic Programmers or Martin Fowler or Uncle Bob or many others whose blogs and books I read – and then there was the whole alt.net movement – inspired by Ruby and Open Source – that I had been following since 2008, and which had helped shape what Microsoft did in the last couple of years in the .net world, be it the introduction of asp.net mvc or introduction of dynamic features to C# or Entity Framework. I also wanted to learn functional programming since the most important feature introduced in C# 3.0 – linq – was influenced by it, and I could see how much more compact the code was compared to the usual imperative programming. I also resolved to find time to read widely to get better.
During March, I bought Seven Languages in Seven Weeks when it was announced. It looked like the perfect tool to tackle what I was planning to do. The book started with Ruby, and soon found that I needed a more focussed book to learn, and switched to the good old PickAxe and after that moved to the awesome The Ruby Way. Then two World Cups intervened – the Hockey World Cup in Delhi and the football World Cup in South Africa – followed by a spate of general and technical book reading.
During the last quarter of 2010, Apple and me decided to learn Haskell (preferring it over Scala) since it is a pure functional language and so we will be forced to learn and think in Haskell (rather than write C# or Java style code in Haskell) by spending 2-3 hours every week. We intend to continue the functional programming learning in 2011 and would love to learn Scala as well. We also teamed up to wind our way through most of the excellent The Ruby Programming Language and are now learning Ruby on Rails using the excellent tutorial.
Looking Back, Looking Forward
I am thankful to my parents and Sir and Mami for having inculcated a culture of honesty, hardwork, respect and humbleness, and without whose sacrifices and support I wouldn’t made it this far in life. I am thankful for my dear wife, Preethi, who had kindly allowed me to spent many hours with the books and the computer. I am thankful to the many seniors who helped shape my career at Bangalore and Chennai – their belief in me was a vital cog in my development. Many thanks to the wonderful bunch of boyhood friends – Apple, Harish, Jiju, Mahesh, Ramesh, Raghu, Subru, Sunil – and to my cdac classmates cum ex-colleagues – Beeba, Arun, Gayathri, Ram, and last but not the least, Pradeep and Naresh for their support, discussions and leg pulling ever since I landed in Chennai.
I would love to be programming (either professionally or for hobby) for at least another couple of decades (it is a heartfelt, genuine wish, and not a prediction, so don’t take me to task for this statement in future). I want to resort to and build upon my recently cultivated practice of walking regularly for an hour for six months in a year, which is a big improvement over my super lazy lifestyle between 2001 and 2008, because health matters [gcache] when you are no longer young. I hope I continue to be someone who values programming and keep working hard to improve myself, and above all be a good human.