What Made Golang Become Popular? Its Creators Look Back (acm.org) 52
Created at Google in late 2007, the Go programming language was open sourced in late 2009, remember its creators, and "since then, it has operated as a public project, with contributions from thousands of individuals and dozens of companies."
In a joint essay in Communications of the ACM, five of the language's five original creators explore what brought growing popularity to this "garbage-collected, statically compiled language for building systems" (with its self-contained binaries and easy cross-compilation). "The most important decisions made in the language's design...were the ones that made Go better for large-scale software engineering and helped us attract like-minded developers...." Although the design of most languages concentrates on innovations in syntax, semantics, or typing, Go is focused on the software development process itself. Go is efficient, easy to learn, and freely available, but we believe that what made it successful was the approach it took toward writing programs, particularly with multiple programmers working on a shared codebase. The principal unusual property of the language itself — concurrency — addressed problems that arose with the proliferation of multicore CPUs in the 2010s. But more significant was the early work that established fundamentals for packaging, dependencies, build, test, deployment, and other workaday tasks of the software development world, aspects that are not usually foremost in language design.
These ideas attracted like-minded developers who valued the result: easy concurrency, clear dependencies, scalable development and production, secure programs, simple deployment, automatic code formatting, tool-aided development, and more. Those early developers helped popularize Go and seeded the initial Go package ecosystem. They also drove the early growth of the language by, for example, porting the compiler and libraries to Windows and other operating systems (the original release supported only Linux and MacOS X). Not everyone was a fan — for instance, some people objected to the way the language omitted common features such as inheritance and generic types. But Go's development-focused philosophy was intriguing and effective enough that the community thrived while maintaining the core principles that drove Go's existence in the first place. Thanks in large part to that community and the technology it has built, Go is now a significant component of the modern cloud computing environment.
Since Go version 1 was released, the language has been all but frozen. The tooling, however, has expanded dramatically, with better compilers, more powerful build and testing tools, and improved dependency management, not to mention a huge collection of open source tools that support Go. Still, change is coming: Go 1.18, released in March 2022, includes the first version of a true change to the language, one that has been widely requested — the first cut at parametric polymorphism.... We considered a handful of designs during Go's first decade but only recently found one that we feel fits Go well. Making such a large language change while staying true to the principles of consistency, completeness, and community will be a severe test of the approach.
In a joint essay in Communications of the ACM, five of the language's five original creators explore what brought growing popularity to this "garbage-collected, statically compiled language for building systems" (with its self-contained binaries and easy cross-compilation). "The most important decisions made in the language's design...were the ones that made Go better for large-scale software engineering and helped us attract like-minded developers...." Although the design of most languages concentrates on innovations in syntax, semantics, or typing, Go is focused on the software development process itself. Go is efficient, easy to learn, and freely available, but we believe that what made it successful was the approach it took toward writing programs, particularly with multiple programmers working on a shared codebase. The principal unusual property of the language itself — concurrency — addressed problems that arose with the proliferation of multicore CPUs in the 2010s. But more significant was the early work that established fundamentals for packaging, dependencies, build, test, deployment, and other workaday tasks of the software development world, aspects that are not usually foremost in language design.
These ideas attracted like-minded developers who valued the result: easy concurrency, clear dependencies, scalable development and production, secure programs, simple deployment, automatic code formatting, tool-aided development, and more. Those early developers helped popularize Go and seeded the initial Go package ecosystem. They also drove the early growth of the language by, for example, porting the compiler and libraries to Windows and other operating systems (the original release supported only Linux and MacOS X). Not everyone was a fan — for instance, some people objected to the way the language omitted common features such as inheritance and generic types. But Go's development-focused philosophy was intriguing and effective enough that the community thrived while maintaining the core principles that drove Go's existence in the first place. Thanks in large part to that community and the technology it has built, Go is now a significant component of the modern cloud computing environment.
Since Go version 1 was released, the language has been all but frozen. The tooling, however, has expanded dramatically, with better compilers, more powerful build and testing tools, and improved dependency management, not to mention a huge collection of open source tools that support Go. Still, change is coming: Go 1.18, released in March 2022, includes the first version of a true change to the language, one that has been widely requested — the first cut at parametric polymorphism.... We considered a handful of designs during Go's first decade but only recently found one that we feel fits Go well. Making such a large language change while staying true to the principles of consistency, completeness, and community will be a severe test of the approach.
Did it? (Score:5, Insightful)
It's a long long way from "popular" in the general sense, although I'm sure there are people it is popular with.
Re: (Score:1)
Re: (Score:3)
I am pretty sure Drag n' Drop is as popular as ever. Supported by many websites etc.
Re: (Score:2)
I am pretty sure Drag n' Drop is as popular as ever. Supported by many websites etc.
Got any proof?! Cite a study! /s
Re: (Score:2)
My office phone is ALWAYS set to Do-not-Disturb. When I look around colleagues' desks, I'd say it's the most popular phone setting around.
Re:Did it? (Score:5, Interesting)
It's used by all the big boys - Amazon (AWS), Google, Microsoft, Facebook, Netflix; if you're working at a FAANG scale company you can't escape it. It's also used by all the startups modelling themselves around big tech.
It's not however popular in your generic run of the mill companies, you're right, if all you're doing is working as a dev at your local healthcare provider, financial institution, legal firm, engineering firm, telecommunications firm or whatever, then you're absolutely right, you probably won't see it.
Articles like this I suspect are written by folks who live in that Silicon Valley bubble and that's the clique you refer to that it's popular with. No one else really has to give a shit.
I've had to pick it up because I do work in a big tech firm, my impressions of it are "meh". I still think C# is the most well designed multi-paradigm language out there. Go has a few nice features, but it's omissions are painful for anyone whose worked with something like C++, C# or Java. For a language only 5 years younger than C# it does feel very immature in it's design, I'd argue if anything it's evolving a little bit too slowly to the extent it could well just get left behind.
Re:Did it? (Score:5, Insightful)
Go focuses on being readable, maintainable, portable, safe, and fast. It's really hard to deviate from the "expected" way to write Go, and that's the wole point. There are no affordances for clever abstractions and tricks in Go, and the payoff is the code is (usually) instantly familiar, has predictable overhead, and is relatively performant. I've done production work with just about every language that exists and I've seen some borderline unreadable C#, C++ and Java. That said, there 2 things I reproach Go, 1) that they elected to go with a GC instead of reference counting, and 2) the Java-like forced directory layout. Ignoring those "chpices" the compiler is top notch, the tooling arguably the best out there, the test env is a stroke of genius, and the language is dead simple. People who dislike Go tend to be the same whose code is unintelligible to to anyone but themselves since they have some "Einstein level" insight into how to meld inheritance and abstractions to completely obfuscate a code base. If it wasn't for the GC drawback, I'd be huge proponent of Go. I know you can disable the "auto" GC, but you still have to run it manually which is the definition of non-deterministic when dealing with multi-threaded apps.
Re: (Score:1)
If you hate Go because it uses a GC then you're not really picking the right language for the job. What you want already exists, it's called C.
> People who dislike Go tend to be the same whose code is unintelligible to to anyone but themselves since they have some "Einstein level" insight into how to meld inheritance and abstractions to completely obfuscate a code base.
This is just drivel, if you don't understand why other languages can churn out cleaner, more readable code than Go, then it's because you
Re: (Score:3)
That was "proven" long ago by Betram Meyer: Object-Oriented Software Construction 2Ed (Prentice Hall (engl. Titel))
I read that book and I have it, but I don't remember it being proven in there.
Re: (Score:2)
So I picked the wrong book?
Anyway, he made the language Eiffel, that had about a dozen GC libraries. The compiler would pick the GC library and prepare it for linking that suited the flow of the program most.
During this time of research he analyzed about 30 C programs. None of them was free from memory errors and none of them spent less time in malloc/free code than equivalent Eiffel programs spent with GC. ( One of the main problem is the endless clutterig of C code like:
if (ptr != NULL) {
Re: (Score:2)
GC run at the wrong time will hose latency. Important for low-latency and realtime apps. That certainly sounds like a drawback at least for those types of apps. Unless you can control exactly when the GC runs. You do get some control in, say, C#.
In the more general case, yes, the GC can usually do a better job at freeing memory than the typical developer; however, as in most things software-related, YMMV.
Re: (Score:2)
GC run at the wrong time will hose latency.
That depends on the way how GC is build into the runtime.
Important for low-latency and realtime apps.
Thee are plenty of low latency GC implementations.
Unless you can control exactly when the GC runs.
There are plenty of GC implementations that exactly do that.
Re: (Score:2)
This "amateur" has been in the business for over 30 years.
I know how the .NET garbage collector works.
There is NO way around it getting in your way in low-latency applications. In large part, because it has to collect not only objects created by you, but also those created by external libs, as well as those created by the runtime itself.
Best (but not perfect) way is the same you'd do in an unmanaged language: preallocate all the RAM you are going to use and make sure you do little to no object creating any
Re It makes the hard stuff easy (Score:4, Interesting)
I've done concurrent programming in PL/1 and hated it, B and C and hated it, Concurrent Pascal and Java and merely detested it, and now Go and enjoyed it.
Go allows me to write pipelines like 'distribute | sample | report' inside a program, and have the middle step be an array of goroutines, all running in parallel, all updating private data structures without locks, to implement a multi-way data collection problem in a way that's not only 200-odd times faster, but also understandable.
The older lock-based schemes are hard to read, and even harder to debug.
Go makes me effective
Re: (Score:2)
Note that the same "no-lock" approach is achievable in Pascal, Java and C, but you need to write the code that way.
If your Go code is 200x faster, that's your error (Score:2)
I've done concurrent programming in PL/1 and hated it, B and C and hated it, Concurrent Pascal and Java and merely detested it, and now Go and enjoyed it.
So you're idiosyncratic. I've been working in the industry almost 25 years and have never even heard of B in production and never seen anyone doing mission-critical work in Pascal, so I doubt your experience is that typical. However, this is still your opinion. I've done a lot of concurrent Java and if it's painful, you either haven't been doing it in t
Re: (Score:2)
That sounds like youthful arrogance there. You may have been in the industry for 25 years but if the GP said they worked with B in production that means you're a *lot* younger and less experienced (in terms of total time) than he is. B came out in 1969. You may indeed be quite expert in your field, and I'm sure you are, but so likely is the GP. To say tha
Re: (Score:2)
I especially am puzzled by the article's comment that "Go is now a significant component of the modern cloud computing environment".
Among which cloud? Google's? Does any other cloud use Go?
Re: (Score:3)
Re: (Score:3, Informative)
go to cncf.io
.net developers that will never touch go, but the devops space has exploded with go apps. the entire container toolchain is written in go. a lot of hashicorp stuff, terraform, vault, is written in go. In my day job I haven't touched something that isn't python, go or bash in almost seven years, t
Most of those projects are written in go. in particular, kubernetes
The more software developer-focused devops/SRE folks are writing in python and go
there are a lot of enterprise
Re: Did it? (Score:2)
Given the outrageous memory use of the Go runtime, I bet clouds want you to use it. More RAM demand is more dollars.
Re: (Score:2)
It's very popular on devops teams. Gitlab uses it, for example. If you want to make custom server software it's really nice.
Re: (Score:1)
Unfortunately I can't name names without getting in trouble, but from what I recall there are quite a few cloud services in Go. I worked for one and am restricted so I can't say much more than that. We used Go and it *was* fast, but there were three things that really bugged me about Go:
1. Too immature. Libraries were just not there for everything we wanted.
2. Kept being annoyed that it was so painful to do some things that are trivial in other languages.
3. Decent debugging tools don't exist. Print st
Re: (Score:1)
I used some golang today. (Score:4, Informative)
Golong? (Score:1)
Go long. My #1 called play. My only called play.
This place sucks with all these ads. Is there nothing better in the firehouse but these payola stories for rats in a maze?
Define popular (Score:3, Informative)
I see plenty of dev job adverts for js, python, java and C++ on the job boards I look at. I can count on the fingers of one hand the number I've seen for Go in the last few years.
Re: (Score:3)
Looking at it from the other side, I've seen an increase in the overall *quality* of applicants when you advertise Go positions vs js, python. And when discussing with devs it is "popular" in the sense that they like the idea of starting a new project with it.
Re: (Score:3, Insightful)
It's not used by the sorts of companies that advertise on job boards, it's used by the sorts of companies that find you, or that you apply for directly - Amazon, Google, Netflix, Microsoft, Meta and the entire ecosystem that stems around those companies; i.e. the hundreds of startups and established rapidly growing tech companies staffed by people who previously worked in the aforementioned big tech companies.
If you're just applying for jobs at your local generic companies then you're right, it's really not
Re: (Score:3)
Is it actually popular? (Score:2)
If you look at the TIOBE index, Go is placed at the 14th place with a 1.11% quality index and a loss of 9% in the past year.
Re: (Score:2)
(relative loss to its score in the previous year)
Re: (Score:1)
The TIOBE meta-index says that TIOBE is still tied for least useful popularity index, with zero utility due to being based on an easily gamed SEO technique. This represents a 0% change from a month ago, a year ago, and a decade ago.
Re: (Score:1)
Not that I'm pretending Go is particularly popular, I agree, it's not as popular as others, it's definitely gaining traction, and TIOBE is a completely useless bag of wank, it's pointless even trying to ascertain anything of value from TIOBE.
I mean, look at the state of this:
https://www.tiobe.com/tiobe-in... [tiobe.com]
Highest Position (since 2014): #6 in May 2022
Lowest Position (since 2014): #49 in Jan 2011
Lowest position since 2014 was number 49 in 2011, what? How is 2011 since 2014? On top of that, it's not clear wh
Golang became popular? (Score:2)
Popular? Quoi? Was ist das? (Score:2)
What made what become popular?
Re: (Score:2)
It's fast (Score:2)
Unity (the game engine) actually allows the use of High Performance C# (HPCS), a subset that only allows valu
Toolchain (Score:1)
Golang is designed to disempower devs (Score:1)
Re: (Score:2)
Your comment would be more helpful if you explained what necessary language constructs were omitted.
comprehensible (Score:5, Insightful)
I learnt Go a couple weeks ago and I've already a few useful programs in it. That's your "why" right there. The design decision to move away from "cool" syntax that needs hieroglyph levels of decyphering before you get what the code is actually doing is a very smart idea. It means I can read the code another programmer was writing and get what it's doing, even though I'm new to the language and he's a pro.
Re: (Score:2)
I learnt Go a couple weeks ago and I've already a few useful programs in it.
I accidentally a grammar checker in Go!
That's easy: (Score:2)
Good PL, not bloated, zero-fuss cross-platform, wicked fast compilation and "freezing" to native binaries, neat modern concepts supported, purpose-built for the implementation of foundational networked APIs and services right at the time that that was becoming a huge thing.
There's a good reason Go and Rust are successful. They each solve a bunch of problems that everybody saw but no one had the time, resources and/or skill to solve. I'm not a systems guy, but it was clear to me that when Go and Rust came ab
It is not popular (Score:2)
Story time (Score:2)
The intern we settled on was 3rd or 4th year university student with only Java experience at the time.
He was able to learn Go and complete the project on time. I am confident he could have done it in
Go filled a need (Score:1)
I've been using Go since about v1.4. When Go came on the scene, our main choices for a web or API service were basically:
C++ and Java (Score:1)
Go has become popular with those who work on the rapid deployment of large scale cloud applications. The reason how complex and bloated C++ and Java have become. Go is simpler and more secure and will replace them there. Rust will replace C++ and C in OS development for the same reason.