<story><title>Why I Program in Go</title><url>http://tech.t9i.in/2013/01/why-program-in-go/</url></story><parent_chain><item><author>estavaro</author><text>You need to be commended for defending Go.&lt;p&gt;I don&apos;t think the Go developers hide the fact that they mean go as a Systems level programming language. It has higher level features, but the developers don&apos;t really mind the fact that Go isn&apos;t going to be delivering a whole lot of high level features. Maybe if they come in the form of libraries...&lt;p&gt;Funny thing about Go is that as a compiled language, folks often need to send the source-code to the deployment servers to compile on them too. I seem to recall that deployment servers shouldn&apos;t need to have development tools which were themselves exposing the servers to bad intention by bad folks. It&apos;s just hard to keep the separation I guess.&lt;p&gt;Go error handling is not to be taken lightly just because you can ignore error codes or just print the error and be done with it. I seem to recall that the core developers of Go demanding that Go users try harder to handle errors. Something the compiler doesn&apos;t really &quot;enforce&quot;.&lt;p&gt;I prefer Dart to Go because Dart starts from a higher level of abstraction already. Also Dart has been the result of two years of development even if many of the Dart developers also had plenty of experience with developing past languages and tools.&lt;p&gt;OOP already gives us a lot of bondage and discipline. No need for more incentive by the compiler. Sometimes a couple of extra tools can help our hands without it being forced by the compiler with every run. Say a tool that helps to tell us which methods or variables aren&apos;t being used. Go forces us to deal with that on every compiler run. (Even if it can be disabled, but the Go developers prefer to avoid proliferation of config options.)&lt;p&gt;It&apos;s good to have Go and Dart around. So it&apos;s not just legacy (Java) and Microsoft (C#) dictating the standards.</text></item><item><author>zaphar</author><text>My day job involves working with Java and C++ on 10+ year old systems. All of my hobby or side projects are in Go these days with occasional diversions into haskell, ML or various Lisps.&lt;p&gt;So I&apos;ll try to impart some understanding of why I would switch to Go from Java or C++.&lt;p&gt;First lets get some things out of the way. Go is fast enough and getting faster very quickly and it definitely has a smaller memory footprint. So when compared to java and C++ in those dimensions it holds up just fine but that might not be enough to sway someone over to the Go camp.&lt;p&gt;It&apos;s about what else Go has:&lt;p&gt;* Go is a batteries included language. The stdlib has almost everything you need to get started much like python does.&lt;p&gt;* Go is fast for development. I mean really fast. I mean like using Lisp in a REPL fast (almost). I really can&apos;t express how fast it&apos;s development speed is adequately just trust me its really really fast. This is not just about how fast it compiles although that&apos;s part of it. (I&apos;ve literally been able to write, compile, and run a go &quot;script&quot; faster than an equivalent python script.)&lt;p&gt;* Go makes concurrency easy to get right. I haven&apos;t seen any other language get this so right since Erlang.&lt;p&gt;* Go is concise. There is no wasted typing. It&apos;s easy to read and it&apos;s easy to write. Every feature of the language is orthoganal. And it tells you quickly when you&apos;ve done it wrong.&lt;p&gt;* Go does OO right. Code reuse through composition not inheritance. Polymorphism through interfaces not inheritance. I never have to worry about it with Go. C++ or java? yeah I&apos;ve got some inheritance related war stories there.&lt;p&gt;All of these things exist in other languages but Go is the only language where they all exist together. This is reason enough to switch to Go but there&apos;s more.&lt;p&gt;Go&apos;s future is bright. I don&apos;t say this because it has celebrity tech people behind it. I say this because the foundation they are laying demonstrates the core team knows what they are doing. Here&apos;s some examples.&lt;p&gt;* Go comes with all the tools you need to programmatically understand Go code. Parser, Type checking, Static analysis is all available via the stdlib. As a result GoCode which adds IDE functionality to the EDITOR of your choice came on the scene very quickly. Java doesn&apos;t have this. C++ doesn&apos;t have this. Go made it possible to create an IDE as a service with minimal effort. Besides Gocode you also have gofmt. Never worry about code formatting again. gofmt will reformat it for you and it will &lt;i&gt;never&lt;/i&gt; break your code. It&apos;s 100% safe. I am aware of no other language excepting lisp with this functionality.&lt;p&gt;Lastly I want to address your &quot;a lot less powerful&quot; comment. I think it&apos;s false. In now way is Go less powerful than Java. It&apos;s fast enough to be in the same league as java. It has a lower memory footprint than java. It compiles faster than java. And the language itself is if anything more powerful and expressive than java. It has closures, It has interfaces that are just as typesafe and yet easier to use than java.&lt;p&gt;In fact I&apos;ll sum it up in one word: Go is &lt;i&gt;relaxing&lt;/i&gt;.</text></item><item><author>pron</author><text>For the life of me I can&apos;t understand why anyone would give up the power (in terms of profiling, monitoring and ecosystem, and somewhat better performance, too) of the JVM, for a language marginally more convenient than Java, and arguably less expressive than other JVM languages. The only thing I could think of is a smaller RAM footprint, if you care about that sort of thing.&lt;p&gt;Whenever Go is compared to Java, the arguments in its favor seem kind of fuzzy. After all, one of the motivations behind Go was a C-like language with far better compilation time than C++. And Java already fits the bill. So, yeah, Go is leaner and more modern -- but certainly not by an order of magnitude, like other JVM languages. Here, too, the author says that he didn&apos;t like Java&apos;s IDEs (really? does Go have better tooling? Because Java IDEs really get the job done), frameworks etc. But those things are simply the result of years of changing fashions. Newer Java &quot;frameworks&quot; are just as lean-and-mean as Go.&lt;p&gt;There are so many new and exciting languages around, but Go seems to carry the least &quot;oomph&quot; of the lot. It&apos;s basically Java. A little nicer; a little slower; a lot less powerful.</text></item></parent_chain><comment><author>tptacek</author><text>&lt;i&gt;Funny thing about Go is that as a compiled language, folks often need to send the source-code to the deployment servers to compile on them too. I seem to recall that deployment servers shouldn&apos;t need to have development tools which were themselves exposing the servers to bad intention by bad folks. It&apos;s just hard to keep the separation I guess.&lt;/i&gt;&lt;p&gt;This is what systems administrators with grey beards thought in the 1990s. A moment&apos;s thought about what an attacker who can run a compiler can do instead of running a compiler should be enough to inform you about how silly the idea is in practice.</text></comment>
<story><title>Why I Program in Go</title><url>http://tech.t9i.in/2013/01/why-program-in-go/</url></story><parent_chain><item><author>estavaro</author><text>You need to be commended for defending Go.&lt;p&gt;I don&apos;t think the Go developers hide the fact that they mean go as a Systems level programming language. It has higher level features, but the developers don&apos;t really mind the fact that Go isn&apos;t going to be delivering a whole lot of high level features. Maybe if they come in the form of libraries...&lt;p&gt;Funny thing about Go is that as a compiled language, folks often need to send the source-code to the deployment servers to compile on them too. I seem to recall that deployment servers shouldn&apos;t need to have development tools which were themselves exposing the servers to bad intention by bad folks. It&apos;s just hard to keep the separation I guess.&lt;p&gt;Go error handling is not to be taken lightly just because you can ignore error codes or just print the error and be done with it. I seem to recall that the core developers of Go demanding that Go users try harder to handle errors. Something the compiler doesn&apos;t really &quot;enforce&quot;.&lt;p&gt;I prefer Dart to Go because Dart starts from a higher level of abstraction already. Also Dart has been the result of two years of development even if many of the Dart developers also had plenty of experience with developing past languages and tools.&lt;p&gt;OOP already gives us a lot of bondage and discipline. No need for more incentive by the compiler. Sometimes a couple of extra tools can help our hands without it being forced by the compiler with every run. Say a tool that helps to tell us which methods or variables aren&apos;t being used. Go forces us to deal with that on every compiler run. (Even if it can be disabled, but the Go developers prefer to avoid proliferation of config options.)&lt;p&gt;It&apos;s good to have Go and Dart around. So it&apos;s not just legacy (Java) and Microsoft (C#) dictating the standards.</text></item><item><author>zaphar</author><text>My day job involves working with Java and C++ on 10+ year old systems. All of my hobby or side projects are in Go these days with occasional diversions into haskell, ML or various Lisps.&lt;p&gt;So I&apos;ll try to impart some understanding of why I would switch to Go from Java or C++.&lt;p&gt;First lets get some things out of the way. Go is fast enough and getting faster very quickly and it definitely has a smaller memory footprint. So when compared to java and C++ in those dimensions it holds up just fine but that might not be enough to sway someone over to the Go camp.&lt;p&gt;It&apos;s about what else Go has:&lt;p&gt;* Go is a batteries included language. The stdlib has almost everything you need to get started much like python does.&lt;p&gt;* Go is fast for development. I mean really fast. I mean like using Lisp in a REPL fast (almost). I really can&apos;t express how fast it&apos;s development speed is adequately just trust me its really really fast. This is not just about how fast it compiles although that&apos;s part of it. (I&apos;ve literally been able to write, compile, and run a go &quot;script&quot; faster than an equivalent python script.)&lt;p&gt;* Go makes concurrency easy to get right. I haven&apos;t seen any other language get this so right since Erlang.&lt;p&gt;* Go is concise. There is no wasted typing. It&apos;s easy to read and it&apos;s easy to write. Every feature of the language is orthoganal. And it tells you quickly when you&apos;ve done it wrong.&lt;p&gt;* Go does OO right. Code reuse through composition not inheritance. Polymorphism through interfaces not inheritance. I never have to worry about it with Go. C++ or java? yeah I&apos;ve got some inheritance related war stories there.&lt;p&gt;All of these things exist in other languages but Go is the only language where they all exist together. This is reason enough to switch to Go but there&apos;s more.&lt;p&gt;Go&apos;s future is bright. I don&apos;t say this because it has celebrity tech people behind it. I say this because the foundation they are laying demonstrates the core team knows what they are doing. Here&apos;s some examples.&lt;p&gt;* Go comes with all the tools you need to programmatically understand Go code. Parser, Type checking, Static analysis is all available via the stdlib. As a result GoCode which adds IDE functionality to the EDITOR of your choice came on the scene very quickly. Java doesn&apos;t have this. C++ doesn&apos;t have this. Go made it possible to create an IDE as a service with minimal effort. Besides Gocode you also have gofmt. Never worry about code formatting again. gofmt will reformat it for you and it will &lt;i&gt;never&lt;/i&gt; break your code. It&apos;s 100% safe. I am aware of no other language excepting lisp with this functionality.&lt;p&gt;Lastly I want to address your &quot;a lot less powerful&quot; comment. I think it&apos;s false. In now way is Go less powerful than Java. It&apos;s fast enough to be in the same league as java. It has a lower memory footprint than java. It compiles faster than java. And the language itself is if anything more powerful and expressive than java. It has closures, It has interfaces that are just as typesafe and yet easier to use than java.&lt;p&gt;In fact I&apos;ll sum it up in one word: Go is &lt;i&gt;relaxing&lt;/i&gt;.</text></item><item><author>pron</author><text>For the life of me I can&apos;t understand why anyone would give up the power (in terms of profiling, monitoring and ecosystem, and somewhat better performance, too) of the JVM, for a language marginally more convenient than Java, and arguably less expressive than other JVM languages. The only thing I could think of is a smaller RAM footprint, if you care about that sort of thing.&lt;p&gt;Whenever Go is compared to Java, the arguments in its favor seem kind of fuzzy. After all, one of the motivations behind Go was a C-like language with far better compilation time than C++. And Java already fits the bill. So, yeah, Go is leaner and more modern -- but certainly not by an order of magnitude, like other JVM languages. Here, too, the author says that he didn&apos;t like Java&apos;s IDEs (really? does Go have better tooling? Because Java IDEs really get the job done), frameworks etc. But those things are simply the result of years of changing fashions. Newer Java &quot;frameworks&quot; are just as lean-and-mean as Go.&lt;p&gt;There are so many new and exciting languages around, but Go seems to carry the least &quot;oomph&quot; of the lot. It&apos;s basically Java. A little nicer; a little slower; a lot less powerful.</text></item></parent_chain><comment><author>stock_toaster</author><text>&lt;p&gt;&lt;pre&gt;&lt;code&gt;  &amp;#62; Funny thing about Go is that as a compiled language, folks often need
  &amp;#62; to send the source-code to the deployment servers to compile on them too.
&lt;/code&gt;&lt;/pre&gt;
They do? Why not build as part of a CI run? Or via cross compile?&lt;p&gt;It is generally much easier to deploy a &lt;i&gt;versioned&lt;/i&gt; statically compiled binary, compared to rolling out code to production in some languages (ruby, python, etc).</text></comment>