
On 4/7/21 5:44 PM, Lennart Sorensen via talk wrote:
On Wed, Apr 07, 2021 at 11:21:52AM -0400, D. Hugh Redelmeier via talk wrote:
When I was an undergrad at University of Waterloo, we were required to use FORTRAN (WatFiv). I hated it. I liked the notation of Algol better and Algol-W (W for Wirth) was a good implementation for student uses. I even created a bit of a rebellion, but it was put down.
The answer was going to be PL/I. But PLIWAT never got done.
(Luckily, I missed having WatBol (COBOL) imposed on me. But I was a spear carrier in that project. I worked on optimizing COMASS execution; COMASS was used to implement Z1, a systems implementation language used to write WATBOL.)
In your era, did they forced JAVA on you? If so, I would understand hating it.
No java arrived as I was finishing, so I saw the awful plugin for the browser and also saw javascript (livescript initially before marketing at netscape renamed it to jump on the java bandwagon). I did soon after have to try to deal with people wanting to use java and the comptibility issues it had. It was all hype, and for some reason corporations fell for the hype. Now they have a ton of garbage they can't easily get rid of.
Why, in particular, do you think JAVA is a bad general purpose language for ordinary programmers? Note: I don't actually know JAVA.
It tries to make everything a class, except when it doesn't (like integers are not a class, while just about everything else is). main is a class. It takes all the object oriented things C++ got wrong, and borrows those, rather than borrowing it from a language that got it right. If you have to have object oriented programming, at least do it right, not the C++ way. While I would agree with your other points. The problem is you have two choices either a) people have to learn a newer way of doing OO or b) keep doing the same thing for the most part. Unfortunately, when designing a new language you kinda have the advantage of being more popular if you do a). Granted one thing that is much better about C++ is templates and now concepts are expanded at compile time in Java it seems that generics aren't. This can run into a runtime penalty, through C++ has the issue with try and catch which is a problem in the embedded or real time world. I would through not that I like C++'s OO if you've used C++20 considering some of it's changes like concepts.
Nick
I know reasons why you or I might dislike it:
- essentially cannot be statically compiled
Definitely an annoyance at times. Interestingly golang went the other way and essentially can't by dynamically compiled and isn't objected oriented (although it allows functions to be associated with types which gives you most of the best parts of object oriented programming and making types that can work across another set of types).
- uses UTF-16 (I think). The worst representation of UNICODE.
It does.
- the library is a sprawling mess. I'd guess that it is impossible to master
- traditional JAVA programming style creates a surfeit of abstractions, making it hard to understand what's actually going on
- implementations are very fat. For performance reasons, jitting is used. This adds another layer of separation between your program and real hardware.
- tuning JAVA program performance seems to too-often devolve into blindly twiddling knobs on the JVM.
- JAVA cannot be improved: so much inertia, so horrible governance.
What are your reasons?
Those reasons don't make it a horrible teaching language, especially if you subset the library.
There are much better languages for teaching. Many places have fortunately switched to some of them.
The resources used by a java program are usually terrible, and there is often not much you can do about it as a programmer. The garbage collection isn't great (not sure it ever is in any language).
Java also is rather terrible at interfacing with other languages. It wanted to be its own ecosystem that didn't deal with anyone else. I guess to do the 'run anywhere' idea required that, even though that hardly ever worked. The fact features keep getting deprecated means many older java programs don't run anywhere anymore (good luck if you used jfx)