Welcome back to the second installment in my series documenting my journey with Rust development. In this post, I will add context to my journey as a software engineer regarding my education, experience, and interests. This way, I can shed light on how I see development, system design, and opportunities where I would like to see Rust work well.
So, hi! I'm Adam Siwiec, 21 years old and a senior studying computer science at Stanford University. I am originally from Rogers, Arkansas, where I grew up running cross country, lawn-mowing, and writing poetry. I grew fond of computers early, whether through playing Battlefield 2 with dad, witnessing my uncle's Flash website, or inspecting the code of Yahoo! Finance's graph to see if I could make my favorite stock (AAPL) go any higher. I quickly grew into an entrepreneurial mind, building websites for my P.E. coach and myself. I started a successful lawn-mowing business that offered me expendable income to build a P.C. ("mom, I will do homework on it too!"). I grew into scripting in my favorite video game (Team Fortress 2) and became interested in game-server hosting and Linux.
Soon enough, I was in high school competing in programming competitions and hackathons, studying Java and C++ in class, and working with NodeJS to host projects at home. I was (and still am) super interested in networking and virtualization, so I invested in an old Dell R610 1U server and an enterprise network card. I built up a home lab from scratch. Starting with a hypervisor, I built up a whole stack of network services ranging from routing my entire home's internet to running the Christmas tree limits from school.
While I love many things outside of tech, for the sake of brevity (and topics for future posts!), I will teleport us to college. My passion for technology fueled my application to Stanford, and it was the paramount moment of my life so far to be able to attend. The access to a top-tier education, uplifting and ferociously curious colleagues that I can call friends, and adjacency to opportunities in industry and research have pushed me to pursue excellence in my craft and help hone what the bleeding edge of technology is. At Stanford, I study systems, ranging from distributed systems, parallel computing, and networking to A.I., blockchain, and cybersecurity. Most of my in-class programming work is in C/C++ and Python. C and C++ were thoroughly drilled into our heads early on to demonstrate fundamentals in a confined, "safe" environment, where as Python has been the primary tool for tackling more abstract, theoretical concepts in higher-level elective classes like CS 246: Mining massive datasets and implementing ray-tracing in C.S.: 148. Working in operating systems and higher-level systems classes has given me experience in exploring Assembly, implementing filesystems and threads, and creating stack-overflow exploits. While truly useful for learning, these projects tended to feel set up and dumbed down to limit time spent setting up and debugging.
On the other hand, I interned with a tech company every summer between high school and now, giving me a much more creative and open-ended way of pursuing software development. My first job was at J.B. Hunt, a Fortune 500 logistics company, where I helped build out a mobile app for their truck drivers to help automate logistics paperwork using geofencing, chatbots, and a voice assistant inside of React Native. The following year, I worked on modernizing an order and load processing system that scheduled tens of thousands of truckloads moving across the country daily, streaming data from multiple microservices to feed an Elasticsearch cache for faster order lookup, all in Java and Spring. During my sophomore and junior summers, I worked at NVIDIA, where I helped build projects inside of NGC (Nvidia GPU Cloud), a competitor to AWS/Azure in providing compute to companies and scientists needing enterprise A.I. infrastructure. Here I also got the full-blown Java experience, helping write and deploy microservices in Spring, but I also got an exceptional experience in testing, deploying to production with service-level dependencies, and business development. All these enterprise experiences helped me employ the sys-admin'y skills I've kept within the basement walls.
The combination of the two sides of my experiences in school and at work have led to that itch I mentioned in Week 1: I wanted to find a middle ground where I could build interesting and practical tools from scratch but without the low-level complexity, age-old idioms, and the slow-paced development lifecycles of the traditional languages I am learning at school. Rust, are you love at first sight?