After dabbling in programming while studying mechanical engineering in college, I committed to learning it more deeply just before the start of the pandemic. I programmed almost entirely in Go for two years, learning fundamentals and backend web development.
I then attended the Fall 2022 batch at the Recurse Center, where I was immersed in an environment with programmers of different skill levels who were all driven by curiosity and a desire to learn and share. I spent the first half of my time there learning JavaScript and TypeScript, working on small web projects, and pairing with others. Throughout my batch, I read through Designing Data-Intensive Applications as part of a weekly reading group. I learned about trade-offs in system design, along with fundamental concepts of distributed systems such as synchronization, replication, consistency, and sharding.
During the second half of my RC batch, I worked on designing and implementing a collaborative text editor called PairPad, along with Aadhav. PairPad uses CRDTs as the underlying data structure to maintain consistency between clients that are simultaneously editing a text document. Building PairPad deepened my understanding of Go’s concurrency primitives. I learned how to structure the program to avoid data races and tested and fixed our implementation of the WOOT algorithm.
After RC, I focused on fundamentals I had previously missed, like algorithms and data structures, regular expressions, and computer architecture. I also started learning Python.
Around this time, I started working on the backend for ProductScope as a freelance developer. ProductScope is a web application designed to help clients market their products on Amazon. I was initially in charge of designing and implementing an image editing pipeline that used generative AI to create product photos. I used AWS Lambda functions, written in Python, to process the image data and make requests to several external AI services.
While I was working on ProductScope, I started helping with the development of ArchiveBox, a powerful tool for creating and managing your own personal archive of the internet. Initially, I helped with bug-fixing, configuration, notifications, and authentication. Later, I focused on contributing more extractors and eventually wrote my own, papers-dl.
Papers-dl is an extractor focused on collecting scientific papers available online, and aims to be performant, general-purpose, and convenient to use. It’s written in Python and uses the asynchronous HTTP library aiohttp to search multiple scientific repositories simultaneously.
In 2024, I gave a talk on papers-dl and ArchiveBox’s extractor architecture at DWeb Camp, a conference run annually by the Internet Archive.
I also rewrote the ArchiveBox browser extension, improving its architecture, design, and cross-browser compatibility, while updating it for Manifest V3.
With more experience behind me, I decided to attend the Recurse Center once again in the summer of 2025, this time in person instead of remotely. During my time there, I focused mainly on creating AutoClad, a project that uses machine learning to train a bot to play the game Slay the Spire, a complex strategy game that has been hard for machine learning to master. I worked on modifying an existing simulator of the game to enable fast training and testing, and setting up a data pipeline for supervised learning, while planning to progress to reinforcement learning.
Alongside AutoClad, I worked through the course Programming Parallel Computers with a weekly study group, learning about performance optimizations, assembly, multithreading, SIMD programming, and CUDA. I also started a weekly interest group on machine learning techniques, exploring different approaches to applying reinforcement learning and other techniques to games.
I’m currently improving my Slay the Spire bot, creating a game written entirely in fragment shaders, and experimenting with several graphical applications made with Zig and Raylib.