I refute that Fortran is axiomatically worse than Java. I've spent a few years working in each, so I got to know them decently well.
Fortran is like C with great math support; that is to say, C is like Fortran with great systems facilities. In each language's domain, it is more expressive and more performant than Java. Outside its domain, you don't want a bad programmer going near it for too long, but you can absolutely still get things done.
On the other hand, Java fills me with such dread that I would write a post defending Fortran just to kick it in the nuts.
In general when people hate on Fortran I assume it's because they had to deal with f77. 90/95/2003 aren't perfect or anything but aren't generally offensive.
The issue is that both C (portable assembler) and Fortran (portable math library) solve some problem pretty well.
What problem is it that Java solves well? That is what makes java such a shitty language to program in, for any particular problem you encounter there are much better languages to solve that problem in, C# comes to mind immediately as to what Java should be.
Note: Yes I realize that Java has excellent cross platform support and a huge ecosystem, but we're talking about languages, not the ecosystem.
> Yes I realize that Java has excellent cross platform support and a huge ecosystem
Java's cross platform support is awful if you go anywhere beyond Windows, Linux, OS X and Solaris (and even there both OS X and Linux have second-class status at best and suffered from serious issues at least until recently). Even Python and plain old C (if you know how to write portable code) are much more portable than Java ever will be.
And many would say the "huge ecosystem" of incredibly big and complex "frameworks" and tools is part of the problem with Java, or at best one of the symptoms of Java's problems. As others have pointed out, IDEs are language smells, and with Java using the language and surviving in its 'ecosystem' basically requires it.
I personally would even say that Java the language is considerably better than Java-the-ecosystem, but using the first without the later is almost impossible, and there are much better languages around anyway.
>>Even Python
Why "even"? Python is the most portable language today. It's portability between OSes superb and it "almost portable" between VMs (IronPython, Jython, PyPy).
This has probably been the most senseless post I will read in a while:
- C only got a memory model in C11. So you can't be sure your code does what you think it does, without compiling and testing with every compiler for every platform you intend to target.
- C is a low-level language which has its niche. But most of the time you want quite different features, like runtime monitoring, inspection and debugging.
- In C you can't just move your binary to a different architecture and run it there, same thing in Python: You can't just deploy your pyc or pyo files on a different machine and expect it to work, especially not if the versions differ.
- You can't even do that for source files: Python breaks compatibility frequently, and because it is dynamically typed, you can't just check the signatures that nothing has changed and chances are you won't even see breaking changes until it crashes at runtime.
- Python is not nearly as fast as a decent JVM.
- Both languages lack a cross-platform UI toolkit, although yes, AWT and Swing suck, and JavaFX isn't that great either.
I agree though, that the whole "framework" stuff has grown out of proportions in Java. It is just a disease if a simple application ships with 40 MB of JAR files because the developer couldn't write any non-trivial functionality himself.
> IDEs are language smells
This smells like envy from someone whose "favorite" language lacks good IDE support, but yes, Java-the-language is just outdated.
> Java the language is considerably better than Java-the-ecosystem
WUT? Java-the-language is the weakest part. You don't have to use any Java library or framework at all and Hotspot is probably the only freely available VM which is fast, mature and stable.
The goal of Java was always to be able to "write large programs quickly." In some ways that sounds terrible by itself, but I think it turns out to be legitimate.
I've been on python projects that need to grow but struggle b/c all the things that make it easy to get a lot done the first few weeks become liabilities very soon. Adding developers to a project that doesn't declare types and encourages just passing around hashmaps is brutal. All the stuff you can't do in Java makes it easy for someone else to understand it and edit it.
I would believe that C# might be a bit better but only being fully supported on MS is a non-starter for many server side situations.
> The goal of Java was always to be able to "write large programs quickly."
That wasn't the goal of Java, not by a mile. The goal of Java was to build a language that runs everywhere, and to facilitate Sun's "everything(your watch, toaster, pc) is networked" ambition.
All the things that people flout about Java saying that how it helps them manage large projects(completion, re-factoring, ide integrated debuggers, good libraries) wasn't even a twinkle in anyone's eyes who was involved with Java development. Java's initial release was terrible - it didn't even have decent stdout facilities, was interpreted and as a result dog slow, took a long time to load the jvm, and essentially failed it's "write once, run everywhere" motto as it became "write once, debug everywhere" in practice.
Java has evolved, mainly because people bought in the hype. I don't know why people stopped questioning the hype.
"Look, we are totally object oriented."
I am not sure what it means for me as a developer. So, what about classes? Are they objects? Packages? Are value type objects?
"Ummm. No it doesn't matter. Just listen to us. We are object oriented."
"Our goal is 'write once, run everywhere."
Your awt looks like dog shit on both windows and linux, and is slow.
"Hey. We didn't say anything about 'looking good'. I can bet it looks equally crap. That's platform independence."
> In some ways that sounds terrible by itself, but I think it turns out to be legitimate.
If that's the actual goal, it isn't terrible at all. Why do you think writing large programs quickly is a terrible goal?
> I've been on python projects that need to grow but struggle b/c all the things that make it easy to get a lot done the first few weeks become liabilities very soon.
And those things which make it easy to get lot done in first few weeks but are liabilities would be?
> Adding developers to a project that doesn't declare types and encourages just passing around hashmaps is brutal.
I understand time complexity, space complexity, and api of dictionaries. If you needlessly wrap it in your class, I couldn't know anything without reading through your wrapper. What exactly do you gain by wrapping dictionaries?
> All the stuff you can't do in Java makes it easy for someone else to understand it and edit it.
Examples please. If your developers have an easier time understanding implementing an interface to sort, rather than saying persons.sort(key=lambda a: a.name) then I don't know how that can be remedied.
> I would believe that C# might be a bit better but only being fully supported on MS is a non-starter for many server side situations.
The list of things which aren't supported on mono is small, and basically includes things which won't run outside of windows(office interop) or are deliberately dropped(WPF).
Java is good for enterprise IT consultancies. It requires a lot more detail to attention to implementation most enterprise app features, yet it still works acceptably in the end, maximizing consultancy fees.
In the end it rarely works acceptably, but that just helps sell support contracts, so it is also good for enterprisey software vendors and consultancies.
Fortran is like C with great math support; that is to say, C is like Fortran with great systems facilities. In each language's domain, it is more expressive and more performant than Java. Outside its domain, you don't want a bad programmer going near it for too long, but you can absolutely still get things done.
On the other hand, Java fills me with such dread that I would write a post defending Fortran just to kick it in the nuts.