Introduction
When I first started programming, I wanted to learn about everything. Sass? Let’s drop everything and learn it! TypeScript? Why haven’t I been using this all along? Astro? I already know 3 frameworks, but I really need this. I need better buttons, after all.
Starting Out
Let me provide some context: You’re a developer who started programming a month ago. You’ve finally got a decent handle on basic HTML and CSS, and kind-of-sort-of-maybe understand JavaScript, but you aren’t so solid on it. Then you see a blog / video / comment about Node and the backend, and your immediate impulse is to try to understand what that’s about, because the only alternative is to be left with this uncomfortable feeling from lacking a solid understanding over your domain. And that’s the important part.
Getting Comfortable
Discomfort is where learning happens. As we progress, we start becoming fairly comfortable in our own subset of problems and solutions, with a finite list of related technologies. Let’s say that list has the following:
- JavaScript
- HTML
- CSS
- React
- NodeJS
- Express
- Prettier
- State
- Redux
- REST
When someone says “REST”, you say “Express”. When someone says “Formatting”, you say “Prettier”. When someone says “State Management”, you say “Redux” close the current tab and pull a different task from the kanban board.
Then, you hear about some external technology that you don’t need to understand to be proficient in your job as a software developer. Something like Docker, or raw SQL. But that’s uncomfortable. Why would I do that, when I can continue working with the technologies I’m already good at? I don’t need this to be effective.
And That’s a Logical Conclusion!
Albeit an incomplete one. I don’t want to discount this perspective completely, as it makes a lot of sense why you would think that. You already know X, Y, and Z, why do you need to learn Q?
Unfortunately, humans are not completely built on logic, and a couple of problems can sneak up here. For one, you miss out on new perspectives when you stay in your bubble. It takes a lot of intention that most people will not have to continue to appreciate new perspectives when all you do is use React / Prisma.
Not only that, but it becomes 1000 times easier to excuse yourself from learning new things with that logic, because it’s sound “enough”. You don’t need to learn Golang, you already know JavaScript (please never say this). You don’t need to know SQL, you already understand Prisma ORM. This stunts the learning process, and encourages other people to solve the important problems.
Conclusion
It makes sense why you might prioritize “practical” learning over broadening your knowledege in seemingly unrelated areas. But this is counter-intuitive to the domain we work in. Software Development isn’t about “How To”, because anyone can Google “Why won’t my Shopify webhook fire?” and get a decent answer from Stack Overflow, ChatGPT, or the random saint on Medium that had the same problem in 2015 and shared their solution. That’s the easy part. The hard part is having a good understanding of the entire domain, and knowing what tools to use, and how to use them in creative ways to solve problems that haven’t been solved yet.
I hope this post was insightful. Happy coding!