A Love Letter to Intellectual Rabbit-Holes or:  How I Started to Learn Angular, Docker and Go(Golang)
Tags: webdev, codenewbie, career
Published: 2020-12-08 23:25:28

###I have a deep respect for curiosity and it's ability to propel me into areas of knowledge I would have never thought to go without it's persistent tug at my shoulder. ###

Without it, I wouldn't have learned Spanish, become a painter, musician or a software developer for that matter. 

Over the years I have realized that being driven by curiosity is a literal super power when it is channeled and harnessed, but can also be wily and send me on the proverbial goose-chase. 

I honestly don't mind chasing geese, I love it in fact. But - but my friends!- as developers we have to wrangle these geese and be able to distill what is important in order to implement what the geese have taught us.

####Learning is fundamental to being a software developer (and a human being!). We are constantly asked to internalize new information, languages, tools in an ever changing landscape that is overwhelmingly diverse and intimidating when you're first starting the software development adventure. ####

I recently went into a rabbit-hole diving into Angular, Docker containers and Go(Golang). The reason was initially because I was applying for a job that I really wanted where they were using this tech stack. From what I could gather the company was using Angular(TypeScript!), Node, Go and Docker/Kubernetes.  My experience is primarily (come on- ONLY) with React and Node. 

So, what I wanted to learn was Angular, Docker and Go *(the language is called Go but the site with the docs for Go is [golang.org](https://golang.org/) so it is confusingly also called Golang -THE RABBIT HOLE IS BEGINNING FRIENDS!)*

###The rest of this article will be a look at how I tackled beginning to learn these in a systematic way(hint: writing this article is a part of that system) and some interesting things I can pass along about learning effectively. The next articles in the series will be a look at each technology individually.###

A few important things about learning and retention I find helpful while going down the rabbit-hole:

* take notes as you go, or what you learned might fall out of your brain in 3 days
* when you research something it will probably lead to 2-3 other slightly related things that you want to research (more rabbit-holes). This is where it can become difficult to stay on track. A good way to stay focused is to write these down so you can come back to them later, but still stay on track with your main focus (thanks for that tip Micah!) 
* try to get an overhead view of whatever it is you are trying to learn by asking things like: 
* What is this tool/language/thing used for? Is there one specific thing it does or does it have a lot of different applications?
* What problem does it solve?
* Is there some language/tool/thing I already know that is similar that can help me wrap my head around this?
* watch videos, read, write down questions
* talk out loud, try to explain to your non-tech girlfriend what you're learning, if you can't be concise and simple you probably have knowledge gaps. Bonus if you're concise enough that her eyes don't glaze over

##### Then #####

* START DOING, as soon as possible start making some kind of project using the tool/language/thing.
* Most documentation usually has a "get started" or walk-through tutorial
* If you are lucky enough to have mentors or a friendly slack-channel (if not - remedy this immediately ), talk to them about what you're doing. This will save you a huge amount of time because it will keep you out of the weeds. It's easy to waste time or get hung up on something that could be quickly by-passed by having a nuanced conversation with a human being who's opinion you trust instead of asking the whole of the internet. The internet often has differing opinions (see any number of clickbait Angular vs React, "This vs That", "is _____ language *dead*?" articles/videos for evidence of this).

The bottom line is, we must be discerning when going down the rabbit-hole , O yes indeed friends. There is no lack of resources to learn any new language or tool in software development (understatement of the decade). But to actually gain competence and skill you have to stop the rabbit-hole and really dig in and get focused practice on one thing.

There is a balance between letting curiosity bounce you around for a while, but then actually focusing on one language/tool long enough to really know what you're doing with it.

For me, learning where to direct my energy as a new developer, trying to solidify skills and gain new ones, is a constant pressure. I want to learn *everything* !! The issue is how we navigate resources and not waste time before diving in and using these tools so they become internalized.

####This is the first article in a series of articles about learning Angular, Docker and Go. I am currently knee-deep in this glorious rabbit-hole and will return to share my findings. Up next: Angular ####

PS. 
* Angular feels like learning to drive a Mac Truck compared to juggling on a unicycle (React), bonus points to Angular for TypeScript integration.
* Docker is melting my brain but I really love it and seems incredibly worth learning.
* Go is the most mysterious of the bunch. Seems to be the least related to my JavaScript background but is also the most intriguing because of that. It's a general purpose language that has a lot of different applications.