One of the joys of programming for me has always been learning and discovery. I loved the idea of digging deeper and deeper into a topic or language or a framework to learn more and become a better developer. In a way, being a programmer is like being in an RPG (especially one like Morrowind where every action yields experience). I enjoyed it and it’s what got me hooked in the first place.
I started coding back when I was 12. Well, “coding”. I was learning the basics of HTML and with every new tag, new possibilities opened up in what I could do. When I got into CSS, I documented almost every CSS property I learned. I wrote tutorials and I was excited.
PHP was the real break through for me because it meant that I could write meaningful programs. And again, every new thing I learned about PHP lead me to greater heights.
There was a joy to being a beginner and as I entered mid-level development jobs, things got much more interesting. There was scaling, compiling things, there was the use of packages. You name it and I learned it.
I truly had a tough time switching but I did and I felt like I had to. When I eventually hit the ground and ran, I found myself in love with the language.
And then came the frameworks.
React took me some time to get into just because of that reason. I was somehow opposed to having to struggle to learn so I learned bit by bit from articles that never really discussed how to write React, but instead discussed its philosophy. I sat down, eventually, and wrote my React guide. It took me no time at all to pick up React, no time at all to start seeing the issues and advantages, and no time at all to realize I needed to spend more time looking at common design patterns in the community to truly understand this library.
I wanted to play around with Vue next but again, it took me quite some time to get around to it. Once I did, I had an app up and running in twenty minutes.
As a writer in my spare time, I’m quite familiar with the “block”. You stare at a blank page, and you simply can’t write any words down. With programming, I find myself encountering a “beginner’s block” in that I can’t get myself to start learning something new at the risk of becoming a beginner.
The problem, essentially, is that I’m constantly very reluctant to give up what I already know in order to learn something new. Learning a new framework has value and can be done quickly. I can be productive almost instantly. However, learning a new programming language is a whole other situation. Same goes for new programming paradigms.
I tried to learn Go and Elixir but constantly stumbled. I wanted to be productive but I felt like I had to keep spending time looking things up: a behavior totally okay when learning something new. I’d start a tutorial and drop it very quickly.
None of that was conscious, of course. There was something always more “useful” to learn that would distract me. Whenever I tried to build some kind of API in Elixir, I’d find myself writing yet another library to submit to NPM.
The Need To Be A Beginner
The problem is that if you never go back to being a beginner, you can’t learn anything significantly new. Learning VueJS after learning React is one thing (and it’s not super easy) but it’s a whole other thing trying to learn to program in C# for instance. You can’t learn Elm unless you’re willing to forego the years of your JS knowledge. You can’t pick up Golang without realizing that it works completely differently than Ruby.
The other thing is that if you DO have to be a beginner again, it gets harder over time if not practiced. This goes back to being a Junior Developer (or Pre-Junior!). We learn new things all the time and we stay in shape. As a senior developer deeply entrenched in JS, there are less opportunities for complete knowledge overhaul by learning a new language or even a new style of programming in another field (such as game development).
I won’t press on you to learn in your spare time but if you do so, heed my advice: learn something out of scope new every once in a while for practice.
To Being A Beginner Again
I FINALLY got something done in Golang. I wrote a Discord bot and I’m quite enjoying working on it and improving it. It turned out to be my “in” for the language, a project I was excited about and simple-enough to make a functional application at the end of a tutorial. It’s been a thrill.
A couple of months back, I bit the bullet on getting into Unity game development and with it, I had to learn some C#. C# has been at the top of my list of languages to learn almost through my entire professional (non-freelance) career. Initially due to the money prospect (C# devs were paid top dollar in my city), but later because the language is actually really fucking cool. As I was writing yet another update function, I was pleasantly surprised to see where TypeScript got its origins from and just how similar it was to C#.
Hopefully, I can come back to this article time and time again to remind myself why it’s so important to shed the ego, shed the knowledge, and be a Junior Dev all over again.