Self reflection on learning new programming languages

I'm currently in the middle of a schedule to get a new job before official return to office in June. Might as well strike the iron while I am still living with nary a care for dealing with cooking or cleaning by myself. This is the best conditions I could ask for before I have to go back to the office for the 9-5 slog.

Things I've gotten better at identifying:

  • When a course or text is not working, stop using it and find something that works. This is the result of overcoming the condescending boomer belief that "there are no bad teachers, only bad students" ingrained for years into my mind. Some teachers are absolutely better than others. Why waste your own time and effort on something ineffective out of some misguided determinator of self worth? What ultimately matters is your end success, not powering through an artificial difficulty spike that adds nothing of value.
  • How to effectively spend time on a text. The "read the material straight through and wallbang until something comes out of it" is the easiest way to burn out and get derailed from The Plan TM. This also goes hand in hand with the first point, how to know when something isn't working. The material itself might not be great, but going through it with a different approach might be more effective. Skip chapters that don't look relevant, skip parts that are too difficult and review later, find other supplemental material to read through what might not be explained well.
  • Don't get caught up in finding THE perfect course. As long as a course or textbook is good enough, the important thing is to stick with it. Nobody got smarter by just collecting courses like unplayed games in Steam backlogs. Emphasis on unplayed.
  • Be consistent. With my obsessive personality, getting fixated on something for unhealthy amounts of time in short bursts and then burning out is the story of my life. Setting a sustainable pace is both important for keeping the mind refreshed and not letting the schedule dictate how much is done in a period of time.

My current plan for learning Javascript is going through Wes Bos's Beginner's Javascript notes (notes are free, video course is not, I'm only going through the notes) and Eloquent Javascript. This was after trawling through many recommended resources and culling the ones I wasn't feeling good about. Going through both allows me an extra information source in case one explanation doesn't make sense. The order of what is taught is also different, so I can switch to the other if one of them is starting to feel beyond my skill leve.

Eloquent Javascript has the bad issue of not letting new concepts sink in before going from 0 to 100. Chapter 5 went from teaching about functions to daisy chaining function expressions and waterhosing map, filter, and reduce. That was not effective. This is not the first time I've tried working through Eloquent Javascript and gotten frustrated (and stopped learning), but I've decided to address my frustration in a more productive manner this time. Internalizing new concepts like function expressions just needs time, so I'm not going to sweat needing extra time to process what the code is doing. I've also stopped worrying about not understanding every last bit of knowledge the book is dropping and focus on finishing the exercises while using concepts learned in the chapter.

Wes Bos is lauded as an amazing teacher, and so far I can agree. I don't have too much criticism about the notes themselves. I have started to skip certain exercises that don't provide too much learning value, and even skipped some chapters that don't seem relevant to my current learning plan.

Overall, I find the biggest issue with learning a new programming language is how most material is beginner oriented, i.e. people learning a first programming language. So much of the material is meaningless review, but I still try to slog through parts with little to no value out of FOMO some critical language-specific feature that will come to haunt me later. So I spend time on something that yields low value, I get bored and frustrated, and the likelihood I abandon the task increases exponentially.

Really, the biggest thing I care about is syntax and basic language foundational rules, such as:

  • Order of operations
  • 0 or 1 array indexing
  • Scoping
  • Ways to declare variables and functions

Because material is spread out over multiple chapters, finding all the basics summarized in one place is extremely difficult. Not to mention, if I drop a language for a while and come back, I'll have completely forgotten the syntax and having to review everything again to refresh myself compounds the "I already learned this part" frustration.

I've sort of gotten over this by writing my own cheatsheet, paying extra attention to add in code snippets that show off the language's syntax. Sometimes the only way you can expect to get it right is by doing it yourself. It's helped immensely.

The biggest lesson I've taken from all this is that 70% of the battle is about effectively managing parts that aren't working and to find ways around moments when one hits a brick wall. The brick wall is going to win 100% of 1v1s, so brute force is a quick road to failure.

As a "break" from Javascript, I'm giving Execute Program a shot. The guy behind the infamous Wat talk has started his own foray into teaching bandwagon and is honestly doing a terrific job. I'm using my trial lessons on regexp, a concept that has eluded my understanding for a long time, and I can confidently say I understood all the regexp content been taught so far in a tiny fraction of the time it'd take learning from a book. It even encourages sticking to a 20 mile march!

I only have positive things to say about Execute Program, and it might just be the second course I will happily shell out money for, first being Interview Cake.

The Leetcode will happen Soon TM.

Show Comments