<story><title>Leaving Go</title><url>http://jozefg.bitbucket.org/posts/2013-08-23-leaving-go.html</url></story><parent_chain><item><author>tptacek</author><text>If you&amp;#x27;re looking for a language that will enable &amp;quot;bottom-up development&amp;quot;, where you gradually define, in Paul Graham On Lisp style, a language optimized for your problem domain, Golang is not the language for you.&lt;p&gt;Similarly, if you&amp;#x27;re looking for a language that will read and write like a specification for your problem domain, so that writing your program has the side effect of doing half the work of proving your program correct, Golang is also not a good choice.&lt;p&gt;What&amp;#x27;s worse, those two approaches to solving programming problems are compatible with each other. Lots of sharp programmers deeply appreciate both of them, and are used to languages that gracefully provide both of those facilities. If that describes you, Golang is a terrible choice; it will feel like writing 1990s Java (even though it really isn&amp;#x27;t).&lt;p&gt;There are two kinds of programmers for whom Golang will really resonate:&lt;p&gt;Python and Ruby developers who wish they could trade a bit of flexibility, ambiguousness, or dynamicism for better performance or safer code seem to like Golang a lot. Naive Golang code will outperform either Python or Ruby. Golang&amp;#x27;s approach to concurrency, while not revolutionary, is very well executed; Python and Ruby developers who want to write highly concurrent programs, particularly if they&amp;#x27;re used to the evented model, will find Golang not only faster but also probably easier to build programs in.&lt;p&gt;Systems C programmers (&lt;i&gt;not&lt;/i&gt; C++ programmers; if you&amp;#x27;re a C++ programmer in 2014, chances are you appreciate a lot of the knobs and dials Golang has deliberately jettisoned) might appreciate Golang for writing a lot like C, while providing 80% of the simplicity and flexibility value of Python. In particular, if you&amp;#x27;re the kind of programmer that starts projects in Python and then routinely &amp;quot;drops down&amp;quot; to C for the high-performance bits, Golang is kind of a dream. Golang&amp;#x27;s tooling is also optimized in such a way that C programmers will deeply appreciate it, without getting frustrated by the tools Golang misses that are common to other languages (particularly, REPLs).&lt;p&gt;At the end of the day, Golang is overwhelmingly about pragmatism and refinement. If you&amp;#x27;re of the belief that programming is stuck in a rut of constructs from the 1980s and 1990s, and that what is needed is better &lt;i&gt;languages&lt;/i&gt; that more carefully describe and address the problems of correct and expressive programming, Golang will drive you nuts. If you&amp;#x27;re the kind of person who sees programming languages as mere tools --- and I think that&amp;#x27;s a totally legitimate perspective, personally --- you might find Golang very pleasant to use. I don&amp;#x27;t know that Golang is a great &lt;i&gt;language&lt;/i&gt;, but it is an extremely well-designed tool.</text></item></parent_chain><comment><author>stiff</author><text>There is something to your description. I use Go sometimes, for pragmatic reasons, when I need more performance than I can get from Python or Ruby, but boy is it a ugly language!&lt;p&gt;There are just tens of little ugly things Go does and the result is, well, even uglier. Writing four functions for every collection to be sorted, writing x = append(x, foo) everywhere, shitty namespacing that prevents you from writing list := list.New() and so on and so forth. Even C is more elegant, and I would probably prefer to use C, if only C came with a library manager like rubygems or go get and a decent repository of libraries. I would even prefer &lt;i&gt;Java&lt;/i&gt; if it produced native binaries and had an integrated library manager.</text></comment>
<story><title>Leaving Go</title><url>http://jozefg.bitbucket.org/posts/2013-08-23-leaving-go.html</url></story><parent_chain><item><author>tptacek</author><text>If you&amp;#x27;re looking for a language that will enable &amp;quot;bottom-up development&amp;quot;, where you gradually define, in Paul Graham On Lisp style, a language optimized for your problem domain, Golang is not the language for you.&lt;p&gt;Similarly, if you&amp;#x27;re looking for a language that will read and write like a specification for your problem domain, so that writing your program has the side effect of doing half the work of proving your program correct, Golang is also not a good choice.&lt;p&gt;What&amp;#x27;s worse, those two approaches to solving programming problems are compatible with each other. Lots of sharp programmers deeply appreciate both of them, and are used to languages that gracefully provide both of those facilities. If that describes you, Golang is a terrible choice; it will feel like writing 1990s Java (even though it really isn&amp;#x27;t).&lt;p&gt;There are two kinds of programmers for whom Golang will really resonate:&lt;p&gt;Python and Ruby developers who wish they could trade a bit of flexibility, ambiguousness, or dynamicism for better performance or safer code seem to like Golang a lot. Naive Golang code will outperform either Python or Ruby. Golang&amp;#x27;s approach to concurrency, while not revolutionary, is very well executed; Python and Ruby developers who want to write highly concurrent programs, particularly if they&amp;#x27;re used to the evented model, will find Golang not only faster but also probably easier to build programs in.&lt;p&gt;Systems C programmers (&lt;i&gt;not&lt;/i&gt; C++ programmers; if you&amp;#x27;re a C++ programmer in 2014, chances are you appreciate a lot of the knobs and dials Golang has deliberately jettisoned) might appreciate Golang for writing a lot like C, while providing 80% of the simplicity and flexibility value of Python. In particular, if you&amp;#x27;re the kind of programmer that starts projects in Python and then routinely &amp;quot;drops down&amp;quot; to C for the high-performance bits, Golang is kind of a dream. Golang&amp;#x27;s tooling is also optimized in such a way that C programmers will deeply appreciate it, without getting frustrated by the tools Golang misses that are common to other languages (particularly, REPLs).&lt;p&gt;At the end of the day, Golang is overwhelmingly about pragmatism and refinement. If you&amp;#x27;re of the belief that programming is stuck in a rut of constructs from the 1980s and 1990s, and that what is needed is better &lt;i&gt;languages&lt;/i&gt; that more carefully describe and address the problems of correct and expressive programming, Golang will drive you nuts. If you&amp;#x27;re the kind of person who sees programming languages as mere tools --- and I think that&amp;#x27;s a totally legitimate perspective, personally --- you might find Golang very pleasant to use. I don&amp;#x27;t know that Golang is a great &lt;i&gt;language&lt;/i&gt;, but it is an extremely well-designed tool.</text></item></parent_chain><comment><author>m0th87</author><text>You&amp;#x27;re right, Golang is all about pragmatism, and a very pragmatic thing for language designers to do is to listen to the marketplace on how the language should evolve. Lack of polymorphism must be the most common critique of Golang. It seems pretty practical to add it, as it would greatly reduce the amount of boilerplate. And it&amp;#x27;s not as if polymorphism is stuck in the ivory tower - languages used in industry have had them for decades.</text></comment>