I develop Java applications and have 12 years of Java programming, but I've never really liked the language. Java is bureaucratic. Java is baroque. Java doesn't have syntax support for lists and maps, and I use lists and maps use more often than I do multiplication! Yes, this is web programming: building a bridge between the database and HTML. Java has a strength that cannot be simply overlooked. It runs everywhere. Yeah, almost everywhere ;). It's well known, and despite it's awkwardness, it is useful. It's a language for business solutions. Just like English for sales people ;).
As I said, I use mostly Java at work. Mostly but not only. I've used other languages. Here is a short list, and how these languages make me feel:
- bash - wheel (hashmap) reinventor
- php - google-and-paste script monkey
- perl - a wizard before, an Egyptologist after
- lisp - a MUD addict
- ruby - a hipster, really don't know why
- python - a zen-master-like purity neophyte
- erlang - didn't try, functional paradigm is too scary
- C# - ehhh, I've seen this before, didn't I?
Every language in that list has its own distinctive taste. It's really easy to become a fan. Or become a fanatic if you are addicted to that flavor. Each of these languages occupies its own niche. One may suit some people, and totally do not suit others. Java doesn't taste good, but it is not so bad for most people. It is 'edible' like baby food.
Don't think these other languages supersede Java in business solutions, even though some people think they do. For me, it's the same as if Subversion tried to supersede CVS. It was an obvious choice for some time. Then Git came and the paradigm shift hit the masses. I'm still waiting for that change in the language world. Java is almost 20 years old. Yes, there changes from version to version, but I consider these changes cancerous. Period. Too much is added, while nothing is removed.
I had no hope. I knew that new languages are born, but didn't pay attention to the latest and greatest press releases. One day had some spare time and I saw a paper on a coworker's desk. It's was about Google's new language. C'mon yet another languange. C'mon yet more stuff from Google. C'mon yet another blah blah. I started reading. Bang! My nisgivings were addressed in the paper in plain English. My objections were as a ... solved problems. I'm not alone I thought, haha. The Go language is on the list of languages to learn. To learn it means to make software using it.
What do I like in Go? It's not a syntax, not a type hierarchy, even not a name. It's a design decision "let's make big software development easier". That's all.
Dependencies are a nightmare to solve. Circular dependencies are nightmare^2. Go has no circular dependencies. Clever eh? Java has 'public/protected/private' keyword to define visibility, I heard rumors that they going to add sacred keyword in Java 10 ;). In Go, a capital letter makes the identifier public. There is added concurrency support to the language core. Nice. Garbage collection is obvious nowadays.
In Go you can't extend another class. Inheritance is not possible. God bless that decision. Really hated debugging method calls in a huge class hierarchy. Read the answer for a question I tried to forward a method to super, but it occasionally doesn't work. Why? in the famous The Java IAQ: Infrequently Answered Questions. You will know why I avoid inheritance.
In Go there are no exceptions. No more "check vs. no-check" dispute. No more jumping while reading the code, just reading it linear just as it is written. In Common Lisp there is a mechanism called restarts that I don't miss a bit in my daily coding. The same will be with exceptions.
The last thing is a formatter. It's not simply a formatter that puts the same spaces in a block. That formatter can transform code. Automated refactorings are on the way.
I don't have time to experience Go. Can't tell you more about it. I think I have to wait for a something big to implement. "Hello world" programs are useless in testing.
Do you have experience with Go? What do you think is Go will supersede Java in business solutions?
PS. Right now I've googled who wrote that article to put it as a reference. Rob Pike wrote it and his is working for Google.