09-03-2021 Preface: This is by far my longest blog entry ever. It may not actually be that long, considering my other entries were quite short, but there is a summary at the bottom of the page if you want to get my view on the situation straight away. 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.