Go was designed by strong programmers as a “good enough” language aimed at the combination of two goals:
1.) Letting good programmers get things done without feeling too many constraints, and without hating the output of #2.
2.) Enabling decent programmers understand the output of #1, while still getting things done themselves.
It is an extremely practical language ‘project’, in that it doesn’t pretend that all programmers are great, or average, and it tries to help the two subsets work together.
After watching the presentation of GO what I understand that it's more about the sintaxis reduction and being practical as much as the programmer can when writing code as well, of course, many other things. But Go seems to be the perfect language to write and maintain projects.
Go was created to solve the problem of how to write real world code solving practical problems in the space of backends, systems (not system) programming and microservices, where performance matters, with a language that is easy to learn, the code of which is easy to read and maintain, which is easy to understand for tooling, and which lends itself naturally to projects where many coders of different skill levels and personal preference work on the same thing.
I believe that it is very much a problem many entities that aren't Google like to have a good solution for.
Go is designed to minimize the cost of bad programmers. It's a decent idea, and likely scales better than languages that try to maximize the value of great programmers (lisp,Haskell,etc).
The design philosophy of Go is all about practicality - it's about helping programmers write programs quickly and easily with the least friction from the language. In my opinion it excels at that. For my money it's the easiest language to crank out real programs productively and enjoyably. And that's what really matters to me when I'm programming.
It's a minimilist, practical language that picks a set of features much different than most popular languages today.
I wouldn't pick it for code golf or a programming competitions, but as someone who's been programming for a long time and haa come to value the ability to make clean, simple code that doesn't break (eslecially in weird ways at bad times), I really enjoy Go and think it actually is a really good, if in certain respects unambitious, language.
It's not to everyone's taste, but it was designed by people who've been programming for a long time to be a language they'd like to program in. It is my favorite language for many tasks (and I've been coding for a couple decades now).
For me what's impressive about it is it's very simple, reasonably expressive, and just a really well-designed cohesive whole that doesn't usually expose sharp edges.
The longer I program the less I care about fancy things or being elegant or writing the smallest possible code, and the more I care about eliminating bullshit problems and wtf moments. Go's good at that.
This is one of the reasons I love Go, it is preeminently pragmatic language, not designed for "mediocre programmers" (Java) or "genius programmers" (Ocaml, Haskell, C++), or to fulfill feature checklists, but to be useful and used by hackers that want to get stuff done and not just to think about stuff.
All of the Go projects I've used have been well-constructed and efficient. It's the language the devs chose, and it lends well to the things it's been used for. Personally, I really like the syntax. Those reasons are good enough for me.
Go was created as a simple to pickup language to write fast to run and compile (!), memorysafe and typesafe, easily paralelized code with formatter enforcing consistent style from the get go, free from outside idioms which would possibly need to be unlearned when writing software at Google. They have achieved all of this.
There are two kinds of devs: Devs who mainly like the feeling of wll writing code, and devs who mainly like building products. Go is by the latter for the latter.
It's bit meant to be exciting, it's meant to be effective, efficient, and reliable.
The people who created Go had vast amounts of experience in creating new useful things. It's not their first system or language. For example, they created unix and utf8. Please give them a little credit for their experience and time trying to build things.
Programming languages are there to make programmers productive. Otherwise we would all work in something like assembly (I've done that but try to stay away from it now).
Go attempts to do this by hiding the complexity. When people have to spend time dealing with language (or platform) complexity they have less time to spend on their business logic or the core thing they are trying to do. By making the complex simple for the majority of cases they enable people to be more productive in solving their specific issues.
I say all of this as someone who likes and has issues with both Go and Rust. And, every language I've ever used.
I like Go. It's fun, it's fast, and it's introduced me to a lot of programming concepts I had never used before.
The one thing that seems to be missing from these discussions is that Go fits in an unexpected niche. I come from a web development background. I grew up on Perl, ASP, PHP, and Javascript. I dabbled a bit in C in college, but I always felt like I was fighting to avoid shooting myself in the foot with it. For me, Go was a huge step up, with an extremely friendly and approachable syntax, comprehensive standard library, and great toolsets.
On the flip side, we've got a bunch of C/C++/Java developers who would rather compare it to what they've been using for decades. I've no doubt it's missing a slew of very important features from that perspective. Go does seem to be capable of many of the same things as those languages, so those criticisms are likely valid, but for those of us that aren't trying to use it as a low-level systems language it's still pretty great.
Go could probably be improved in a lot of ways, but at the moment it serves my needs really well. For me, Go is good.
Go's fast compile times, fast start, and growing packaging are what puts it past 'good enough' to be great. It's also quick to learn, which makes it a decent option for team projects where some folks need to ramp up on a new language.
1.) Letting good programmers get things done without feeling too many constraints, and without hating the output of #2.
2.) Enabling decent programmers understand the output of #1, while still getting things done themselves.
It is an extremely practical language ‘project’, in that it doesn’t pretend that all programmers are great, or average, and it tries to help the two subsets work together.
reply