20 years into programming — My story with computers
Around this time in 2004, I wrote my first computer program. What followed was a roller coaster ride where computers and programming languages remained the most important aspect of my life. This post is my story, how a 13 year “enthusiast” evolved into a full-time Software Engineer at Amazon.
Introduction to computers
As with most kids in India, the first time I saw a computer was in a movie. It was a Malayalam movie that goes with the name “Indraprastham”, where the protagonist is an expert computer scientist who uses his expertise in developing software for NASA to solve a murder mystery. From that moment, my biggest dream as a 6–7 year old kid was to own a computer and do all the crazy stuff it can do.
My mother was a teacher in a government school, and I used to visit her school frequently. To keep me engaged, the staff there used to let me in the computer lab where they had the vintage DOS-based computers that relied on huge floppy disks for running. From the contract staff employed at the lab, a 10-year-old me learned a couple of DOS commands, including del *.*
which came handy in the years to come. 😜
After years of wanting, my father got us a computer in 2001 after he watched a power point presentation at a work conference, and perhaps thought computer would aid me and my brother in our studies, by making concepts simpler to understand. For the years to come, all I did was tinkering with it and breaking it several times, such that the computer technician became our family friend. This break-and-learn continued till I had to leave for a residential school.
The first program
My first program was a BASIC script to draw some shapes, which my mother — who became in-charge of IT at her school — taught me when I came home for Onam vacation from my residential school. She demonstrated drawing simple shapes to much convoluted patterns to me and my brother. At that moment, I knew it as a script to draw shapes alone, but being able to ask the computer to draw (instead of doing it myself in MS Paint) was indeed a curious bit. Coincidentally in a few months later, I came across Visual Basic, and this small incident ignited the learning journey.
Introduction to Visual Basic
In the year 2004, I represented my school in the Navodaya regional science exhibition in Hyderabad, when I was in my 8th grade. There I met a senior student who showed me the application he developed using Visual Basic, which was there in the IT curriculum in the 11th grade. When I was back at school, I requested my CS teacher to teach me VB, but he refused citing that I was too young to learn programming. That did not hold me back, I stole an old IT book for 11th class and started learning VB myself — it was actually not so hard!
This is really where the story begins. I knew the IT labs had VB installed, so I decided to try whatever I learnt. I built a very basic UI application where there was a text box where one could enter their name, press a button and the application would greet “Hello <name>, you’re the best!”. This caught the eye of my CS teacher and he decided to finally gave in to my demand to teach me VB.Net. From there on, he started giving me small tasks — I was supposed to figure out by myself (mostly tinkering with the intellisense) and solve the tasks. As I started getting familiar, I started gaining more confidence as well.
Mastering VB6 by Evangelos Petroutsos
Using whatever amount I collected during the Vishu in 2005 and some part funded by my father, I got a book “Mastering VB6 by Evangelos Petroutsos”. This was the book that changed my life forever. I got to learn about enterprise applications, connecting databases to VB applications, and certain advanced concepts too. I started building hobby applications on a daily basis. By the time I reached 11th grade, I could build practical desktop applications, and I made some cash selling applications to hide personal files, contact keepers, and personal finance applications. I could also build a school management application that did the stock-keeping of several consumables at the school and library management.
In 2007, I saw my father who was a senior officer in the Kerala Government struggling to create office documents in Malayalam. He like many others in the service, was not versed with Malayalam Typing popular back then and had to keep searching for the letters in an unordered virtual keyboard. I could build a word processor system which provided a neatly ordered virtual keyboard, and a few fancy features like templates. That software quickly became popular within the close circles on my family and teachers.
The engineering mistake
When it was time to pick my engineering major (engineering was an obvious choice for me), I decided to pick Electronics & Communication Engineering, although I could have secured admission at a much better college if I opted for CS. My naive thought was that I already mastered concepts of CS and if I learn electronics well, I could finally build my own computers. This was only to realise that there were very few in our batch at the end of the course who could even build simple transistor radios. This choice was perhaps the biggest blunder of my life.
I, however, continued to horn by CS skills during engineering. Most of my friends were from the CS department, and we did great deeds together. We attended numerous tech events and hackathons in-person throughout Kerala and Bangalore, and developed inventory applications for local medical stores, businesses and for the college events. This way, I could make some pocket money too. When VB6 was outdated in favour of .NET, I was quick to adapt to VB.NET as well, and had a licensed Visual Studio for the projects. I was however stuck with desktop applications, and never bothered to dive into web applications space, which was fast emerging back then.
TCS and TCS Research
Like many others in my college, I got campus placement and ended up at the TCS training centre in Trivandrum, where I got introduced to web application development using Java. I could quickly adapt to the nuances of web applications, given my familiarity with programming core concepts. When I topped the class, I was initially offered a role as a faculty assistant at the training centre and subsequently absorbed to TCS R&D at the prestigious TATA Research Development & Design Centre, Pune.
TCS Research provided ample opportunities to think out of the box, and design complex systems. The technological exposure was very low and outdated as the tools and technologies used for building applications were too outdated. No one I knew in 2018 talked about Docker, Spring, Kafka and AWS, although those were quite popular in the industry. However, the solutions we built were very unconventional and required focused mind exercises. In hindsight, this lack of technological exposure helped me find solutions to tricky problems in a time-bound way.
Time was of abundance at TCS Research. In my personal capacity, I learnt the basics of several popular frameworks in the industry like NodeJs, React, Angular, Python etc through online tutorials and guide books, although I never got to use most of these at work. I did create some personal automation tools for managing time-consuming workflows at work in a fire-and-forget mode, but those never yielded any professional experience for me.
Swimming into the ocean — Cisco & Amazon
It was in late 2020 that I noticed that my career progression, compensation and learning have hit a plateau, and I decided to start looking out. By early 2021, I got a job at Cisco as a Software Engineer in the Webex, which was the next big milestone for me in terms of my software development career. The learning curve was overwhelming for me and I did struggle a lot catching up on Spring and various CI/CD solutions at use in Cisco. The one year I had at Cisco was the most significant learning period in my life and I could find myself coping well and doing great at work, and started feeling at ease finally.
The comfort was short-lived. Out of nowhere, I got a call from an Amazon recruiter and quite unexpectedly I cleared the interviews as well. I joined Amazon with a huge imposter syndrome and what followed again was a long period of struggles in terms of learning. As it goes in Amazon, every day is day 1 and learning never stops.
Unlike Cisco, where there is a coherent development process (at least within the projects in Webex that I know), Amazon is like a multiverse of software stacks. Not even a month has past in the last 2+ years on my career at Amazon, where I didn’t have to learn anything new — from programming languages and libraries to developer tools like Docker and several command-line utilities the learning was quite intense.
Conclusion
Today, I get to developer very scalable and at times complex systems, inspect recurring problems, troubleshoot customer issues and provide time-bound root-cause-analysis and do much more at one of the most sought-for organisations in the world.
I consider it a chain of luck that landed me in this state, but it was not easy too. From having computers as the only real friends at times to dealing with bad decisions throughout the journey so far, there were several obstacles. Even today, not having a solid foundation in several key CS concepts haunt me. Nevertheless, the learning continues.