Comparing Java to Cobol is ridiculous. I'm in the cool kids category and I like Java. If you don't want to / can't use C#, there's simply no alternative for bigger projects.
Groovy - slower, much worse toolability
Scala - less readable, slower, slow compilation, worse toolability, too complex.
If you don't want to / can't use C#, there's simply no alternative for bigger projects.
People keep repeating this as it was some sort of axiom. My feeling is that people mean that it's hard to write large Java-like projects outside Java. It's not the the problems can't be solved without Java, it's that you "can't" solve them the Java-way without using Java or C#.
You mean that "static typing allow better tools"? That's a fact ;) It allows IDEs to do smarter autocomplete, better refactorings, more static error checks, etc.
"You want to switch out the horse? How are you going to get around? Show me something that has at least four legs, can run as fast, eats less and has more stamina!"
The car or the plane looses this comparison.
Point is that all that "stuff" Java programmers are used to might be missing in other languages & ecosystems. And that might be a real issue. But some of that stuff only exists in Java-land to fix issues with Java, and the fact that it's not needed is actually a feature.
I'm sure someone, somewhere, complained that the first cars didn't have feces collection system =)
This is a widely repeated myth. Static typing does enable a few additional autocomplete capabilities, but most of the other things you probably think of as fancy IDE features are completely possible for dynamic languages.
For example, using Common Lisp with emacs and SLIME, I have:
Function/method name completion, Variable name completion, Jump to definition, Show callers, Rename (heuristic, but usually better than static analysis), Extract method, All sorts of interactive debugging capabilities, Documentation lookup, and Numerous compile-time static analysis checks including type errors!
Scala is a great alternative. The Java interop is great and the tooling is good, certainly good enough. It's statically typed, but much more expressive and productive than Java.
What are these bigger projects which can only be implemented in java? The linux kernel? Photoshop? Facebook? Or some kind of godawful tiered corporate thing that's big and unwieldy precisely because it's implemented in java?
What are these bigger projects which can only be implemented in java?
can is probably an overreach, but I expect the author was referring to the wide range of projects like Hadoop, Solr, etc.
If you want static typing, decent performance (and especially if you want a wide range of people who can work on your software) then you have C++/C# or Java. Or you are feeling adventurous or are ex-Google then maybe Golang.
There are other languages of course, but for most you are going to be struggling to find programmers who know them and library support isn't there, so you are writing lost of stuff yourself. If that's what you like, then fine.
If you don't want static typing, then there's a much broader range of course.
Or some kind of godawful tiered corporate thing that's big and unwieldy precisely because it's implemented in java?
Believe me, godawful corporate things are unwieldy in whatever language they are written in.
Have you ever seen a corporate Rails app? The saying "it compiles so it must work" is supposed to be a joke, but I've seen Rails apps where a large amount of the app would never have compiled if Ruby had a compile step. But then they did claim that Rails was an improvement because they could develop faster with out the compile cycle. Most of the app didn't work, but yes.. I concede that not having to make sure it worked did let them get in on servers faster.
> Believe me, godawful corporate things are unwieldy in whatever language they are written in.
No question this is generally true. But note that it's no worse for government than the private sector. The thing that bugs me is that government seems to take the worst aspects of the private sector (e.g. secrecy). If we've built a fabulous claims processing engine, why not give it away to other government departments?
IntelliJ IDEA or Android. Of course, you could use any language for a big project but unless you have specific requirenments (usually C-like performance), Java / C# is the best choice.
Photoshop - Needs C-like performance for image processing parts. If they started development today, I think they would go with a C# / C++ hybrid.
Facebook - The fact that they had to write their own PHP compiler is telling. PHP is nowdays quite similar to Java without the tooling, performance and massive ecosystem.
Enterprise projects with minimum of three development places, 30 to 100 developers on project, with two to three year duration, lots of off-shoring and attrition among developers.
> there's simply no alternative for bigger projects
I absolutely, completely don't understand where is this coming from. There are so many languages that there has to be a choice.
It of course depends on a given project, but I'd think that it's bigger projects which are more flexible in choosing the technology. I mean, if you have heaps of cash and many developers, than having to write three or ten additional libraries shouldn't matter. And then suddenly OCaml and Haskell are starting to look nice. Ask Jane Street.
In the projects I was involved in we had different set of constraints - we needed to ship something quickly, with small team and limited financial support. In such case how much more performant the Java would be, how much better tooling it has and so on was irrelevant and sheer speed of development in Python, Ruby or Racket was a win.
I get a feeling that this sentiment that "there is no alternative" for Java comes from people who are being forced to use Java at work (even for things it's not suited for) and who want to console themselves. It's something like "ok, I use Java as a templating language, but that's how it has to be". Well, I think it's not.
On the other hand, if you know what you want is Java - go for it. It's always the same old "best tool for the job". Just don't artificially narrow the choice of tools.
Java is the common, business oriented language of today. How do you you think it's not like the original COmmon Business Oriented Language? It's being used by the same sorts of guys to write the same sorts of apps, no?
Same is true of the original COBOL. If you can imagine back as far as the 1960, COBOL and FORTRAN are the cutting edge, every talented and ambitious programmer is trying to get in on this new tech, they are amazed at the productivity and they are writing apps that do hitherto impossible things.
You are no different from them, you were just born a few decades later (same for me). Except, you can look back and learn from their experiences, if you are wise.
Groovy - slower, much worse toolability
Scala - less readable, slower, slow compilation, worse toolability, too complex.