The Problem
I’ve forgotten what it is like to be a beginner software engineer. Sure, I’ve worked with junior developers and interns, but I don’t really understand their point of view anymore. I can be empathetic, but that’s not the same thing. I “just know things” that they generally don’t from my 10 years of experience, for better or worse. I’m not any smarter than they are. I have just gone through some shit. Late night production outages leading to all day war rooms have a tendency to do that.
Getting Back to Basics
There is something useful about that naivete though. When it comes to starting to solve a problem, you just do the first thing that comes to mind. You don’t always stop to think about it for very long. You don’t suffer analysis paralysis trying to come up with the perfect abstraction to make the solution infinitely extensible and scalable. You just start and stumble upon the problems as you go along, you know, learning. Sure, the next time you might take a slightly different path because of what you learned, but the act of just starting can help clarify the problems before you come up with an abstraction.
It’s kind of like being a child. You just do things. No one has told you that you cannot do that thing or cannot do it that way. Sure, sometimes not allowing them to do things is for their safety (stoves and electrical sockets obviously), but as a parent, you can’t use that as a proxy to tell your child everything they can or cannot do. You never know when they will teach you something new. Honestly I’m really only saying this to ingrain it in my own brain as a new parent.
How I’m Learning
It’s been a struggle, but after 10 years in JavaScript (which I still love), through 3 versions of ECMAScript standards, I’m ready for something entirely new. I have a running list on my phone of tools and new programming languages I want to learn. It spans from CLI tools like grep and jq to languages like Rust, Go, Gleam, and Zig to new databases/services like Turso, Astro (still JS though), and Jam. I’ve also started switching from VSCode to Neovim, but more on that later. Will I get through all of them? Nope. Will all of them actually improve my career prospects? Probably not, but it gives me a starting point of things I’m interested in. That’s the most important part. That will keep me learning and pushing myself. Otherwise, I’ll probably get bored. One thing also on my list is to build a compiler or interpreter following the books by Thorsten Ball. Most of my inspiration for all of this comes from following ThePrimeagen. I also know that’s a lot of links to click through, but you’ll hear more on those as I get to them (whenever that ends up being).
You might be wondering why I haven’t mentioned Python, since it is where a lot of the new AI development innovation is happening. Well, that’s because it feels like more of the same. I’ll also still be learning it in my day job for all the AI stuff we are doing, but I’m really most excited to dive into a different end of the programming spectrum with some compiled languages.
I’m hoping this takes me back to being a beginner, back to that naivete where you just try things and see what happens. And with the insane influx of new tools and frameworks in JavaScript land, it seems like a good time to jump ship for awhile and see where the dust settles. Maybe I’ll learn some new patterns that I can bring back. Or maybe I’ll find a new way to make services interoperable (looking at you gRPC). No matter what, I’m excited for the journey along the way. Now I just have to find the time to explore this while having a one year old…
Great post Joel. There is a wisdom that comes from not knowing, or from letting go of what we think we know. Not only gets you out of analysis paralysis but also frees you to discover and innovate.
I couldn't help but think of this quote, which you might have heard before: "In the beginner’s mind there are many possibilities, but in the expert’s there are few" – Shunryu Suzuki
You might not have as much time as you like, but as you pointed out, there is an asymmetric benefit to having a one year old and observing how they take in the world.