Learning Javascript for reals
This post originally appeared at areinmeyer.dev
I attempted to complete the wonderful Advent of Code this past year and got to Day 10.
Well, I got to Day 8 and then used a lot of help from Reddit and Github searches to get to Day 10. ðŸ˜
What did I learn? I have relied on frameworks or libraries these past 4 years as a bit of a crutch to tell myself I really knew Javascript.
Is that a bad thing? Not really. I started a greenfield project at that point and knew some JS via jQuery and small bits and pieces doing some basic websites. We were under a tight but do-able schedule at work and needed to show continued progress to keep things running. A React/NodeJS set-up was the right solution (in part because our front-end UI was all moving to React anyway!). But it required me to really level up fast not only on Javascript but also React, NodeJS, webpack, ES6 features, Docker and eventually Redux to tie into helper libraries our core team was providing as some internal scaffolding.
Lots of tutorials, blog posts and heavy use of lodash, we shipped. It's still running in production today. I learned GraphQL as well during the process, as we were so successful in showing progress that we decided to roll some of our own solutions instead of relying on third-party vendors for some parts of the puzzle. It's easy to reach for npm and Google to get past certain hurdles. But as I went through Advent of Code I tried to keep my solutions basic and use Vanilla JS as much as possible without adding libraries or overhead. I tried to do functional programming and I quickly learned I didn't have enough comfort to do that either. I'd limit myself to trying to reference Mozilla MDN too and realized I hadn't ever used Maps, Sets, or understood the number of methods that Array or Object have built-in.
Does that make me a bad developer? No, I'd argue a lot of developers don't really use Maps or Sets too often either. But as I thought about what I wanted to level up on in 2020, it occurred to me that instead of trying out a new language like Rust or Reason, which are both really cool time investments, I should go back to basics to focus on the area that I say I really know. This year, I intend to do that by continuing the Advent of Code or maybe some other code katas or lessons in a similar vein. I'll probably dive into some of Axel Rauschsmayer's books (https://exploringjs.com/) as well as Dan Abramov's https://justjavascript.com that he just announced.
All the Functions!
My other goal is to really get a good understanding of Functional programming. I've read different articles and blog posts, conference talks, and even have a book sitting on my virtual shelf (Functional Programming in Javascript by Dan Mantyla). But can I explain what a monad is? Probably not. There are several resources that I'll use for that:
- Functional Programming in Javascript The afore-mentioned book that's been sitting on my shelf for far too long
- James Sinclair's blog There's so much good content here. And he references another good series from ...
- Tom Harding explaining the Fantasyland spec
- Professor Frisby's Mostly Adequate Guide to Functional Programming Brian Lonsdorf's Javascript guide to functional programming. It's available on Github and PR's are welcome.
Several of these I've read before or started, but I think it'll be a good exercise to re-read and really try to apply the lessons learned here. Currently, I'm not writing a lot of code during my day job, so having examples and lessons to try and apply will be helpful. My goal is to try and really document my process as well. I think doing both simultaneously won't be too challenging (i.e., a chapter a week on general Javascript and another chapter on Functional Programming). I've read that to truly understand Functional Programming you need to learn a language like Haskell which really only allows you to use Algebraic structures and functional concepts.
Feel free to send me any additional references that would be helpful. So maybe I'll be taking a detour as I go during the year to learn a new language. Wish me luck here's to a great 2020!
Top comments (0)