Why you should use/learn Go as hiring manager/individual contributor.
Tags: go
Published: 2021-08-13 10:58:56

When choosing a technology to build a software project the final decision will depend on the experience the team has and the risk they are allowed to take, using Go may not be the first choice because of the uncertainty the language can bring. This uncertainty can be measured by multiple _known unknowns_ like support (either commercial or community-based), availability of libraries and packages, documentation and examples, pool of available engineers or language complexity, to mention a few.

Go is relatively a new programming language, it is [11 years old (to date)](https://blog.golang.org/11years) and it is still evolving like any other language but in a slower pace compared to other ones, this is in my opinion because the promised [version one compatibility](https://golang.org/doc/go1compat) at source level, this longevity is also another factor companies take into consideration during the decision making.

In this post I will tackle different concerns related to whether using Go or not, those concerns will be from two point of views: **Hiring Manager** and **Individual Contributor**.

## Hiring Manager

**Hiring Manager** is a broad term, for this post I define it as the _Person in charge of making the decisions of what Engineer to hire, and the expertise this person should have, for building a piece of software_; this _Person_ is someone involved with the project that is part of that _piece of software_, most of the times a _Lead Engineer_ that is trying to hire someone to join the project.

This project could be new or current, for this specific post I'm assuming **it's new** where Go is considered as one of technologies to use.

### What are the cons?

**Difficult to find talent**

This is a valid concern, choosing a language that nobody knows or nobody is willing to learn delays the project and makes implementing this new piece of software harder than initially planned. Please continue reading there's more about this to explore regarding training and easiness to learn.

**Training may be needed**

If people don't know the language then teaching them is going to be required, this is a con for sure but thanks to the language learning it may not take too much time or effort, however is something to consider and something that could delay the progress of the project.

**Salary or Compensation**

If an Engineer with Go experience is found, it's most likely the compensation will be a bit higher because of the rarity of this combination, specially for Senior Engineers the compensation could be a big problem for companies not willing to make a good offer for this kind of experience.

### What are the pros?

**Easy to learn**

Go is a _simple_, yet _powerful_, language. It does not define a lot of keywords or different ways to do things, sure there are few gotchas that could creep in when a novice engineer starts learning the language but in my opinion it is easy to learn and it tries its best to be as explicit as possible.

**Vendor-supported**

Part of choosing a technology, like programming language, consists of having options to use with other technologies, for example cloud providers like Google Cloud, Amazon Web Services and Azure provide SDKs in Go, the support may vary depending on the service but the option to use Go is there; popular datastores like [MySQL](https://github.com/go-sql-driver/mysql), [PostgreSQL](https://github.com/JackC/pgx), [Redis](https://github.com/go-redis/redis), [Kafka](https://github.com/confluentinc/confluent-kafka-go) and [Elasticsearch](https://github.com/elastic/go-elasticsearch) have packages available either created by the company providing commercial support or the community, so that's another thing to consider; not to mention the possibility to use any of the three most popular Operating Systems for development because it supports Microsoft Windows, Linux and MacOS.

## Individual Contributor 

**Individual Contributor** is the person not in charge of hiring concerns, this person does get involved with the decisions being made regarding the technologies to use but as an _Individual Contributor_ this person is much more familiar with the internals of the codebase and the project being built. In the context of this post I also consider _Individual Contributor_ someone willing to spend time learning the Go language, considering the investments to make and the possible return of effort if the decision to use the language is made.

### What are the cons?

**Backend-friendly**

If you're interested in using a programming language that can be used for both the Frontend and Backend then learning Go may not be ideal. There are ways to write code in Go that can be displayed in a browser, for example using [WebAssembly](https://github.com/golang/go/wiki/WebAssembly) but this is a new technology that is not widely adopted yet.

**Literature**

Depending on your experience and the problem you're trying to solve perhaps the documentation available is not enough, and popular resources like Stackoverflow (and its [Go Collective](https://stackoverflow.com/collectives/go)) could not provide the right answer.

Although to date there is a lot of content available covering most of the things related to Go, in some specific cases there's a learning curve that you will have to go through before being able to reach to a solution to some problems, some common examples can be things like Project Layout, Accessing Datastores or Frameworks.

### What are the pros?

**Easy to learn**

_Easy_ is relative, if Go is your first programming language then it is going to take you longer to learn it compared to someone with programming experience, however because of the way the language was designed, the amount of keywords and ways to do things is finite even if this is your first language it shouldn't take you that long when using the right literature.

**Friendly Community**

There are different ways to reach out the Go community, like [GophersSlack](http://invite.slack.golangbridge.org/) or [Reddit](https://www.reddit.com/r/golang/); there's also the yearly [GopherCon conference](https://www.gophercon.com/) and depending on where you live maybe there's a MeetUp group or a local conference as well.

Whatever way you prefer to interact with the community you can rest assured there's always someone willing to help you and answer any questions.

**Backend-friendly**

Also a con but depending on your career goals it could be a pro, this is because Go is a great language for Backend-related projects like CLI tools and Web Services.

## Conclusion

Go is one of my favorite programming languages, I like it because it provides features I consider necessary like creating a single binary as the final artifact, a garbage collector and static typing; those are not Go-only features by any means but in Go those are provided without any extra baggage like in other languages.

Regarding support and packages available, the amount of them nowadays is vast compared to few years ago, and because of that there's a small risk when choosing Go.

Go is not perfect, dependency management and [error handling](https://mariocarrion.com/2021/05/11/golang-microservices-handling-errors.html) are some of the most common complaints I hear all the time; I personally like the way errors are implemented but I do see some improvements needed when dealing with dependencies and versioning.

In the end I think Go is worth learning and giving a try, it could be a differentiator when building Microservices or CLI tools because of the features already included in the standard library as well as the way you could distribute your program as a single binary.

## Recommended reading

> **Disclaimer:** This following list includes Amazon affiliate links. If you click on one of them and you make a purchase I'll earn a commission. Please notice your final price **is not** affected at all by using those links.

If you're looking to sink your teeth into more Go-related topics I recommend the following books:

* [Get Programming with Go](https://amzn.to/3eQdVpR)
* [Go in Practice](https://amzn.to/3bgq5GN)
* [Go in Action](https://amzn.to/3qgZmyf)
* [Go Web Programming](https://amzn.to/30euJ1U)
* [Go Programming Blueprints - Second Edition](https://amzn.to/3uX2in5)
* [The Go Programming Language](https://amzn.to/3rkr3ro)