Being a Beginner Again
I’ve been doing web development for roughly ten years now and started hitting a ceiling about three to four years ago. I mean ‘ceiling’ as in how much I was learning per unit of time and how much I was enjoying it. It’s not just that I got better at it – at Apple I learned from some of the world’s best engineers – but my attitude toward web development has changed.
At the beginning and up until about three or four years ago, I was happy to program just about anything, as long as it had to do with the web. Frontends, web servers, APIs, databases, you name it. I originally stumbled upon web dev while doing an internship in 2010 that had little to do with programming. I taught myself to code web projects because I fell in love with it, which is why I got good at it, which is why people wanted to hire me. Doing web dev was the goal – getting hired to do so a pleasant side effect. Even if it had never become my job I still would have done web dev in my free time. But the better I got at it, the less challenging it became. I now wanted to use web development to solve other problems. It had shifted from being my focus to being a tool, and more and more the answer to the question ‘would I be doing this in my free time if it weren’t my job?’ became ‘no’. Web dev shifted from being an intrinsic motivation to being an extrinsic one. That’s a sign that it’s time to move on.
It would be a big mistake to say that there aren’t any problems left for me to solve in that field. Web development constantly evolves and grows and there are bound to be many more open problems today than when I started. But I’m reasonably confident that if you throw arbitrary web-dev problems at me I could figure out how to solve most them, or predict their solutions to some degree, probably using tools I already know. In other words, there wouldn’t be that excitement of figuring out big unknowns that I felt in the beginning. To be sure, I’m not the best web developer there is, but I have become very good at it. (If StackOverflow is any indication, where I’ve answered mostly web-dev questions, I’m currently listed as among the top 3% of their users.)
These days, I still do web development, but I’ve started looking around for other projects. I also just needed a break. Since I left Apple in the spring of 2019, there have been times when I didn’t code at all for an entire month. Other times I coded something else that isn’t web dev, like this new programming language. Or I’d focus my attention on projects not directly related to code: I wrote a book (to be clear, its contents are related to code but I didn’t write code to write the book). I also translated someone else’s book into German. These projects were exciting because I had never written or translated a book before. There were big unknowns and problems I hadn’t solved yet, whose solutions I could not predict without trying.
Recently I’ve been dabbling with game development and doing tutorials on Unity, a game engine. (A game engine is basically a tool that abstracts away solutions to a lot of the common underlying problems most game developers would otherwise need to solve every time they want to build a new game, such as lighting and shadows, other physics like gravity, and so on. It also provides basic shapes and algorithms so you don’t have to reinvent the wheel.)
Yesterday, my humble goal was this: ‘By the end of the day, I want to be able to move around a character using the WASD keys.’ Think about how basic this is. Every experienced game developer knows how to solve it, and will solve it for you in (I’m guessing) less than ten minutes. But for me it was a big unknown. I had no idea where to even start. But I also knew I could figure it out.
That’s exactly how I felt when I fell in love with web development all those years ago. It’s this intrinsic motivation that I can use as a compass. And after several hours of piecemeal success mixed in with failures, genuine wonder, and curiosity, I did figure it out with the help of this tutorial. You can try the result below. (Warning: the mouse sensitivity is way too high when the game is rendered on a website, and it’s laggy in Chrome – both issues are known and not unique to my ‘game’. Best to use Safari to try this, and it doesn’t work properly on mobile since you need a keyboard to move the player.)
Not only did I achieve my goal by the end of the day, I immediately stumbled upon further problems I now felt encouraged to solve: I wanted to be able to look around using my cursor, jump using the spacebar, and move faster while holding left shift. The above gameplay incorporates those features (along with some bugs I haven’t worked out yet).
Next I want to have another object follow the player wherever he goes, including going around obstacles. This is, again, a trivial problem for any experienced game developer while being a huge unknown for me. But it’s been done before, so I know I can do it, too. There’s a whole mountain I can climb should I decide I want to get good at game development. I’m just following what’s fun. Maybe instead of making it to the top, halfway up I’ll get a decent view of another mountain – and maybe I’ll decide that the other mountain looks far more interesting. Who knows.
It’s too early to tell whether I will fall in love with game development. But I’m feeling like a beginner again – which is just what I needed.