Setting up my Linux box and Ruby on Rails development environment

As many of you might be aware, I have been a fan of the Ruby language for a few years now, and though I had read a bit about Rails, I started learning and using it on a daily basis only during the past 8 to 10 weeks. Coming to the world of Linux from Windows has been liberating, especially for a keyboard junkie like me. Plus I just love the fact that I can invert the color of any/all window by pressing WindowsKey+N or WindowsKey+M. That is just super awesome!

Of course, coming from the dumbed down Microsoft/Windows world, things haven't been exactly only rosy. There were a few thorns, nothing more irritating than trying to set up the development environment in the same machine again and again. Let me explain.

I started learning Rails on my laptop running Windows Vista. Rails is meant to be run on a Unix based machine (Linux or Mac OS), and it is a real pain in the proverbial to get everything working on Windows, and in fact some of the things just don't work well (spork and autotest, off the top of my head). But still I got things working and used Rails on Vista for a few weeks.

I was sort of sticking to my desktop running Windows XP for all my serious work since Vista was (and is) pretty slow -- it had almost become my wife's movie watching machine! 

When I wanted to install Ubuntu 10.10 the first time, I tried my level best to opt for dual booting on my laptop. In spite of my valiant effort to defragment the disk to make space for Ubuntu, the system refused to allocate anything more than 150 MB for another partition. I decided enough is enough, and installed Ubuntu 10.10 aka "Maverick Meerkat" wiping the disk clean and getting rid of Vista. 

This was the first time I was ever working on Ubuntu, and so had to spend a lot of time grokking around to get everything setup as I wanted it to be (or as I was used to all these years).

When Ubuntu 11.04 (Natty Narwhal) came out, and I read about the new sleek (and I must add, really helpful for someone like me) Unity interface, I decided to upgrade. Upgrade itself was a breeze, and everything was working and looking great, on the second morning I started noticing the only problem I have had with it -- system freeze.

Due to some reason (that I am not good enough at the moment to identify by myself or rectify) the system would freeze on every boot, and I will have to kill it once, run in recovery mode, kill again, and then start again to get the system to boot! The same was happening even if I tried to work around it by using Hibernate.

Of course, not everyone who has upgraded to Ubuntu 11.04 is facing this issue, but some definitely are, and the freeze happens at different moments for different people. I tried raising it in various forums, but didn't get any solution.

Having spent the last 15 days doing this killing ritual many times a day, I decided once again that enough is enough, and decided to install 10.10 back, which I did. Of course, it had to wipe the system clean and reinstall since it is a downgrade.

So, here I had a blank machine one more time, and this time I decided to jot down the things I had to do to get the machine to a state that I would be happy about. I am a bit finicky about things like colors and fonts. For instance, in my book, the default fonts like Courier New or Monospace or Ubuntu-font are not as great as Google's Droid font or the awesome Consolas/Inconsolata, and I prefer light color text on dark background for coding as well as reading web pages.

So here is the dump of the steps I took to reclaim my machine. I will use it as a reference the next time I have to install Linux on any box, and I hope some of the things mentioned here will be useful for you -- for instance, how to maximise the screen estate without upgrading to Unity!

Basic Machine Set Up
=================

A. Configure gEdit

enable
  View
    Display line numbers
  Editor
    Tab Stops
      Tab width: 2
      Insert spaces instead of tabs
    Automatic indentation
      Enable automatic indentation
  Font
    Remove "Use the system fixed width font"
    select "Inconsolata 11" as font
  Color Scheme
    Oblivion
  ... # and so on 

B. Configure Nautilus
  View
    Default view Compact
    Arrange Items by Modification Date
    Zoom 50%
    ... 

C. Configure Terminal
  select "Inconsolata 11" as font
  Color: Green on black  

D. Install Firefox 4
  sudo add-apt-repository ppa:mozillateam/firefox-stable
  sudo apt-get update
  sudo apt-get upgrade 

E. Install Chrome Dev Channel

  Install Chrome apps

  Also reinstall "Mail Checker Plus for Google Mail" from https://chrome.google.com/webstore/detail/gffjhibehnempbkeheiccaincokdjbfe#

F. Maximize screen real estate
  Don't install "window applets" using the first link (though it is fine) below, but do use it to install "Window Picker" and Maximus.

  To install Window Applets 0.2.10 in Ubuntu, you can use the WebUpd8 PPA:
  sudo add-apt-repository ppa:nilarimogard/webupd8
  sudo apt-get update
  sudo apt-get install gnome-window-applets

  You might have to run "killall gnome-panel" before you can see "Window Buttons" and "Window Title" in the "Add to Panel" list, as mentioned in the FAQ in this page: http://gnome-look.org/content/show.php?content=103732

  Btw, I removed "Window Title" since "Window Picker" since "Window Picker" already shows the window title. I ended up hiding that caption as well since it is sorta redundant.

G. Install banshee music player (stable)
  sudo add-apt-repository ppa:banshee-team/ppa
  sudo apt-get update
  sudo apt-get install banshee

H. Installing favorite fonts
    sudo apt-get install ttf-inconsolata

  Droid fonts
    sudo apt-get install ttf-droid

  I actually had backed up the font folders [.fonts, .fontconfig, both under root (~/)], but forgot about it, and so had to install the above two again.

I. Apply the favorite fonts everywhere: Configure gEdit, Terminal, browsers and the system as such to use Droid and Inconsolata fonts. Yeah, I am a bit mad when it comes to fonts and colors used in the IDE.

J. Install Picasa 3

K. Install aptitude
  This would come in handy to install stuff that needs aptitude rather than the default apt-get package manager.

  sudo apt-get install aptitude

L. Install Wine and Kindle for PC
  If you are like me, and is a bookworm, you naturally love Kindle [device or app]. Though Amazon and Kindle itself runs on Linux, they don't support Linux when it comes to the Kindle apps. But, fear not. Using Wine, we can install Kindle for PC on our Linux box. Here are a couple of sites explaining how it is done.

Install the Kindle for PC application on your Linux computer: http://www.fewt.com/2009/11/install-kindle-for-pc-application-on.html
Installing Kindle for PC on Debian Squeeze: http://okomestudio.net/biboroku/?p=931

Though I had installed the latest version of Kindle for PC about 3 months back (as explained in the the first link above), as of today, I am unable to make it work (may be Amazon released a new version that doesn't work with the Wine I have?) and so had to use an old beta version of the Kindle for PC app (as mentioned in the second link). But as they say, something is better than nothing!

M. Install Pinta (equivalent of Paint.net)
  I am someone who takes a number of screenshots in a month for various things, and so not having the equivalent of Paint is not acceptable. I usually crop the screenshots and so I need a decent editor. Enter Pinta: http://www.ubuntugeek.com/pinta-paint-net-clone-for-linux.html#more-4476

  sudo add-apt-repository ppa:moonlight-team/pinta

  sudo apt-get update

  sudo aptitude install pinta

N. Configure Reliance NetConnect
  Unfortunately, my Reliance Netconnect just doesn't work with the out-of-the-box method (of adding a new mobile network connection), and what works is the steps outlined by Harbhag at his blog: Reliance Netconnect Broadband+ on Ubuntu

  May be there are other ways to achieve the same thing, but this works for me, and so that is what I will use in future as well.

O. Further tips and tricks to customize Ubuntu

Developer Tools Setup
=================

A. Install LAMP
  http://tuxtweaks.com/2010/04/installing-lamp-on-ubuntu-10-04-lucid-lynx/ [I stopped short of installing phpAdmin which is mentioned at the end]

B. Install gvim
  sudo apt-get install vim vim-gnome

  Since I had backed up the vim settings yesterday before reinstalling Ubuntu 10.10, I just had to copy paste the settings back into the root (~/) and gvim was ready to go with all the plugins, themes and fonts that I was using, which was great. The folders/files that I had backed up were:

  taglist, .vim-fuf-data, fuzzy_file_finder-1.0.4, .vim, src, VimSettings, .vimfuzzyfinder, .viminfo, .gvimrc, .vimrc

  The only thing that I had to install was "exuberant ctags" using sudo apt-get install exuberant-ctags

  I tested to ensure my favorite plugins were working fine: rails-vim, nerd-tree, Bufexplorer etc were working fine. And yes, my favorite themes were also around -- railscasts, obsidian2, and others.

  I will try to post about my vim experiences some day.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  Note: From here on, the installation process was done based on a bunch of resources:

  Blog post by my good friend and colleague, Apple (@arunsark):

  The excellent Ruby on Rails Tutorial book (available online for free): 

  The Ruby on Rails Tutorial video on installing Rails in Linux/MacOS/Windows (this bit is free): 
    http://ruby.railstutorial.org/ [check the section Table of Contents for links to free videos]  

  A couple of blogs that I stumbled upon: 
    Ruby On Rails Development On Ubuntu 10.10 With git, vim, And RVM: http://appogee.posterous.com/ubuntu-1010-ruby-on-rails-setup

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

C. Install git
  sudo apt-get install git-core

D. Set up tab completion for git

  Trying to set up tab completion for git branches turned out to be a bit of a pain since the version of git installed by the above command apparently doesn't have the file "contrib/completion/git-completion.bash" that is the source for tab completion. I had to download the latest git source (tar ball) from http://git-scm.com/download, extract it, and use the file that was available inside the contrib/completion folder (your version number might be different based on when you are downloading):

  # This section follows what is mentioned in the Ruby on Rails Tutorial free video on installing Rails in Linux/MacOS.
  # Refer http://ruby.railstutorial.org/bashrc for the exact contents that goes into the ~/.bashrc file

  # navigate to the Downloads folder where the tar file was downloaded
  $ cd Downloads/

  # unzip it
  $ tar jxf git-1.7.5.1.tar.bz2

  # navigate into the git source and copy the git-completion.bash to the root folder
  $ cd git-1.7.5.1/
  $ cp contrib/completion/git-completion.bash ~

  # Open the .bashrc file for editing
  $ gvim ~/.bashrc 

  # NOW, Paste the contents from http://ruby.railstutorial.org/bashrc into the file.

  # NEXT, run the following to source the bashrc file.
  $ . ~/.bashrc

E. Install curl
  sudo apt-get install curl

F. Install Ruby Version Manager (RVM)

  This was a nightmare for me and I had to keep running "source .bash-profile" to ensure rvm was always recognized as a command/function. Of course, I think if you follow one of the sources (instead of trying to follow "the best from all sites") you might not run into this problem.

  In fact, I still need to run ""source .bash_profile" every time I start a terminal for the system to recognize rvm and rails as commands/functions.

  Note: Since this is the third or fourth time I am setting this up, I think you are better off refering to one source while installing rvm. This is the first time I tried to act smart (by referring to multiple sources, trying to pull in the best bits about the installation or setup), and promptly, paid the price!

Update: I found out the issue. .bash_profile might be used by some other Linux distributions, but not Ubuntu. For Ubuntu, the proper file is ~/.bashrc [i.e. ".bashrc" under root (~/)]. So, there was nothing much that I had to do except for using .bashrc wherever .bash_profile was being mentioned!

Anyways, I also learnt how to uninstall rvm in the process:

gem uninstall rails [not mandatory, I think; when you remove rvm (next step) this too should vanish]

rvm implode

G. Install Ruby
  rvm install 1.9.2 

  You might have to jump through a few hoops here (to create the gemset, the default gemset and so on. Please refer the Ruby on Rails Tutorial or the blog posts mentioned above).    

  At the end of it, your system should be using 1.9.2 against a gemset you created. At end of it all, I ran the command:

  rvm --default use 1.9.2@rails3 

  which means I am on ruby 1.9.2 and I have created a gemset rails3 for me to play with.

H. Install Rails 3.0.7 (the latest at the moment).
  gem install rails --version 3.0.7

I. Install the databases
  If you had followed along from the top (referring to the different sources, you would have already installed both mysql and sqlite3). If you haven't, please refer the "Databases" step of http://appogee.posterous.com/ubuntu-1010-ruby-on-rails-setup.

  For me, what is left to do is to install postgresql

  # Install postgresql and deps
  sudo apt-get install postgresql libpq-dev
  gem install pg 

J. Install "Open Terminal [Command-Prompt] Here"
  This allows you to open a terminal from any path in the file manager Nautilus. From: http://superuser.com/questions/166407/how-to-open-a-menu-with-open-terminal-h...

  sudo apt-get install nautilus-open-terminal

To complete the set up of Rails development environment along with the required test setup and deployment (using heroku) environment, refer to the excellent Ruby on Rails Tutorial, chapters 1 and 3. Chapter 2 is about using scaffold to create a sample app, and doesn't add any value towards our current goal: setting up the environments.

Of course, my ideas about what constitutes my preferred configuration is bound to change over time, and so would the tools required to do the job. If I come across something great, I will try to update this post with that info.

Thanks for reading and I hope at least some of it would have been useful for you.

Update: Thu, 19-May-11: Updated the section "F. Install Ruby Version Manager (RVM)" based on later findings, and also added sections to install Pinta, Open Terminal Here, Picasa 3, Kindle for PC, and a link to 'how to customize Ubuntu further'.

Update: Thu, 26-May-11: Inserted a new section "N. Configure Reliance NetConnect"

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

"A programming language that doesn't change the way you think about programming is not worth knowing" - Alan Perlis

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 how to copy a string using a single 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 C++ 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 Java book while we were doing the C++ course. And by the time, I had finished The Java Programming Language, I was a firm convert to the "reading a book is as or more important as hacking things together or striving to learn stuff by [having not much knowledge but still] trying things out" school! These books also taught me another important lesson -- that there is nothing wrong in being a programmer for life since most of the great books are 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 a 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 during the 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 the K&R and the Stroustrup that made it possible though I too was learning delegates with the rest of them for the first time. I am indebted to my seniors in that project Prem and Sreeram for their guidance, and to my manager Anjali for picking me for the .net exploration. Not many people in India in 2001 had the good fortune of playing with .net beta!

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 with a different, slightly verbose syntax. I devoured the Borland documentation of the Object Pascal language (later renamed as the Delphi language), and am thankful for the seniors who allowed the guys new to Delphi 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 covered elsewhere in my blog.

Thanks to those articles, I came across the names and works of stalwarts like Martin Fowler, Steve McConnell, Jerry Weinberg, Fred BrooksKent Beck and Pete McBreen; and so those articles in many ways shaped my thought process, attitude, approach, career, and my perspective on programming. I am thankful to my then manager, LN, for lighting that spark with that 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 (thanks, Hari!). I also learnt a lot from the other seniors in the TF team like Arun, Ashok, Farhad, Kennedy, Mini, Padam, Sajee, Saravanan, Vinod and last but not the least Roopa, who was my last manager at iSOFT and who allowed me the freedom to showcase my skills in a major redesign work.

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 and other topics.  Also, many thanks to Harish for having been a wonderful roomie and for taking care of my food needs as well as for sharing my taste in music - I still can smell our semiya payasam and your sambar and beans/carrot thoran, and still relive those countless hours of singing Thaadi's songs at home.

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 this particular firm) and this guy has 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 helped 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, as well), I decided to give it a shot. It was 1pm by the time I finished coffee and discussion with my friend at the Cafe Coffee Day in the Prestige Meridian, and since the registration for the walk-in was to close at 1530 hrs, I began the hectic "go home, eat lunch asap, update the resume since it 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[hi]story!

In Chennai, I continued to work with Delphi, and managed to build both run of the mill 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 had 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 eventually selling it off to Embarcadero.

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, unit tests using RhinoMocks, xmpp R&D, the works! I made my first (and only so far) onsite trip 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 and home made food for dinner twice 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 in Oct 2005, it has been my faithful companion as well -- helping widen my horizons and enrich my knowledge.

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. Python too was on the radar thanks to Kent Beck who introduced Test Driven Development using Python. 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 out that I needed a more focussed book to learn Ruby, and hence 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 the more popular 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 (this book once again proved to me the importance of reading the book on a language written by its creator) and are now learning Ruby on Rails using the excellent Ruby on Rails 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, for supporting me whenever I wanted to buy books or join a library while I was a student. I am sure without their sacrifices and support I wouldn't made it this far in my life. I am thankful for my dear wife, Preethi, for kindly allowing me to spend many hours with the books and the computer every day. I am thankful to my uber witty cousin Reghu for having nudged me ever so gently in the direction of programming and cdac. 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 -- AppleHarish, Jiju, Mahesh, Ramesh, Raghu, SarathSubru, Sunil -- and to my cdac classmates cum ex-colleagues -- Arun (Thalai), Beeba, Biju (thanks for letting me know that you find my posts on programming inspiring), Gayathri, and Ram whose friendship means a lot to me, and last but not the least, Pradeep and Naresh for their support, discussions, time and leg pulling ever since I landed in Chennai; I have learned quite a lot from them about too many things to list down here. Of course, there must be, and are, many others whom I have missed mentioning here.

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 keeps working hard to improve myself, and above all be a good human.

PS: I am thinking of switching to Posterous since I love the mail to post functionality it provides. I am not aware whether wordpress.com provides it now or not. Anyways, posting this in Posterous for now.

Update [16-Feb-2011]: Cleaned up the post, added more links, and added a line here and another line there.

2010 - The Year of Revival of Tech Book Reading

As part of the get better in 2010 initiative, I decided to find and spend time improving my knowledge, one book at a time. There was a time between 2003 and 2005 when I used to read voraciously (yeah, that was before Google Reader :) and I wanted to rekindle that passion for learning. Though I would love to write a few lines about each book, for lack of time, I am just dumping the list here. But rest assured that each of them is a great book:

January:
  Pragmatic Unit Testing in C# with NUnit by the Pragmatic Programmers

February:  

March:
  Outliers by Malcolm Gladwell

April:
  The Tipping Point by Malcolm Gladwell [December 2010]

May: 
  Programming Ruby by the Pragmatic Programmers
  The Ruby Way [partially read]

June: The FIFA World Cup and cheering for the awesome German team!

July:
  To Kill a Mockingbird by Harper Lee
  The Haj by Leon Uris

September:
  Pragmatic Thinking and Learning: Refactor your wetware by Andy Hunt

October:
  The Grand Design by Stephen Hawking
November:

December:
  Programming Haskell by Graham Hutton

Last, but not the least, I think it would be a travesty if I don't mention the book that sparked a revival of sorts in me -- The Passionate Programmer, by Chad Fowler,  a gem of a book that I read in 2009. It helped me sharpen my focus on programming as a career and getting better.

There is no shortcut to getting better than hard work, practice and reading!

What fate awaits Sree Padmanabhaswamy Temple? The redux.

It was with a sad heart that I wrote a couple of years ago about the fate awaiting Sree Padmanabhaswamy Temple. Over the last couple of days, things have taken a decisive turn with the Honourable High Court of Kerala directing the State Government to take immediate steps to form a trust or similar entity to take over control of the temple. After reading about the judgement, I understood that the current Maharaja or any of the future Maharajas are not supposed to be in charge of running the show in the temple, and in fact, the Royal Family of Travancore cannot even lay claim to the temple. Though this might be true, one cannot escape but feeling sad at the turn of events, and realizing that the soul of the temple might be undergoing metamorphosis in way that may or may not turn out to be for the good -- and that may not be case would be a travesty! This temple is special (to me and many others) and one of the reasons why it is special has everything to do with the notion that the temple belongs to the Travancore Royal Family. This family has a proud and longstanding tradition of being the custodians of the temple and of course, for taking fantastic care of the temple, barring any allegations of misconduct that might have cropped up in recent years. It is one of those rare temples that I have been to where you actually feel bhakthi, and where, going to the temple is as a joyful process in itself (as you have to wear a mundu [veshti] and neriyal [uthareeyam/shawl], as opposed to zipping in and out of the temple in either the corporate attire or Jeans and T-shirt or God forbid, shorts, on the way to work or cinema or shopping or whatever). Of course, admittedly even this has got diluted over the last 10 years as you can now get a mundu for darshan if you pay a small charge, not to mention the always crowded hallways and long queues for darshan that I get to see most of the time in recent years. If you grew up in modern -- and dare I say, mostly -- commercialized big city environments, you might miss out on the gist of what I am driving at here, and I can even see many having this to say about the whole post: "that is just being nostalgic, and sentiments have no place in business or law or whatever, stupid!". At this moment, I can't help but feel a tad angry -- how the minorities are allowed to run their religious institutions as per their culture or heritage or manner (and I have nothing against it) but when it comes to Hindus, the Government has to take care of the temples -- directly or indirectly. Of course, there must have been some logic behind the idea when it was formed, and though I can understand how it can be useful for many temples that can't sustain without that aid and care, I fail to see how and why for a temple like Sree Padmanabhaswamy Temple, which has a long history of being well maintained and provided for by the Royal Family, this would be necessary. May be what we need is some mechanism to have checks and balances - as one of the issues at hand is that there are allegations that the Maharaja is perhaps not doing his best. But I am not sure how this can be reliably implemented. The most regrettable part of this whole series is how this whole saga might have been kicked off because of petty personal ego clashes - there were a set of people who had [or is it have?] the privilege of having the darshan before the ordinary guys (like me) could go in, and may be some of them were offended by some act of another group or of temple employees. The rest, as they say, is turning out to be history! I don't know how many people noticed that though it has been almost two decades since the last Maharaja passed away, it is only in the last 4-5 years this issue of who is in charge of the temple or whether the Government should take over the temple has become important. May Papps (as me and my friends refer to Him fondly) continue to bless us all and ensure better sense prevails, and let us pray that He allows all the great minds involved in this story to come together to find a solution in a way that leaves the soul of the temple untouched. And, if there has been some bad practices -- like crap commercialization --introduced in the temple during the last 10-15 years, it can and should be rolled back. PS: I left my native Trivandrum for my graduation studies in 1995, after spending my first 17 years there and so I am speaking more from my heart than head. Though I visit Trivandrum for a few days every year, I understand it isn't the same as staying in a place to talk with any authority about the events unfolding. PS2: I am writing this post after about 18 months, and it took such an extraordinary judgement to wake me out of the slumber. Though I am sad that I neglected this blog for so long, I have been having some interesting learnings and conversations over on Twitter. I hope I get to write more posts more frequently going forward.

Malayalam music reality shows on TV

You might have read my previous posts about the Malayalam reality show - Idea Star Singer (ISS) on Asianet. However I had missed out following or even being aware of another great reality show on Malayalam TV - Super Star Global (SSG) on Amrita TV. I was introduced to SSG by Preethi (my wife; thanks, dear!) yesterday when she played the awesome rendition of the great Hindi movie song "Kuhu kuhu" [1957!] by the eventual winner Roopa Revathi on an episode from last year. It just blew me away, and so did her medley, not to mention her other efforts! I am once again thankful to God for having made me someone who can naturally follow both Tamil and Malayalam, and with training -- thanks to Kerala schools where you have to learn three languages and Dakshin Bharath Hindi Prachar Sabha -- Hindi as well. Tamil, Malayalam and Hindi industries are lucky to have witnessed some of the highest quality film songs made in the last fifty years in India. I would rate the songs in Tamil and Malayalam of the last 30 years even higher than that of Hindi, thanks to men of such calibre like Ilayaraja, Ravindran, Johnson, Yesudas, SPB, Janaki, Chithra and Rahman. Then I stumbled upon this wonderful wrap-up of these two reality shows by Balaji Srinivasan in this blog post. Nothing much is left for me to say. I hope you would get to enjoy a few hours of high quality music. A quick and dirty way to listen to Roopa's songs are by visiting the audio page on her alternate site (strange a person having two sites whose address differ literally by a dot!). The only problem I have now is to convince Airtel Digital TV to start transmitting Amrita TV. If that happens, it would be great to immerse myself in music between 8 and 10pm whenever time permits. Oh, yes, thanks to Balaji, got to read this great piece on Roger Federer by the NYT as well. The happiness I derived from music and reading today was moving enough to inspire me to write something on this blog after a few extremely hectic weeks. I do hope I get to experience more such days, thanks to perhaps the most useful invention of the last century -- internet. It would be great to hear your comments. Update: A comprehensive dissection of Roopa's SSG 2008 performance is available over at Subash's blog.

Idea Star Singer 2008 draws to a close - Vivek the deserving winner

The Mega Finals of the best music reality show I have seen so far - Idea Star Singer on Asianet 2008 - was held at the Chandrashekaran Nair Stadium yesterday. I thoroughly enjoyed the singing by the six contestants who made it to the finals. I thought, in the end, the two candidates who walked away the awesome winner's price (for male and female categories) throughly deserved it -- Vivek for his brilliance and Sonia for her consistency and awesome rendition of Paadi thodiyiletho (another gem by the late great Raveendran maashu). I saw someone comparing Vivek with the maestro KJY, after the former sang the latter's classic song - Harimuraleeravam from Aaram Thampuran, and cribbing that he didn't sing it as well as KJY [comments section of this youtube page: ]. I think that is grossly unfair to both of them. One was, and perhaps still is, at the pinnacle of his powers when he sung that and the other is just starting his journey as a singer of repute. Vivek was my favorite contestant ever since I saw his performance during the audition round (way back in May 2008 :) and I am happy he emerged the deserving winner. My pick of  the best by Vivek would include Parayaan maranna, Kattile paazhmulam, Sumuhoorthamaay, Oru kadalaay and Harimuraleeravam. My appreciation so far (though I haven't wrote much for a couple of months now thanks to Twitter, but that is another story for another day) of Idea Star Singer here: http://www.google.com/search?q="idea+star+singer"+Vivek+OR+Vivekanand+site:protoiyer.wordpress.com. The best source to watch all the Idea Star Singer videos would be: http://www.youtube.com/user/amidalastarsinger. The only thing that struck me as odd was that the price given to the last three contestants was below par compared to what the winners made. Also, I thought Prasobh was better than Rahul.  Looking forward to ISS 2009 that starts in a couple of weeks from now.

Boxing Day at Sydney and the flight back home

Boxing Day was the last full day at Sydney. We spent the Christmas Day in the room and did the packing bit, since the local people advised us that nothing would be open that day. So, of the two days available, only the Boxing Day was available for us for sight seeing.

Sridhar was yet to visit any beach in Sydney, and I too wanted to visit the famous Bondi Beach (Sydney’s most famous beach; there are lots of great beaches in and around Sydney). We also wanted to visit the Aquarium. Then there was the small matter of watching Sydney turn into an Asian city for a day – a rare opportunity to watch road side shops and roads thickly crowded with people who are out to get stuff at a very cheap price.

On Boxing Day most of the big shops provide huge discounts (sort of clearance sale, but only for a day) and there will be lots of roadside makeshift shops selling all kinds of stuff. We spent the morning wandering around the streets of Sydney and visiting the two famous shopping malls/shops – the Myers and David Jones. It was as good or as bad as (depending on your perspective) like our Saravana Stores in T.Nagar that day! The shops were teeming with people in a way I have never seen in Sydney before. Some of the shops even had long queues outside.

From there we went to the Sydney Aquarium that is just down the Market Street on the Darling Harbour, and about 3 minute walk from our office. Since Bondi was in the back of the mind, we didn’t spend as much time at the Aquarium as we would have liked to, but still managed to clock a decent three hours. It is a pretty good aquarium (and since I haven’t been to any other foreign aquariums, it is the best I have seen so far). What struck me wherever I go in Australia has been the importance they provide for accessibility to physically challenged people (which also helps the kids’ pram and so there were lots and lots of families out there with really small kids).

It was close to 1500 hrs by the time we managed to hit the Indian Food Court in The Galleries Victoria and we were both tired and extremely hungry. After having our lunch, we set off to the Circular Quay one last time, to catch the Bondi Bendy Pre-Pay. Bondi turned out to be a beautiful, albeit, crowded beach (thanks to the Boxing Day being a holiday and the season being the start of the summer). We stayed there for about three hours and took hundreds of pictures. I even managed to inspire myself to walk up the slope to take what I would rate as one of the better pix I have taken so far – the view of the entire beach. This is the only pix that I have uploaded at the actual size of 3456×2592 pixels or 9 mega pixels. You can download that pix to see it in full size (using Download button/menu in that pix’s page). Of course, there are far better pix of Bondi out there on the web.

Thus ended a rather memorable day – my last – at Sydney. The next day, we left by the noon flight to Singapore and from there to Chennai. We had a four hour break at Singapore and spent the first three and a half hours doing mostly window shopping and eating dosa. I watched Kungu Panda and Finding Nemo in the flight (and a bit of Subramaniapuram). Watching Finding Nemo again was interesting since I had completely forgotten that the story involves Sydney in a big way. I had seen the movie once about four years back, but then Sydney was just like any other city in some foreign land, and so it never registered in my brain. It was fun to watch the fish herd turn into the shape of Opera House on hearing the word “Sydney” or seeing the view of the Sydney Harbour in many of the shots.

We had a minor scare when we turned up at the Sats counter in Terminal 1. The guy who was sitting there gave us a piece of his mind for turning up so late for the flight (it was 2030 and the flight was at 2105). We were first told we won’t be able to get into the flight. I was genuinely surprised since at a place like Sydney I saw a lady who was at the security check at 1130 hrs to catch the 1130 flight out to some Asian country. So I was wondering what he was harping about.

The guy spoke on the phone with (apparently) the Indian Airlines authorities and then told us that we are lucky and we can catch the flight still, We were then asked whether we were ready to fly without the checked-in baggage. When asked what would happen to the baggage, he told us that it might reach Chennai in a day or two, but nothing can be guaranteed as to whether and when it would come. We had no option but to reply yes, we would love to fly out and reach home.

Another phone call ensued and lasted for about five minutes, after which we were told the baggage too is coming with us. We were given the boarding pass and were advised to not to turn up late for a transit flight. He saw us off asking us to rush to the designated gate to catch our flight. I only remember running madly for the next five minutes or so to reach the gate, and just avoiding running into a kid at a slope. She appeared out of nowhere and was running at top speed up the slope (and I was going down and had to veer out of her way).

The security check in happened at that gate, and we were welcomed by a team of Indians (Indian Airlines staff?) and they asked told us to relax and take it easy, and that the flight is still on the ground only and so we were not going to miss it. I finished the check puffing and panting and collected my hand luggage and stepped into the other side. Any idea what I saw there? About 75 Indians sitting there to travel in the same flight, and no one (including the staff) was worried that it was 2050 hrs and the flight was at 2105 :). I think if the Sats guy had seen the crowd sitting casually there, he would have had a heart-attack!

I reached home that night by midnight, and it felt good to realize that I won’t have to eat bread (or Kellogs) for breakfast from now on :). Thus ended a rather memorable 3 months period in my life.

Here are the links to the pix:

Boxing Day at Sydney

Sydney Aquarium

Bondi Beach

At the Singapore airport

Raveendran Maashu – a redux

Looks like this is the redux season on my blog. As I wrote twice almost three years back, no music director has managed to strike a chord with me as much as the late legend Raveendran Maashu (Maashu, for the uninitiated, is Malayalam for Sir). When I was at Sydney, with no access to any Malayalam channels, I used to listen to a couple of CDs from my Malayalam songs collection from the 80s through 00s, and most of the songs I took with me were the ones from the stupendously successful and enormously talented Raveendran – Yesudas team. I am thankful I took them with me, though I didn’t take even a single movie or any other songs collection. I was happy listening to those songs almost daily!

Today I was watching Vivekanand’s latest performance in the Idea Star Singer competition – the “otta kambi naadam” song from the movie Thenum Vayambum (1981), originally sung by the incomparable Yesudas [go listen to it even if you don’t understand Malalyalam or music :)], a song so beautiful that it made Sharreth, one of my other favorite music directors, who is a judge in the show, remark “it should have been ‘oru laksham kambi naadam’..that is how majestically Yesudas has rendered this song.”. For the uninitiated, the opening three words of the original song lyric means “the sound of a solitary string [of a music instrument]” and Sharreth said “it should have been ‘the sound of a million strings’..that is how well Yesudas has rendered this song”.

Though Vivekanand had a bad day today, I still believe he is (going to be) the Star Singer 2008. Just listen to these four great songs from the previous rounds, and I hope you too would agree that this is one enormously talented lad. At least Ramesh had to change his opinion after allowing himself to be swept away by the beauty of Vivek’s rendition of the song “oru kadalaay”. I think he did a slightly better job than the original, thanks to his rich voice. Here is the playlist with his entire performance so far, and I find myself playing songs from this list, at least once a week, for a few weeks now. You too might find it a nice way to spend an hour or so :).

As I was listening to Sharreth’s comments, I thought I will search for some more info about Raveendran maashu. It was then that I stumbled across this Wikipedia entry on Raveendran maashu and this blog from Nikhil Venugopal, who seems to know music and loves music far better/more than me, where he has three great posts on (including an interview with) Raveendran maashu. The only drawback (a drawback if you can’t read Malayalam) is that it is in Malayalam, though the first post about Raveendran is in English.

I am not well versed in Carnatic music (I don’t know the raagas in spite of learning Carnatic for two or three years in my childhood days, though I think I can discern great music from merely good or average music from downright bad music or noise), I found the posts both interesting and nostalgic.

It took me back to my childhood days when I used to tune into the cinema songs hour(s) in Vividh Bharathi and All India Radio (Trivandrum station), perhaps just like so many other people in my native (and perhaps around India) at that time -- mid and late 80s and early 90s. Television was just making an appearance and even if it had, it was certainly not 24*7 and there was just one channel – Doordarshan (Indian National Channel run by the Government). So the radio was a far more important and influential medium than it is today.

Anyway, I hope you like Nikhil’s posts. I really don’t know why we don’t have a 5 CD or 10 CD pack of his songs yet (or is it already out in Kerala already?). He deserves a HMV-SaReGaMa Legends collection or something equivalent.

Finally, to really understand who or what Sharreth is and why I like him, listen to these three samples, and yes, all are his own compositions. If you are going to listen to just one of them, let it be this duet with Unnikrishnan. Here is the search list of songs available in You Tube sung by Sharreth if you want to listen to more.

Oh, yes, lest I forget, Raveendran maashu had this to say about Sharreth in 1994:

Q: Does any of the new generation music directors give you hope?

A [Raveendran Maashu]: Sharreth. There is music in his songs. He understands music. We should encourage and congratulate him.

I hope Sharreth would give us scores (or hundreds) of beautiful songs in the future. Malayalam music industry hasn’t been too supportive of Sharreth in the past, and I hope that would change for the better. May Kerala not join the rest of the country in giving the cold shoulder to shudha-sangeetham (pure music) in mainstream cinema music. I hope Kerala continues to encourage more and more youngsters to learn the basics of music before dreaming big and high.

I have my hopes set high after listening to this today – the Classical music round from last year’s Idea Star Singer, sung by Thushar. I don’t think any of the reality music shows in either Tamil or Hindi has anything like this (perhaps I am wrong here, but I wouldn’t mind knowing about another show that is in the same class) or where the contestants are of this class or this versatile. Don’t forget to listen to the judge’s comments too. Kerala is blessed to have given birth to so many world class talented souls -- Yesudas, Raveendran, Chithra, Sujatha, Unnikrishnan, Johnson, Ousepachan and Sharreth to name just a few (and not including any of the music directors from the previous generation).

Visit to the Darling Harbour

Dec 24th was the last working day at Sydney. It was also the day I decided to take the new Sony Cybershot H50 to work. And the best part was that it was also decided that we would walk across the Pyrmont Bridge to go to the other side of the Darling Harbour. In spite of it being just a ten minute walk from office, I had shied away from taking that walk during normal office days, as I was afraid (and on hindsight, rightly so) that I won’t return back in less than an hour and a half as it is a very beautiful walk and there are lots of eye-catching sights on the way.

It was a half day for us and so we had the whole of the afternoon to us to explore the area surrounding the office. The unfortunate part was that it was one of those real cloudy days, and that took a bit away from the enjoyment (and the beauty of the pix). But the grey sky has a beauty of its own, though a bit bleak and a bit sad, as if mother nature is crying or is upset.

On this side of the Darling Harbour is the Citi area – the downtown area spanning the Sussex, Kent, Clarence, York, George, Pitt, Castlereagh streets in one direction, and the King, Market, Druitt, Liverpool and Goulburn streets on the other (and they intersect each other to form a grid in the map). Darling Park (the office building) is situated on the Sussex Street, right on the intersection with the Market Street. This side of the Harbour also houses the Sydney Aquarium -- another place that was off the radar for as long as 90 days -- and that was just a five minute walk from office! On the other side (clearly visible from our office and the most photographed place by me while at Sydney) is the Sydney Convention Centre, the National Maritime Museum, the Pyrmont Bay and the Harbourside Shopping Centre housing multiple food courts, shops and more importantly (for me that day) - KingPin Bowling!

I spend the morning doing some work, and then around noon time got serious with taking snaps in and around the office. Post lunch, we decided to spend some time doing some light shopping. I used the time to order the 50 free prints that was offered by Teds (that came with the camera purchase). Why miss out on something that is both good and free?

Karthick, a colleague at the Sydney office, offered to take us to a game of bowling at the KingPin bowling that evening, and we lapped up the offer. The free prints at Ted took some time coming, and so by around 5pm I started the walk from Pitt street towards Kingping bowling, and in the process crossing the Pyrmont Bridge for the first and the last time. It is a huge and beautiful bridge, more than 100 years old, and an Australian Engineering Landmark. As the citation embedded on the bridge says “…the approach span represented the highest level of development of the Timber Truss..”. It is a sight on its own to behold, and the view from the bridge to either side is also awesome.

After spending quite some time soaking in the beauty of the sights on offer and merrily snapping away, I reached the other side of the bridge, and slowly walked towards the edge of the Cockle Bay Wharf. I reached the front of the Sydney Convention Centre and saw one of the biggest Christmas trees I would get to see in my life, and also saw the monument erected to commemorate the Olympics held at Sydney in 2000. I also saw this beautiful mini pool of water that had a circular walkway immersed in water, that was quite an attraction for adults and children alike. People had thronged the the Harbourside Shopping Centre and all the restaurants were having a great business that evening.

Finally I reached the Kingpin Bowling. Karthick and his friends and Sridhar were already into the first game. I waited a bit to get introduced to his friends and to get an offer to try my hand, and snatched turns from others to enjoy a few turns at bowling. Bowling turned out to be nowhere near as dumb as I thought it was (a view reinforced by watching on TV on Christmas Day highlights of some event involving Europe and the Americas where some really serious skills was on display). I left after an hour or so (was feeling hungry and had to purchase rice for that night and the next day – the Christmas Day -- when no shop or local restaurants would be open).

Thus ended the last working day Sydney. As always, here is the link to the pix. The Sydney series will end with a post about a rather busy Boxing Day when I got to visit the Aquarium and the Bondi beach (and hopefully some great pix).

How to be a better programmer - the redux part 2

"Most programmers have only a vague notion of how competent they are at what they do for a living" -- Steve Yegge

"Experience comes from practice" -- Andy Hunt

I thought I was done and dusted having wrote that previous redux post about how to be a better programmer. But my good friend Subru had posted a comment that made me (as it does most of the time) take notice and do some thinking and research about the importance of study and practice in the career of programmers. I did that since it has a direct impact on the topic I have been harping about -- the talent of the programmers like me, or the lack of it.

Subru had wrote that reading a few books need not necessarily make you better. He said that observing and interacting with senior craftsmen would make you a better programmer. It is precisely this attitude and observation that I wanted to do some thinking about. I, based on my personal experience, believe that it is better to read the books than observing the masters. The reason being that you never know whether the maestro is actually doing the right thing or more importantly, it is the right thing for you at the stage or phase of your learning or career.  Plus, what if the meastro hasn't read anything in the recent past and so is not in touch with the latest developments in the field?

I had this doubt, nay, conviction, partly because I had the good fortune of reading about Shu Ha Ri which was an appendix of the great Alistair Cockburn book Agile Software Development: the Co-operative Game, and partly because I believe Subru was wrong about the books. Shu Ha Ri teaches you that a beginner (the Shu phase) needs a framework or a rigid set of rules to follow, plus constant feedback to get through the initial learning phase. In the intermediate level (the Ha phase) one masters the rules, and learns all the tricks of the trade. In the advanced phase (the Ri phase) one needs to actually forget the rules or transcend the rules and make one's own rules of the game.

Ok, so what am I harping about here? Well, just the fact that with practice anyone (who is not physically or mentally invalidated to even attempt the task at hand) can move from being a novice to a master. All it takes is dedication and some knowledge of how to travel the path of mastery. I am not saying this. Hear it in Kathy Sierra's (of the Head First Java and Head First Design Patterns fame) words here. Having experienced first hand how Apple and myself could actually become far better programmers than what we were when we started out, I can vouch for it. I am not talking about the linear progression in talent that people who don't read books enjoy. In our case, the progression was non-linear, if not exponential, and it was made possible by the simple fact that we studied (read) and we practiced what we studied -- him probably more than me.

In fact some of the best minds in our industry believe what Kathy was conveying passionately. Steve Yeggey, one of the best bloggers I have read, has analyzed this topic in-depth, and later came up with an article titled "Practicing Programming" for people like you and me (the average programmer) to reflect upon and work upon to becoming a better programmer. He wrote both the articles a few years back when he was still with Amazon, and now he is with Google. He writes in the first essay:

Bob (our average programmer) knows this guy Joe who's just amazing. Joe's like the best programmer Bob's ever known...He's a natural at it. One of them whiz kids... In Bob's view of the world, there are essentially three programmer skill levels: folks learning how to program, folks like Bob who know how to program, and the inevitable whizzes, but they're few and far between. There are always a few whizzes out there, the ones who used to be child geniuses or whatever... Bob has no incentive whatsoever to try to improve his skills: He knows he's not as good as Joe. But Joe's great on account of his genes, not because he practiced or studied more than Bob did, back in school. Obviously Bob can't compete with people who were kid geniuses, and he shouldn't exert himself unduly on their account.

It is a great rant and a rich source of stuff for us to reflect upon. At least I came back knowing more about myself and realizing I had been that Bob at many a time, and probably still am a Bob in many ways.

This is reinforced by the works of two authors I respect very highly -- Andy Hunt and Dave Thomas (of the Pragmatic Programmer fame). Dave, for instance, thought deeply about the importance of study and practice. He went on to devised a set of exercises, named Code Kata, for exerting the programmer's brain -- stuff for us to chew upon to become better at what we do. And finally, here is his take on the various phases of learning and skill acquisition which is similar to the Shu Ha Ri theory, but based on the art of karate.

Of course, the real spark for this article was this great post by Jeff Atwood: "Programming: Love It or Leave It" earlier this week. From there the trail of reading (thanks to Google) led me to this rather controversial article about how to become a better programmer by not programming. I don't think, for once, the author is 100% right. Yes, Bill Gates is right, but the point is people can improve and many people really do. As Kathy says, of course, that won't be enough to be the gold medal winner at the Olympics, but we can be the street, council, district, state or national champions, at least.

So, the point is, IMHO, it is a far safer better to depend on books rather than trying to observe a mentor, for the simple fact that at least I have bumped into only a handful of people in India in eight years from whom I could learn something about programming. Of course there are lots of people to observe and learn about people management and the art of maintaining relationships or soft skills, but that is beside the point of this post. I accept that perhaps I am not good enough to have worked at a Google or a Microsoft, or that I was perhaps exceptionally unlucky (not to have bumped into more mentors) but the point is 90% of the software developers are not working at Google or Microsoft either. And people like me too have a right -- and a duty -- to improve, right?

As Peter Norvig says in the article Teach Yourself Programming in 10 years, to be really good at anything including programming requires lots of time, effort and dedication, and more importantly, we all know that if the pioneers of the Design Patterns movement hadn't read Christopher Alexander's work(s) on architecture, there probably would have been no Design Patterns movement. And if I hadn't read those great books or those great blogs, there wouldn't have been this post either!

Apple implants the programming virus in my brain

Also, I wouldn't have started my journey of becoming better had my good friend Apple not read the K&R book and made me both feel small and admire his skills when he wrote this sometime in 1999 in my notebook:

while (*t++ = *s++);

That, for the uninitiated, is the succint way of copying a source character array into a target character array in C. Apple wrote this after asking me to write a program to copy an array, and the best I could think of was to write half a dozen lines or so to achieve the same, and without using pointers. That was the moment when my journey to get better actually started. Even after that moment, I was the guy who did his C++ project in C (at NIIT), since I couldn't quite understand what this fuss about using objects was all about (and I was good at C thanks to the K&R book)! And it required reading The C++ Programming Language by Bjarne Stroustrup in 2000 to make me see the light, at last, and luckily, I never turned my back at lapping up a great programming book since then! To wrap up, I would rather continue reading than either sitting idle or just (waiting for and) watching the right mentor. And I would ask every developer interested in becoming better to do the same. Oh, and yes, lest I forget...Happy new year and thanks for reading yet another long post!