Knowing how to do something, and being able to do something are not the same. I learn best by doing. One of the skills I have been working on in 2020 is learning how to learn. There were a couple of projects that I was wanting to jump into, written in Go. Now, when it comes to learning programming languages (probably anything, for that matter), the first week is vital. That is when you decide whether you are going to stick with it or not.
So how did my first week of Go, well, go?
I jumped on an podcast episode of GoTime with host Jon Calhoun to share my experience. I was also joined by Jacquie Grindrod, a developer advocate at HashiCorp, who had also recently started using Go. Denise Yu, one of my favorite people in the world, was the catalyst for this entire episode.
After we introduced ourselves, we started discussing our first week of Go.
I found it quite interesting how we both approached that initial week. My approach was more laid back and Jacquie sort of jumped off the high board, into the deep end. But in the end, we all agreed that jumping in was the best way to start learning the language.
For both of us, before we jumped in, we started by reading the docs. As for me, I find the docs to be a better starting point than buying a book and reading lengthy installation instructions. Also, as Jon noted, installation instructions in books can be outdated as new versions of the language roll out.
So, yeah, docs first!
Jacquie went with a unique approach (also noted by Jon), which I thought made the learning experience stickier for her. She was figuring it all out while solving Exercism challenges and live streaming at the same time.
With the live stream, it essentially turned into a pair programming session, which is something I’m a huge fan of. And what made it better and stickier (in my opinion) is that a lot of people that jumped on the live stream were already familiar with Go and friendly. So she got a lot of guidance instead of people telling her she is doing it wrong and spoon-feeding her the solutions.
A good metaphor for this, I believe, is that she dove off the high board after learning the doggy paddle.
As for me, I was just sitting by the beach, soaking in the sun while reading the documentation to get a base-level understanding. I went over to my Mac and wrote the standard “Hello, World!" program. Then I moved to Linux and did the same thing just to see the differences and which ecosystem is easier.
I wanted to think and ask some questions, like How do I get this into a Docker container? How do I automate this? What does it look like? And considering that Go just works out of the box (thanks to GOPATH), it just made it all the more exciting to learn for me.
Then I went on GitHub to find projects I could contribute to. I looked for projects that were tagged as good first issues. So I stayed away from the deep end as much as possible until I knew what I was doing.
Before jumping into any programming, we tend to have expectations. For example, Jacquie’s expectations were that she’d learn as much Go as possible and hopefully it would stick. I think that is a reasonable expectation since you can’t become a guru in just one week.
As for me, I wasn’t sure what my expectations were. I just wanted to see how fast I could hit the ground running and how far I could go — can I get something out? run some tests? get it to production? — from a purely academic standpoint. Get my reps in (like in the gym), make mistakes and then start heading towards the deep-end after I’ve built enough confidence.
I wanted to get to the point where if someone came to me with a billion-dollar idea and asked if I’m ready to Go, I would be like, “Sure, let’s Go!"
A lot of us struggle with motivation, especially at the beginning of any endeavor. All I can say is it helps to have a buddy. Like Jacquie, for instance, she had plenty of buddies in the form of her Exercism mentors and the viewers she was live-streaming to. All this created system of accountability, where she had people cheering her on while others were learning from her.
When it’s like that, you don’t want to let them down, and you can’t procrastinate or they will lose interest. So you push yourself to go further and faster. When she coupled that with the bite-sized challenges on Exercism, there was also a sense of progression that fueled her motivation.
You don’t have to necessarily go her route. Just find a buddy to pair with and bounce ideas off of. You’ll be more motivated to continue learning. And if they are on a higher level than you, you’ll be forced to step out of your comfort zone and become better to get where they are.
After listening to Jacquie talk about her pair programming experience, it dawned on me: I wish I had a buddy. I wish I had someone from the start.
Also, as Jacquie pointed out, many of us tend to be perfectionists and anxious about showing our work. Done is better than perfect — perfection can slow things down to a crawl and disrupt momentum. You need to be pushing out your code for people to review and provide feedback. That way, you’re learning and correcting mistakes faster and getting a step closer to writing perfect code.
Take it easy on yourself in the first week. Nothing is easy. Get all the help you can.
So that’s my first-week experience with Go. And I was so glad to share the experience on GoTime. It was all about jumping in — learning as much as possible and getting things done. That way, I would get a solid foundation before getting into some of the more advanced stuff (patterns, for example).
You can listen to the episode in its entirety here.