There's a famous quote "Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.".
I've never seen anyone disagree with that and yet Go, the only language that takes this principle seriously, is visciously denigrated because it didn't add all those features that could possibly be added. Generics, fancy type system, optionals, non-nullable types, unions, exceptions.
I think it shows that most people don't really understand the quote. They think that the opposite is "don't add unnecessary features" and who would be in favor of unnecessary features?
But what the quote is really saying is: "you should resist adding features, even though they are useful; their cost is additional complexity and you should strive to keep complexity to minimum while still providing core value".
It's easy to agree with such a sentiment in abstract but when you start talking about concrete features, this wisdom suddenly disappears.
Features sell. The value of a feature is easy to visualise, the value of simplicity due to lack of the feature is not.
Go is a controversial language, often criticized for lack of sophistication. "We know how to do things better!".
I think of Go as Moneyball For Programming Languages: How to get maximum capability from minimal feature set.
Go makes much more sense when you look at it through "biggest bang for the buck" prism.
Go ruthlessly eliminates duplicate features and non-critical .
Enums? Can be replaced by idealized integers.
do/while loops? Can be replaced by slightly extended for.
Generics? You get the most common generic types built-in (slices and maps) but no user-defined generics.
Unit testing, benchmarking? You get that as part of standard library but it's ridiculusly minimal compared to, say, jUnit from Java world.
|