2021 Rewind: A Lawyer Becoming a Software Developer
As 2021 comes to an end, it is a good time for reflection. I began this year as a bankruptcy lawyer; I am ending the year, convinced that I want to be a back-end software developer. Here’s a short story of how this dramatic shift came to being.
Act I: The Decision
March, 2021: I’ve worked as a lawyer for three years. In the last 2.5 years, I have worked with one of India’s leading legal think tanks. As a research fellow, I have the unique and exciting opportunity to research on modernizing India’s brankruptcy legal framework. I had co-authored a report in 2020, making a proposal to introduce a hybrid corporate insolvency mechanism in India. This year, this proposal is taken up by the Government of India, which legislates an important amendment, to introduce this hybrid framework for corporate debtors. The Insolvency Law Committee, which officially recommends this framework, acknowledges every member of our team, for our inputs to the Committee.
Doing original research, quoting international best practices, advising the Government on polciy reforms. This is my day job; and I love every bit of it. But working on so many fronts simultaneously also means that there is little time on my hand, to pursue anything else. I have always wanted to write my own novel, build something on my own, collaborate with people to solve real world problems, participate in public demonstrations related to causes that deeply affect me. I cannot find time to do any of this. Also—as my parents would complain everytime I would visit home—I often fail to take care good care of my health.
June-July 2021: Now that the amendment bill is legislated, there is some time on my hand, to reflect on things. I realise that I would love to take some time out to try out new things. After speaking with my superior, I decide to take a sabbatical, and do things I wouldn’t have the time to do otherwise.
My elder brother is a software engineer; so, he nudges me to try programming as a hobby, during this spare time. I spend much of my free time, completing simple exercises on FreeCodeCamp. I get hooked to these exercises. I feel a certain ‘runner’s high’ writing a few lines of code to solve the problems prompted by FreeCodeCamp.
Act II: The Deep Dive
While learning everything on my own, I realise I do not have any peer to discuss them with. So, I decide to follow the Feynman technique of learning new concepts by writing about them, in my own words. The initial posts turn out to be verbose, long-winding and informal. It doesn’t matter: it is just an attempt to teach myself new topics, by having a conversation with myself.
Sometime during mid-August, I decide to start my first project: Crisp, a tiny Lisp interpreter. I encounter many firsts. Learning to write code in different modules. Understanding how npm packages work. Using stack to evaluate lisp expressions. But the biggest win? The sheer joy of building something on your own!
September-October, 2021: Sometime between finishing Crisp and starting my next one, I watch this video on Youtube. It mentions the Recurse Center. I learn that the Recurse Center is a “self-directed, community-driven educational retreat for programmers based in New York”. I realise that being a part of the Recurse Center would be the perfect boost to my learning journey. It promotes self-learning, while also providing a cohort of peers to collaborate and network with. I decide that I would apply for the Winter batch of the Recurse Center.
In the mean time, I decide to work on my second project. This time it will be a Twitter Bot. Inspired from the Planet Clojure, it will tweet new blog posts published by a given set of blogs. I learn to work with several new technologies: using a relational database to maintain the state of the application, accessing a third-party application’s API, parsing XML feeds, deploying on Heroku.
Also, during this period, I write the following posts:
- Cardimom: A Twitter Bot: I write about how I built Cardimom, the Twitter Bot that tweets new blog posts published by select blogs
- Cardimom: Using Heroku Scheduler to Initiate Triggers: I write about how I used Heroku Scheduler to initiate the Cardimom app periodically
- Event and Processing Time Semantics in Blog Aggregators: I write about how shifted from using a system-wide cursor to several blog-level cursors to determine if a post is a ‘new post’. I also discuss about event time, processing time, and out-of-order events.
- Hash Tables from Ground Up: I write about key-value stores in general and hash-tables, in particular.
- My First npm Package: I write about how I published my first npm package
- Finding the Lexicographically Next Permutation: My solution to a LeetCode problem that I found interesting: rearranging an array to find the “lexicographically next greater permutation of numbers”.
Act III: Going for the Kill
Also, I decide that it is time to apply for the Recurse Center. I spend some time answering the four main questions they have on their application form:
- What is the most fascinating thing you’ve learned in the past month: I write about a concept called ‘Prospect Theory’. I had read about while reading Richard Thaler’s book, “Misbehaving: The Making of Behavioral Economics”.
- What do you want to be doing in two years: In short, work as a back-end developer in an organisation that promotes learning.
- Why do you want to attend RC: I have a lot to say for this one; but there is a word limit. I mention how as a self-learner, I am well-suited to be a part of the cohort. I also mention about my curiosity to learn new concepts (especially in the recent past) and how being part of a community of programmers will broaden my horizon as a programmer
- What would you like to work on at RC: I mention my long-term wish to learn Clojure. I also state my intent to learn about distributed systems, and to improve my Lisp interpreter.
During this month, I publish the following posts:
- 12 Things to Know About HTTP: Before embarking on Twirl, I read up on HTTP. This post is a summary of my learnings on HTTP.
- Diwali Hack Week: Daily log I maintained while building Twirl (URL shorening app)
- Twirl: User Management: First of a three part series on Twirl, I write about the system design of Twirl and the user sign-in and sign-up flow
- Search Relevance Using BM25 Algorithm: I write about the BM25 algorithm, and host an in-browser demonstration of my implementation of BM25
December, 2021: I begin this month, with a mail from the Recurse Center: they liked my written application and would like to have a conversational interview with me.
This is the first of two rounds of interviews. During this interview, the interviewer, a former Recurser, asks me a few questions. She asks me about a project I would like to work on during my time at the Recurse Center and why I wanted to join the RC. She also asks me about a bug I recently fixed. The interview goes really well; the interviewer is extremely polite and patient during our conversation.
I wake the next morning, to find that I am selected for the next and final interview. This time, it will be a pairing interview. I submitted a simple code from one of the tasks suggested on their website(GitHub Gist). I pair with another RC alum and we have a lot of fun, as I try to explain my code and build on top of it. 30 minutes go by in no time and I wish we didn’t have to stop so soon.
Three days later, I learn that I am in! My batch will start on the 3rd of January. I am elated, excited and pleasantly surprised!
Apart from spending my time preparing for the RC interviews, I spend my time learning how OAuth works and build a toy project that uses Google’s OAuth 2.0 framework to log-in users. I also deploy this toy project on Google Compute Engine.
Here’s the list of posts I publish this month:
- Defence Against the Dark Arts: How to Store Passwords Securely: Part 2 of the three part series on Twirl (URL shortening app). In this post, I deep-dive on how (and how not to) store passwords.
- Short, Unique, & Unguessable: Generating Short Links in Twirl: Part 3 of the three part series on Twirl. I discuss the business logic used in Twirl to generate short links
- Reliability, Scalability and Maintainability: My rough notes, on Chapter 1 of ‘Designing Data-Intensive Applications’ by Martin Kleppmann
- For Your Eyes Only: Authentication using OAuth 2.0: A deep-dive into how Auth 2.0 works and my own experience building a toy project that uses Google’s OAuth framework.
- How to Deploy an App Using Google Compute Engine: I lay down the steps I had to follow to deploy my toy project (implementing Google’s OAuth framework), to Google Compute Engine.
I am glad 2021 happened. It gave me an opportunity to explore new avenues, try out new skills and the courage to stick on! I hope 2022 offers even more such opportunities!
Here’s a Twitter thread on some of my favourite posts published this year:
#2021 marked a number of firsts. For each milestone in my journey into Computer Science, I left breadcrumbs in the form of blog posts— Otee (@oteecodes) December 31, 2021
38 posts and counting!🤩
1/15#CodeNewbie #100DaysOfCode #nodejs#programming #DEVCommunity #webdeveloper #code #clojure #vscode