On my most effective mode of learning
I was recently asked how I learnt most of what I learnt. I thought about it for a while and presented the following answer, which I think has had the maximum impact on my career. I continue to use those practices to date.
In university, I would be presented with a great deal of luck. I was alotted the roll number 86. In our first two years, we were to be seated in classrooms per our roll numbers. For the first several weeks, the seat next to me would remain empty. Roll number 85. "Such a spoilt brat", I would think -- not showing up to classes right from day one.
Few weeks passed, and finally the dude shows up. I asked him why he wasn't attending classes for so long. He said he was in Canada representing India at the international olympiad of informatics, IOI. IOI was the olympics of computer programming in high school. I had heard of it, but in my high school I had little or no exposure to any competitive programming. Immediately my perception of him changed. Anish Shankar.
Many of the courses needed us to do projects in groups. These groups would usually be created as per roll numbers. So, there were a lot of projects Anish and I ended up doing together. He was obviously sharp and humble. I had immediate affinity to his sharpness. I suspect he didn't think the same way about me. Atleast not for the next couple years. He lived in a different wing, and would hang with peers who also indulged in competitive programming. Not me. In my first year, I would start trying my hand at competitive programming too; with the sole purpose of breaking into this group of peers who I saw as superior. In my eyes, they were the cool kids. Most others would have used the word "nerdy", but I found them cool. Their discussions were always intellectual. I always, always learnt something by just being in the same room. So, I figured I need to make my way into those discussions more and more. I was driven by the sheer enjoyment i drove from those conversations, nothing else. But soon realized I didn't enjoy competitive programming very much. I wasn't any good either.
So, now I needed a different strategy. Over the latter part of the first year, I would get exposed to open source software. I had been using Linux for a long time at this point, but I didn't know I could contribute to making it better. I started contributing to some Linux projects and finally found my footing with Mozilla. I started contributing passionately. Slowly, I got very good at building stuff. Over that summer, in 2010, I watched the live stream of Google IO. This was a turning point. There I saw multiple presentations about Android and how one could build apps for Android. I did not have an Android phone or money to buy one. When I went back to college for my second year, on the first evening one of my friends calls me to come to the ground floor. I see a huge crowd assembled there. One guy in the hostel had bought an Android phone over the summer. I couldn't believe it. It looked stunning, but more importantly I had watched a lot of videos on things this machine was capable of doing. I realized for the first time, the latest greatest technology of today was within arms length. I immediately ran back to my room and installed Android Studio. I was in love with building new apps. Over the course of the second year, I would build many websites and apps - playing around with many new technologies. Taught myself PHP and Javascript for webapps and Java for Android apps. I had now built for myself a little framework so I was able to churn out apps and websites within hours. I launched multiple apps and some of them ended up getting tens thousands of downloads. It was a very powerful feeling. I would do anything to make better and more interesting apps. I would spend hours watching all of Google IO videos, trying to hack together something cool.
The reason I digressed, is this love for hacking and building would come to my great advantage. Through second year, Anish and I would continue to do many projects together. I had a simple bait for him to pick me as a project partner. He would enjoy writing all the business logic, obsessing over the cleverest way to do something, optimizing the last millisecond, the last byte of storage. I would watch him do this with a chair pulled up behind his. It was very artistic. I would volunteer to package whatever he wrote into a usable app, obsessing over UX. The results were often stunning.
In my third year, I would have another stroke of luck with Anish. He was a competitive programmer and represented the country in ACM ICPC. ICPC was the most prestigious college programming competition. But any student is allowed to represent the country only twice on behalf of a college. Anish did so in his first two years itself. So he had lesser motivation for competitive programming and started looking for other ways to stimulate his intellect. He took to building too. By this time,I was a good builder and had built some credibility for it.
I would now be spending most of my time in his room hacking and building together. But now I had a clear strategy. I would copy the fuck out of whatever he was doing. Purely because almost everything he did was fascinating. I would just sit there and copy. I would install the same operating system , Arch Linux. I would install the same themes on XFCE. He bought a router, I bought the same one. He programmed the lights on his router to show time in binary, I would do the same. Ofcourse, I would never tell him to what extent i was copying. I never had access to the code he wrote. So I was always writing the code myself. My test was, if what i built as good as his. I cannot overestimate how much I learnt in this period of copying.
We ended up building many cool stuff together. Notably we reverse engineered the DC++ protocol and built an android client for it. Doing this kind of crazy stuff for months at length with the smartest people I knew, put me in the loop with even more smart people. My learning would grow exponentially. But more importantly my confidence in being able to learn the necessary skills on the go.
Looking back there were two things that really accelerate my learning. The first was to build. But more generally, work on things that really piqued my curiousity. It may or may not have a definitive goal, but it's just interesting. Till date, I try to build stuff on my off time and learn about new technologies that have no impact on my day job. Many of the stuff i build, never gets published publicly. Many of the programming languages i've learnt, I've never used again. But it was fun. Similarly, I write often, and read a lot on how to improve my writing. I learn about how the greats wrote, analyse their writings and take notes -- Benjamin Franklin for his casual yet impactful style, Abraham Lincon on the choice of his phrases to motivate troops. Again, this has no bearing on my day job. I lose absolutely nothing if i write boring blogs. Will improving my writing or writing learning an obscure programming language help me in any way? It's hard to put a finger on something and say this is how. But I think the curiousity keeps me at learning. And every week I'm learning something new. So I'm just revising how to learn and make that a habit. All this while just persuing my curiousity.
The second thing that really helped is to identify the folks who do something well and copy the shit out of them. There would have been no way I would have learnt about the depths of software engineering if I wasn't copying Anish. He was just miles ahead of me. Copying was and continues to be my shortcut to get past all the lost years. It holds even today. When I need to write a memo, I copy paste a template from Sriram K's collection of memos -- that includes memos from Bill Gates, Steve Jobs, Mark Zuckerberg. I copy the shit out of the memos. In writing the content that I want to, I'm forced to adjust the style. That becomes my style, without me even trying. It takes a certain attitude to not feel overwhelmed by competence of others who came before us, or cut through the imposter syndrome and copy for the sake of efficiency of learning.
I thought long and hard about how I really learn, there isn't a third on the list -- atleast, not one that gets close to the impact these two have had.