Gaming -> Hacking
When I read Birth of a Nerd and Birth of an Operating System from Just for Fun by Linus Torvalds, I couldn’t help but feel like one of those YouTube commenters on a Beatles video saying “I wAS bOrN iN thE WroNG eRa”. Success is a combination of hard work, dedication, and luck. In Linus’ case, he certainly had the first two, and I’d argue that the luck in his case came in the form of the time period in which he began getting involved in computing, as well as being in a position that introduced him to computers at a young age. Linus of course is famous for starting Linux, a revolutionary OS that has withstood the test of time. He began his computing experience with his Grandpa’s desktop machine, and after that introduction he didn’t look back, always wanting to buy a better computer that he could further tinker with and customize. I see a lot of similarities in Linus’ introduction to computing and my own, but at the same time there exist plenty of differences. Like Linus, the first programs I wanted to write were games. All the time I hear computer science students and professionals say that they got their start in programming through gaming. Up until this point, I just figured the reason is that kids see games as something cool, something they want to make, and programming is the way to do so. I think Linus puts it best:
There’s a reason that games are always on the cutting edge, and why they often are the first types of programs that programmers create. Partly it has to do with the fact that some of the smartest programmers out there are fifteen-year-old kids playing around in their rooms.
It’s even how UNIX started out:
Because that was what UNIX started out being developed for—Dennis and Ken’s personal project for playing Space Wars.
I was curious about game development in high school, and the first (very unsuccessful) programs that I tried to write were games. Since learning more programming, I’ve had a bit more success. Two of my favorite “hacking” projects were games - a Flappy Bird Clone I wrote in C++ freshman year and a CLI typeracer I wrote in Go for this course. I can totally understand why games are such a gateway to hacking - there’s something about writing what might as well be arbitrary characters that when passed to an interpreter or compiled show graphical results on screen.
Another big takeaway I had from these readings was the benevolence with which Linus spoke about his contributions to the computing community. I almost feel guilty about taking a FAANG job after reading how he has dedicated his entire life to creating things for free, “just for fun”. I’m jealous of Linus - I too wish to program things that I really enjoy just for fun, but I struggle to get over the presumption that I need a large salary to live a happy life. I worry that working a corporate software engineering job may lead me to burn out and lose interest in CS too quickly:
But also, I simply found myself lacking a project to do on my computer. Lack a project and you lack enthusiasm. You’re trying to come up with something that might motivate you.
Even just over the past year or so (with the exception of some small projects and the CLI typeracer), I have experienced burnout because I too often lack a project that I am passionate about to dedicate my time to. I plan on dedicating myself more to finding new and exciting things in CS that I can tinker with in my free time. I also plan to keep a healthy work-life balance after graduation so that I can use some of my free time on open source projects and contributions as I have done in college, but I worry that I might dislike doing my “job” outside of my job. This is where my jealousy of Linus resides - in a perfect world, I could live a happy life with a moderate income and dedicate my life to open source. Who knows, after a few years in industry maybe this is what I will do. However, for the time being, I’ll just have to get over it and maintain my passion for programming and open source software.
One last thing I’d like to point out is how much Linus’ discussion of the UNIX and Minix operating systems resonated with me:
Because one of the beauties of Unix is realizing that you don’t need to have complex interfaces to build up something complex.
The Unix Philosophy is strong with this one. Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface. With the Unix Philosophy, you can see the beauty in compartmentalizing work and synergizing that work to build powerful, large scale applications - even if these applications are “just for fun”.