Whenever I start a new programming language I always like to follow a similar set of steps.
- Find a general overview of what the language is and what is good or used for.
- Find a video tutorial to walk me through step by step in a simple project
- Read the documentation.
With Go, I found this approach to sort of work out. The syntax and layout of the language make it easy to pick up the basics and get going. Even though I've been able to put together simple applications and have a grasp of the syntax it never really felt like I was writing "Go" or as you'll hear a thousand times while learning, I wasn't writing "idiomatic Go."
The Go philosophy is what makes Go such a powerful and pleasant language to work with. Truly understanding that is an important step in the learning process. Below I've compiled some learning resources that I've used to try and capture the understanding of Go that will make you a great developer.
I love a good course. Being walked through the process of building an application and seeing how other construct and architects a project helps me build a context of my own around how to think about the problem in the given language. Here are some of the courses I've found useful this year.
- Udemy: The Complete Go Developer Guide - a great resource for just walking through the syntax and language features.
- Udemy: Building Modern Web Applications with Go - a useful tutorial on building a basic web application using the built-in template engine for Go. I think it's a great place to start after learning the syntax.
- Udemy: Working with React and Go - another useful tutorial, but does spend a lot of time on React. You can skip over most of the React stuff and just focus on the backend and still get enough from the course to justify it.
- Ardan Labs: Ultimate Go - Bill Kennedy has the best course on Go you can purchase (probably). It covers nearly everything you need to know to be a Go developer and a great one at that. It is the most expensive of the courses and it's probably best to hold off until you have a decent understanding of the language and some basic CS concepts before diving in.
As far as I know, there's only one active Go podcast and that's GoTime. They have awesome guests and hosts that have very insightful and intelligent conversations about concepts in the Go community as well as the general developer community. One of the things I really appreciate about the podcast is they often talk about the why of whatever the topic is. It really helps new folks understand the concepts that help make Go great.
If you're new to Go or programming in general you may find that GoTime is way over your head, at least that's how I felt at first. However, I've come to find that listening to those conversations, even the ones you don't understand, really helps you get that context of the language. Whenever I learn a new language or framework I look for a podcast that covers it and work my way through the backlog. It's a great way to learn the vocabulary in the community.
Talks & Videos
I've found the talks on Go are some of the best that are available. Here are a few of my favorites.
- Mat Ryer - How I Write an HTTP Service After Eight Years - A great walkthrough of some lessons and tricks learned over the years of programming.
- Mat Ryer - Idiomatic Go Tricks - Another great talk filled with ideas on writing that sought after "idiomatic Go" code.
- Dave Cheney - SOLID Go Design - OOP can be difficult to map in Go, especially if you're coming from a class-based language. Dave does a great job at walking through some of the core principles.
- Bill Kennedy - Go Programming Design Guidelines - Bill always does a great job at breaking something down into consumable chunks. This is no exception. A worthwhile watch for any new Go developer.
- Bill Kennedy - Keynote: You Want To Build a Web Service - Probably my favorite of all of Bill's content out there right now. In this talk, he walks you through the building of a web server and some of the key choices that are made from the start. If you only pick one, pick this one.
Caveat: I'm not the world's best book reader. I rarely take the time to regularly read, but it's something I'm working on. As such, I'm sure there are more books than these.
- The Ultimate Go Notebook - is exactly what it claims to be. Another resource by Bill Kennedy, it offers a fundamental look at what makes Go such a great language to work with.
- Go Programming Blueprint - is a great resource by Mat Ryer that offers some production-ready blueprint for common problems. I find these 'cookbooks' very helpful in understanding my own design choices and helping me make better ones in the future.
Over the last few months, working through these resources, I've really come to have a better understanding of what it means to write Go and how to understand those paradigms that help you write readable and maintainable code.
These resources have made all the difference in going from scratching my head, to actually writing an application that makes sense and that I'm excited to keep working on.