Flashback - How I learnt little programming

Twas 1 hour past the midnight when all through the dorm
On codechef and spoj, `geeks’ solved algorithmic problem
Hundreds of lines of code they wrote without indentation
All they worried about was data structure, cout and cin
Faster and faster it was programmed to run
Oh boy how genius they were born
Few didn’t sleep the whole night
They were happy their rank increased in sight
And then I remembered one of my own night!
I have been programming for little over three years and that too after coming to college. And two years ago, I made a decision. I decided to stop submitting solutions to algorithmic problems – the kind that you find on spoj and codechef. Not because I didn’t love programming, but because what I was actually doing neither it gave me much joy nor I was learning substantially new by doing so. By that time I was familiar with and programming using a number of data types & structures and algorithms – Map, List, Set, Queue, Deque, Stack, Hash table, Graph, Binary trees, B-trees, Binary Heap, Binomial Heap, Trie, Radix tree, Suffix tree, Interval tree, etc. (I don’t remember them all now!) and then there are plethora of sorting algorithms, graph algorithms, string matching algorithms, number theory & primality testing algorithms, etc. I had then read The C Programming Language,Introduction to Algorithms, two volumes of The Art of Computer Programming, and was halfway through The Algorithm Design Manual among the list of a few other books.
Then gradually I learnt that whatever code I was writing did run fast, but nobody was going to read it and even worse, nobody could use it to solve some real problems in the world. They were just giving me points on the leaderboard making me happy in my own small world. These codes were just an aggregation of cin, cout, while & for loops and data structures being operated by O(n)/O(logn)/O(n logn) algorithms thrown in middle. They had no sense of reusability and were absolutely not readable. And I had eventually started to seem them as absolute waste of time.
I had been doing web development around the same time and my habit of writing use-and-throw-away-code was also visible there. I was programming mostly in C, C++, PHP and Java then. To learn how softwares are developed in the real world, I turned towards open source projects. I joined a bunch of mailing lists, started idling on IRC channels, followed the discussions that were happening over there, just read thousands of lines of code and learnt how patches were submitted. This was quite overwhelming at the beginning but what I learnt was awesome. I was now doing things I had never imagined before. I had partially broken away from the chains of writing unreadable, unusable, shitty code. And this was the happiest period of my life since I started programming. Distance were no boundaries and I involved in conversation on mailing lists and IRC channels with some of the smartest people alive on this planet.
In summer of 2011, I applied in GSoC for the project ‘Porting NetBSD userland to MINIX 3’ and fortunately I got selected. GSoC is a stepping stone for university/college students to get involved in doing serious contribution to open source projects and writing quality production code which are used by millions of people. It kind of changed my life too. I learnt an amazing array of stuffs and could write code which I had never imagined. I worked hard and studied on my own. College didn’t teach me anything that’s actually used there in the industry! In the meantime, I also learnt and used a number of web technologies and new programming languages. I never stopped learning something new as there are always better & cool things that I don’t know and I wish I had known them a little earlier.
In first two months of this year (2012), two of my friends and me hacked on together and created a learning platform mycareerstack.com for preparation for technical interview questions. We worked in the classes, in between the classes and whenever we got some time from quizzes, assignments and exams. Today it has over 100,000 page views and its ever increasing. Now that’s something I am really proud of. Last month, I applied again in GSoC for the project ‘Port GNU Compiler Collection to HelenOS’ and fortunately I got selected again. I will be working over this in the summer for most of the days.
But all this doesn’t mean that I have forgot all the data structures and algorithms I learnt two years ago. I use them and learn new ones even now, but not for submitting solutions on spoj but for real life applications. I use them when I have to parse a large file to find a matching string. I use them when I have to index a huge amount of data to make their access speed faster. I use them when I am shifting bits to make the code run faster. But only if this solves some purpose in the world, at least in my eye! In December 2011, I participated in ACM ICPC South Asia Regional Finals and my team got 6th rank. I also didn’t stop reading books just because I was enjoying coding. I read The C++ Programming Language,Beautiful CodeProgramming PearlsUnix Programming EnvironmentAdvanced Programming in Unix EnvironmentUnix Network Programming: Sockets Networking API,Unix Network Programming: Interprocess Communications and a bunch of fiction & nonfiction novels too. I used Linux for all of my work. I learnt Python, Javascript, jQuery, Node.js, Django and did good amount of programming using them. But C still stands as my favorite language. Nothing is more beautiful than it IMHO; you can do whatever you want so elegantly that it mesmerizes me. I learnt to use GDB to debug code intelligently and now use it almost daily to debug my code rather than the way I used to debug two years ago by inserting printf statements. I know its embarrassing!  I wrote a lot of shell scripts to make my day to day work easier. I learnt Git and have been using it for two years now and life has never been so easier for me. I learnt a lot of other things too but I forget them like dust in the wind if I don’t use them to do or solve anything!
I could have spent my entire college period continuing to do what I was doing two years ago. But I chose a new path. And I am happy today! This would have been certainly not possible if there were no free software and no open source projects in the world. They have influenced my life to the greatest extent possible.
I also enjoyed my life in college and went to a lot of places. I played hockey in my freshman year and have been playing Table Tennis almost regularly after that. I made some amazing friends. I was part of an awesome group IMG, where I first learnt programming and with whom I went on some of the wildest trips and hiking. I also went to rock climbing training camp. But these are another stories and would fill two or three pages at least! :)