As a developer, you have to challenge yourself. From the very beginning, it’s incredibly important that you bite off more than you can chew… to an extent.

What I’ve noticed in a lot of the new folks to software development, or the folks who are new to a language at least, is that they are hyper focused on a specific application of a language, or of software development in general. They really want to build the next facebook, or, more frequently for me at least, they want to get into malware development.

This is fine, on its face. It’s fine to have a specific field or focus you really want to dive into as a developer. For me at first it was malware, then it was web tech, then it was front end, then back end, now I’m back to malware development and full stack tools development. I’ll probably go through an AI kick and I hope at some point I get into game and graphics development as well.

In all of these sub-focuses, you get to learn a ton about the craft of software engineering. Malware development teaches you that Microsoft engineers are either brilliant psychopaths, abject morons, or brilliant psychopathic abject morons. Graphics programming teaches you that it’s a fucking miracle that we can get our screens to display the vibrant and incredible imagery we take for granted every day. Game dev teaches you that the underpaid folks at Microsoft/Blizzard really should get paid way more and probably should unionize. Web development teaches you that web developers are some of the most ridiculous people on the planet and should probably be institutionalized or sent to Gitmo.

Diving down these rabbit holes is a good thing, and something you should do, probably pretty early on! I’m a massive proponent for project-based learning, and as such really genuinely believe that folks should jump into a niche focus to learn as soon as possible… and then jump into more niches. They should learn wide, and then drill deep.

Here’s the thing, though…

Learn the basics first

There are some folks I’ve come across that will straight up jump straight into malware development in Rust without understanding how Result types work. Let me tell you, the Windows API is not forgiving for folks who don’t even know the language with which they’re calling into the WinAPI.

There are folks that will become “solopreneur” web developers and deploy a garbage ChatGPT web application to Vercel before they’ve ever touched vanilla JS… or even React without all the NextJS abstraction sprinkled on top.

If this is you, I’m not hating. I’m not telling you that your dreams are stupid, I’m not telling you that you shouldn’t go do some deep dives into those spaces.

What I’m telling you is that project-based learning is good… after you at least have the basics figured out.

Figure out how React apps are compiled, how components and hooks work, and how to do state. Trust me, you can build a ton of toy apps while doing that. They’ll get cooler and cooler as you learn how to do things, and you won’t be wasting your time trying to figure out why your Vercel bill is $500 because someone decided to DDoS you while you didn’t have a spend limit on.

Figure out how Rust return types work, how to do match statements on results and how the borrow checker works before you try to do some process injection using the Windows API. You’ll be able to work on malware development eventually, but trust me you don’t want to try to jump right in without understanding… the bare minimum at least.

Well how will I know when I’m “ready” for projects?

I can’t answer that, honestly, and nobody else can either. Some projects are perfect for folks that literally just know how to open up an IDE. You can write out a simple text-based game on Python in IDLE within 5 minutes of trying to learn how to code in Python, but I wouldn’t touch a complex graphics rendering program in Rust until you really understand how the language works. So in a sense, it depends a lot on the project.

I would say this: get into a simple project as quickly as you can when you’re learning a new language or framework, but hold off on projects whose requisite parts might require a much deeper understanding of the language or the science behind it.