2021-03-09

Disclaimer: Lots of rambling ahead. Skip to the end for a summary my actual
view on the topic.

The Go programming language seems to be gaining in popularity as of late.
Not only are people talking about it, but there has been an increase in jobs
requiring expertise in this particular programming language. In my honest
opinion, this is a negative trend, and I will try to explain why.

Go is at heart a simple language. It shares a lot of qualities with C, being
created by people who have worked with that programming language for many years
(Rob Pike and Ken Thompson). However, this was a choice made out of necessity;
code bases at Google were growing and it became clear that maintaining their
sizeable C++ codebases would be difficult in the future. Go is therefore a
direct response to the idea that more features are good. Instead of following
the C++ or Perl philosophy of "there is more than one way to do it", they have
streamlined the development process and made conscious efforts to minimize
differences in programming styles. One clear example which may surprise
programmers with a C or C++ background is that Go enforces tabs for indentation
and disallows the use a whole line for opening curly braces. For anyone that has
been forced to deal with programs written in a bad style, this may be a virtue
of Go. I would rather argue that it is further restricting the developers
options. Sometimes, one style may be better at conveying one specific type of
information. Additionally, modern tools like clang-format exist for C and C++
for making a project comply to a certain style, if they like. Removing the
ability to choose a style in C is therefore a solution to a non-problem.

Restricting the programmers options is by no means a positive aspect of a
language, either. On the one hand, you have C++ which features several different
ways of declaring a simple variable, and 12 different string types. On the
other, you have Go, which enforces strict style and features few ways to achieve
a given goal. Do not get me wrong, C++ is not a very well designed language. I
feel the ideal should be somewhere in the middle. One brilliant example is
Scheme. It is a minimal language, but gives the programmer the tools to do
whatever they want. Macros provide endless extensibility, but the language core
is not as bloated as, say, Common Lisp. However, if Scheme is such a great
language compared to Go, why is it the latter that sees the great amount of
success in the professional market?

The truth is that managers adore Go's lack of features. In a corporate setting,
expressivity is frowned upon. The programmer is merely a resource for the
company. With capital interests, interchangability between programmers becomes
quite alluring to businesses. Instead of creating a language for art, for
personal expression and creativity, Go is a language made to "get stuff done".
This is evident in Rob Pike's explanation on why he wanted to create Go:

"The key point here is our programmers are Googlers, they're not researchers.
 They're typically fairly young, fresh out of school, probably learned Java,
 maybe learned C or C++, probably learned Python. They're not capable of
 understanding a brilliant language but  we want to use them  to build good
 software. So, the language that we give them has to be easy for them to
 understand and easy to adopt."

It should be mentioned that Go is not the only language like this. Java too has
a reputation of being loved by management. What I want does not at all
correspond to the opinions of managers.

My main point of this short essay is that because of what Go represents,
learning it and using it for jobs by free will makes it easier for corporations
to control their work force. You directly sacrifice some of your freedom of
expression in favour of, what exactly? Is it an easier language than most
others? Maybe. I would rather suggest getting good at C or a language like
Scheme. But I may be misinterpreting your intentions. Maybe you are one of
those programmers who just want to "get stuff done", and do not care about
the act of programming in itself. In this case, I can not sympathize with you.

To summarize: Go is a simple language, made simple to make programmers
interchangable to corporations. Pushing for it's adoption in work places is
immoral because it takes power away from the workers responsible for the
company's success, and gives power to the ruling class.

built with sh(1) and cat(1)