Your conviction and intelligence definitely show from your decision to use a throwaway to reply!
Out of curiosity, what should people be using instead of Go? (And don't say Haskell, because surely you're more pragmatic than that.)
I'm looking at Elixir now, but Go has a growing community and great concurrency.
It seems to me that you perhaps hate any language that encourage or forces OO design, even though almost no one does real, widely-used, functional projects.
For real projects (ones that definitely involve other people and probably involve money in some way), most of your wasted time is not due to the language you're using.
Sure, you could be using non-strict JS or PHP and get bogged down because your typos are silently ignored, but lots of IDEs have static analysis and whatnot to prevent that. Any popular language has workarounds for its most time-wasting issues.
Where lots of time is actually lost is 1) learning and 2) reinventing the wheel.
Imagine, for example, that there's a magical language called AFP (Absolutely Fucking Perfect). It's perfect. Everything you write in it is short, concise, readable, maintainable, and compiles to hyper-efficient code for any number of cores.
Unfortunately, AFP is only used by 1,000 people. See the problem here? The time you spend learning is going to be astronomical, because you won't find the tutorials, Stack Overflow questions, books, forum posts, etc. that you find with a popular language.
And then, perhaps worse, you don't have many libraries. None of those other 1,000 people were working with REST APIs? That sucks, you have to write a module for that. None of them needed to process images? Same issue.
With AFP, you're likely looking at writing 10 times the amount of code that you would in a popular pile of garbage like PHP or JS.
Haskell is AFP. It's widely considered to be a great language, but it's just not practical. There's hardly anything built in Haskell out there for you to build your own stuff on.
We're now getting into an era where we might have the best of both worlds. Rust seems to be really interesting on that front. I've also seen the same argument for Scala, Go, and Elixir. But Haskell is not one of those frontrunner languages to take over from the slapped-together old guard of Perl, PHP, Python, and JS.
Yes, it does. Haskell is mostly used for small, single-purpose tools, or it's used to teach FP principles.
The number of repos on Github for Haskell is absolutely minuscule compared to every mainstream language.
There just aren't that many people using Haskell for real projects, nor are there lots of practical libraries for it. (You're free to name some examples if you disagree...)
Perhaps worse, Haskell is hard to learn. Sure your code is super-optimized for a compiler or whatever, but the learning curve is so high that you have to find someone else that's experienced in Haskell to work on your project. That's very, very hard.
> Haskell is mostly used for small, single-purpose tools, or it's used to teach FP principles.
According to whom? If you, how do you come to that conclusion?
> There just aren't that many people using Haskell for real projects, nor are there lots of practical libraries for it. (You're free to name some examples if you disagree...)
I could name many, though I'm not sure they would meet your definition of practical. Could you give me your definition of a practical library, and/or perhaps even better a few practical libraries from your language of choice?
> Perhaps worse, Haskell is hard to learn.
Haskell is no harder to learn than your first programming language where you also had to learn imperative programming semantics and things like Object Oriented programming.
> Sure your code is super-optimized for a compiler or whatever,
It really seems like you don't know much about Haskell. I think you'd be doing yourself a service to take a look.
> but the learning curve is so high that you have to find someone else that's experienced in Haskell to work on your project. That's very, very hard.
Not if you offer remote work and post it to /r/haskell, haskellers.com, and functionaljobs.com
Getting local candidates with previous Haskell experience could be more difficult outside of places like NYC, Austin, Silicon Valley, etc.
I wouldn't advise using it for a start-up unless you have at least one person that is moderately experienced and at the very least created a few libraries.
There are less than 5k Haskell users on Github, and they've released 30k repos.
By comparison, Go has 9k users and 50k repos. And a lot of people say that Go is not that useful of a language because the community is small.
What I'm saying isn't particularly controversial. There's a long thread here where Haskell is brought up frequently in the same context I'm talking about it: https://news.ycombinator.com/item?id=8802454
My definition of practical is this: people use it in practice. They use it for business or for personal projects that other people get use out of.
The core purpose of software is to automate things that, otherwise, people would have to do. What large jobs is Haskell currently automating for people?
> By comparison, Go has 9k users and 50k repos. And a lot of people say that Go is not that useful of a language because the community is small.
Some people call Python too small. Some even claim "Haskell is mostly used for small, single-purpose tools, or it's used to teach FP principles". Some people say a lot of things, that doesn't make it true.
> My definition of practical is this: people use it in practice. They use it for business or for personal projects that other people get use out of.
I use Haskell for freelance clients currently.
> The core purpose of software is to automate things that, otherwise, people would have to do. What large jobs is Haskell currently automating for people?
Standard Chartered is particularly of note, as you can see in this quora question. You can also see other examples of Haskell automating jobs for people:
I don't mind OO / java, I like ruby, I'm hoping rust will be the new language worth using.
I strongly dislike Go for a variety of reasons, mostly dealing with its anti-OO sentiments actually. It has things like "for x := range myArr" but you can't implement that yourself because you actually can't implement either a single and multiple return or implement an iterator/range. The language is full of crap like that, where the programmer is treated like a baby who shouldn't have any power.
Similarly, the language has first class functions, but no functional constructs (map, etc). It doesn't have pattern matching or tuples so multiple-returns feel like a hack. Its error checking is atrocious.
It has no version control or package management worth shit; npm, bundler, etc, all have an idea of "I want something less than this version". In golang, it's worse than C even. They encourage go get, aka "pull from master, surely it won't break" or vendoring. At least in C, you have os package managers to do some of this and pkg-config.
Go is just a terribly designed language in almost every aspect in my opinion. It isn't functional and sucks at OO. It sucks at low level. It sucks at high level. It sucks at large project. It's okay until you need to implement your own type and realize you're a second class citizen.
Hopefully that made sense to you; thanks for asking nicely.