My project team is making considerable progress on our replica version of Atari Breakout. We have all of the major features of the game built and implementable (i.e., paddles, balls, bricks, levels, menus, scoring, etc.), but just when things are going well, we encounter the dreaded “bugs.” This is the first time that I have ever worked on developing a game (excluding command line games). Most of my work in my day-to-day job revolves around numerical/scientific computing, which tends to lend itself to automated testing and benchmarking. One thing that I did not fully appreciate when embarking on this project was the level of manual testing that is required. Oh…the ball can get stuck between rows of bricks and never return to the paddle? How do we deal with that? Oh…the ball can actually hit two bricks at the same time? How do we deal with that? The list goes on and on, and it feels that every time we test the game we face the main tradeoff of: is this not really a big deal and we can just leave it in the game vs. how should we modify the parameters/objects to fix this bug? This has led me down the rabbit hole of researching the most popular games and the “bugs” that the developers intentionally left in the game (and wow, there are a lot).
Despite the roadblock that manual testing and bug fixes have presented, the biggest silver lining that we have found lately is the incredible developer community and the tools that are available. Whether in this OSU program or my day-to-day job, I have not utilized many outside tools in my programming excluding certain ubiquitous packages (e.g., Numpy, Scipy, etc.). On that note, I have been absolutely blown away by the ease in which SDKs are integrated within Unity. The ML Agents toolkit is amazing and it makes the neural net development process a million times easier. Moreover, the developer community and various online tutorials allow for someone who is new to neural nets to pick up the basics and train an “agent” in Unity within just a couple hours.
So why did I choose to write about these two concepts? Much of this has to do with a lot of the discussions going on in the CS world right now (see you later web3?): AI & LLMs. If one were to take recent announcements and media proclamations at face value, it would appear that every single industry (including CS) is about to be irreversible disrupted. From my seat, however, it seems that the timeline for replacing software engineers may need to be measured in decades rather than years (thanks bugs!), but the tools that will be at our disposable will massively improve productivity, efficiency, and the broaden the range of possibilities to be nearly unbound. With ML Agents being my first real foray into this world of tools…I am excited to explore others and enter the 10x engineer threshold 🙂