I will be the first to admit that I absolutely despise the state of higher education. The concept is fundamentally flawed, and I am not thrilled to have spent 3 years (and only 3, thankfully) working towards a piece of paper that “proves my skills”. In my opinion, it does not do that in most cases. I can learn more material, more relevant material and learn it faster on my own. Services like Treehouse, Codecademy, even Googling and stack overflow are doing great things. Everything I use on a daily basis has been essentially self-taught, with the exceptional skill having been augmented by a university course.
While programming an embedded system the past couple of weeks for a competition, I have been going back and forth with my partner iterating over different hardware and software designs. We were able to quickly code our bot to perform the prescribed activity flawlessly, and that’s when we started experimenting, trying to build robustness into our system. Could we randomly pick up the bot and have it reliable find its way back to its side of the field? Could it handle getting unstuck from a situation? Could it reliably collide with a competitor’s bot and still get back to its objectives? As our exception cases grew, so did the code base. Maintenance got harder and dependencies grew.
Late last night, it struck me- This was the perfect case for applying the concept of a Finite State Machine (FSM). There are only so many states our bot could be in over the course of play, and only certain states can lead to other states. Our code went from an organized plate of spaghetti that performed reliably (We could get a perfect run every time, barring extreme edge cases, false sensor readings, and nasty collisions with opposition), to a clean, succinct, incredibly robust system (Github for Code) that handles nearly all edge cases beautifully, even ones we haven’t thought of. We easily won the competition, only losing a single game due to a fluke, every other game was a complete blowout.
I never would have thought of utilizing states or a FSM architecture as an underlying program structure if it wasn’t for computational theory, artificial intelligence, and programming language pragmatics courses I have taken in my CS career. Could I have learned these things on my own? Absolutely. Would I have? Most likely not. How often does that concept come up when you are tossing together a web app? Rarely if ever.
I have come to realize that my degree in terms of evaluating skill is just a flimsy piece of paper that I spent an exorbitant amount of money on, I could have shown projects I have worked on that demonstrated much better what I am capable of. However, in terms of insight and theoretical understanding, it is an invaluable experience; that piece of paper represents to me that CS isn’t just coding (although you should be good at it), it’s coding smarter with a deeper understanding of how to approach a problem at the most basic level. For the first time in three years I have actually thought that maybe it was all worth it.