
Go Developer Survey 2019 Results - ainar-g
https://blog.golang.org/survey2019-results
======
wgyn
My hot takes...

1) Fast adoption of GoLand/IntelliJ (and death of Sublime/Atom)

2) Nearly complete adoption of modules (my company is behind!)

3) "I feel welcome in the Go community" dipped from 82% to 75%. Anecdotally
most people in Go are really nice but some people are aggressively pedantic
(don't call it the Golang community!)

~~~
tptacek
I've been a Go programmer for many years, and I like the language and the
community, but I have not found it to be uniformly welcoming. "Aggressively
pedantic" is a good way to put it.

~~~
alharith
I have been to 4 Go conferences (two gophercons). Despite being first
generation mediterranean-descent (my father is the exact immigrant story
touted in many circles), because I fit the 'white christian male' bill, I have
felt anything but welcome in the Go community. Actually, many times, I feel
like it is actively hostile towards me. I remember one of the closing
keynotes, a man stood up on the stage and said "Come take a picture with me
out back if you look like me, you know who you are" which left me with my jaw
dropped.

~~~
sidlls
I am missing something. Do you mean you feel there is a hostility toward those
who fit the "white christian male" bill?

~~~
tommica
I think he means the opposite, which is that he fits the "white christian
male" and feels that there is hostility towards towards people who fit the
"white christian male" bill.

~~~
alharith
To the contrary, I am usually assumed to be middle eastern (egyptian, oddly
enough, although it may not be that surprising considering the hellenistic
period and where my relatives are from) and despite being Christian, I am not
one of the accepted mainstream forms of Christianity in the US, so I face
double prejudice, on the one side from those who think Christianity is the
cause of all the worlds problems, on the other side from other Evangelical
types who think we are idol worshipping heretics. It is only when I correct
people, that I get the "oh" reply, usually in disappointment that now I don't
qualify for one of their acceptable groups of people who experienced prejudice
or a lack of acceptance.

------
xemdetia
I'm really hoping that gopls gets to 1.0 soon. I feel like gopls is the
elephant in the room that's taking a lot of air from some of the smaller
tools, and I'm glad it's being called out as a priority in this report.

~~~
atombender
I've been following it since the first public release. It's still,
unfortunately, very buggy.

I restart gopls perhaps 20-30 times a day, working in VSCode. I have to
restart it every time I switch git branches or do other major file changes
that completely break its mind.

I try to report every bug I find, but bug-reporting is even more of a
productivity killer than the bugs. It's often difficult to reproduce exactly
when they depend on an exact order of events.

Sometimes it's just seems infuriatingly like incompetence. After struggling
for hours with gopls suddenly going insane the other day (i.e. even a restart
wouldn't fix things), I realized gopls _doesn 't understand build tags_, and
will just fail in random ways on code that has a "// +build" comment. The
gopls team knows perfectly well tags are not supported, but instead of warning
you when you open the file, which would be the sensible option, they just let
gopls mismanage it.

I really hope gopls reaches maturity soon, or I'll have to consider GoLand
instead, which seems to have gotten this right.

------
kris-s
Between languages like Go, Rust, Swift, and others I feel pretty optimistic
about these new players (and I very much prefer more language diversity).

No surprise to see generics being so strongly pined for again. Very curious
about how Go getting generics will change its position in the landscape.

~~~
swagonomixxx
If Go ends up getting generics it will be a serious competitor to Java in the
enterprise small-medium size application space, and perhaps make it viable for
larger applications.

So I think it will be a huge step up for Go. This is of course if they do it
in such a way that does not increase language complexity by an order of
magnitude (e.g C++ style templates). I think Java style generics is not as
complex and something along those lines would be a huge win IMO.

~~~
twblalock
As a Java developer I would need a few things to switch and maintain my
current level of productivity: generics, a map/filter/reduce paradigm for
working on collections, and more flexible error handling -- in that order.

Oh, and let me leave "fmt" in the list of imports even when it's unused,
because adding it every time I stick in a printf to debug something, and then
needing to remove it later because of compiler errors, is incredibly
frustrating.

~~~
spyspy
It's been an unpopular opinion but I've contended for a long time that if Go
had map/filter/reduce from the onset like it has copy and append, most people
screaming for generics would have been silenced.

~~~
xzel
But doesn't that require some level of generics? This is an honest question
not rhetorical / a retort.

~~~
majewsky
Go has several generic functions like append() or make() baked into the
compiler ([https://golang.org/pkg/builtin/](https://golang.org/pkg/builtin/)).
When people are asking for generics, they're asking for a language-level
mechanism for defining additional generic functions beyond these provided by
the compiler.

~~~
xzel
I'm talking more along the line for Map/Filter/Reduce support and why those
weren't included in Go originally.

~~~
majewsky
Yes. The distinction is that there are two ways to implement
map/filter/reduce: either as additional built-in functions or in std. Only the
second way requires language-level generics support.

------
swagonomixxx
> Does your organization manage their own internal go documentation server
> (similar to godoc.org)? > No (85%)

I would be very open to setting this up at my org - is there a canonical way
to do this?

> What is the biggest challenge you personally face using Go today? > Working
> with modules / vendoring / pkg mgmt 12%

Go has come a long way since the solutions in the early days and is now
supremely better than it every was. However, vendoring is still confusing, and
it's unclear when one should commit vendor files (we did that at one of the
places I used to work) and when one shouldn't. We kept getting afraid that one
day some guy would just delete that repo off GitHub, or somebody would end up
hacking it, then we can't get an important fix out into prod. I'm not sure if
the Go team has any advice regarding this.

> What is the biggest challenge you personally face using Go today? > Issues
> with tooling 12%

I think Go in general has become very mature. From a tooling standpoint it's
almost feature complete. The only thing I would like to see there is better
autocomplete and tooling around calling C from Go but I know that's kind of
hard to achieve. I frequently work with C libraries that I have to call from
Go because Go is simply easier to write than C, but I don't think that Cgo has
good integration with gopls at the moment (and I don't think it did in any
other tooling that I've used).

~~~
zachgersh
RE: modules and vendoring, you should no longer have to worry about a package
going away now that proxies have been introduced (the default proxy right now
being proxy.golang.org).

You should be able to pull all your modules from a proxy, minus any private
repos you control (which you can either setup our own proxy for OR set The
GOPROXY var to go direct to vcs for it).

Also, not vendoring should give you a smaller repo and build speed shouldn’t
suffer too much (proxy caching and such).

~~~
swagonomixxx
Ah good point about GOPROXY.

So if I have a mix of private and public dependencies that I pull in, can I
specify a specific proxy for the private ones? Is it the GOPRIVATE env var?

~~~
chairmanwow1
The proxy should maintain a copy of all dependencies (public and private), so
only one should be necessary.

~~~
zachgersh
This should be clarified, if you setup YOUR OWN proxy it can handle both
public and private modules (side note I haven’t been able to verify this yet
with artifactory).

You can also just let your GOPROXY fallback go “direct” which will then go
straight to vcs (you need to make sure you have a gitconfig setup to redirect
https to ssh).

------
pjmlp
> What critical language features do you need that are not avaliable in Go?

==> Generics 79%

> what's the biggest challenge you personally face using Go today?

==> Generics 15%

Really? What a surprise. /s

Still wondering if Go 2.0 will actually happen, or be torpedoed like the error
improvements.

Anyway, the work appears to be ongoing here [https://go-
review.googlesource.com/c/go/+/187317](https://go-
review.googlesource.com/c/go/+/187317)

~~~
tandr
There is no Go 2.0. They kind of decided to introduce non-breaking changes
slowly and that's it for now. Nobody (from the team at least) even talks about
2.0 anymore.

~~~
pjmlp
Sure there is, even if as concept, or milestone mark of what it is supposed to
mean in language features.

The team does speak about it, as the Go 2.0 labels are pretty much still being
used, and mentioned in code reviews or occasional emails.

------
throwawaygo
~60% of respondents have <2 years experience with the language.

I'd really like to see this filtered to developers with >5 years go
experience. What do the experienced go devs want from the language? How do
they use it?

I've got a little over 9 years of almost daily use and I have little in common
with the devs in my org that are earlier in their career and coming to go with
a head full of some other language.

~~~
swagonomixxx
Out of curiosity, at what point do you consider someone a seasoned Go
developer? Is it 5 years or is it more?

I've been using Go since 2015 and I still feel like I'm not as seasoned as I
perhaps should be (I'm not really an enthusiast of the language, I just think
it's the right tool to use for 95%+ of the stuff I'm working on right now).

~~~
throwawaygo
Hard to quantify. Time in language should roughly track. Maybe number of
companies/projects developed.

Any of the dimensions you could imagine would be good starting points.

------
preommr
I am stunned by how many people actually like working with go.

As a language, I've always thought it was horrible. But as an option for tasks
like network programming, devops, setting up a web service, it's one of the
best.

So I understand it's popularity, and I reach for it frequently as well, but
not happily like others seem to.

~~~
throw_m239339
Depends on where you come from. From C, it's basically what you did with C
with bells and whistles (multiple return types instead of OUT parameters for
instance).

From Scala/Java/C#, if you really like working with these languages, I don't
think you'd enjoy Go.

And while Goroutines sound nice at first, they come with many issues that
languages that had similar concepts (like ADA tasks) did not have.

~~~
tyrankh
> Problems

Such as? :)

------
shay_ker
I’m pretty new to Go, and I recently tried to get delve working with VS Code
and it was a pretty rough experience (VS Code in general wasn’t as polished
for Go as I’d hoped). Using Delve via the command line was even harder for me
to figure out.

My experience debugging in dynamic languages has just been so much easier.
Just add a single line anywhere and boom - a repl exactly where you want it. I
don’t mind IntelliJ for Java either (a big difference being that it has a free
community edition).

I know Go is different than dynamic languages, but I wish the UX of debugging
was simpler, or that there’s a free IDE that makes it easy. I’ve also heard
you can “replay” easily with Delve, which sounds amazing if it was easy to
figure out!

~~~
tomlu
If you are a professional programmer then paying $200 for a Goland license
could ameliorate some of your complaints.

~~~
JTenerife
For individuals only $89:

[https://www.jetbrains.com/go/buy/#personal?billing=yearly](https://www.jetbrains.com/go/buy/#personal?billing=yearly)

~~~
shay_ker
You’re talking to someone who cringes at even paying for Netflix, let alone an
IDE

~~~
aganame
Should your employer/clients do the same for you? :)

------
lawl
I feel like the answer to "what prevents you from better debugging/profile"
that's dominant, "lack of knowledge/experience" may be more of a catch-all
than actually highlight a problem.

Like, there's always something you can do better, most people don't want to
claim they know everything. So in a survey I'd probably check that box/type
that answer even if I didn't have an actual problem.

------
throwaway77384
Interesting to see. Been a computer-person all my life, but only started
programming with Python like 4 years ago. Switched from Python to Go after
about a year. Go just seemed much easier to work with. I have still, to this
day, not made a single penny with Go. Never been a professional programmer.
It's so weird to think that I'm still trying to learn more and more about it
and use it for _something_. Go really pulled me in somehow. I blame Todd
McLeod and Jon Calhoun ;) Ultimately the value of Go for me seemed to be
quick-access to lots of buzzwordy things I wanted to make use of. Concurrency,
web-apps, internet / online - infrastructure things. (Funnily enough I still
don't use concurrency much or properly at all. Like, years in and I still
don't.) There is hardly a greater feeling than to make something work, to
figure something out. To know you've learned something. I just hope that one
day that will actually turn into money. That seems to be the trickiest part.
Hmmmm.

~~~
syndacks
I'm curious what it is that you do for work? You mention not making money from
Go (or programming) -- what are your goals? Is it a startup kind of thing, or
employment as a developer? I feel like you could probably get a job if you're
familiar with Go and Python you can probably start interviewing.

~~~
throwaway77384
I was a (technical, mostly) project manager for about 10 years and then
decided I didn't like that career anymore. I am indeed trying to get a small
product out there. If, however, that does not work, I'd be looking into
employment as a developer. It's kind of hard to gauge how I might operate in a
team environment. I also wonder how to even begin assessing my experience
level. I am certainly not shooting for the stars, but also getting stuck in a
proto-2-proto role would probably be terrible ;)

------
sl1ck731
When it says "I primarily develop Go on...Linux|Mac|Windows|Etc", is this
question referring to the platform the project is intended to run on? Or is it
the platform people are actually using their IDE in?

I'm just surprised that Linux _only_ is so high and Windows so low if its
referring to the "workstation".

~~~
calcifer
> is this question referring to the platform the project is intended to run
> on? Or is it the platform people are actually using their IDE in?

I think it's pretty obvious, no? "develop Go on" seems pretty self
explanatory.

~~~
sl1ck731
If it was I wouldn't have asked.

~~~
calcifer
What other meaning do you think "develop Go on" could have?

------
idoubtit
This interpretation makes an obvious mistake at the end of the "Sentiments
toward Go" section. The question asked was:

> Rank the following programming languages in terms of your preference

And the blog writes:

> people who responded to the Go Developer Survey tended to like Go. >
> However, we also wanted to understand which other languages respondents
> enjoy working with.

For some tasks, I would _prefer_ to work with Python or Bash, though I
_dislike_ these languages. I rarely enjoy programming with Python, but I
sometimes prefer its environment, especially its universality and some
specific libraries. I suppose I'm not a single counter-example where "prefer
to use" does not mean "enjoy using".

------
habosa
Soon Go will have both generics and package management, two things the
maintainers really didn't think it needed on Day One. I don't say this to
insult anyone, Go has always been a great and unique language. I say this as a
plea to any aspiring language designers out there: please don't try to make a
modern general purpose language without these things. We really do need them.

~~~
eloff
Actually, I think the success of Go has proven the contrary. You can make a
modern language without those features. In fact for an MVP you want to cut
difficult or not absolutely necessary features from the first version. So I
think Go did fine here and I encourage other language designers to follow
their lead.

One cavaet is if you don't think about at least how generics might work in
your language in a backward compatible way, you box in your future options.
See java for how this goes poorly. If you look at the generics proposals for
Go you see how this has greatly complicated the task. That doesn't
automatically mean it was a mistake to do it that way though.

If you try to do everything at the beginning you might take so long that you
fail outright or don't get the early adopters who help shape the language.
Plus you'd be behind the curve on adoption. So I think Go did the smart thing
here.

~~~
pjmlp
Without Google, Docker and Kubernetes, Go would have been as successful as
Limbo and Oberon-2, its two main influences.

~~~
bsaul
And yet most frequent use cases seem to be developping web services. So pretty
different from building container engines.

~~~
pjmlp
Since most new Go developers seem to come from Python and Node communities,
that is just a natural consequence.

------
apta
> This question should have said "woman" instead of "female".

So women are not female?

------
ayoisaiah
Suprised to see Vim usage decreasing every year. Presumably most are defecting
to Goland

~~~
alrs
I doubt anyone is defecting in any numbers, but that the unix die-hards are
being diluted by an influx of developers who prefer an IDE.

~~~
noisy_boy
Even unix die-hards can see the benefits. I stuck to using vim for years and
years until I ventured in learning some new languages and explored VSCode.
Then I started working with Java and found IntelliJ. The gains when the IDE is
actively working with you to autocomplete/point out errors/warnings/code
formatting etc are undeniable. Recently I copied a Python script from Linux
side to VSCode - the window basically lit up with suggetions/warnings about
unused imports etc etc - and this is when the script was working fine in
Linux. Cleaning up the code was super easy too. In case it is not obvious, I
love *nix and I'm totally for modern IDEs.

PS: I'm aware that a lot of these can be achieved by vim plugins/formatters
etc - I do use some. But I can't be pursued to code Java in vim vs IntelliJ;
its just not the same.

------
rmdashrfstar
I only read the tl;dr, but I expected some questions centered around most
commonly identified missing features in Go (i.e. first class support for
enumerations, generics, naked return, compiler generating similar code for
named vs unnamed returns, etc.)

~~~
cy_hauser
They do touch on these issues but only barely. The survey is more about who's
using Go the way it is now and how can we help with adoption with what Go is.
The survey is not necessarily intended to be a how might we make the Go core
language different or "better" sort of thing.

Remember, for a lot of Go developers Go _is_ fine the way it is now. You may
get a different set of developers if you add features but you also may lose
those who like it the way it is now. There are a lot of applications coded
that just don't have a need for the features you mention.

