Go is for everyone

Go is a modern programming language created at Google. It’s designed to be a very rational (read non-fancy), simple, and fast programming language. It’s quickly becoming one of the key new programming languages due to its familiarity, simplicity, scalability, performance, and approach to concurrency. It’s the common language of modern systems solutions (Docker, Kubernetes, CoreOS, Hashicorp…), many of small and big startups use Go for some of their web APIs and plenty of other things. But this post isn’t about how awesome Go is, it’s about making it more accessible to developers with little to no experience.

The Go community can feel out of reach

Go was written and is developed by a group of very experienced people, in the context of a very mature tech company (Google). Because of that, the early community reflects its creators. Most are experienced developers, computer science focused and interested in specific technical problems. Compared to many other programming communities, our community can sometimes feel drier in the sense that we focus a lot on low level details and tooling and aren’t focusing much on carving out a path for newcomers.

We want Go to be more accessible

As a CTO and Co-Founder of a tech startup, I bet a lot on Go. It has been serving us great and to be honest, I love our community. But I have also heard many times that Go is an advanced language that is only for experienced developers. Or that the Go community is full of experts making it very hard for new developers to “break-in”. All communities need new people to challenge the “old-guard”, push new ideas and become tomorrow’s leaders. Without new members, communities end up aging, and eventually go away. We need to embrace new users and make sure we don’t leave less experienced developers high and dry due to minor things we didn’t think about.

Go isn’t for me, I just started learning how to code

This is something I’ve heard many times. You have a new developer who’s just starting to discover the wonderful world of programming and they are being told they should start with JavaScript (JS), Ruby or Python because the other languages such as Go are too complicated for them and a novice can’t and should not try to learn an “advanced” language.

I couldn’t disagree more. Sure, with these languages you will get your first running code experience faster, but you may also struggle very quickly with other things such as syntax and other errors that are reported only when your code runs. You will discover behaviors considered weird because you don’t understand them (yet). I wrote about that before and to me, this is similar to getting a credit line with bad terms. I do think JS, Ruby, Python etc. are great languages and should be learned, but I think a lot of developers, if not all, would benefit greatly from learning Go first.

Go isn’t revolutionary in itself; it does have a few paradigms that are somewhat unique, but its syntax and concepts are very similar to most programming languages. As a matter of fact, if you know Go fairly well, you can probably learn Ruby, Java, Python, JS, C# decently quickly since you already have the mental mapping of all the core concepts. Because Go is a small language (the language itself has a limited set of features), most of these other languages have similar programming concepts as Go (except for concurrency) but add a few extra layers on top. One can therefore easily argue that learning Go is easier and can be used as a foundation to explore other languages. Go isn’t the solution to all problems and many developers learning Go will end up preferring to move on to frontend languages such as JS/TypeScript, some will prefer a more classical Object Oriented approach, some will want more flexibility in the type language, some won’t have a choice and will write the programming language used at their job. This is totally fine! But learn Go so you can have a solid foundation and then you can move on to something else you might like better or better suit your needs.

Not enough content for beginners

It saddens me but it’s true: we have very little content for true beginners. Because our community was started by developers with a lot of experience, we created a lot of content for existing developers, not total newbies. On the other hand, communities such as Ruby and JS are larger and always had a big influx of totally new developers attracted by the promise of creating web applications quickly (at the cost of learning the fundamentals which sooner or later comes to bite you in the 🍑).

Swift came in as a replacement of Objective-C, but Apple and the community are doing an amazing job attracting new developers. Granted it’s a little bit easier for Apple to capture new developers since they are usually motivated to build something tangible as quickly as possible and Apple really wants revenue generating native apps on their platforms.

Improve the educational materials and new user experience

I don’t see any reasons why we can’t aim to do the same and be much much better at teaching the basics, sharing knowledge and welcoming new developers. After all, we brag that our language is simple; it’s time to show new developers that investing in Go early on is the right move for them. Let’s fix the gap in documentation and make onboarding exciting.

The great news is that we all started as newbies and we all learned something. If you’ve learned something, you should be able to explain it simply. Start writing small blog posts or give local talks on basic Go concepts. Maybe explain how to use the printf functions, how to organize your code in packages, or show how to use godoc or a feature of your favorite IDE. Our language is simple and the questions new developers are facing are finite; let’s make sure we create awesome content for new Gophers in the quest for knowledge!!

If you are in the L.A area, next month’s Santa Monica Go meetup will be focusing on onboarding new developers and understanding what we can improve. Join us!

Thanks to Carlisia Campos, Tiffany Jernigan, Andrew Gerrand and Francesc Campoy Flores for reading drafts of this and providing feedback.