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.
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!