I’m still getting back into the hang of writing for fun after the last few semesters at Georgia Tech wrung me dry with paper after paper painstakingly filled with Matplotlib charts and LaTeX. The first two semesters were more of a programmer’s dream of building FTP servers, implementing MapReduce with gRPC, diving deeply into architecture, and dipping my toe into artificial intelligence.
Once the rubber met the road and my brain turned toward the machine learning curriculum, all bets were off. ISYE 6420 (Bayesian Stats) served as a brutal reminder that my algebra and calculus were not up to snuff, requiring more than one weekend doing nothing but going through a Coursera course or two while making precious little progress against any homework. CS 6601 (Artificial Intelligence) provided some heady moments of implementing Tri A*-search and the Viterbi algorithm, but brought reality crashing down with a 50 page midterm and an equally long final. Meanwhile, CS 7641 (Machine Learning), pushed me further than I thought possible with 4 projects, each requiring a rather large program to support a paper of 10-15 pages. And I’m still not recovered from CS 6476 (Computer Vision).
In September, after brute forcing my way through Graduate Algorithms, I finally got my head out of a book, only to buy a house and move out of the Seattle area (hello, Woodinville!). Now that we’re settled in and I’ve hammered away at job applications for a month, it feels like a good time to step back and reflect on the past two years.
When I left LexBlog and started school (again), it was because my brain was not yet fully satisfied. It felt like my limits were not tested, and there was still so much to learn. In hindsight, some of this is just my personality. My nature is to feel unsatisfied. A helpful feeling, but also one to watch closely, lest it be the dominant narrative in your brain.
That said, I did learn an immense amount. The computing systems courses that I took gave me an appreciation of the interplay between hardware and software. The primitives (threads, mutexes, semaphores, buffers, queues, etc.) we use to build more complex systems and take advantage of these blazingly fast machines. How we take these primitives and extend them as we manage communication between distributed systems. Walking through backpropagation in a neural network by hand made me a better mathematician, but I firmly believe that it was my computing systems courses that made me a better engineer.
Now that I’m firmly in the job search, it feels somewhat anticlimactic, which is the danger of always being unsatisfied. Where next? What next? I’m not quite sure what that will look like yet (although I’m getting a notion as I go through the job hunting process), but I do know that wherever I go, all of this knowledge is going to come along for the ride.