Go Bootcamp

Go Bootcamp

If you want to become a better Go engineer (and generally a more pragmatic engineer), this bootcamp is for you. This is my value proposition to you, but you will have to study, read, and write a lot of code (and documentation). If you’re up for this, then read on!
I hear, and I forget. I see, and I remember. I do, and I understand. - Confucius

Table of Contents

Pre-requisites

I assume you’re a developer who writes code in some programming language (Java, Ruby, C, Go, PHP - no haters here) and has built some API and CLI-based applications. So familiarity with REST APIs and Relational DB design is expected.

Why yet another bootcamp?

There are already a bunch of Go bootcamps/roadmaps available. Why write another one? I didn’t find good exercise-oriented bootcamps (except Gophercises) for Go. I used to actively follow JustForFunc, but it hasn’t been updated for a while. Also, I wanted to create examples with incremental complexity that will help budding Gophers cover all concepts, from building CLI apps to building real-world projects. Hence this bootcamp.
This is an exercise-oriented bootcamp. This means you’ll learn by solving problems that increase in difficulty level as you progress. You’ll get almost no value if you just skim through the bootcamp material and don’t solve these exercises yourself. Don’t say I didn’t warn you!
This is also a self-paced bootcamp, not a cohort-based course(CBC). I may run it as a CBC, but in the future, not right now.
Currently, all the content is text-based, with no videos. In the future, I may add some videos, especially for difficult problems, if it makes sense.
  • In the first week - you’ll pick up Go syntax and language basics
  • Next couple of weeks - build basic CLI apps with test cases and
  • Later - build fully featured REST APIs or async worker systems with relational DB, queues, cache, etc.
Most bootcamps teach you “hello world” style content - with videos, guided code examples, and whatnot. Not this one! This bootcamp starts with basics but increases in complexity pretty fast. Consider this “Learning Go - the hard way” if you want. Why? Because I want to give you a taste of real-world production-grade stuff, not just a sandbox and hello-world style content.

How to make the most out of this bootcamp?

I’d suggest forming a study group with a few folks, solving the exercises, comparing your solution, and reviewing each other’s code and approach. If you don’t have a study group, you can apply at One2N - we are always hiring and learning. 😃
At One2N, we run this bootcamp internally for every engineer who joins our team. You solve these problems, and we help with feedback, suggestions, and improvements to your solutions. Engineers typically complete the bootcamp within a month or two from joining.

How is this bootcamp organized?

This bootcamp consists mainly of exercises that you solve in Go. For each of the exercises, you’ll know the following details:
  • Difficult level (beginner, intermediate, or advanced)
  • Time to be allotted to solving the exercise
  • What you’ll learn by solving this exercise
  • How to evaluate your solution
    • i.e., approaches, patterns, tools, library, etc., that you should have used when solving the exercise in an idiomatic way
    • if we were doing the code review in person, these would be PR comments by a senior engineer on your codebase
  • Actual solution with tests, if applicable. (use this only for reference; you’ll literary get zero value from this bootcamp if you just jump straight to the solution
  • Resources to help you solve the problem and research more about that specific problem.

Why make this bootcamp public?

The purpose of putting this material out in the open is two-fold.
  • Giving back to the community and creating production-grade content around learning Go
  • Seek more collaboration and get feedback to further improve this bootcamp
Tell me, and I forget, teach me, and I remember, involve me, and I learn.

Is this free?

Yes, you are the product, so you pay for this bootcamp with your time and self-study effort! 😀 Seriously, form that study group and solve these problems. You’ll learn a lot.

Show me the exercises!

Enough preamble! Here are some projects and exercises that you can solve in Go.
🎇
Go Projects

Go Resources

Here’s some learning material (mostly free, some behind a paywall) that I have found super useful. I have gone through these myself (often multiple times), and I can vouch for their quality. See if you find these useful to you. (Disclaimer: None of these are sponsored links, I am only recommending them because I found these worth my time).

Some other good material

These are links that I think could be useful to you, but I haven’t personally vetted their quality.

Interesting Go projects to explore

  • Want to learn how higher-order functions, such as map, filter, reduce, flatmap, etc, can be implemented in Go using generics? Explore the code and tests in https://github.com/repeale/fp-go library. (I haven’t used this library in production, but I found it useful to understand how generics could be used in practice.)
  • If you like fp-go above, you will love go-streams (warning: it’s a bit advanced code) - https://github.com/reugn/go-streams. It implements the basic building blocks of any streaming library - Source, Flow and Sink. Look at these beautiful interfaces - Inlet, Outlet, Source, Flow, Sink and how these are composed. (I haven’t used this library in production, but I highly encourage you to explore the library code, especially the flow package). You’ll learn much about data pipelines, transformations, and streaming data handling.
  • See how good abstractions are created for writing CLI programs in Go using the script library - https://github.com/bitfield/script. Look at the Pipe abstraction and how it is used to implement commands like echo, exec, jq, etc. Each command returns a *Pipe, thus allowing us to chain function calls like script.File("test.txt").Match("Error").CountLines(). There’s a lot to learn from this library code.
  • Want to know what middlewares are in Go and how to implement them? Explore https://github.com/urfave/negroni. It has a collection of middleware implemented in Go in an idiomatic style. You’ll also learn how to test these middlewares. Some examples are:

Who built this bootcamp?

Chinmay Naik (follow him on LinkedIn and Twitter) with help from most of the other One2N engineers. If you like this bootcamp, you will love our playbook -
📚
One2N Playbook
.