How I Started Coding
How I got into coding
I thought it would be neat to explain how I ended up where I am now, interning at Amazon and super involved in CS-related extracurriculars at UCI.
Before 2017
My first experience with code was the hour of code in middle school, which wasn’t strictly coding since it was blocks, and I wasn’t that interested in it so I just did the activities really quick and never gave it a second thought. At that point in my life I didn’t think I wanted to be a coder, although I do distinctly remember in elementary school saying I just wanted to be an office worker since it sounded safer and easier than other jobs young boys usually say like firefighter or astronaut, so I guess that early prediction rang true.
I first touched actual text-based coding for the first time while playing a video game called Garry’s Mod, which is a first-person shooter with building mechanics that’s highly extensible, so people use it to create minigames and interesting contraptions or to play said minigames like death run or Trouble in Terrorist Town (which was basically Among Us before it was mainstream). One of the plugins on one of the servers I played on let you control in-game objects programmatically with a scripting language called e2, so I tried learning it to make cooler stuff in-game. One of the first confusing moments I remember hitting was watching a tutorial and having no idea what a “string” was and picturing a physical string like a shoelace or hair and being really confused to what that had to do with a variable that holds text. I think I build a vending machine or something, relying heavily on copy-pasting code (true programmer moment), and then I got kinda bored of it.
My final experience with programming before high school was when my uncle got me a raspberry pi for christmas since I was generally into technology and I tried learning how to program it with help from my dad. It was confusing because you have to write to serial ports in an array to output stuff on the pi framework we were using in C, and my dad was using bitmasks with hex numbers in his code, which of course I had no idea about back then and can only identify and make sense of in retrospect. So, that was pretty discouraging, but I decided to sign up for an intro programming class my freshman year of high school with all my friends, and I would mark that class as my first real formative programming moment.
2017 - 2018
The thing about taking my first programming class in high school was that it was the first time I got really into self-teaching. I had ideas about how to extend the functionality of some of the basic programs we were writing, so looked up more language tutorials on my own time to get ahead and satisfy my curiousity. I also got into making physics simulations, and made a simple 2d bouncing ball program, which I thought was fascinating. I took AP Computer Science the year after that to continue learning, and at that point my friend Logan and I also both got interested in 3d graphics from scratch, and I remember doing like 3 pages of math in a notebook just to get a cube to spin on one axis on screen. I didn’t get any further than that, but Logan ended up making an entire 3d shooter for his final project in that class which I found impressive. I still haven’t learned the math to do generalizable 3d perspective transformations and it’s looking unlikely that I’ll find the motivation at this point since it’s something pretty esoteric to learn. That same year I also wrote a mandelbrot simulator with zoom capability, which I remember well because I got to show it off in class and it got me pretty hyped. I also won a little astronaut USB light out of a class competition we had as to who could get the best performance on the Netflix Prize dataset, which also boosted my confidence. So at that point, I was pretty good at writing basic Java code to do stuff with Processing GUIs but not much else.
2019
This was a major formative year: it was my first experience with hackathons, which really broadened my view of what people actually used coding for. I think I’m really luck I didn’t start a year later, because without in-person hackathons I don’t think I would’ve improved nearly as fast.
At my first hackathon, since we didn’t know how to do anything else, my friends I went with and I made another Java game, which was hard because we wrote the collision mechanics and tilemap system from scratch, but ultimately didn’t teach us many new things. After seeing the winning submissions, which all involved websites, I decided that I would try to pick up that skill.
My first experience with web development was coming to a few of my high school’s programming workshops about the subject, where I learned a little about PHP. I ended up writing a basic layout in PHP but never followed up with anything because of the barrier to actually running PHP code, where you need to install and run a compatible web server, which was too complicated seeming for me.
After those few workshops I attended my second hackathon, which I went to alone and paired up with strangers from another school in the district who were also taking APCS at the time. This is where I had the idea of making a website where you could put in your spotify playlist and download all the songs for free as MP3s, even if you didn’t have premium. So, the first thing I did was look up, “how to make a website in Java”, not knowing that adding “in Java” was a huge handicap. I installed Apache Tomcat and monkeyed around with that a bit but it seemed too complicated so my team just made a desktop GUI application instead, and it wasn’t a total loss since I learned about web scraping, which gave me a little peek into how websites actually work, although at that point I think my mental model of the web wasn’t very clear.
The real breakthrough moment for me was my third hackathon, where I was paired with teammates who knew more than I did, specifically about web development. This was where I downloaded VSCode and wrote JavaScript for the first time, and I would say where it became easy for me to work on websites because I realized you could just write an HTML file and open it locally on your browser. Being paired with people who knew more than me was a massive asset for my early-stage learning, and ironically my teammates were 1 and 2 years younger than I was. Two of them were 8th graders attending a high school hackathon, which is really impressive. Thanks Neel, Ethan, and Manav for teaching me the right way to do web dev. This was also huge because JavaScript was the second language I really learned (E2 and PHP don’t count, didn’t really understand them)
In between hackathons at this point I started working on a Chrome Extension now that I knew JavaScript. I still had no idea what I was doing, because my extension needed to make HTTP requests and I ended up using JQuery and for a while thought AJAX was a relevant concept for the modern web. Now that I know about the JS fetch
API and document.querySelector
, I want to erase all traces of JQuery from the internet so no other new devs stumble into using it when there are simpler ways to do things.
At my fourth hackathon, I just randomly approached some strangers and teamed up with them and they also happened to know way more about web dev than I did. This was where I first wrote client-side code that fethced from an API. Then, at my fifth hackathon, I referred to my teammates code from the previous one to write my own backend in NodeJS, and that’s where the client/server web model and HTTP request finally clicked for me.
2020
This was also a major formative year. I had roughly 1110 commits on GitHub this year, which is excluding the few months where I was using GitHub to backup the Minecraft server I was running with my friends.
I started the year in coding by trying to write the spotify downloader thing as a real website instead of Java desktop application. I realized it would be easier to just convert to a YouTube playlist and then let users plug that into a YouTube to MP3 service externally, so I narrowed the scope. The project started with me pasting in authentication boilerplate code from the Spotify API and Google APIs and somehow fumbling it together to create a working prototype, then designing a nicer UI in Google Drawings and writing it with vanilla JS and CSS. You could see my excitement in commit messages like “YOUTUBE AUTH WORKS!!!!”. Going back through the commits I’m pleasantly surprised with how clean my git hygeine was then. Without going too much into the details of the project, I learned OAauth, cookies, deployments on Heroku, and making external API calls.
After that I also wrote my own implementation of an HTTP server in Java just using the standard lib websockets, which made everything really click when I realized HTTP was just the format of data you send through a datastream from a client to a port on the server where an application is running. In that same project I realized that using document.querySelector(...).innerHTML+=
was not a sustainable way of dynamically adding elements to a webpage since half my HTML was in strings and couldn’t be validated by my IDE, so I picked up React. On a side note, I feel like this was the best possible way to learn React, by just fumbling around with vanilla JS until your project gets complicated enough that you need to use a framework and see why they’re useful. It teaches you the line between that framework and the underlying language and system and when/why the extra complexity is useful.
That summer, I decided to run a Minecraft server to play with my friends. At first I explored hosting the server on the cloud for free. The best provider I could find at the time was RedHat OpenShift Online, which provided the most RAM in their free-no-credit-card tier out of the options I looked at. The only problem was, that service is made for enterprise, so it only runs Kubernetes, so I had to learn about Docker and Kubernetes just to figure out what the hell was going on, and finally ended up giving up.
Instead, I decided to run it locally on an old computer my family had in the garage. I found out that Windows XP (yes, the computer was that old) limited the amount of RAM you could allocate to a single process, so I installed Ubuntu Server on the machine. The “Server” part means that it doesn’t have a GUI, and I installed it because I thought having the GUI would slow down the server, so I got pretty familiar with Linux commands through installing plugins and setting up backups for the server entirely through the terminal over SSH from my PC.
That was the summer between Junior and Senior year of high school, and at that point I started worrying about college applications, and I was aiming for the top schools in the country, so I felt like I had to accomplish something material with all my built up programming skills to put on my college applications. So, I signed myself up for the Congressional App Challenge in the middle of the summer, and the deadline was in the fall. It’s basically like a really long hackathon where one winner is picked per congressional district. My idea for the challenge was a website that could take a video, generate captions with timestamps, and let you cut and rearrange the video to make the subject say funny things. It was a pretty interesting technical challenge for me and I could use it to make funny memes, so I thought it was the perfect project. I completed a prototype (working but shitty UI) a few weeks before the deadline, but at that point I realized it would probablty make for a terrible submission since it didn’t solve a real problem people have. So, what did I do? Go back to the drawing board with a few weeks to spare, while also making myself do college applications (I ended up doing ~20 total over the course of first semester).
My brilliant idea for winning the app challenge was a website you could leave open in a tab in the background on your browser that would watch you through your webcam, identify when you’re slouching, and play an audio cue to sit up straight. The hard part here was “identify when you’re slouching”, and my solution was using machine learning, which I had learned about through YouTube videos but never coded before. I followed a tutorial for writing a convolutional neural net in Python and made a dataset of images of myself to train it on, and over the course of a week hacked together a solution that actually worked, albeit only when I was wearing the same clothes, at the same camera angle and same lighting as in the training dataset. I made my video demo and submitted, eagerly waiting for the results, and….. didn’t win 😐. The winning project was an app whose purpose was to easily record and livestream video of cops pulling you over to prevent police violence. I won’t make any judgement on which idea I think was better, but I will say that a real startup had the same idea as I did and decided it’s useful enough to charge $24 a year for 😏.
The real win from the app challenge was the fact that the project was outside of my comfort zone: half of it was in Python and using Machine Learning, and after that I realized that I understood programming well enough to learn a new language or technology on the fly on my own, which hugely boosted my confidence.