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.

And then there was Javascript

Switching from PHP to Javascript was my first big hurdle. I was used to Javascript. I could, with confidence, say that I could code something and make it happen. It might not be pretty but I’d eventually get to an answer. It was my powerhouse. I worked on WordPress sites and customized the hell out of them.

But to learn Javascript, I had to shed all of that. I had to leave that experience and knowledge behind and start over. I hated it. I hated having to learn about event listeners. I hated learning about jQuery or why I’d need to wait for the DOM to load before executing logic. I hated the whole idea that my code could somehow run out of sequence as a user interacted with the page. Or that my code would run more than once and continuously.

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.

It took me back to when I was 12 years old. Every little thing I learned became useful again. It wasn’t a chore, I wasn’t erasing my past knowledge, I was building on it. And truly, I love writing code in Javascript.

And then came the frameworks.

When I started to learn Javascript frameworks, they felt foreign but intriguing. My first MV* JS framework was Knockout. Within a few hours, I had an app running. When I switched to Angular, my experience was similar. As time went on, learning new frameworks was faster and relatively easier; however, I noticed that it took me quite some time to start that process.

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.

The block

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.