Go is garbage that fills no actual extant computing niche. Nobody was looking for "like Python but with a crappy type system and a little bit faster". Go is neither high performance, nor real time, nor is it a systems programming language. It's an "also ran" scripting language.

In case you don't believe me, here you go: Google can't even get their own people to use it. They tried to mandate it for new projects in SRE and had a massive revolt on their hands.

@debugninja My theory as to why Rails became popular is that if you asked a Python programmer what web framework to use they'd suggest several, or not using one at all. Often they'd say "you're asking the wrong question". Because they were.

IOW, Rails is popular because programming noobs don't like to be told they're asking the wrong question.

@debugninja Also, there's a ton of popular garbage out there, because at least in any growing field there are always way more inexperienced people than experienced. In fact, you can usually assume in that case that if it's popular it's probably garbage.

@debugninja I tried really hard to like Ruby, though it was before Gem. It promised two things I was missing from Python: user-level threads (tasks) and restricted execution. The latter turned out to be a pipe dream though.

One issue with language package managers is that they tend to encourage promiscuous dependencies, something that's mostly absent from Python for reasons I don't fully understand, probably just history and community philosophy.

@debugninja That's been my impression as well. In the cases where I've had reason to use gems, their dependencies have been relatively restrained. Python packages sometimes even go too far in the other direction, using their own implementation of things that have better implementations in packages.

A lot of the reason for this revolt is that the Go team are pedants who insist on all kinds of weird standards: short variable names, tabs for indentation, no generics, nothing useful in the core libraries. Google's codebase has hundreds of *reused* implementations of string map.

@eggandburger I took a Go class at Google and still never bothered writing anything in it. My department was a combination of Go zealots, C++ zealots, and Python pragmatists. I say pragmatists because so much of the codebase was already Python that you'd only choose another language if you were a zealot.

@deutrino@eggandburger I haven't met any who compared to Linux zealots. The ones at Google just insist on writing stuff in Go even when everyone else on their team is using Python. The main one I'm thinking of was also one of my favorite teammates, probably because he's one of the few people as snarky as I am.

The thing I'm actually annoyed about is the way it's further fragmenting the open source community. Which benefits Google. Even if there isn't premeditation there, it's still damage their choices are doing that benefits them.

Frankly, the same goes for everything Google does related to open source. Meanwhile, many in the open source community laud them even with Google's knife sticking out through their chests.

@eryn@freakazoid you don't need to replace it if it works for you. It's all up to you. If you ask me, saying "<language> is a bad language" is not remotely the same as saying "shun everything made in this language". Good software can be written in bad languages, and bad software can be written in good languages.

@diodelass@eryn Interestingly, it was an old practice of always using software built in my favorite language of the week that contributed most to my abandonment of TCL. I used Zircon for IRC, and after about the third remote execution vulnerability caused by bad quoting causing a string to be interpreted as a list (and thus as a command), I realized TCL's complete lack of even dynamic typing made it inherently unsafe.

@eryn@freakazoid@diodelass I feel like modern JS is a reasonable alternative to Python; runs much faster, has more libraries, runs on browsers. Golang is nice and practical (and also fast); Rust is kind of a struggle (at first, they say) but interoperates seamlessly with C. LuaJIT also interoperates seamlessly with C, is just as fast as C, safer, and almost as high-level as Python, but it's dynamically typed, ruling it out for many people.

@kragen@diodelass@eryn Speed doesn't matter except for number crunching, and JS is a shitty language for number crunching. Number of libraries is irrelevant; average quality of JS and particularly Node libraries is *extremely* low. If all you're doing is pushing bits around through the network, Go is definitely not faster than Python and it may even be slower due to its garbage collection.

@eryn@diodelass@kragen Also, as it says on the Programming Language Shootout Page, it makes no sense to talk about the speed of a language. What matters is how best to accomplish your goal. I've written 3d games in Python, as have many others. Using PyOpenGL, not some high-level wrapper written in C(++).

@freakazoid@diodelass@eryn Yeah, I wrote a 3-D rendering engine in JS before Chrome, and I've done 3-D in Python too (without OpenGL!). I think a more accurate statement is that the speed of a language depends on many factors.

@freakazoid@eryn@diodelass Speed always matters; if you can do something 1000 times a second on given hardware, you have 100 times as much power to do that thing as if you could only do it 10 times a second. This is important for testing even when the code in question isn't a speed bottleneck for gameplay or whatever.

I agree that JS is a shitty language for number crunching, and Python is better due to Numpy (and probably better than Golang); LuaJIT is surprisingly ok

@eryn@diodelass It's convenient to be able to build statically linked binaries for all supported platforms, but in my experience with Go there are often still platform-related bugs because their docs and idioms are fairly UNIX-centric. There are also no decent GUI libraries for Go AFAICT. You even end up with the ludicrous approach of people using Electron as a GUI for Go apps or making people use web interfaces. For Python there are a bunch of mature GUIs.

@eryn@diodelass Now that you've got me thinking about this, though, if you want a statically typed language that's easy to learn, supports interop with C and C++, and has a decent set of libraries, there's always D. I'm not sure it has a long term future, but a lot of that is because it doesn't have the weight of a Google behind it.

@freakazoid 2 months ago I wouldve completely agreed. I still think it is remarkable how unremarkable the language is. But it does have good properties in that it uses very little resources compared to other *popular* stacks out there.

Also the core language has everything you need to build a web app. Like I literally only pulled in toml library and postgres driver. Which I think is really nice.

The simplicity of the language is actually something ive grown to like. Very easy to write pseudo code and easy to think through how to implement features. In terms of design they went for average on all metrics, and strangely it kind of works.

This is coming from a huge Elixir and Rust fan and overall lang nerd. For building a simple web app its been nice to not have to think in terms of GenServers or fighting the compiler with borrow checking. Elixir's non phoenix stuff honestly sucks, and Rust doesnt have stable concurrency which made me reluctant to choose either for my current project

@cod3monk3y Elixir and Rust are both immature languages. As an Erlang user I don't really see the point of Elixir. Sorry @kaniini .

Go is slightly more mature, but you haven't named any feature that Python doesn't also have. My main point is that Go has no reason to exist except as a way to harm Python, which I suspect Google may have wanted to do after they couldn't get Guido to bend the language to their will.

i can say that Pleroma's usecases have exposed design flaws in earlier versions of Elixir. there's a reason we require 1.7 or later now (well it can still build on 1.6), the runtime has a lot of bugs we hit before 1.6.4.

@jalcine@cod3monk3y@kaniini Don't get me wrong; I'm a huge Erlang fan. But I see a lot of people using Erlang via Elixir and it seems like that can only make it harder to understand what's going on given that Erlang is somewhat nontraditional to start with.

That being said, I've only ever used Java via Clojure, so maybe I shouldn't complain.

@freakazoid that is an unpopular opinion. I'll still keep replacing my infrastructure with go microservices as a replacement to php monolith, and reaping the benefits of composition over inheritance, easy concurrency, easy deploys, faster and lighter backends, while converting php developers to go developers and making our ops team happy.