[HN Gopher] "I am literally losing sleep" over Java (1996)
       ___________________________________________________________________
        
       "I am literally losing sleep" over Java (1996)
        
       Author : 5Qn8mNbc2FNCiVV
       Score  : 362 points
       Date   : 2022-01-06 11:01 UTC (12 hours ago)
        
 (HTM) web link (twitter.com)
 (TXT) w3m dump (twitter.com)
        
       | snowwrestler wrote:
       | I think Gates was losing sleep because he had come to expect to
       | win everywhere all the time. Myrhvold's reply (in a lower tweet)
       | is a gentle way of saying that Microsoft doesn't have to, to
       | succeed as a company.
       | 
       | I think as a company finds continuous, outsized success, there is
       | a risk for a leader's mindset to get warped and resistant to
       | anything but outsized success. Anything less than domination
       | looks like a problem, an anomaly that must be found and
       | destroyed.
       | 
       | I think it might explain some otherwise indefensible behavior,
       | like HP spying on their board, or all the shady stuff that Uber
       | was doing, or even MS's own anti-competitive behavior.
       | 
       | I think leaders have to get shocked out of this mindset or just
       | removed. Gates was shocked by MS's conviction and stepped down.
       | Ballmer and Kalanick were pressured to resign by investors. Both
       | MS and Uber have benefited from new leadership that lowered the
       | temperature and refocused the company.
       | 
       | I also think it explains why Facebook is the way it is now. There
       | doesn't seem to be such pressure points available for Zuckerberg
       | though.
        
         | wanderingmind wrote:
         | >"Both MS and Uber have benefited from new leadership that
         | lowered the temperature and refocused the company."
         | 
         | This is the same Uber that has given up on any future tech
         | leadership and sold its autonomous driving group away right?
        
           | Rastonbury wrote:
           | Choice between bleeding money and haemorrhaging it
        
           | stjohnswarts wrote:
           | Uber made the smart choice. They can always buy back into
           | autonomous vehicles when a company comes up with an
           | autonomous vehicle the works well in all weather conditions.
           | All they have to do is buy them and add them to their fleet
           | and combine with their current app infrastructure.
        
         | risyachka wrote:
         | It's not just the mindset of leaders.
         | 
         | Tech companies don't have a choice but to grow fast all the
         | time. As soon as the growth stops even a little, they lose
         | investor interest and their stock will crash unless they find
         | the way to keep going.
        
         | asveikau wrote:
         | One of the weird things about this is that Microsoft had
         | compiler and programming language stuff as their bread and
         | butter for a time. So Myrhvold's reply does include "embrace
         | and extend" and that they'll do J++, but I'm not sure why that
         | point wasn't emphasized more. A programming language ecosystem
         | was their wheelhouse. They of course got in trouble trying to
         | out-Java Java, and still calling it Java. They did C# and while
         | it did not "kill Java", it was hugely successful for them.
         | 
         | It'd be a somewhat reasonable and simple answer, and an honest
         | one, to Gates's concern: "well, let's be a kickass platform to
         | run Java on."
        
         | nyanpasu64 wrote:
         | Microsoft's new leadership may have "lowered the temperature
         | and refocused the company" to open-source software, but now
         | they're _more than ever_ anticompetitively promoting Edge and
         | Videos and etc., progressively making it harder to switch
         | browsers or make Start /F1 search open a different browser,
         | manipulating users who use Edge search for Chrome, making Edge
         | run in the background for fast start (I suspect to make it
         | appear faster to start than Chrome), baking telemetry into
         | Windows and VS Code and PowerShell and vcpkg, releasing
         | proprietary extensions for proprietary VS Code which won't run
         | on open-source VSCodium, performing hostile takeovers of .NET
         | Foundation projects, etc.
        
       | baxtr wrote:
       | It's somewhat comforting to see that you're at risk of loosing
       | sleep no matter how successful you are.
        
       | Mikeb85 wrote:
       | I'm just shocked by Nathan Myrvold's reply back. He's a patent
       | troll among things but his email is incredibly on point. Also
       | this little tidbit:
       | 
       | > Virtual worlds could be such a thing.
        
         | tasuki wrote:
         | I've only heard about him as a patent troll before, but
         | apparently he wears many hats. A mathematician, a photographer,
         | a cook, at least dabbler in biology, astronomy, and other
         | scientific fields. An interesting character for sure.
        
       | nova22033 wrote:
       | When I was teaching my then 14yo the basics of programming, I
       | started him off with python instead of java. It was way easier to
       | explain pip install pygame or whatever than explaining how to
       | import a jar he needs(and all it's dependencies)
        
         | 999900000999 wrote:
         | Python is a generally easier language.
         | 
         | name = Input("What is your name ?") print("Hi ",name)
         | 
         | That's a working Python program. To do the same in Java
         | requires a ton of boiler plate. I don't think there's a person
         | alive who can write a Java program which compiles from memory
         | alone.
         | 
         | I hope I never have to work another job with Java again, most
         | of it's not even the language but the tooling.
         | 
         | I was at a shop where we had to use Eclipse. Such a horrible
         | IDE, it's apart of why I left.
        
           | kaba0 wrote:
           | It's funny because Java has hands down the best tooling out
           | of any language. I would honestly be surprised if I would be
           | pressing more keys per a given program with IntelliJ, than
           | someone does with a much less verbose language.
        
             | adament wrote:
             | This has also been my experience, but to me the detriment
             | of verboseness is not only a matter of writing code, it
             | also means there is a lot of noise when I try to read the
             | code. I guess it might just be a personal preference
             | whether we prefer explicit and typically more verbose or
             | terseness at the cost of more implicit behaviour / magic?
             | At least I am unfamiliar with a language which is both
             | explicit and has no boilerplate.
        
           | jamesgeck0 wrote:
           | Fortunately it's not an either/or choice. Python is easier to
           | write, but JVM applications are significantly easier to
           | distribute cross-platform. When you publish a Python game,
           | compiling it to a JAR with Jython is far easier than figuring
           | out x86 and ARM builds for Windows/Linux/macOS.
        
       | marktangotango wrote:
       | "Java" in 1996 isn't what Java is today. In 1996 Suns focus was
       | providing a runtime for executing code anywhere on the network,
       | on any machine. That's why security managers, class loaders,
       | applets, rmi, and jndi were baked in from the beginning. That
       | future didn't pan out; no one wanted to run other peoples code.
       | So J2EE was the pivot to the Enterprise and server apps. That's
       | what we ended up with.
       | 
       | In a way, Gates may have been imagining or extrapolating the "run
       | code anywhere" idea to the cloud services of today, which we've
       | seen is a bit of a threat to proprietary operating systems. Well,
       | more than a bit.
        
         | rcoveson wrote:
         | > ...no one wanted to run other peoples code.
         | 
         | This obviously didn't stay true; the browser is everything the
         | JVM wanted to be today. A JIT for a universal programming
         | language and multiple layers of sandboxing.
         | 
         | I don't think people care about running other people's code.
         | Java just wasn't seamless enough. Or they lost some key
         | political battles (few major OSes shipped with it).
        
       | throwaway10122 wrote:
       | I think its important to sepate Java the language from JVM
       | runtime
       | 
       | Likes of Kotlin (and controversially Scala) do quite well on it
       | and solve many of the ugly deficiencies of Java
       | 
       | Its also probably important to separate latest Java (which is
       | improving) from enterprise Java out there which usually feels
       | like an archeology dig with decades of boilerplate and rubbish
       | and terrible code
       | 
       | Currently in an enteprise java team and hate my life and
       | regreting moving away from Kotlin+Springboot team.
        
       | pjmlp wrote:
       | Ironically they are now an OpenJDK contributor.
       | 
       | https://www.microsoft.com/openjdk
       | 
       | And Java is the only ecosystem that tends to have 1:1 parity with
       | .NET APIs on Azure.
       | 
       | Maybe Google will one day come around with their Android Java
       | flavour as well.
        
         | DerArzt wrote:
         | Parity yes, but documentation and support not so much. Using
         | Java on Azure always felt like being Microsoft's red headed
         | step child when compared to C#, and for good reason since C# is
         | of course a Microsoft Language.
         | 
         | I don't fault Azure to much on this, but it did leave my team
         | annoyed a lot of the time.
        
           | pjmlp wrote:
           | Might be the case, however I think they do feel the pressure
           | of Java on the backend.
           | 
           | On my bubble it feels that .NET on UNIX has come too late,
           | and unless one is deep into MS stack the adoption is less
           | stellar than it could be.
           | 
           | On polyglot shops Java based stacks tends to win over .NET
           | ones on RFPs.
           | 
           | Even well known names like Sitecore are now going polyglot on
           | the backend.
        
             | louhike wrote:
             | I think it depends. .NET on UNIX has allowed it to survive
             | in some places. I don't think I would still be a .NET
             | developer if it wouldn't have happened. It's far easier to
             | sell .NET as a technology to upper management now than we
             | can deploy it on Linux servers with no Windows Server
             | licenses cost.
             | 
             | And even though developing on .NET is fun for a lot of
             | developers, using Windows Server is definetly not.
        
               | pjmlp wrote:
               | While on others the rewrite required to move from .NET
               | Framework into Core, while leaving 20 years of Windows
               | only libraries behind has prompted several polyglot shops
               | to jump ship.
               | 
               | I have done two such migration projects.
               | 
               | The reference to Sitecore was an example of one of the
               | strongest .NET CMS on the enterprise space that now is
               | having a portfolio based on .NET, Java and NodeJS.
               | 
               | Microsoft always behaves as if rewrites weren't a cost
               | center, but they are and with Core, alongside the whole
               | desktop mess, many have reached their rewrite budget with
               | Microsoft technologies.
        
       | _moof wrote:
       | Imagine losing sleep over JavaBeans because you thought it was
       | good.
        
       | wly_cdgr wrote:
       | Imagine being this stressed and miserable over someone else
       | building something cool and valuable when you already have enough
       | money to never need to work again. What a wretched existence
        
       | TacticalCoder wrote:
       | Ain't Java the 2nd most used language in the world, after
       | JavaScript? The enterprise world uses Java everywhere. Java
       | powers pretty much the entire banking infrastructure.
       | 
       | Aren't there billions of Java smartcards that people carry in
       | their pocket/wallet and use on a daily basis?
       | 
       | Aren't there billions of Android apps installed that are,
       | basically, Java?
       | 
       | One can dispute the numbers a bit but... How is Java not one of
       | the biggest success story ever for a programming language?
       | 
       | I'd also add: it's kinda funny to see so many programmers hating
       | on Java and thinking that, somehow, Java is dead or dying, yet on
       | a daily basis they'll use one of the JetBrains tools, written in
       | Java, to work on their "non Java" code.
       | 
       | I do not only think he was right to lose sleep over it: I think
       | Java delivered.
        
         | vintermann wrote:
         | I'd say it runs distant descendants of Java. The fact that
         | Gates lost sleep not only over Java, but over JavaBeans is
         | undeniably funny. JavaBeans delivered frustration and secure
         | employment for a legion of developers.
         | 
         | Just a couple of weeks ago we got a reminder of how horrible
         | early Enterprise Java was, with the Log4j exploit. The kind of
         | thing everyone goes, "why would they think that was a good
         | idea?" today, but the answer then was "almost everyone,
         | certainly everyone who makes decisions..."
        
         | dec0dedab0de wrote:
         | I think much of the hate for java came from non-programmers, or
         | future programmers who had to deal with runtime issues. For a
         | long time if an app was written in Java it meant it was going
         | to be a pain at some point.
        
         | coldtea wrote:
         | > _Aren 't there billions of Java smartcards that people carry
         | in their pocket/wallet and use on a daily basis?_
         | 
         | No.
        
           | smcl wrote:
           | They are referring to SIM cards or newer credit/debit cards
           | (the chip-and-pin ones):
           | https://en.wikipedia.org/wiki/Java_Card
        
             | coldtea wrote:
             | I guessed as much, but I don't think they're anything but
             | niche in 2022.
             | 
             | They're not in regular (e.g. VISA, Mastercard) chip-and-pin
             | credit cards for example, are they?
        
               | kaba0 wrote:
               | I think it is still Java in bank cards. Even Apple Pay
               | implemented all their thingies in Java.
        
               | smcl wrote:
               | So wikipedia says that it is, but honestly I am not an
               | expert so let's just set that aside for argument's sake
               | unless someone can definitively say one way or another.
               | But it's definitely in SIM cards, which are indeed
               | carried and used by billions daily
        
         | joelthelion wrote:
         | Java didn't kill Microsoft though.
        
           | the-dude wrote:
           | Only because they invented their own.
        
             | pjmlp wrote:
             | And now they have come around, have bought jClarity and are
             | an OpenJDK contributor with their own distribution.
        
             | iso1631 wrote:
             | Microsoft J++?
        
             | cfcosta wrote:
             | Because Sun (or oracle, I'm bad with time) decided to
             | forbid MS to keep developing their own implementation.
        
               | dtech wrote:
               | Rightly so. They added all kinds of things that only
               | worked on the MS JVM, which was the "extend" of their EEE
               | strategy, right before extinguish.
        
               | tzs wrote:
               | Those things were almost all things that you could ignore
               | if you weren't trying to specifically make a program for
               | Windows, and that if you _were_ trying to make a program
               | specifically for Windows made it a lot easier and made
               | the resulting program a lot better as a Windows program.
               | 
               | If Sun had blessed Microsoft's approach and encouraged
               | Apple to do similar for Mac and done similar themselves
               | for Solaris and encouraged someone to do similar for
               | Linux then Java could have become a major language for
               | mainstream desktop applications rivaling C/C++ or perhaps
               | even becoming the most common language for such
               | development.
               | 
               | But Sun didn't want you to be able to write for Windows
               | or Mac or Linux using Java. They wanted you to write for
               | the Java platform which happened to run on Windows and
               | Mac and Linux.
               | 
               | And so Java desktop apps were almost always inferior to
               | desktop apps written in C/C++/Objective C that could make
               | better use of the native GUI and other facilities and did
               | not stand out as some weird ugly alien thing.
        
               | dtech wrote:
               | They altered things in the java.* namespace [1], making
               | it easy for developers to make things incompatible, as
               | well as leaving out support for cross-platform enabling
               | stuff like JNI and RMI. I can't read those actions as in
               | good faith.
               | 
               | [1] https://www.infoworld.com/article/2077055/what-does-
               | sun-s-la...
        
               | pjmlp wrote:
               | Unfortunely the new generation seems not to have any
               | issue with Android Java being Google's J++.
        
               | sangnoir wrote:
               | > Unfortunely the new generation seems not to have any
               | issue with Android Java being Google's J++.
               | 
               | Perhaps that's because it is not? Google aren't adding
               | packages to the java.* namespace, and the language is
               | 100% compatible with Oracle's compiler. Only the bytecode
               | format and runtime are different, but that's no worse
               | than how J2ME was, with SonyEricsson/Samsung/$OEM having
               | their own custom packages (which Sun/Oracle approved of.)
               | 
               | edit: preempting another argument: limiting support to an
               | old version of software/language spec is not a crime,
               | though I'd be happy if Apple could be compelled to update
               | the GPL software they bundle to the latest version (:
        
               | pjmlp wrote:
               | > Google aren't adding packages to the java.* namespace,
               | and the language is 100% compatible with Oracle's
               | compiler.
               | 
               | It just shows how little experience you have porting
               | anything beyond Java 7 into Android Java.
               | 
               | > Only the bytecode format and runtime are different, but
               | that's no worse than how J2ME was, with
               | SonyEricsson/Samsung/$OEM having their own custom
               | packages (which Sun/Oracle approved of.)
               | 
               | Yet that is the whole sales pitch of Android that it
               | isn't as fragmented as J2ME was.
               | 
               | Also you missed the part of SavaJe OS being on the path
               | for making SE available on mobile and Java 8 introduced
               | Embedded Compact Profiles, whose APIs aren't fully
               | available on Android to this day.
               | 
               | They lie to the public that they use OpenJDK, when the
               | truth mirrored on Gerrit code reviews is that they cherry
               | pick features, tracking down which Android version
               | supports what from Standard Java is a painful detective
               | work.
               | 
               | To add to it, the fellowship of Kotlin cleverly misuses
               | their broken Android Java to sell Kotlin features,
               | instead of comparing it with the real deal.
        
               | treeman79 wrote:
               | J++ was the final straw for me. I realized it's sole
               | purpose was to screw over Java. Not to be useful. Spent
               | last 20 years avoiding Microsoft tech after that.
        
               | copperx wrote:
               | The cool thing about MS's JVM is that it made Java GUIs
               | look exactly like native Windows Apps. I remember
               | thinking it was a fantastic idea.
        
           | tonyedgecombe wrote:
           | No but it did a pretty good job of finishing off COBOL.
        
             | sgt wrote:
             | There's certainly less COBOL, but finished off? Most banks
             | run the most critical code on COBOL and new programs are
             | being written all the time.
        
               | garbagecoder wrote:
               | I'm COBOL "certified" for whatever iota that's worth. I
               | don't think I would say "all the time." There are legacy
               | systems that are being ported to JVM that remain in COBOL
               | because it "just werx" especially for batch processing.
               | 
               | But I have no experience in banks, but in the military
               | and government. So maybe I'm wrong about what they're
               | doing, but in my experience it was either all being moved
               | to Java or at least JVM just because some of the physical
               | hardware was getting too old to maintain.
               | 
               | I actually think a lot of the new C-family "modern"
               | languages could learn a couple of things from COBOL. It
               | really makes you be explicit about data.
        
               | tonyedgecombe wrote:
               | I'd love to see some evidence because my guess is there
               | is an order of magnitude more Java code in banks than
               | COBOL.
        
               | sgt wrote:
               | Yeah, of course there is. The banks write a lot of code
               | and it's wrapping the crucial COBOL core in various ways.
               | 
               | There's no reason at all to write those parts in COBOL.
               | Banks use primarily Java and C# for that, and it's much
               | easier in terms of recruitment.
        
           | forgetfulness wrote:
           | In a very indirect way; leveraging its popularity, and coming
           | on the heels of Apple to create a captive audience for their
           | ad networks and surveillance machinery, Google used Java to
           | spring up a developer base for Android, which ate away at the
           | use of MS product outside of the US like iOS did stateside.
        
         | Mikeb85 wrote:
         | Except Java never truly threatened the Windows OS. Nathan's
         | reply back was on point: Java expanded into some voids but
         | didn't kill Windows.
         | 
         | Android beat Windows mobile because MS pissed away their
         | advantage (they had a mobile OS before either Android or iOS
         | but it sucked) and Windows mobile was too little, too late.
         | Nothing to do with Java really.
        
         | tannhaeuser wrote:
         | I'm inclined to cite that saying where there are those
         | programming languages everybody complains about, and those that
         | nobody is using. Doesn't hold for HN, though ;)
        
         | nudpiedo wrote:
         | Well in the context of the emails: no, Java failed at
         | delivering.
         | 
         | Solaris OS is now history and many programming language
         | competitors raised and won over it at its own game in all areas
         | but android, although it was an industry leader for quite long
         | time its time is over and now it is mainly corporative legacy.
         | 
         | Even as general programming language Python and JavaScript took
         | over, and in dedicated areas like webservers it's been long
         | since Java's time is gone. The analysis in the replies is
         | correct.
        
           | numbsafari wrote:
           | I think you hit the nail on the head.
           | 
           | Yes, Java is successful, both as a language and as a runtime.
           | Obviously. You can't argue with billions of Android phones.
           | Or the (possible?) news that FB has already given up and will
           | be simply using Android for Meta.
           | 
           | I don't think a lot of folks here were around at the time to
           | remember that a lot of the early hype around Java and the Web
           | were both about unseating Microsoft.
           | 
           | Microsoft has thrived.
           | 
           | Sun is in the dustbin of history. Yes, mountains of cool tech
           | came out of Sun, but as a company, as a existential threat to
           | MS? Java didn't deliver.
           | 
           | That's not to say it couldn't have, had Sun managed it
           | differently. But if Sun had managed it differently, it
           | probably wouldn't have been the success that it is as a
           | technology.
        
             | kaba0 wrote:
             | Just a note but android doesn't run javaTM, especially not
             | in a runtime. It compiles Google's decade old java version
             | AOT and native code gets executed on mobile phones.
        
               | fundad wrote:
               | Until iPhone, Java on Linux was the standard for
               | smartphones. Was that Java Micro editon? I think the
               | handset makers actually licensed Java/JDK/JVM, not sure
               | it cost money or control or what.
               | 
               | Without cloning the language, Alphabet would never have
               | been able to standardize non-Apple phones under one
               | advertising platform.
        
           | pritambarhate wrote:
           | > Even as general programming language Python and JavaScript
           | took over, and in dedicated areas like webservers it's been
           | long since Java's time is gone.
           | 
           | I don't think this is true. Yes in the US in the startups
           | Python, RoR and JS are more popular but in the enterprise
           | Java (and .Net to some extent) still rules. In India right
           | now the demand for Java programmers is sky high. Salaries for
           | Java programmers have increased by 100% or more in the past 6
           | months or so. Actually overall salaries for programmers have
           | increased a lot in India in the past 6 months due to very
           | high outsourcing demand but Java is in especially high
           | demand.
           | 
           | Note: I am in the outsourcing industry since past 12 years.
        
             | nudpiedo wrote:
             | I've been part of companies which decide to outsource and
             | very often what they send to India is the legacy code no
             | one wants in research labs or headquarters, so it makes all
             | sense to me.
        
           | whimsicalism wrote:
           | For very complex business logic backend/middleware, who is
           | beating Java?
           | 
           | Only contenders I can think of are C# or Go.
        
             | nudpiedo wrote:
             | I used to think like that just to realize that the main two
             | variables to guess the language a project got started are
             | the industry and the year the coding began.
             | 
             | For example, projects that got started 10 years ago are
             | very likely to have got in Java started (as it still even
             | was the main programming language teacher at universities.)
             | 
             | New projects are more likely to get started in python,
             | typescript, go or even c++ just depending the industry.
             | It's been a while since I do not see a new brand project
             | starting in Java.
             | 
             | Someone may dismiss my opinion with a statistic, and it
             | will also be fine. I don't think Java did endanger
             | Microsoft,
        
             | jpgvm wrote:
             | C# isn't, it's highly successful but locked into one
             | ecosystem. .NET Core is very new (by enterprise standards)
             | and hasn't yet had time to supplant usecases for Java.
             | 
             | Go is even newer and even less successful vs Java.
             | 
             | Firstly it's awful in large business logic heavy programs.
             | It's getting better with generics but it's error handling
             | and module structure mean it's very ill-suited to the sort
             | of software Java thrives in.
             | 
             | I think the only real competitor to Java (both on Android
             | and backend/desktop) is Kotlin.
        
               | vel0city wrote:
               | FWIW, there is no ".NET Core" anymore. Now its all just
               | ".NET", whether or not you're running it on Windows or
               | Linux. Theoretically its all just the same from the
               | application's perspective, there's no separate toolchain
               | or library.
        
         | smcl wrote:
         | None of those are _wrong_ but I think they 're missing the
         | point slightly. Bill Gates seemed concerned that Java
         | represented either some existential threat to MS or at least
         | something that would heavily dent their bottom line and pierce
         | their dominance of the desktop market. And really it turned out
         | to neither. Java is indeed very popular and undeniably a
         | successful language + ecosystem, but I don't think what it has
         | become was what Gates had feared.
         | 
         | I'd be interested to see if, knowing how it all played out,
         | Bill Gates now believes he was right to be fretting about Java
         | back then. Given the position Microsoft is in today,
         | maintaining its hold on the desktop with Windows and with a
         | strong cloud offering in Azure, I think he'd answer "no, I
         | wasn't".
        
         | strangemonad wrote:
         | And when you leave aside Java (the language) and consider the
         | jvm platform broader ecosystem with all the various
         | interoperable languages like kotlin, scala, clojure... it's a
         | huge space.
         | 
         | I understand some level of heathy criticism but, I don't really
         | understand the level of hate the jvm gets.
         | 
         | When you look at recent and upcoming features, a lot of the
         | complaints about it being "heavy" are being directly addressed.
        
           | garbagecoder wrote:
           | I really dislike Java but I like the JVM and am a big fan of
           | clojure. I don't trust/like Oracle, and maybe it's just
           | confirmation bias, but I hear much more along these lines
           | than people who just dislike the jvm.
        
           | bayindirh wrote:
           | JVM is not really that heavy since the Intel released "Core
           | i" series processors. Also, JVM uses its resources well. It's
           | one of the best engineered software artifacts if you ask me.
           | 
           | I really enjoyed using the language back then, and will not
           | hesitate to restart if there's a scenario which would fit the
           | bill to use it.
        
           | smaudet wrote:
           | It's not heavy, it's the syndrome where wild success gets you
           | associated with the good and the bad.
           | 
           | Enterprise Java is extremely slow, over-engineered, complex,
           | that's where the majority of hate comes from. Then they had
           | their security debacle, coupled with a couple strange roadmap
           | changes, and being bought out by Oracle, an unpopular company
           | for different reasons.
           | 
           | Java the language then sat mired by the corporate world and
           | went nowhere for almost a decade (java 6, 7, 8).
           | 
           | Oh, and don't forget Billy, wonder why C# has made such a
           | comeback in recent years. It's a nice(r) more modern
           | language, it's not that great, come on...and I say this
           | currently working in it full time.
           | 
           | So yeah political prop and the normal stuff popularity brings
           | with it. It has also happened to JS too...
        
           | foobarian wrote:
           | On the Internet nobody knows you are a dog.
           | 
           | There is a wide spectrum of age, experience, and attitude in
           | the programming population. Hot take: I am guessing that a
           | lot of the noisy hating and hemming and hawing comes from the
           | newer, less experienced cohort, we just can't tell on the
           | Internet and so the perception skews that a significant
           | fraction of all programmers think this way. I am basing this
           | on having been there, done that, where I would scoff with
           | indignation at any software not written in hand-optimized
           | assembler with a bunch of unnecessary (to my newbie self)
           | layers of abstraction.
        
             | ethbr0 wrote:
             | Reason Java gets so much hate: It's never cool to be an
             | advocate for the old, warted, battle-tested, reliable,
             | supported option.
             | 
             | And everybody wants to be cool.
             | 
             | It's the Toyota A series or Volvo B18 of programming
             | languages.
        
               | pjmlp wrote:
               | Interesting that you mention Toyota.
               | 
               | https://www.reuters.com/business/autos-
               | transportation/toyota...
        
         | rileyphone wrote:
         | I hate on Java because it's terrible to program in and seems to
         | make it harder to actually solve problems, between the store-
         | brand version of object orientation that it's based on and the
         | mountains of useless abstraction that begets. There's a reason
         | its relative popularity is on a downward trend [0] - my
         | generation of programmers were taught Java in college and
         | learned to hate it. Though I will say that its narrowness and
         | structure make it the best choice for outsourcing/getting the
         | most out of the cheapest development resources. Just not
         | something that I want to deal with.
         | 
         | [0] https://www.tiobe.com/tiobe-index/java/
        
           | kaba0 wrote:
           | Tiobe is next to useless, and Java doesn't beget useless
           | abstraction - it is entirely up to you how you write your
           | code. Also, while it is indeed started out as an OOP
           | language, it is a mixed paradigm one nowadays (just as almost
           | all languages are) -- you are entirely free to program it in
           | a much more functional way. It is especially freeing with the
           | new records.
        
             | dilyevsky wrote:
             | It's true java the technology is actually pretty good. Java
             | the culture on the other hand... It's probably less to do
             | with the language itself rather the fact it's used mostly
             | for boneheaded enterprise crud
        
               | kaba0 wrote:
               | Java has as many developers as a smaller country, ranging
               | from the numerous enterprise domain (you mention) to
               | robotics, to HFT. The culture between these are really
               | distinct between them.
        
         | agumonkey wrote:
         | Java would be the same success as PHP .. it might be everywhere
         | but due to all kinds of side forces.
         | 
         | It's like playing snooker, claiming a ball, missing it but
         | scoring all the other ones accidentally and bragging.
        
           | kaba0 wrote:
           | PHP was a scripting language that got big because my aunt
           | could create a "website" with it and host it for pennies. If
           | anything, its popularity was the only surprising thing.
           | 
           | The JVM on the other hand was not chosen by Google, Apple,
           | Alibaba and basically the majority of web servers to be the
           | base stone of their functionality by accident.
        
             | agumonkey wrote:
             | But the server side position of java is already a strange
             | notion of success, as mentioned above java wasn't meant to
             | live there. Hence the parallel with PHP, its mod_php was
             | the reason admins installed it on servers, because it was
             | easier and leaner (compared to mod_perl), a happy accident.
        
               | wanderingstan wrote:
               | Indeed. Reminds me of an early 1997 interview I had about
               | the future of Java, when it was trying hard to displace
               | JavaScript in the browser (swing gui and such) and flash
               | was already starting to beat it out.
               | https://wanderingstan.com/netguide-interview-
               | february-1997
        
               | jfengel wrote:
               | I still wonder what would have happened if Java decided
               | to take Javascript's approach by giving access to the
               | DOM, rather than an entirely separate GUI mode.
               | 
               | Things like Google Maps and Gmail came as something of a
               | shock. They were near-desktop-level apps entirely within
               | the browser. That meant JS, not because of the language
               | but because it was the only cross-platform system that
               | gave access. It should have been possible to do that for
               | Java as well, but they never really tried.
        
           | Sharlin wrote:
           | That's very unfair. Some people may dislike Java and its
           | ecosystem (and even the JVM platform), but it is not where it
           | is now by accident.
        
             | LanceH wrote:
             | But it isn't necessarily there strictly on the merits of
             | the language. Sun put a billion dollars of marketing into
             | it. Managers, directors and others with expectation of ever
             | programming were taking Java courses because it was going
             | to change _everything_.
             | 
             | It was going to run on every device in my kitchen, and they
             | were all going to talk to each other. Instead the first
             | niche it found was J2EE, and that "write once, run
             | anywhere" was a bit comical, because who swaps out the OS
             | on their server?
             | 
             | It was apparently good enough to be the choice for Android
             | and similar, but that was much later.
             | 
             | It's really difficult to describe how people -- especially
             | non programmers -- bought into the hype surrounding Java.
             | 
             | I've since seen a bit of that hype around some things, but
             | never to that extent: XML, SPA, a strange obsession with
             | tiled widgets.
        
               | KptMarchewa wrote:
               | 3 billion devices run log4shell.
        
               | pbourke wrote:
               | > It was going to run on every device in my kitchen, and
               | they were all going to talk to each other. Instead the
               | first niche it found was J2EE
               | 
               | The first niche was applets. A managed language with a
               | batteries-included library, familiar syntax and cross-
               | platform GUI story was a new thing at the time.
        
             | agumonkey wrote:
             | I honestly wonder what made java so prevalent server side.
             | JVM jit speed and memory safety are good arguments but the
             | rest was not so shiny. Remember the J2EE era, it was
             | horrible and the reason java got there seems, IMO, to be
             | heavy marketing.
             | 
             | ps: I forgot, the JVM spec was a good thing, it made a lot
             | of things sound for people, so easier deployments and less
             | inconsistencies.
        
               | KptMarchewa wrote:
               | I honestly feel there was no competition in the early 00s
               | besides PHP, and that choice came with tons of other
               | issues, especially at that time.
        
               | Jetrel wrote:
               | Not exactly a java fan here, but java targeted the
               | enormous block of people writing in C/C++ for their
               | enterprise servers, and gave them "machine-independence".
               | Being able to upgrade your server, and not having to
               | rewrite your app, was huge. The competition wasn't PHP,
               | at the time; it was C/C++.
               | 
               | It's interesting in today's era of Rust, that people
               | think of Java as failing to replace C++; in practice, it
               | was only 90% successful, and managed to replace the vast
               | majority of cases where people did use it.
               | 
               | About the only things that didn't get replaced were
               | (some) desktop gui apps, and apps that were so tiny that
               | they weren't worth the launch of the JVM.
        
               | agumonkey wrote:
               | Yeah I remember steele saying they wanted to make c++
               | move toward lisp.
               | 
               | But you got me curious.. what kind of backend code was
               | written in c++ ? did people write server side logic in it
               | ? I remember seeing some Oracle C code but it felt like a
               | strange thing and not a c/c++ land. But to be honest
               | that's not my world.
        
               | pbourke wrote:
               | C++ was quite common back in the day. Amazon began as a
               | C++ monolith (obidos).
        
               | zmmmmm wrote:
               | Also - you have to remember that in the late 90's / early
               | 2000's, Windows was at peak dominance, nearly 100% of
               | developers at work were stuck with a Windows desktop to
               | develop on. At the same time nearly all servers were
               | linux or maybe solaris. So how are you going to develop
               | on Windows and deploy on Unix? C++ was a nightmare,
               | scripting languages were far from ready ... Java was
               | really transformational in how it gave a complete,
               | totally portable standard library in a mature language
               | framework. All these things are take for granted today.
        
           | simion314 wrote:
           | >Java would be the same success as PHP .. it might be
           | everywhere but due to all kinds of side forces.
           | 
           | People like you that complain about C,PHP,Java etc forget the
           | history , your favorite cool language did not exist at that
           | time or if it existed had probably a lot of downsides. Also
           | many complainers do not work with the languages and repeat
           | like parrots something they read. I would love to get some
           | perfect programming language, something with more maths in it
           | that forces thinking of solutions and less glueing shit
           | together or rewriting X and CoolLang for my CV.
        
             | [deleted]
        
             | agumonkey wrote:
             | And what is that history I have forgotten ?
             | 
             | Was java an embedded project at first ? yes
             | 
             | Was it then a client side universal solution ? yes
             | 
             | is it still any of those two ? no
             | 
             | Also please don't make comments on me assuming I'm
             | parroting, that would be nice :)
        
               | whimsicalism wrote:
               | > Was it then a client side universal solution ? yes
               | 
               | This remains true?
        
               | agumonkey wrote:
               | I rarely run into client side programs being better (or
               | even interesting) due to java/jvm. Eclipse was quite a
               | clusterf.. (at least when I left that side in 2008). Note
               | that I'm not anti Java. I just think its course was
               | fluctuating across time and "success" is really a strange
               | term. The rare times people were happy about Java was the
               | advanced JIT.
        
               | simion314 wrote:
               | Minecraft Java Edition IMO has this giant community
               | because it is easy to mod and this is because of Java
               | since the devs did not create modding tools. I am sure it
               | was much easy for one person to develop such a complex
               | game in a manged language too , from my experience with
               | desktop apps the ones I made in Adobe AIR using AS3 had a
               | lot fewer bugs and fewer support tickets and we got cross
               | platform too.
               | 
               | I also worked on a Java screen sharing in browser web
               | conference solution back when this was not possible with
               | native stuff or with Flash, if you understood the
               | language you could get good performance.
        
               | whimsicalism wrote:
               | IntelliJ/Pycharm?
        
               | agumonkey wrote:
               | IntelliJ might be better than Eclipse/Netbeans but it's
               | still not the massive success Java planned. A few
               | exception in the IT side of the world.
        
               | simion314 wrote:
               | >IntelliJ might be better than Eclipse/Netbeans
               | 
               | Is better then any other similarly featured IDE, so good
               | that people pay for it rather then use free alternatives
        
               | agumonkey wrote:
               | I know I used it for ages back when they started MPS
        
               | simion314 wrote:
               | >Also please don't make comments on me assuming I'm
               | parroting, that would be nice :)
               | 
               | I did not said you specifically but I doubt you have
               | years of experience in PHP and Java but let me know How
               | what was the better alternative back then? Writing
               | webpackes in C or some proprietary language with a paid
               | compiler? Was there something much better and for some
               | reason people used PHp because was cool and were tons of
               | "write in PHP zelots"?
               | 
               | From my memory the LAMP stack was free and was easy to
               | start with, Java was much more productive then the
               | alternatives and it had good tools, books and
               | documentation. I can't think at any good alternative
               | except the late C# but Microsoft was to incompetent to do
               | the right thing and kept it proprietary and Windows only
               | for a long time.
        
               | agumonkey wrote:
               | I don't think the word productive ever reached my brain
               | when I was learning websphere. Annotation driven servlets
               | never felt exciting or clean (unlike the post closure /
               | decorator era where you can write stuff clearly and
               | rapidly). I'm calling for a winner language here, I'm
               | saying praising java position is a strange notion of
               | success, it's everywhere indeed, but for what reasons ?
        
               | simion314 wrote:
               | > don't think the word productive ever reached my brain
               | when I was learning websphere.
               | 
               | So what else was more productive? you said PHP is not the
               | answer and "websphere" is not Java the language or Java
               | the ecosystem (think of the many Java libraries out there
               | and at the good enough Java standard library compared to
               | others)
        
           | chuckSu wrote:
        
         | mrcwinn wrote:
         | >I do not only think he was right to lose sleep over it: I
         | think Java delivered.
         | 
         | He's not losing sleep over Java, the language, becoming
         | popular. He's losing sleep over the threat to the business (at
         | the time, operating systems). I think if you consider
         | Microsoft's market cap ($2.39 trillion this morning), despite
         | some bumps along the way, Microsoft protected and grew its
         | value.
         | 
         | It's not to say Java hasn't enabled monetization. But if you
         | have "billions of Java smartcards" and the long tail of those
         | installs don't create much value or affect Microsoft's bottom
         | line, then, to Bill, that particular point is moot.
         | 
         | (Edited typo)
        
           | xtracto wrote:
           | I think Gates didn't have anything to worry about regarding
           | Java... at the end of the day, the company that created it
           | went under the water in 2009. Java as a technology was great,
           | but as a business just didn't cut it.
        
             | garbagecoder wrote:
             | And wasn't part of that that MS made it's own
             | implementation? One that I recall being preferable as a
             | user.
        
             | ThrowawayR2 wrote:
             | Nobody knew that at the time. 2000 is the peak for both for
             | companies before the dotcom bust and Sun Microsystems had
             | $18.3 billion in revenue, not that far behind Microsoft's
             | $22.9 billion in revenue.
        
         | thomascgalvin wrote:
         | > How is Java not one of the biggest success story ever for a
         | programming language?
         | 
         | It absolutely is.
         | 
         | Java isn't sexy, for the most part. It lets a lot of innovation
         | happen in other languages, then takes the successful parts for
         | itself. This is how we (eventually) got generics, lambdas,
         | streams, and local type inference, for example.
         | 
         | Java slowly becomes more ergonomic, and that slowness - the
         | slowness to change, not execution speed - is why it gets a lot
         | of hate. Why use Java, when $LANGUAGE_OF_THE_DAY has
         | $FEATURE_OF_THE_DAY?
         | 
         | What people fail to realize, what people fail to see the value
         | of, is that this slowness means Java doesn't get _worse_. Java
         | has avoided most unforced errors. It 's not like C++, where the
         | template language is both Turing complete and the fastest way
         | to summon Beelzebub from the depths of his infernal pit, and
         | where you need a team of PhDs to decide which version of
         | `auto_pointer` actually works the way you think it does. It's
         | not Javascript, where the framework your front-end lead sold
         | you on last week has already been superseded by the hot new
         | thing.
         | 
         | And you don't generally have to worry about compatibility.
         | Until v9, you could take code written against the 1.0 spec of
         | the language and expect it to run pretty much out of the box.
         | And the changes post v9 honestly aren't that difficult to work
         | through, as opposed to Python's 2 -> 3 split.
         | 
         | Java isn't the sexiest language out there, but it hits a very
         | sweet spot, right in the middle of the "familiar", "stable",
         | and "productive" Venn diagram. It's probably the second-most
         | important computer language developed in my lifetime, after
         | Javascript, and is without a doubt a smashing success story.
        
           | ajross wrote:
           | > Java isn't sexy, for the most part.
           | 
           | In 1996, Java was pretty darn sexy. Managed runtimes in a
           | high performance[1] language were an absolute revelation at
           | the time.
           | 
           | It's absolutely true that as it evolved, Java grew to embrace
           | the affects and aesthetics of its biggest customers
           | (Enterprise backend coders). And that's not sexy at all. But
           | at the time? We all thought this was going to be the systems
           | language for the next century.
           | 
           | [1] Almost. At the time this email was written, the first JIT
           | JVM was still a few months out from its early beta releases.
           | But Gates could absolutely see where the wind was blowing.
        
           | __float wrote:
           | Writing Java in my day job currently, I really miss C#. It
           | feels slightly more like a "Java done right" -- the same
           | strategy of bringing "fancier" features from F# or other
           | languages, but it has just a _few_ more features that make
           | day to day development just a little more pleasant.
        
             | Mikeb85 wrote:
             | Why not start incorporating Kotlin? It's basically what you
             | want, is an easy transition and has JetBrains' backing so
             | the tooling is there...
        
             | thomascgalvin wrote:
             | > [C#] feels slightly more like a "Java done right"
             | 
             | This is how I feel about Kotlin.
        
             | kaba0 wrote:
             | Nah, C# has a _shitton_ of more features, some of them
             | indeed making the day to day development more pleasant,
             | while the other ones are known only by a handful of people,
             | has strange interoperability with everything else or is
             | superseded already by another one. It is really on the way
             | to become as complex as C++ is.
        
               | tkot wrote:
               | Could you list these features? I was under the impression
               | that apart from some things that can be easily done in C#
               | but are pretty much impossible to do in Java (like value
               | types* and pointers) the languages were pretty similar.
               | 
               | Some C# things seemed rather strange (like delegates),
               | some purely cosmetic (like indexers) and there were also
               | things that Java had but C# did not like covariant return
               | types (available from C# 9.0)
               | 
               | *Project Valhalla is supposed to bring it to Java but I
               | wouldn't hold my breath waiting for it.
        
               | _old_dude_ wrote:
               | The "dynamic" keyword [1] is my favorite blunder in C#.
               | It's great if you are use it for COM interropt but it's
               | awful otherwise.
               | 
               | The code compiles but from time to time it fails at
               | runtime and performance are sometimes Ok, sometimes not
               | depending on the call stack.
               | 
               | [1] https://docs.microsoft.com/en-
               | us/dotnet/csharp/programming-g...
        
               | sterlind wrote:
               | dynamic is amazing for the extremely niche use case of
               | interop with dynamic languages. I had a system which
               | executed Python scripts on devices using an orchestrator
               | written in C#. With dynamic and IronPython, I could
               | seamlessly unit test the whole enchilada without writing
               | un-Pythonic Python or ugly C# wrappers.
        
               | lou1306 wrote:
               | Accessors come to mind:                   class Foo {
               | int Bar { get; set }         }
               | 
               | Allow you to get/set the value of someFoo.Bar as if it
               | were a public member. If you want read- or write-only
               | members, you just remove the "set" or "get" portion. If
               | at some point you need to add logic to the setter, you
               | just do                   int Bar { get; set { /* setter
               | logic goes here */ } }
               | 
               | You still use assignment syntax ("someFoo.Bar =
               | newValue"), but this syntax is desugared into a call to
               | the setter method. Ditto for the getter.
               | 
               | IMHO they make class APIs much cleaner and forward-
               | compatible (on the other hand, if you started with a
               | public member and then need to add a proper setter with
               | some logic, you would break the API).
               | 
               | Also, non-nullable types are a pretty nice way to avoid
               | checking for null every other line of code.
               | 
               | And these are literally just the first couple examples
               | that came to mind.
        
               | tkot wrote:
               | I think this is can be handled with Lombok using @Getter
               | and @Setter annotations
               | (https://projectlombok.org/features/GetterSetter). It is
               | not exactly the same because you call generated methods
               | instead using assignment syntax but I guess it's close
               | enough - if you need some custom logic in the
               | getter/setter then you remove the annotation and write
               | your own implementation (I think Lombok might be smart
               | enough to ignore the annotation if an appropriately named
               | getter/setter is present).
               | 
               | Non-nullable types sound great, I wonder if this could be
               | introduced to Java in a backwards-compatible way (I
               | suppose it would follow the same path with introducing
               | explicitly nullable types first, though I guess it could
               | be handled using Optionals?).
        
               | pulse7 wrote:
               | If you need a shortcut for accessors, you may aswell make
               | your fields public and avoid get/set altogether...
        
               | jerf wrote:
               | This allows you to override the logic later. Public
               | fields in a language where "x.y" means "directly access
               | field y on value x" don't allow that; x.y forever means
               | "directly access field x" and you can't later interpose
               | code between attributes and the code accessing it.
               | 
               | This isn't the only way of doing it, depending on your
               | language. Python has a completely different mechanism
               | where a class can start with a directly-accessed "y", but
               | in a later version make it a property. (More than one,
               | actually.) Some languages route all property accesses
               | through something you can hook. Some languages simply
               | automatically do what C# is doing here.
               | 
               | Semantically and abstractly, there's no reason to every
               | not be able to override a property access in later
               | versions like that, because it is _so_ darned useful.
               | Unfortunately, performance wise, it 's hard to beat a
               | language that guarantees structure layout and guarantees
               | that x.y can be compiled into a single constant memory
               | load instruction, and unfortunately, you can't just wave
               | "compiler optimization" at the problem and make it go
               | away (considered in isolation this seems like an obvious
               | solution but as usual as it starts interacting with all
               | the other features it gets much harder than the simple
               | cases). The higher performance languages have a strong
               | reason to give people ways to get guaranteed direct
               | struct member accesses.
        
               | jdmichal wrote:
               | Though please note that if you "upgrade" anything from a
               | field to a property, you need to recompile any
               | dependencies. Otherwise they will obviously try to invoke
               | the field that no longer exists, instead of calling the
               | property methods.
        
               | pivo wrote:
               | Not if you need to implement some setter logic though, or
               | want to reserve the option to do so in the future. And
               | not if you want those instance variables to be available
               | as JavaBean properties.
               | 
               | I haven't developed in Java in a long time, but public
               | instance variables were a no-no when I did for these
               | reasons.
        
             | shellac wrote:
             | C# is an excellent contrast. It has always moved quicker
             | than java (not hard), but that has left some features that
             | in retrospect seem half baked. For example they needed some
             | sort of function reference thing, so we had 'delegates',
             | but then later we got lambdas with LINQ. And although LINQ
             | has a lot of good parts, I'm not sure the expression bit
             | was a good idea even people familiar with SQL linked it.
             | 
             | And reified generics are nice for c#, but a right pain if
             | you want to implement another language on the CLR which
             | isn't very c#-ish.
             | 
             | More recently I'm still not sure why, in a language with an
             | extensive runtime and its own VM, they went with async /
             | await rather than fibers or continuations like go and java.
             | It was probably simpler to implement initially, of course.
             | 
             | Even slow moving java shows that bad decisions have a cost
             | down the road even if the features are unused: there can be
             | monitors on any object to support synchronisation,
             | serialisation similarly lurks around internally.
        
               | politician wrote:
               | IIRC, they went with async/await because it could be
               | implemented through desugaring in the compiler using a
               | technique similar to what they had implemented a few
               | months earlier with IEnumerable. That is to say, the team
               | was thinking about desugaring at the time the need for
               | asynchronous functions arose and they were not thinking
               | about CSP. Remember that C# was in production at the time
               | and they needed something that would not potentially
               | upset the world.
        
               | tsimionescu wrote:
               | > More recently I'm still not sure why, in a language
               | with an extensive runtime and its own VM, they went with
               | async / await rather than fibers or continuations like go
               | and java. It was probably simpler to implement initially,
               | of course
               | 
               | Async/await work much much better than goroutines for GUI
               | programs, which was still a major market at the time this
               | feature was added to C#. Since there is a single GUI
               | thread where everything that touches the GUI must live,
               | but you do want your application to have multiple other
               | threads, you need to give the programmer this kind of
               | control and can't rely on a more simplistic Go-style
               | green threads runtime.
               | 
               | I believe COM also has some similar requirements, but I
               | am less sure than I am for GUI.
               | 
               | Finally, C# has a lot of influence from the functional
               | langauge community, so it's possible that async/await and
               | Task values were a more appealing solution given those
               | particular tastes.
        
               | vips7L wrote:
               | > Since there is a single GUI thread where everything
               | that touches the GUI must live, but you do want your
               | application to have multiple other threads, you need to
               | give the programmer this kind of control and can't rely
               | on a more simplistic Go-style green threads runtime.
               | 
               | Isn't that just a limitation of Go since its goroutines
               | all run in the same pool? As far as I know, in the Java
               | implementation you'll be able to create virtual thread
               | pools from regular threads (i.e. the gui thread) and then
               | have another virtual executor for the rest of your
               | program. You'll still have the backend vs gui split but
               | you won't have the entire async await split for the rest
               | of your application.
        
               | pionar wrote:
               | I mean, technically, you don't have to have async/await
               | in C#. Nothing's stopping you from using threads from the
               | thread pool.
        
               | Zababa wrote:
               | > Async/await work much much better than goroutines for
               | GUI programs, which was still a major market at the time
               | this feature was added to C#. Since there is a single GUI
               | thread where everything that touches the GUI must live,
               | but you do want your application to have multiple other
               | threads, you need to give the programmer this kind of
               | control and can't rely on a more simplistic Go-style
               | green threads runtime.
               | 
               | Couldn't you have the GUI thread on one core, and the
               | "goroutine pool" taking all the other cores, and
               | distribute work on that pool? The model would be a bit
               | more complex than Go, but considering C# is made for a
               | wider variety of usages, multiple models wouldn't be so
               | far fetched.
        
               | orthoxerox wrote:
               | > More recently I'm still not sure why, in a language
               | with an extensive runtime and its own VM, they went with
               | async / await rather than fibers or continuations like go
               | and java. It was probably simpler to implement initially,
               | of course.
               | 
               | No one was willing to approve another extension of the
               | old runtime, and a major one at that. If they had already
               | completed the .Net Core rewrite back then they would've
               | probably baked async into the runtime.
        
           | gtm1260 wrote:
           | One of the biggest turn off to me of java has always been the
           | poor quality of many java apps. Especially on mac, you _know_
           | when its a java app vs native.
        
             | pkulak wrote:
             | Can you give me an example? Java is used for so few user
             | applications, the only project I can think of is IntelliJ,
             | which is an amazing project.
        
               | gtm1260 wrote:
               | My mind goes to the original Arduino IDE, or Weka Studio.
               | I know these are pretty indie projects in the scheme of
               | things, but still.
        
               | garbagecoder wrote:
               | I use jetbrains apps on mac. I like them a lot, but they
               | aren't mac-like even now. In the past they were even
               | chunkier.
               | 
               | SPSS comes to mind too.
        
               | pjmlp wrote:
               | SPSS doesn't come to mind as having developers that would
               | bother to read Filthy Rich Clients kind of books, or
               | Apple extensions,
               | 
               | http://filthyrichclients.org/
               | 
               | https://developer.apple.com/library/archive/navigation/in
               | dex...
        
           | VHRanger wrote:
           | I would say Java the language is fine, but the culture around
           | it is what's grown the distaste many have for it. The overuse
           | of design patterns, etc.
           | 
           | I also find it fun how Guy Steele had in retrospect the
           | perfect plan for Java back in the 1990s, and it took them 15
           | years to come around to it:
           | 
           | https://www.youtube.com/watch?v=_ahvzDzKdB0
        
             | PaulHoule wrote:
             | If Common LISP had become popular I think there would be a
             | popular distaste for everything about it and people would
             | be wishing they could write code in PHP, Visual Basic,
             | COBOL, Cold Fusion, etc. (There was a popular distaste for
             | Common LISP at the time, it was hard to find a LISPer in
             | the 1980s who liked it. Half of that was it was hard to fit
             | it into a 16-bit machine and wouldn't become really
             | implementable on microcomputers until a 32-bit OS was
             | available... Thus BASIC got another decade of life
             | extension.)
             | 
             | Until Java came around every book on Object Oriented
             | programming (say "C++") had examples such as "Stack",
             | "Queue", etc. In the case of Java you saw people starting
             | to write objects mirroring the business and application
             | domains. People who were trying to use objects in Smalltalk
             | or C++ in 1990 just weren't accomplishing enough that
             | somebody could step back and say "object orientation
             | sucks", rather they were getting stuck and blaming
             | themselves or blaming the tools, rather than the concept.
        
             | alexjplant wrote:
             | > I would say Java the language is fine,
             | 
             | When I was using it I didn't particularly mind it except
             | for the clumsy handling of functions (i.e. as objects
             | instead of first-class citizens) and verbosity (no
             | automatic accessors, implicit typing, etc). Adding Lombok
             | solved most of these. *EDIT: Except for runtime type
             | erasure of generics which caused (not sure about new Java)
             | performance issues and made certain type operations
             | difficult.
             | 
             | > but the culture around it is what's grown the distaste
             | many have for it.
             | 
             | Having to debug esoteric issues with classpath, Spring,
             | CDI, JPA, Aspect4j, etc. is hell on earth. I've lived that
             | life and have no desire to do so again. Because Java is the
             | lingua franca of enterprise development it also tends to
             | rear its ugly head on modernization projects and rewrites.
             | 80% of the abhorrently-engineered codebases I've
             | encountered in my career were written in Java by body shops
             | (C# and Coldfusion were the runners up).
             | 
             | > The overuse of design patterns, etc.
             | 
             | I'm not an adherent of the design pattern cargo cult but
             | I'm one of four people under the age of 50 that have
             | actually read the GoF book and I do indeed sometimes name
             | objects after patterns described in the book; I typically
             | design components and name them such after the fact as
             | opposed to constructing systems from the ground up using
             | design patterns. Calling a thing that persists comments in
             | a database `CommentRepository` is a lot more useful than
             | calling it `CommentHelper`.
        
               | pjmlp wrote:
               | Try doing the same with CORBA and DCOM.
        
               | matwood wrote:
               | I'm under 50 and read the GoF book ;)
               | 
               | I'm one of the rare people who was writing vb and then c#
               | during the terrible Java j2ee days. Then I got a job in a
               | startup using Java which avoid the 'enterprise' idioms.
               | So my experiences with Java over the last decade or so
               | have been mostly good (except for a foray into Hibernate,
               | never again - jOOQ for life). No crazy class models, no
               | xml configuration, etc...
        
               | PaulHoule wrote:
               | If you don't like putting objects and classes on the left
               | you can write                  import static
               | example.Library.*;
               | 
               | And proceed to write in your main method
               | var x = someFunction(6, 'that');
               | 
               | in a style like C, LISP, or ML. You can write a whole
               | program (like the answer for a HackerRank problem) in a
               | single file. The developers of Java have always respected
               | the ML family and JDK17 incorporates pattern matching,
               | records, algebraic types and and many other features that
               | make functional programming fun.
               | 
               | The type erasure problem for generic classes goes away
               | when you use generic methods; type inference works
               | without limitation for generic methods and is great for
               | defining APIs for internal domain-specific languages
               | any(grammar,you.want(ifIt.parses(ON_THE_LEFT)));
               | 
               | the great thing about Java is a quality IDE is certain to
               | support this programming style.
               | 
               | Any complaint that the internal DSL is too verbose can be
               | attacked by the use of code generation which is
               | straightforward to incorporate in a maven build and your
               | IDE. (The LISPer is using code generation and you have to
               | do it if you want to keep up.)
        
               | stickfigure wrote:
               | > Having to debug esoteric issues with classpath, Spring,
               | CDI, JPA, Aspect4j, etc. is hell on earth.
               | 
               | The term "DLL Hell" came from Windows development before
               | it. The Node/Ruby/Python equivalent is getting native
               | libraries to build (node-gyp, I'm looking at you!). I've
               | burned _days_ in Ruby Version Hell and Node Version Hell.
               | Javascript dependency upgrades are a nightmare compared
               | to Java dependency upgrades.
               | 
               | I don't think this problem has gone away, or even
               | improved. It's just a grim fact of life, and Java doesn't
               | deserve special mention.
        
               | tombert wrote:
               | Despite my love for the language (and Stack has _mostly_
               | fixed this), I feel like Haskell 's "Cabal Hell" is
               | amongst my least-favorite headaches from my past.
               | 
               | Getting weird, hard to follow conflicts between different
               | packages on Hackage and dealing with weird compiler hack
               | flags is something that never got fun or easy.
        
               | alexjplant wrote:
               | The things you mention are no fun either (`node-gyp` in
               | particular), but the Java issues I encountered were far
               | beyond run-of-the-mill runtime linking and interop issues
               | you describe. The details are lost to time and a bit
               | fuzzy but I recall the primary issue being competing CDI
               | implementations stepping on each other when we tried to
               | use JSF with a recent version of Spring... and because
               | most everything in the Java ecosystem was doing some
               | opaque Aspect4J magic it was nigh-impossible to debug.
        
               | slaymaker1907 wrote:
               | Amen to esoteric Spring issues. I once dealt with a jar
               | that suddenly started failing despite no code changes
               | because Spring uses the order of files in the zip
               | file/jar to determine initialization order. Turns out one
               | that particular time files ended up in a weird order
               | inside the jar file.
        
               | The_Colonel wrote:
               | It's natural to read and initialize the classes as they
               | come, _unless the code defines a specific dependency
               | order_.
               | 
               | This looks like a developer simply did not declare proper
               | dependency between classes/beans.
        
               | progmetaldev wrote:
               | I think the real majority of hate that I've seen for
               | design patterns are when juniors go into a system looking
               | to slap a design pattern anywhere they possibly can,
               | quickly creating a ball of mud that is difficult to work
               | with and figure out. At least that's been my experience
               | (and I have to sadly admit I did the same when I was a
               | junior without a mentor to help me through figuring out
               | how to refactor my code into these patterns only when
               | needed).
        
             | smallhands wrote:
             | it is painful watching this video . presentation software
             | and projectors are truly blessing
        
             | smrtinsert wrote:
             | Overuse of design patterns seems like decades ago.
        
               | polotics wrote:
               | Sadly it is not: they still get taught, and then juniors
               | come and they expert-beginner projects to death. And yes
               | in 2022 expert-beginner is a verb! Cheers
        
             | txru wrote:
             | Since that's an hour-long video, what do you consider the
             | most salient points of his plan for Java that it ended up
             | embodying eventually?
        
             | itronitron wrote:
             | Just like any other language, in order to use Java well you
             | have to ignore a lot of the hyped up techniques.
        
             | thomascgalvin wrote:
             | > The overuse of design patterns, etc.
             | 
             | Java has been trending away from this for some time now. A
             | modern Spring app looks nothing like an old J2EE app.
        
               | dagw wrote:
               | A lot of us jumped off the Java train in disgust at the
               | height of the J2EE craze and never looked back, so fairly
               | or unfairly we'll forever be judging everything Java by
               | that tainted memory.
        
               | pjmlp wrote:
               | A framework originally designed for Objective-C,
               | actually.
        
               | tombert wrote:
               | Wait, is that true? I know WebObjects was designed around
               | ObjC, but a quick ten seconds on Wikipedia doesn't
               | indicate that J2EE was designed around ObjC initially.
               | 
               | ----
               | 
               | Unnecessary opinion: I don't like either, but WebObjects
               | sucks about 1/10th as much as J2EE.
        
               | pjmlp wrote:
               | You should have spent more than ten seconds.
               | 
               | > By the time DOE, now known as NEO, was released in
               | 1995, Sun had already moved on to Java as their next big
               | thing. Java was now the GUI of choice for client-side
               | applications, and Sun's OpenStep plans were quietly
               | dropped (see Lighthouse Design). NEO was re-positioned as
               | a Java system with the introduction of the "Joe"
               | framework, but it saw little use. Components of NEO and
               | Joe were eventually subsumed into Enterprise JavaBeans.
               | 
               | Taken from https://en.wikipedia.org/wiki/Distributed_Obje
               | cts_Everywhere
        
               | tombert wrote:
               | Ah, I was just quickly reading on the J2EE wikipedia
               | entry and didn't see "Objective" anywhere on there.
               | 
               | You're absolutely right, thank you for clarifying!
        
               | pjmlp wrote:
               | No issues, and here is another one, while Java might have
               | a C++ like syntax to make it more appealing to
               | mainstream, its main influence was Objective-C, not C++.
               | 
               | https://cs.gmu.edu/~sean/stuff/java-objc.html
               | 
               | Hence interfaces, dynamic loading, reflection and so
               | forth.
        
               | tombert wrote:
               | Interesting.
               | 
               | Bringing it back to a previous point I made, I met
               | someone who claimed to have helped port over the
               | WebObjects framework from Objective-C to Java, and he
               | claimed that while it's not a 1-to-1, you can fairly
               | easily map a lot of the Objective-C semantics to Java,
               | making the porting process not _that_ hard.
        
               | pjmlp wrote:
               | Yes, they are quite close.
               | 
               | Objective-C related content,
               | 
               | https://developer.apple.com/library/archive/documentation
               | /Le...
               | 
               | Java variant,
               | 
               | https://developer.apple.com/library/archive/documentation
               | /Le...
        
               | smrtinsert wrote:
               | Yep spring since 1.12 here.
        
               | fsdjkflsjfsoij wrote:
               | Modern Spring Boot is still incredibly bloated and full
               | of questionable design patterns. A simple web application
               | should not consume hundreds of megabytes of RAM by
               | default and startup time on modern hardware should be
               | basically instantaneous. Classpath scanning and
               | annotations are still massively overused and most of the
               | time they're accomplishing little more than obfuscation
               | and turning compile time errors into runtime errors.
        
               | kaba0 wrote:
               | Why exactly? How often do you start up a web application?
               | And it's not like the RAM is not there to use it --
               | thread pools, db connection pools, etc have to be set up.
        
             | pjmlp wrote:
             | I see this repeated all the time.
             | 
             | What people fail to realize is that the enterprise culture
             | is language agnostic.
             | 
             | Before Java we were doing the same with C, C++, VB, Delphi,
             | Smalltalk and whatever 4GLs one wants to dive into.
             | 
             | When Java gets replaced by TechX, the space ship enterprise
             | architects will keep doing what they know best in TechX.
        
           | noblethrasher wrote:
           | Java's (Oracle's) strategy is to spend most the innovation on
           | the runtime, and in that regard, it's probably the most
           | advanced platform. The net effect is that you can write some
           | pretty naive and boring OO-style code that will almost always
           | perform superbly. This is a good thing, and something that I
           | envy as a C# programmer.
        
           | pkulak wrote:
           | And lets not forget that the JVM runs all kinds of things
           | that aren't Java. So Java devs who get bored can write a few
           | packages in whatever new hotness they like until either
           | they're sated, Java catches up, or all new development moves
           | over.
        
           | mashpoe wrote:
           | > It lets a lot of innovation happen in other languages, then
           | takes the successful parts for itself
           | 
           | The only time I've ever had to use Java was for a computer
           | science class, and I thought it was a solid language (pun
           | intended), but I hated its half-assed attempt at operator
           | overloading.
           | 
           | I think it's a major feature that's long overdue to be fully
           | implemented in Java, because it's already used for some of
           | Java's built-in classes and it's proven useful in many other
           | programming languages.
           | 
           | Most of Java seems very well-thought-out to me, but for some
           | reason they decided to add only some operator overloading,
           | instead of planning ahead more.
           | 
           | I remember hearing somewhere that they were planning on
           | adding operator overloading, but last I checked it didn't
           | look like it was going anywhere.
        
             | PaulHoule wrote:
             | Java chose not to implement (general) operator overloading
             | because it's really hard to do right. We're left with just
             | a fluent syntax for appending text to strings.
             | 
             | Java was one of the first language specifications to be
             | written by adults (maybe Common Lisp was the first, but it
             | drives Common Lisp fans crazy to compare Common Lisp to
             | Java, Python, etc.)
             | 
             | Python's operator overloading works remarkably well given
             | that it has a very simple model (always look to the left
             | hand side to decide how to interpret the operator.) C++ on
             | the other hand ought to make anybody skeptical of the idea,
             | but C++ would make anybody thoughtful and sensitive
             | question the idea of computers entirely.
        
               | hiptobecubic wrote:
               | If there's no implementation on the left, python then
               | looks on the right.
        
               | nradov wrote:
               | The lack of operator overloading makes it impossible to
               | implement new numeric types in a consistent way. For
               | example imaginary numbers or numbers with units.
        
               | PaulHoule wrote:
               | You can make the case that both intX (x=16, 32, 64) and
               | floating point are bad for general purpose computing.
               | Like Common LISP and Python, Java has bigints and
               | rationals in the stdlib, but Java makes you use non-
               | operator syntax to get at them. Contrast that to Clojure
               | which puts them on your fingertips.
               | 
               | Java has always been in a strange place of not deciding
               | if it wants to be a systems or application language. (The
               | standard architecture is that demanding systems, say
               | video games, are written in both a systems language and a
               | scripting language. A Python coder feels smart when the
               | incorporate, say, number is written in C or FORTRAN but
               | Java's xenophobia makes that feel like a personal
               | failure. Java is 'good enough' for applications
               | programming that you might find something like Spring or
               | Guava gives you all the dynamism you need with less
               | hassle than adding an embedded scripting language like
               | Groovy or Clojure.)
        
               | Someone wrote:
               | > Java was one of the first language specifications to be
               | written by adults (maybe Common Lisp was the first, but
               | it drives Common Lisp fans crazy to compare Common Lisp
               | to Java, Python, etc.)
               | 
               | I think ALGOL was first, in the ALGOL 60 Report
               | (https://en.m.wikipedia.org/wiki/ALGOL_60#History). COBOL
               | may have had a good spec around that time, too.
               | 
               | There were older languages with specifications, but those
               | specifications were looser, with languages partly defined
               | by their prime implementation.
        
               | tsimionescu wrote:
               | Well, neither Java, Common Lisp nor ALGOL60 support
               | operator overloading, so there does seem to be a trend
               | there.
               | 
               | Common Lisp in fact, as most lisps, has no support for
               | "operators" in the infix sense at all. If you have a need
               | for a very algebra-heavy portion in your program (say, a
               | linear algebra library), the best idea would be to define
               | a DSL for that particular algebra - especially since this
               | will give you much more control over efficient evaluation
               | than using the built-in evaluation order.
               | 
               | A good example of the limitations of simplistic operator
               | overloading is matrix algebra: A+B*C can be computed
               | efficiently as a ternary operation, more efficiently than
               | doing A+B then multiplying the result by C. Now of
               | course, you can implement this in C++ by having
               | operator+() return some kind of matrix_addition object,
               | and then defining the efficient operations in
               | operator*(matrix_addition, matrix) etc, but that is much
               | more roundabout than defining a simple addAndMul(A,B,C),
               | or an explicit optimizing DSL.
        
               | lispm wrote:
               | There are reader macros which provide a more math-like
               | notation. Those are translating the math syntax into Lisp
               | s-expressions at read-time.
        
               | tsimionescu wrote:
               | Yes, that's the DSL concept I was talking about.
        
             | DerArzt wrote:
             | If you are serious about using the JVM, I would suggest
             | Kotlin or Scala as a better alternative to Java as they
             | have all the libraries and greatness of the JVM but they
             | have less of the historical baggage that Java brings with
             | it.
             | 
             | Both can be written in a Java like fashion to start, and
             | have 100% interop with Java (you can mix the languages in
             | projects) so the learning curve is pretty alright.
        
               | vips7L wrote:
               | Scala has just as much historical baggage imo. It's
               | community is split between functional zealots and "better
               | java". You also have the Scala 2/3 split that is
               | currently going on and just the general complexity of the
               | language makes it not so appealing.
               | 
               | IMO if you're serious about using the JVM you should be
               | using Java 17 and following the latest version. Kotlin is
               | usable, but it doesn't bring that much more to that table
               | other than longer compile times.
        
               | smaudet wrote:
               | But isn't the great thing about using the JVM supposed to
               | be not using Java?
               | 
               | Or at least the perf advantages it brings. Java has nice
               | stuff today maybe but one could argue that it is
               | primarily defending market share that caused Oracle to
               | move forward with its language updates.
               | 
               | I'm inclined to say the opposite, the more the JVM stays
               | healthy and the stronger the third party ecosystem the
               | more likely it doesn't become a 'dead' language like
               | COBOL or FORTAN (not dead but in terms of marketshare).
        
               | daltont wrote:
               | I was really into Scala ten years ago, but felt that a
               | "Scala--" might be more accessible to most devs and hurt
               | Scala adoption. Lo and behold, we got Kotlin.
        
               | eeperson wrote:
               | Why do you feel that Scala has just as much historical
               | baggage? Isn't the whole point of the Scala 2/3 split to
               | remove historical baggage.
        
               | DerArzt wrote:
               | The community split is what makes Scala better in my
               | opinion. The fact that you can have the split between
               | functional first and better java people is a nice thing
               | to see over Java where if you want to do functional
               | programming, you are a second class citizen.
        
               | darksaints wrote:
               | They may have a little less of the historical baggage,
               | but that's still a lot of baggage. Same goes for F#. It's
               | a shame that three of the best programming languages in
               | existence are built on top of Java and C#, instead of
               | doing their own thing. Admittedly their VMs are mostly
               | fantastic, but trying to reuse libraries and language
               | constructs has just created more problems.
        
               | PaulHoule wrote:
               | That is the frying pan to the fire.
               | 
               | JDK 17 has most of the good features of Scala and Kotlin.
               | 
               | Scala seems to be designed so that you can write a short
               | book with very fluent and natural looking demos. Make a
               | small deviation from that and there is nothing fluent or
               | natural about it.
               | 
               | Kotlin is OK but isn't sufficiently better than Java to
               | be worth using when any Kotlin dev is going to have to
               | know Java and Java-Kotlin mapping pretty well to use
               | libraries. (It's a similar problem to Typescript.)
               | 
               | Both Scala and Kotlin are sufficiently similiar to Java
               | to provide no real benefit. I'd point to Clojure as a
               | language that is radically different from Java AND that
               | takes advantage of the strengths of the JVM to be worth
               | the cognitive load of having to know both a new and old
               | language to be productive.
        
               | ebruchez wrote:
               | > Both Scala and Kotlin are sufficiently similiar to Java
               | to provide no real benefit
               | 
               | Sorry but "no real benefit" seems to come from a position
               | of ignorance.
               | 
               | I can only talk about Scala which I know pretty well.
               | 
               | While Clojure is a radical departure from Java, being a
               | Lisp, Scala is a departure thanks to its type system and
               | features that help you writing more functional (as in
               | functional programming) code. And I mean this in a good
               | way: it helps you avoid mutations and side-effects, while
               | giving you the freedom to use good old OOP if you wish
               | so. In general it provides tools that help you better
               | express your intent that Java doesn't have.
               | 
               | I think that Java has too much baggage to ever become as
               | good as Scala, especially on the type system side, and,
               | in addition, Scala is also moving forward.
               | 
               | Also don't forget Scala.js [1], which is rock-solid and
               | just plain amazing, and Scala Native [2].
               | 
               | [1] https://www.scala-js.org/
               | 
               | [2] https://scala-native.readthedocs.io/en/latest/
        
               | thomascgalvin wrote:
               | > Kotlin is OK but isn't sufficiently better than Java to
               | be worth using when any Kotlin dev is going to have to
               | know Java and Java-Kotlin mapping pretty well to use
               | libraries.
               | 
               | One of the big benefits of Kotlin is that if you know
               | Java, you pretty much already know Kotlin, too. A good
               | Java dev can get spun up on the basics in a day or two.
               | 
               | > Both Scala and Kotlin are sufficiently similiar to Java
               | to provide no real benefit.
               | 
               | Kotlin provides a ton of ergonomic features that I
               | absolutely adore. Named parameters and default parameter
               | values alone save me tens or hundreds of lines of code.
               | 
               | I think of Kotlin as what would happen if a Java
               | developer looked at Javascript and asked "okay, but what
               | if this didn't suck?"
        
               | pjmlp wrote:
               | Kotlin's future is tied to Android, on the JVM I don't
               | even care it exists.
        
               | PaulHoule wrote:
               | You can't beat Javascript for ergonomic passing
               | conventions and packing and unpacking of lists and dicts.
        
               | pionar wrote:
               | > I think of Kotlin as what would happen if a Java
               | developer looked at Javascript and asked "okay, but what
               | if this didn't suck?"
               | 
               | I think you mean "what if we took C# and put it on the
               | JVM"? /s
               | 
               | Honestly, C# has had most of the features Kotlin "adds
               | on" to Java for years, even decades.
        
               | sideeffffect wrote:
               | > JDK 17 has most of the good features of Scala and
               | Kotlin.
               | 
               | I'd be sooo happy if that were the case, but sadly, it's
               | not. From the point of view of Scala, I still see many
               | features missing. Roughly in the order of importance:
               | 
               | * Immutable persistent collections in the standard
               | library (and thus lingua franca in the libraries). Just
               | so much better than mutable collections. Way less
               | headache. Once you start using them, you realize how
               | rarely you actually need mutable ones.
               | 
               | * Pattern matching. Java will surely improve on what is
               | currently available. But why wait? It may take a long
               | time.
               | 
               | * Sophisticated string interpolation. It's powerful, and
               | yet is still easy to read. Again, Java is on its way to
               | get it, but with Scala you can have it right now.
               | 
               | * Type Classes. Sometimes it is very good design to
               | separate data from functionality. Java designers (Brian
               | Goetz IIRC) mention they would like to get this
               | eventually. Scala has an interesting design of Type
               | Classes -- "givens" -- which is also modular (in contrast
               | to Haskell). Scala also has an elegant mechanism for Type
               | Class derivation using the "derives" clause.
               | https://docs.scala-
               | lang.org/scala3/reference/contextual/deri...
               | 
               | * for-comprehension syntax and IO/Task/ZIO for async
               | programming. Project Loom still hasn't delivered. But
               | Scala has you covered. It gives you for-comprehension
               | syntax, so that you don't have to suffer from nested
               | callback hell. And there are many great libraries for
               | async programming, like ZIO or Cats Effect. These are
               | easier to work with, compared to other _Futures from
               | various Java libraries, because they 're lazy, not eager.
               | for-comprehension syntax is also useful for other things,
               | it's just that async is the typical usecase.
               | 
               | _ Higher-kinded types. Not everything has to be super
               | fancy higher-kinded type-level craziness. And very often
               | one gets away without needing to use higher-kinded types
               | and that's good (just as often a solution without
               | parametric polymorphism aka generics is enough). But
               | other times it's awesome to have this power of
               | abstractions. Typically, but not only in libraries.
               | 
               | * Object. Sometimes you just need to have an object
               | (which might implement an interface/class/trait). But
               | Scala doesn't force you to create a whole class, if you
               | only even want just one instance anyway. A small thing,
               | but way more elegant.
               | 
               | But I'm really happy to see Java/JVM improve. The 17
               | release has brought some great features, but in the
               | language level (records, embryonic pattern-matching, ...)
               | and the VM level (GCs in particular). We all benefit more
               | or less directly, one way or the other.
        
               | kaba0 wrote:
               | Also, Scala's optional null checking (where null becomes
               | a type that is not at the bottom of the type hierarchy)
               | is really cool!
               | 
               | All in all, I do find using Scala can absolutely worth
               | it, but I really don't feel it with Kotlin. It feels like
               | a watered down Scala, and add to that where modern Java
               | currently is, I feel it is not needed.
        
               | smaudet wrote:
               | Also Java doesn't run on android? Not 17 anyway...
               | 
               | I guess you could try to argue mobile is bad or
               | something, but you get Kotlin not JDK on mobile.
               | 
               | Yes, Clojure is probably better, but on the flip side as
               | a developer knowing Java 8 and Kotlin is better than
               | knowing Clojure and JDK 17. Perhaps you can point to some
               | salaries here but Java developers are not in short
               | supply, if you wanted to play that game there are better
               | languages for more lucrative payout (assuming you can
               | even get them, these tend to be boutique shops not
               | generally hiring publicly)
        
               | pjmlp wrote:
               | The fellowship of Kotlin at Mountain View will ensure
               | that Android Java stays as it is, any further improvement
               | might happen only if the community is very vocal about
               | any Java library on Maven Central that fails to target
               | Android.
               | 
               | However they will most likely assign an intern to port it
               | to Kotlin than improve Java's support on Android.
        
               | joe_fishfish wrote:
               | Honestly, the null safety and constructor initialisation
               | of properties in Kotlin alone make it worth it.
        
               | fcurts wrote:
               | > JDK 17 has most of the good features of Scala and
               | Kotlin.
               | 
               | I keep reading on HN that "Kotlin isn't much better than
               | Java X". Having used Java and Kotlin (mainly targeting
               | JVM) full-time for 6 years, this doesn't match my
               | experience at all.
               | 
               | Here are some of my favorite Kotlin improvements over
               | Java that I leverage all the time:
               | 
               | * Much improved type system (nullable types, function
               | types, declaration site variance, type aliases,
               | contracts, better type inference, reified function type
               | arguments)
               | 
               | * Local variables are final by default ("val")
               | 
               | * Type-level distinction between read-only and mutable
               | collections (but compiled to Java collections under the
               | hood, so no conversion required when interacting with
               | Java)
               | 
               | * Much improved collection API
               | 
               | * Much improved lambdas (e.g., no pain points w/ mutating
               | variables and checked exceptions)
               | 
               | * Extension functions (incredibly useful in practice)
               | 
               | * Much better DSL capabilities (great for UIs, generating
               | HTML, etc.)
               | 
               | * Lazy properties (more generally: delegated properties)
               | 
               | * Coroutines (looking forward to Java's Loom; by then
               | coroutines will have dramatically improved my async code
               | for 5+ years)
               | 
               | * Great serialization support (kotlinx.serialization)
               | 
               | * Pragmatic macro-like capabilities via inline functions
               | and compiler plugins (removes lots of boilerplate)
               | 
               | * Multiplatform support (JVM/JS/WASM/native; Graal native
               | image is a good alternative to Kotlin/native and also
               | works for Java)
               | 
               | Although I'm glad to see that Java is still improving, it
               | will never get close to Kotlin. The most obvious reason
               | is that many of Java's early design decisions were
               | revised in Kotlin but are impossible or impractical to
               | revise in Java. Also, Java carries the burden of being a
               | platform language, whereas Kotlin can focus on being the
               | best possible application language.
               | 
               | These days, I only use Java for libraries intended to be
               | used from languages other than just Kotlin. In that case,
               | I don't want to force Kotlin on users (stdlib dependency,
               | debugging, etc.).
        
               | pulse7 wrote:
               | Some say "historical baggage", others say "backwards
               | compatibility"... two sides of the same coin...
        
           | duped wrote:
           | > It lets a lot of innovation happen in other languages
           | 
           | Only if you're defining innovation as syntax and semantics to
           | the language. Java has been the pinnacle and cutting edge of
           | language implementation innovation decades - Sun/Oracle
           | is/was the Bell Labs of VM and JIT research.
        
           | Zababa wrote:
           | > It's not like C++, where the template language is both
           | Turing complete and the fastest way to summon Beelzebub from
           | the depths of his infernal pit, and where you need a team of
           | PhDs to decide which version of `auto_pointer` actually works
           | the way you think it does.
           | 
           | Value types on the JVM have been described as "6 PhDs,
           | knitted together". In C and C++, this is just struct.
           | 
           | > It's not Javascript, where the framework your front-end
           | lead sold you on last week has already been superseded by the
           | hot new thing.
           | 
           | You should stop spreading stuff like that, it's false. React
           | has been the most popular frontend framework for 6 years at
           | this point, and Express the most popular backend framework in
           | JS for at least 8 years. The backwards compatibility of JS is
           | at least as good as Java, ES5 and ES6 were great upgrades (a
           | bit like Java 5 and 8 in a way).
           | 
           | I like Java and I think it's very important. I can say that
           | without feeling the need to dismiss other languages that are
           | as important as Java to the modern world.
        
             | kaba0 wrote:
             | > 6 PhDs, knitted together
             | 
             | But that is regarding the implementation/specification. For
             | the users it will be two new keywords and .ref. It will
             | even ease the language by healing the rift between
             | primitives/objectsz
        
               | [deleted]
        
               | Zababa wrote:
               | C++ has been used by lots of people without PhDs to great
               | success. The language is not perfect, but for most people
               | it's far from the hell that's described in the comment I
               | replied to. Some people will complain about the
               | AbstractFactoryBeanInterface in Java and say that it's
               | hell, they are the minority. Same with C++.
        
               | kaba0 wrote:
               | I'm not saying that C++ needs PhDs to write, but it is
               | one of the most complex languages out there. Even just
               | basic usage is considerably hard (RAII, r/l-values, etc).
               | Of course it is in part inherent in the system
               | programming domain.
               | 
               | But Java is a trivial language comparatively, your
               | mentioned complexity is user-generated.
        
               | secondcoming wrote:
               | It's interesting that you find RAII hard. I've not heard
               | this opinion before.
        
               | kaba0 wrote:
               | Well, correctly writing all the copy/move constructors is
               | hard.
        
           | 62951413 wrote:
           | It was about 10 years ago that the community agreed that it
           | was the JVM that was successful. It's a platform with
           | multiple viable languages. Scala obviously comes to mind.
           | Kotlin is a somewhat mixed case because its popularity comes
           | from the mobile world where you don't really have the JVM.
           | 
           | Java is not the most pleasant language for sure. It started
           | as a dumbed-down as golang was (still is?) for years. It's
           | still catching up with C++ (e.g. see all the Valhalla project
           | discussions on HN). It certainly shows its age. It's not
           | clear to me why so many people are still fixated on Java when
           | solid alternatives have existed for years within the same
           | ecosystem.
           | 
           | Also, if you don't like JPA try JOOQ.
        
             | kaba0 wrote:
             | How could it catch up to C++? They are not even in the same
             | category of languages, other than some surface level
             | syntax, they are as different as they get.
        
           | exabrial wrote:
           | Whats the productivity coefficient for Java? Or Javascript?
           | Or Python? or Ruby? Or Assembly? or C?
           | 
           | I only ask because I've never gotten a straight answer with
           | an actual number.
        
             | kaba0 wrote:
             | Because there is no way to define such a number. We only
             | "know" as per Brook's famous paper, No silver bullets that
             | this number has not passed a cumulative value of 10 in like
             | 3 decades now, since the first programming languages. The
             | only way to increase productivity is through code reuse -
             | and given the flourishing JVM ecosystem, Java has that as a
             | big plus.
        
         | lliamander wrote:
         | > I'd also add: it's kinda funny to see so many programmers
         | hating on Java and thinking that, somehow, Java is dead or
         | dying, yet on a daily basis they'll use one of the JetBrains
         | tools, written in Java, to work on their "non Java" code.
         | 
         | And even JetBrains is working on a language to replace Java
         | (which yes, runs on the JVM, but it also runs _not_ on the
         | JVM).
         | 
         | Java is a fine language, and one that I have the most
         | experience with. I'm glad it's there, but I also think that
         | increasingly it will not be the default choice for greenfield
         | projects. That is typically what people mean by a dying
         | language: it's only used for projects in maintenance mode.
        
         | PaulHoule wrote:
         | I had a summer job programming Java when it was still in beta.
         | 
         | I remember getting into an argument in the men's room of the
         | basement of center Ithaca with two guys who were saying that
         | Java was overhyped and I was saying "believe the hype"
         | 
         | That time I was right.
         | 
         | Java was one of the first programming languages to be specified
         | by adults. (e.g. they didn't know how to specify PL/I and make
         | it work, C worked by accident, ...) When researchers realized
         | the memory model was broken the first instinct of the Java
         | creators was "let's fix it" while other languages first made
         | excuses and waited a decade + for a "fix"
        
           | otabdeveloper4 wrote:
           | The original promise of Java was cross-platform user-facing
           | visual apps. (Which is why Gates was scared of it.) This
           | promise certainly failed to deliver.
           | 
           | Instead Java is now Cobol 2.0, but nobody lost sleep over
           | this fact.
        
             | PaulHoule wrote:
             | There was the idea that Java Beans would work like the COM
             | model does for Visual Basic and it would be straightforward
             | to build a GUI to build form GUIs.
             | 
             | That never happened, but few visual UI builders have come
             | close to what Visual Basic was in 1995.
             | 
             | I liked JavaFX but I don't miss it.
        
         | matchagaucho wrote:
         | All true. Gates was specifically losing sleep over _Java on the
         | Windows desktop_ , which never really took off.
        
         | open-source-ux wrote:
         | " _How is Java not one of the biggest success story ever for a
         | programming language?_ "
         | 
         | The language is an enormous success. But in one key area it did
         | not succeed in popularity: in building cross-platform desktop
         | GUI apps.
         | 
         | Many businesses did use it for building internal GUI desktop
         | apps. However, Java did not find much success in consumer-
         | facing desktop apps - despite the considerable effort made to
         | encourage developers use Java for this purpose. For example, in
         | the late 1990s Java had it's own GUI look-and-feel called
         | 'Flush 3D'. It was designed to be consistent across operating
         | systems.[1]
         | 
         | But Java desktop apps earned the reputation as being slow and
         | unresponsive, not fast and nimble. The Java applets that ran in
         | the browser were no better. Today, perhaps Java will find
         | success creating consumer-facing, high-performance applications
         | on web pages using WebAssembly?
         | 
         | [1] http://ptitben2000.chez.com/info/lookandfeel/higc.htm
        
           | copperx wrote:
           | I remember thinking Flush 3D looked cool. Especially when
           | running on Solaris.
        
           | pjmlp wrote:
           | Here, there you go,
           | 
           | https://leaningtech.com/cheerpj/
           | 
           | https://www.teavm.org/
        
         | samus wrote:
         | It actually failed at what Bill Gates feared it would to: it is
         | pervasive, but not a competition to Windows and the Windows GUI
         | stack. Smartcards were never MS's target market, and nobody was
         | yet thinking about smartphones.
        
           | fundad wrote:
           | The move to server-based experiences made the Mac competitive
           | and made iOS wildly useful despite not bundling jvm.
           | 
           | I think what most helped it was that it was the common
           | language against early commercially-supported app servers
           | from big vendors.
           | 
           | BSD started as a Pascal compiler for Unix and enabled a
           | community of researchers to work with a common language on
           | machines more accessible than those from DEC.
           | 
           | Bill was right that consumer-oriented products with server-
           | side software had Java as the wind at their backs.
        
             | samus wrote:
             | Exactly, it was the Web that threatened Microsoft. But Java
             | is not the only player that could have dominated in the
             | backend. Also, the backend lost its importance to the
             | frontend, where the HTML/JavaScript/CSS (both in the
             | browser and as Electron) stack rules.
        
           | Someone wrote:
           | > Smartcards were never MS's target market
           | 
           | https://techmonitor.ai/technology/microsoft_to_slash_smart_c.
           | ..: _"Microsoft Corp has plunged into the smart card market
           | with an operating systems that will compete with existing
           | systems such as MultOS and Java Card
           | 
           | [...]
           | 
           | Microsoft's Smart Cards for Windows is an 8-bit operating
           | system with 8K of ROM"_
           | 
           | That was October 1998. About a year later, there was
           | https://news.microsoft.com/1999/11/15/microsoft-delivers-
           | win...
           | 
           | I don't think that went far, but they certainly tried.
        
             | samus wrote:
             | Entering existing markets is not easy at all if the
             | newcomers don't have significant advantages.
        
           | retro64 wrote:
           | "...thinking about smartphones."
           | 
           | Actually, people were, even the non-technical everyday Joe. I
           | remember a sales guy commenting once at a beginning of a
           | meeting as he pulled out his PDA and set his oversized cell
           | on the table "I'm just waiting for the day they combine these
           | together so I only have to carry one of these". I think this
           | would have been 1998 or 99, but people talked about "PDA
           | phones" for quite some time before the iPhone appeared on the
           | scene. The technology just wasn't there, and the CE based
           | PDAs were clunky, nearly useless.
        
             | samus wrote:
             | True. I also forgot about Java ME...
        
       | hereforphone wrote:
        
       | maupin wrote:
       | For at least the next 5 years afterwards Java applications on the
       | desktop were clunky, slow, and not a threat to anyone.
        
       | cryptos wrote:
       | Since this thread contains a lot of comments about Java's
       | ergnomics and speed of innovation, it might be interesting what
       | has changed in the last years:
       | 
       | https://www.baeldung.com/new-java-9,
       | https://www.baeldung.com/java-10-overview,
       | https://www.baeldung.com/java-11-new-features,
       | https://www.baeldung.com/java-12-new-features,
       | https://www.baeldung.com/java-13-new-features,
       | https://www.baeldung.com/java-14-new-features,
       | https://www.baeldung.com/java-15-new,
       | https://www.baeldung.com/java-16-new-features,
       | https://www.baeldung.com/java-17-new-features
       | 
       | It is pretty impressive how Java keeps up to date over decades! I
       | think in the long run it is very wise to be conservative over new
       | language features. For example the work von "green threads"
       | (project Loom) is a really good, fundamental approach with
       | backwards compatiblity and there are some voices on the web
       | thinking that such an approach is more clever then introducing
       | "async" to the language (C#, Python, etc). I really appreciate
       | how careful the engineering is and how they don't shy away from
       | putting years into some topics.
        
       | nunez wrote:
       | What a visionary Nathan was (Java becoming important, but not
       | right then, emphasizing the importance of media and a
       | frictionless PC experience). Whatever happened to him?
        
         | tpmx wrote:
         | He pivoted into paying others to create vastly overcomplicated
         | cookbooks in his name.
         | 
         | As you do.
        
       | dmm wrote:
       | Continue to "embrace and extend"... - Nathan Myrvold
       | 
       | I never realized this phrase originated from /within/ Microsoft!
        
         | bnt wrote:
         | You're missing "and extinguish"
        
           | quux wrote:
           | Wasn't it "eradicate"? or am I misremembering?
        
           | wing-_-nuts wrote:
           | Hah, I mentally added it every time I read that phrase. The
           | implication was pretty clear even in this email.
        
         | bitwize wrote:
         | I did. I remember a press release that described Microsoft's
         | policy w.r.t web standards as "embrace and extend" sometime in
         | 1996 or so.
         | 
         | I thought it was the embittered rest of the tech industry that
         | added the "extinguish".
        
         | chrisseaton wrote:
         | Have you read the Hallowe'en Documents? Leaked Microsoft
         | memoranda about their attitudes on open source and competition.
        
       | gonzo41 wrote:
       | Nathan Myhrvold's reply is interesting, 20 years later and
       | windows is a pretty easy experience now. Games on Xbox is
       | massive, though I'm sad that they didn't embrace VR. Playstation
       | seems to have outflanked them there.
       | 
       | Their mobile game isn't really there though, but I'm not sure if
       | they care, and it seems like the vacuum that java was expanding
       | into was too big to leave be, hence the c#.
        
         | munchbunny wrote:
         | They tried to get a foothold in mobile (even bought Nokia's
         | mobile phone business), they just didn't succeed.
         | 
         | Given how long Windows CE was around and then whatever they
         | called the subsequent mobile focused OSes, I'm sure they did
         | care while they still had a shot, but Android ate their lunch.
         | Probably deserved to IMO, in the limited mobile development
         | I've done Android was an easier platform to develop for.
         | 
         | 10-15 years later, Microsoft is adopting Android for a Surface
         | device.
        
       | jasode wrote:
       | Excerpt of email reply from Nathan Myhrvold is mostly correct:
       | 
       |  _> The new Java applications are NOT credible threats to
       | traditional PC software any time soon. [...] Cool new technology
       | always expands rapidly into NEW ares (where there is a vacuum)._
       | 
       | Java's hype of _Write-Once-Run-Anywhere_ to kill Microsoft
       | Windows didn 't happen on client desktop apps like many expected.
       | Desktop apps are still C++ and some newer apps are
       | Javascript(Electron). Yes, there are a few niche desktop apps
       | using Java like JetBrains IDEs but history has shown that Java
       | made more market penetration on server-side code. The 1990s dot
       | coms like Ebay and Amazon were early users of Java on their
       | servers. I read that Google uses Java on the web servers to
       | generate the results page. (To be clear, I think Google uses C++
       | for the crawlers to build the index and the algorithms for search
       | engine ranking.)
        
         | phillipcarter wrote:
         | > Desktop apps are still C++ and some newer apps are
         | Javascript(Electron).
         | 
         | Just a nit, but .NET is used for significantly windows desktop
         | apps than C++. I otherwise agree very much with your comment.
        
           | slt2021 wrote:
           | QT (C++) is very popular for desktop apps, and they feel much
           | faster than anything on NET or Java
        
         | corpMaverick wrote:
         | It didn't happen because Microsoft was able to kill it.
         | 
         | See, for a few years MS had a tight control over the browsers
         | and they refused to upgrade the JVM in IE when they lost their
         | infamous lawsuit against Sun. So Java Applets never flourish.
         | 
         | Microsoft control was broken when Google decided create Chrome.
         | Chrome is what allowed javascript to flourish.
        
         | sydthrowaway wrote:
         | As an end user, you could definitely tell Java apps looked
         | janky as hell.
        
         | pjc50 wrote:
         | Java didn't kill the desktop. The _web_ - Javascript - has put
         | a huge dent in it, especially via the medium of smartphones
         | which were never going to run Windows desktop software. (+).
         | The desktop limps on but it 's not quite as dominant as it once
         | was. You can run an entirely successful multibillion dollar
         | software business without a single Windows machine being
         | involved at either the client or the server or developer ends.
         | 
         | (+ don't mention Continuum or UWP or Windows Phone)
        
           | goatlover wrote:
           | You mean the native app stores on smartphones? Because that's
           | what competes with desktop software now that people user
           | their phones for computing. But you can still get the app
           | version of windows desktop software.
        
             | pjc50 wrote:
             | Store apps, or just web apps in general.
             | 
             | > you can still get the app version of windows desktop
             | software.
             | 
             | Not really - you get app versions of _portable_ software,
             | which may be entirely rewritten from a similarly-named
             | desktop app, but they 're not the desktop app. It is as you
             | say a separate version that requires separate maintenance.
             | 
             | What you can't do is take a 1996-era Windows app and run it
             | on a smartphone without a complete rewrite. Surprisingly,
             | you _could_ do this with Windows CE for handhelds, like the
             | Compaq Pocket PC which ran ordinary MFC apps with minor
             | tweaks and a recompile.
             | 
             | Microsoft had one last go at desktop/phone unification with
             | UWP, and that lost in the market.
        
         | hiptobecubic wrote:
         | Google has a TON of Java. Some of the largest, most widely used
         | systems in the world are written mostly in Java.
        
         | a-dub wrote:
         | my understanding was that java was originally envisioned as a
         | runtime for iot. i remember reading a lot about how they were
         | expecting it to land in cell phones, set top boxes and other
         | internet connected devices.
         | 
         | they started with applets in the browser. at the time
         | javascript was incredibly immature and used mostly for client
         | side validation of form fields; but was hated by users and
         | developers alike because browser support was inconsistent
         | leading to spaghetti code and bad ux.
         | 
         | java applets were also frowned upon. the jvm was quite
         | heavyweight and would struggle to start up on the pcs of the
         | time. the immaturity of the technology made the uis sluggish
         | and fragile.
         | 
         | i don't think anyone expected it at first, but using java in
         | web backends became very popular. i suspect this was because
         | performance was reasonable once a server was warmed up and it
         | was sort of turning into an ecosystem that a lot of money was
         | being poured into. the microsoft ecosystem for internet stuff
         | at the time was buggy and terrible, with its "systems built to
         | run internally on corporate networks" lineage showing. on the
         | backend, iis was known to be insecure and hard to code for and
         | on the front end, nobody wanted to aid microsoft lock-in with
         | client side vbscribt and activex.
         | 
         | the geeks wanted internet native unix based servers and the
         | well trod options there were java, perl and php (or bespoke
         | options built on them). nobody wanted to do strings in c/c++,
         | further pushing towards high level languages of which java
         | could be a performant one for heavy workloads.
         | 
         | ironically, the java iot dream was eventually realized by
         | google with android. even more ironically, it's probably the
         | most complicating and complained about part of the platform.
        
           | myth_drannon wrote:
           | I don't know the numbers but mid 2000's J2ME was a very
           | popular mobile platform. Don't know why it fizzled out.
        
             | a-dub wrote:
             | ahh yeah. forgot all about the wapiverse. afaik there was
             | really only one application, and that was the wap browser
             | which was really simple except for ssl support.
             | 
             | i think most people didn't even realize their phones had
             | something browserlike back then and even if they did it was
             | tough to use.
             | 
             | i never used it. google's sms gateway was more useful for
             | my purposes.
        
             | TeaDude wrote:
             | Not a J2ME developer but I've heard time and time again
             | that it had extremely poor cross platform compatibility and
             | each different handset needed modifications to the source
             | to get it to function.
             | 
             | This was back when there were a million competing
             | incompatible handsets. Not a fun time!
        
         | brundolf wrote:
         | I've always wondered why Java didn't take off more for desktop
         | apps. Was it a compromised user experience vs native apps? Was
         | Swing bad to work with? Did Web 2.0 come in and steal the show
         | right when it was starting to gain traction?
        
           | corpMaverick wrote:
           | Because Microsoft killed it.
           | 
           | Through IE, Microsoft controlled what you could run in the
           | browser and they refused to upgrade the embedded JVM. Java
           | Applets started becoming popular but then they stagnated.
           | 
           | Microsoft control was broken when Google decided create
           | Chrome. Chrome is what allowed javascript to flourish.
        
             | listenallyall wrote:
             | I think that is glossing over some important details. Sun
             | sued Microsoft repeatedly, and eventually stopped licensing
             | Java to Microsoft. "Upgrading the embedded JVM" was not a
             | user-friendly mandate... think of how annoying "upgrade" or
             | "new version available" notices are today... now consider
             | the same over a 14.4k modem. And finally, most Java applets
             | sucked. Very few were "popular". They looked weird, non-
             | native, had unfamiliar icons and menus, and were often
             | slow.
        
           | Longhanks wrote:
           | Well, do you consider Electron a compromised user experience?
           | 
           | Swing is/was the same, and computers had way less power to
           | make up for it in the early 2000s.
        
             | brundolf wrote:
             | I don't personally, but what matters here is that Electron
             | has taken off and Java-for-desktop didn't seem to really.
             | Maybe it was the tech, maybe it was user expectations at
             | the time, but something was different. I'm just curious
             | what that was.
        
           | matwood wrote:
           | I wrote a Java Webstart app for internal users way back when.
           | It was harder to work with and not as end user friendly as
           | what I could create in VB5. Of course all my internal client
           | were on Windows so VB was an option.
           | 
           | Then the web came in and stole the show. Even a slower web
           | app was so much faster to develop and push out to 10k
           | internal clients (that was a lot then hah).
        
           | notJim wrote:
           | As an end user, the UX was always goofy. If the devs made a
           | lot of effort, it could look like a bad impression of a
           | native app, but never exactly right. As soon as you'd hit an
           | error state or edge case, you'd see some weird ass Java-
           | looking error.
           | 
           | Electron is different, because we all got used to web apps,
           | and electron apps are just web apps.
        
           | pmontra wrote:
           | It was a PITA to manage for end users. They had to install
           | the JVM and update it when the JVM updater told them so. Many
           | people didn't update (slow connections for a file size
           | comparable to today's one, no time, etc.)
           | 
           | Then the application had its own non native widgets and was
           | noticeably slower than native ones.
           | 
           | Then (more importantly IMHO) developers discovered that HTML
           | interfaces were good enough even 25 years ago and being able
           | to update a web application (they were no app back then) even
           | only once per month was so much better than having to
           | distribute thousands or millions of copies of a desktop
           | application. Game over. BTW that was web 1.0.
        
           | mr_tristan wrote:
           | I think it's the core, the 2D engine, just never got the love
           | it needed to be a great place to start. Nobody seemed to
           | prioritize making that happen.
           | 
           | Like, the antialiasing was noticably fuzzy. I never found an
           | applet that looked like it belonged on the webpage. And when
           | I built a few, it was a lot of work to even get font
           | rendering to not be horrendous. And even then, you'd see what
           | the browser rendered vs what the applet rendered and they
           | were always off. I remember using images instead of font
           | rendering sometimes.
           | 
           | So, if you made a swing app, it was easy to put together, but
           | hard to make look "professional".
           | 
           | By the time of the Oracle acquisition, I'm pretty sure
           | everyone just realized the browser and mobile "won" and
           | that's why we just had JavaFX get broken off the platform and
           | basically put out to pasture. But it's not like much went
           | into the core platform itself to make building great UIs
           | easy. The underlying 2D rendering just a great place to
           | start.
           | 
           | I mean, even today, there's some serious performance issues
           | with IntelliJ on 4k monitors with scaling.
           | https://youtrack.jetbrains.com/issue/JBR-526
           | 
           | When I look at where JetBrains is going, it sure seems like
           | they are building on top of a better 2D engine, in this case,
           | skia: https://github.com/JetBrains/skija.
        
         | seanalltogether wrote:
         | > Desktop apps are still C++ and some newer apps are
         | Javascript(Electron)
         | 
         | I think the reason java failed on desktop and electron works is
         | because electron is an entire runtime packaged into the app.
         | The java team failed to recognize that people want to install
         | an app without worrying about external dependencies. Later on
         | the Adobe AIR team failed to realize this as well and while AIR
         | had a promising start it flopped as well due to external
         | dependencies.
        
         | mysterydip wrote:
         | IMHO this was because the JVM at the time had bad performance
         | compared to native apps. I certainly avoided Java apps on my
         | machine as much as possible if there was a native alternative,
         | the extra load on consumer machine resources at the time just
         | wasn't worth it.
        
           | sydthrowaway wrote:
           | When did JVM switch to the insanely fast HotSpot JIT?
        
             | acdha wrote:
             | Later, but HotSpot to this day means "less slow" - it's a
             | lot better than it used to be but you still need
             | considerably more RAM and CPU than native apps.
        
               | bayindirh wrote:
               | I don't think the need is that larger when compared to
               | today's applications, esp. Electron based applications.
               | 
               | Eclipse still uses less resources than VSCode/Atom while
               | juggling more balls at the same time.
        
               | oriolid wrote:
               | Just because someone managed to come up with a worse
               | alternative doesn't make Java good. The main problems,
               | initial JIT time and fixed heap size still remain.
        
               | jpgvm wrote:
               | Java has always been tunable to be more aggressive at
               | returning memory to the OS if you are worried about the
               | resident memory size. Newer versions of Java with the
               | more advanced GCs are even better at it.
               | 
               | Ultimately Java's runtime performance wasn't really to
               | blame for it's lack of success but rather the awkwardness
               | of JRE distribution, garbage applet sidetrack and lack of
               | high quality GUI toolkits that actually felt native
               | rather than attempting to do "platform independent look
               | and feel".
        
               | oriolid wrote:
               | How does the tuning work? To me it still seems that JVM
               | (or at least the version bundled with JetBrains IDEs)
               | keeps allocating memory until it's near max heap size and
               | it's up to the user to find the value that's large enough
               | stop the app getting stuck doing full GC but leaves
               | memory for other apps.
        
               | bayindirh wrote:
               | JVM can be tuned via the command line during startup.
               | Eclipse comes with 512MB as the heap size, and you can
               | enable a small gauge to see how it's doing. I've never
               | seen "This heap is small, please give me more space"
               | error from Eclipse. Also, latest versions of Java
               | (starting with 16 IIRC) doesn't grind to halt during
               | large GC passes.
               | 
               | I've developed enough applications in Eclipse during past
               | 20 years, and it has become from being an absolute lead
               | ball to something agile for its size, both in macOS and
               | Linux. I've found an infinite loop bug in CDT, and only
               | with that I was able to make JVM throw the towel, and
               | call it quits.
               | 
               | JVM is very smart and resilient in memory management,
               | I've seen some stuff during my life.
        
               | oriolid wrote:
               | Well, a message saying "This heap is small, please give
               | me more space" would be all too helpful. I haven't
               | touched Eclipse in years, but Clion and Rider have this
               | failure mode where they just use all the CPU all the time
               | and it's up to user to figure out that it's GC and how to
               | increase the heap size. I was hoping for an option that
               | would mean "use all the memory you need but don't keep
               | the maximum allocated just in case". The current -Xmx
               | seems to be more like "postpone full GC until the maximum
               | has been reached".
               | 
               | I'm not sure if it's significant that Jetbrains IDEs and
               | Eclipse are separate products. Google can't distinguish
               | between different Jetbrains products in search results,
               | maybe Eclipse can be lumped into same group by some
               | logic.
        
               | jjoonathan wrote:
               | Defaults are important. The world runs on defaults. Bad
               | defaults cause real problems and take real work to fix,
               | so it's fair to blame software for poor out-of-the-box
               | behavior, even if it can be configured away.
        
               | acdha wrote:
               | Atom, yes, VSCode, no. The latter is noticeably faster
               | and uses less RAM -- and the JetBrains suite is even
               | worse.
               | 
               | A large part of this is cultural. The Java world has been
               | prone to high complexity styles which are hard to
               | optimize and there doesn't appear to be much social
               | expectation that you profile or improve code until you
               | max out what you can easily fit on a single system.
        
               | bayindirh wrote:
               | Latest Eclipse (esp. after they switched to 4
               | releases/year schedule) is very lightweight and nimble
               | for what it does.
               | 
               | It's being optimized for being faster and lighter every
               | release, and it really shows. I mostly develop C++ and
               | Python in Eclipse, and CDT's indexer is really good, and
               | it's not using gigabytes of RAM, or doesn't require LSPs
               | to be productive. OTOH, Eclipse supports new things like
               | LSPs, direct builds to containers, etc.
               | 
               | So, it's getting faster, doesn't getting heavier resource
               | wise, and keeping its edge tech-wise. I'm a happy camper.
               | 
               | Oh, and the plugins doesn't need official binaries, if
               | you're inclined to build your own.
        
               | kaba0 wrote:
               | Jetbrains' IDEs do more things by an order of magnitude
               | than a vscode full-of-plugins, so it is not a fair
               | comparison.
        
               | acdha wrote:
               | Far less than an order of magnitude -- and it shouldn't
               | be the case that every advanced feature slows down core
               | functionality like how long it takes for a key press to
               | render when you're not even using that feature. They have
               | lots of functionality but proponents have always noted
               | the ... stately ... speed and these days the ones I know
               | have moved to VSC because it's competitive for the
               | features they use and they benefit from better
               | performance all of the time.
        
               | kaba0 wrote:
               | You still can't really conclude that it is due to Java
               | somehow.
               | 
               | Also, if jetbrains would finally use a non-deprecated GC
               | and a slightly more GC-friendly max heap setting,
               | intellij would have much better latency. (You can try
               | this out yourselves, just go with G1GC and increase heap
               | size for a good improvement. But the best experience
               | would come from ZGC but it is only available in a newer
               | runtime than the bundled 11)
        
               | acdha wrote:
               | Definitely, but when almost every Java program I use has
               | issues with performance and memory it suggests that the
               | culture doesn't value those things highly enough. The
               | same is often true in the JavaScript world, which makes
               | VSC interesting because it's famously an outlier in the
               | Electron world.
        
               | kaba0 wrote:
               | > Definitely, but when almost every Java program I use
               | has issues with performance and memory it suggests that
               | the culture doesn't value those things
               | 
               | I think it is still a bit of a baseless case. What about
               | java's gRPC library? Elasticsearch? Or a bunch of other
               | high-performance Java programs?
        
               | acdha wrote:
               | Solr is the one exception I have personal experience
               | with. The rest of it basically comes down to the culture
               | of complexity: HotSpot is no match for the average
               | enterprise architect.
        
               | cxr wrote:
               | > The same is often true in the JavaScript world, which
               | makes VSC interesting because it's famously an outlier in
               | the Electron world.
               | 
               | That's because it's not a JS problem so much as it is a
               | problem with the culture of NodeJS/NPM. It happens to be
               | that NodeJS has pretty much cannibalized JS development,
               | however.
               | 
               | Two large pieces of software that make heavy use of JS
               | that most people don't even realize--because they don't
               | feel like the kinds of apps that NPM programmers produce
               | --are Firefox and the Gnome desktop. They're by no means
               | examples of the top end of world's snappiest software,
               | but they are solidly middle-of-the-road in a way that
               | most Electron apps, for example, are not.
               | 
               | Dominant platforms that capture lots of developer
               | attention (like NPM today, and Java starting 15-20 years
               | ago) end up capturing the attention of the sort of
               | programmers who are going to be causing trouble no matter
               | what ecosystem they're working in.
        
               | kaba0 wrote:
               | I mean, both programs hardly use JS for anything other
               | than scripting the behavior of a very optimized C/C++
               | codebase. So I don't think it is fair to call them JS
               | apps -- I have never heard Firefox referred to as such.
        
               | tored wrote:
               | Personally I find Jetbrains IDE, Phpstorm specifically,
               | very snappy. Much better than VSCode in performance.
               | 
               | I few years ago I managed to run Phpstorm on a ASUS
               | Eeebook with an Intel Atom 32 bit 1.3 GHz CPU & 2GB RAM.
               | Not optimal but doable.
               | 
               | I'm impressed what Jetbrains has managed to squeeze out
               | of Java. However I'm not aware of any other Java desktop
               | app that that works as well.
               | 
               | Only thing you can't do is to manually run every
               | inspection there is on the entire project, takes forever
               | and will eat your CPU even on a fast machine.
        
               | skrtskrt wrote:
               | JetBrains IMO is about the same performance as VSCode for
               | waaaaay more ease and functionality.
               | 
               | It doesn't give me that deliciously snappy feel compared
               | to something like terminal NeoVim, but my productivity is
               | ultimately much higher on a JetBrains IDE
        
               | zmmmmm wrote:
               | This is only partly true. HotSpot is pretty amazing
               | performance wise. For certain code patterns it really
               | does produce assembly competitive and even better than
               | what you get from the equivalent vanilla C++ solution.
               | 
               | The issues are (a) it only kicks in once something gets
               | profiled quite a few times (so your first encounters with
               | a function - the one you base your impressions of
               | usually, are at its worst), (b) the overhead of JIT
               | weighs down the machine further at exactly the moment (a)
               | is occurring. And then (c) there are quite a lot of code
               | patterns and in particular architectural styles
               | encouraged by the Java ecosystem that are hostile to this
               | whole process.
               | 
               | I do wonder why Java has not gone the python direction of
               | caching the JIT output in binary form so at least the 2nd
               | time you launch an app it doesn't need to be redone every
               | time.
        
             | dtech wrote:
             | HotSpot took 2 decades to get to its current performance,
             | and while its JITted performance is good, for desktop apps
             | cold boot performance is at least as important.
        
               | jjoonathan wrote:
               | Moore's law didn't hurt either.
               | 
               | I think there's a big confounding factor, though: people
               | self-select into platforms depending on what they care
               | about. People who self-selected into Java didn't value
               | perf. They were then inclined to ignore their own
               | performance problems for the same reason they selected
               | Java: they didn't value perf. That's why so many Java
               | GUIs chug so hard, even today, when it really can't be
               | blamed on Java itself.
               | 
               | For instance, Ghidra: if you leave a filter active in a
               | GUI box and run an analysis tool, sometimes the runtime
               | of the tool explodes from minutes to days because it
               | refreshes the GUI after each of the zillion model tweaks
               | the analysis tool needs to perform. It's not Java's fault
               | that nobody put in the code to throttle GUI updates, but
               | the same list of priorities that led the creators to
               | choose Java also led them to ignore a massive perf
               | landmine sitting in the middle of the road for all to see
               | and occasionally hit.
               | 
               | I recently fired up LibreOffice Sheets to see how it
               | compared to Google Sheets. It took four entire seconds to
               | switch to editing mode in a cell. Every time, not just
               | the first. If I were to root cause the issue, I'm sure it
               | wouldn't be Java's fault -- but I bet that the same
               | priorities that led the project to choose Java led them
               | to ignore a four second stall in their most critical user
               | interaction path.
               | 
               | Both of these projects are free, so I'm not upset about
               | getting what I paid for, but I have plenty examples from
               | corporate Java GUIs as well. I don't think this is a Java
               | problem, I think it's a priorities-held-by-Java-
               | programmers problem.
        
               | lawl wrote:
               | Reminds me of this post:
               | https://nibblestew.blogspot.com/2020/03/its-not-what-
               | program...
               | 
               | In the case of java though in my opinion the problems
               | start at the std library that sometimes forces you to
               | write really inefficient code, or reimplement everything
               | yourself.
        
               | zmmmmm wrote:
               | > I recently fired up LibreOffice Sheets to see how it
               | compared to Google Sheets. It took four entire seconds to
               | switch to editing mode in a cell. Every time, not just
               | the first. If I were to root cause the issue, I'm sure it
               | wouldn't be Java's fault -- but I bet that the same
               | priorities that led the project to choose Java led them
               | to ignore a four second stall in their most critical user
               | interaction path
               | 
               | That's a slightly confusing comment because while it does
               | integrate it in some components, very little of
               | LibreOffice is written in Java. From what I understand,
               | the core of it is all written in C++ and it's often held
               | up as a canonical example of what happens when a giant
               | C++ codebase gets out of control and doesn't manage
               | complexity well.
        
         | lern_too_spel wrote:
         | From Gates's email:
         | 
         | > I am literally losing sleep over this issue since together
         | with a move to more server based applications it seems like it
         | could make it easy for people to do competitive operating
         | systems.
         | 
         | Gates was talking about server applications, and he was right.
         | Within 10 years, people were using Gmail instead of Outlook and
         | Google Docs instead of Word. Both are written in Java on
         | servers not running Windows, exactly as Gates feared.
        
           | warner25 wrote:
           | I mean it's also a lot of client-side JavaScript, but yeah, I
           | thought this line was the most prescient.
           | 
           | As I've moved back and forth between Windows and Linux over
           | the past 15 years, I've found it increasingly easy to do
           | everything on Linux, and that's mostly because more and more
           | of what I do is just in the browser. At this point, it's
           | Linux on my personal laptop with a Windows virtual machine
           | for only two or three Windows-only desktop applications that
           | I still occasionally require.
           | 
           | As long as Firefox and Chrome are cross-platform, the OS
           | matters less and less.
        
         | izacus wrote:
         | I think you're ignoring the giant world of custom, bespoke,
         | enterprise software which is majorly written in Java (and these
         | days on web) - the fact which makes Windows in the Enterprise
         | (Microsofts main money maker) much much less sticky as they
         | would have liked.
         | 
         | The little bubble you're talking about is far from Microfts
         | main concern.
         | 
         | Luckly, Linux and macOS never really could grow out of their
         | niches to really hurt Microsoft.
        
           | ancientsofmumu wrote:
           | > _Luckly, Linux and macOS never really could grow out of
           | their niches to really hurt Microsoft._
           | 
           | "Kind of" (indirectly as others pointed out) - the Dotcom
           | bubble from a systems perspective was based on "Put these
           | words on your VC funding paperwork and we'll throw money at
           | you: Netscape Enterprise Webserver, ATG Dynamo (or similar),
           | Solaris 5/6/7 on Sun E250s and E450s, Oracle Database and
           | Java". I was at a services company doing systems work for
           | Java engineers and built countless versions of this stack;
           | java code was written on Windows workstations and deployed to
           | the Sun servers (this might help explain why Java is deployed
           | the way it is - many devs just zipped up a directory,
           | uploaded it and unzipped it remotely).
           | 
           | Then Blackdown JDK[1] entered the room and changed the game -
           | it gained it's first release right after the Dotcom bust and
           | turned that stack on it's ear; now you could use Apache,
           | Tomcat and MySQL (because Java developers could run MySQL on
           | Windows, it "won the war" against Postgres at that time)
           | creating a way to survive in the money-vacuum years following
           | the Dotcom bubble crash when things were _very_ scrappy and
           | people were looking to just survive the storm if they could.
           | My services company had to lay off some 80% of employees
           | because all the clients dried up during the bubble burst.
           | 
           | There was a shot right here to have Java production workloads
           | run on Windows Server (NT etc.) since all the java devs were
           | doing it personally, but running on Linux was a much higher
           | performing stack at the time and of course pennies compared
           | to the previous stack even in the kernel's younger years or
           | paying for Windows licenses (and more hardware). Red Hat's
           | IPO in 1999 preceded the Dotcom bubble, putting them in the
           | right place to handle these workloads post-Dotcom as they had
           | a mature Linux offering with a business plan to Enterprise
           | minded shops (appeal to the business folks - save money, have
           | someone to blame if it breaks). Techs loved it because we'd
           | been doing Linux for a decade and here it was about to take
           | over the server world, and Java workloads were helping make
           | that happen.
           | 
           | [1] https://en.wikipedia.org/wiki/Blackdown_Java
        
       | xedarius wrote:
       | Don't worry Bill, this becomes a mere twinkle in the night sky
       | when you realise you missed 'the internet'.
        
         | trelane wrote:
         | He didn't miss it per se. It's just that their Windows-only
         | Internet[1] didn't work out. Fortunately for all us.
         | 
         | [1] https://en.wikipedia.org/wiki/MSN_Dial-up
        
       | pipeline_peak wrote:
       | Thus .NET was born
        
       | Bluecobra wrote:
       | > They are so hell bent to give things away
       | 
       | Wow, we've really come full circle on this. If you're a business
       | who wants to simply use the official Java JRE to run Java
       | applications you now have to pay Oracle for a license.
        
         | looperhacks wrote:
         | This is false. You can (and always could) get the free OpenJDK,
         | which is built and distributed by Oracle. It doesn't get much
         | more "official". If you have some specific needs, you can pay
         | for enterprise support, i.e. the Oracle JDK.
         | 
         | Since some months(?) you can also get the Oracle JDK for free
         | (and use it commercially). But you have to pay for extended
         | support. The free support given by the Oracle JDK is until a
         | new major version is released (for non-lts versions) or one
         | year after the next LTS version (which currently is released
         | every two years).
         | 
         | https://blogs.oracle.com/java/post/free-java-license
         | https://blogs.oracle.com/java/post/moving-the-jdk-to-a-two-y...
        
         | kaba0 wrote:
         | Honestly, at this point I'm not sure if it's just blind stupid
         | hatred for Oracle, or deliberately spreading libel.
         | 
         | Oracle was the goddamn company that completely open-sourced
         | Java for the first time to begin with. There are no longer
         | paid-only tools in OracleJDK. Recently, they even made the
         | support version free to use, and then people go on and claim
         | this bullshit.
        
           | _old_dude_ wrote:
           | Oracle did not open sourced Java, Sun did before dying.
           | 
           | But you are right that Oracle unified all paid/free versions
           | of Java under the OpenJDK banner, even Android is using the
           | OpenJDK now.
        
       | keewee7 wrote:
       | Microsoft had already established itself as the dominant market
       | player in the early 90s. Bill Gates was the richest person in
       | America by 1992 and the richest in the world by 1995.
       | 
       | The 90s Java hype must really have been otherworldly to make him
       | panic this much.
        
         | hnfong wrote:
         | You lose the developers, you lose the platform. That's what
         | Bill Gates was thinking.
         | 
         | Microsoft was "lucky" that:
         | 
         | 1. JVM was too slow to run desktop apps on machines even in the
         | early 2000s
         | 
         | 2. Web and Javascript became so important that it reduced the
         | impact of losing out on Java
         | 
         | 3. Linux killed Sun Microsystems.
         | 
         | Still, so much server infrastructure runs on Linux+JVM stacks
         | that you could argue that it was a major reason Microsoft
         | failed to gain dominance outside their desktop stronghold.
         | Years later, their biggest existential threat in the form of
         | Android was basically a modified Linux+JVM stack.
         | 
         | People may think Bill was over-pessimistic, but looking back,
         | their failure to kill off potential competitors like Java was
         | one of the reasons Microsoft stagnated post-2000s.
        
         | 300bps wrote:
         | _The 90s Java hype must really have been otherworldly to make
         | him panic this much._
         | 
         | I think it is a certain personality type that has more than $50
         | million* in assets and still has this level of competitive
         | edge.
         | 
         | I think most people have a number that would drive them to
         | relax a bit and just do whatever they wanted. I think for some
         | people whatever they want though is to engage in cutthroat
         | competition.
         | 
         | * arbitrary number likely different for everyone
        
           | beaconstudios wrote:
           | if anything, Gates-era Microsoft was known for being _anti-
           | competitive_. What the very-wealthy want, I think, is power
           | and control, and for the number to go up to stroke their
           | egos.
        
         | EMRZ wrote:
         | It was the battle for "the web" and the sun+netscape
         | partnership was an actual menace to microsoft's activex and
         | vbscript things. There is an espisode the Lex Fridman podcast
         | with Brendan Eich where he talks a little about that specific
         | time.[1]
         | 
         | The "panic" was right imo (only in that specific area) i mean,
         | there is almost 0 microsoft on the web today.
         | 
         | [1]: https://www.youtube.com/watch?v=krB0enBeSiE
        
           | epolanski wrote:
           | C#, TypeScript, Azure, Visual Studio, VSCode, GitHub, the npm
           | package ecosystem, Microsoft Edge, having the de facto
           | monopoly of several markets with office and its web
           | integrations, Microsoft Teams suite for enterprise and I
           | think I'm missing a lot more stuff.
           | 
           | Claiming there's no Microsoft on the web seems far fetched
           | when Microsoft de facto controls extremely large parts of
           | producing modern web applications, deploying them and serving
           | the tools necessary for businesses to coordinate.
           | 
           | It may have lost share to competing applications or it missed
           | the train exactly, but I cannot think of any other single
           | company you can lock in your organization from management,
           | production to deployment and even consumption on Microsoft
           | own devices from Surfaces to Xbox.
        
             | oaiey wrote:
             | It is also key to understand that they are far more diverse
             | than ever. Azure earns money independently, so does Office
             | and Windows, XBox, etc. They do not rely on each other
             | anymore.
             | 
             | The only big part which is different is the former
             | developer division. I do not think they earn the money
             | themselves but are more a cost center to everyone else. But
             | considering that everyone else is a giant company with a
             | diverse set of developer needs, maybe that is just okay.
             | Which again is interesting because the rest of the industry
             | is also relying on this part of Microsoft.
        
               | runevault wrote:
               | Even if .NET is technically a cost center, the reduced
               | cost they get from optimizing it making things like Bing
               | faster probably still makes it indirectly a profit center
               | by saving them so much money.
        
           | dagw wrote:
           | _there is almost 0 microsoft on the web today._
           | 
           | I've worked (as a consultant) on a number of 'boring' B2B web
           | applications targeting 'boring' industries and one thing they
           | all had in common was that they where all in on the Microsoft
           | stack.
        
           | whimsicalism wrote:
           | > 0 microsoft on the web today
           | 
           | Wdym? TS?
        
             | Mikeb85 wrote:
             | TS is just fancy JS. If it didn't exist, Flow, Haxe or Dart
             | would just be in the same place (static types languages
             | with JS-ish syntax that compile to JS).
        
               | epolanski wrote:
               | And if Java didn't exist we would have other tools as
               | well. And yet Microsoft has by far the largest share of
               | language adoption on the web, which likely applies to the
               | tooling too.
        
               | Mikeb85 wrote:
               | By far? You really think the majority of websites are
               | using TS-generated JS? The majority of the web is
               | Wordpress and PHP frameworks. TS has only become
               | 'popular' rather recently, and there's still a TON of
               | websites that are full-stack SSR with only modest amounts
               | of JS.
               | 
               | As for tooling, maybe. VS has always had a decent amount
               | of mind-share. Even then though, I can see Jetbrains +
               | Eclipse + Sublime + Emacs + Vim + others capturing at
               | least 50% combined...
        
               | phillipcarter wrote:
               | > TS is just fancy JS. If it didn't exist, Flow, Haxe or
               | Dart would just be in the same place
               | 
               | "TS is just fancy JS" is like saying "Java is just fancy
               | machine code" or something like that. It's a major
               | software project with a much larger scope than simply
               | slapping a few types on top of common JS constructs. More
               | importantly, it's been an innovating force at the
               | language and editor tooling levels for web developers
               | worldwide. I think it's likely to be the most successful
               | language that Microsoft has ever produced in the long
               | run.
        
               | Mikeb85 wrote:
               | > "TS is just fancy JS" is like saying "Java is just
               | fancy machine code"
               | 
               | Terrible analogy. TS doesn't compile to WASM or anything,
               | it compiles to human-readable JS. Java doesn't compile to
               | C++ or C. The JVM is an entire platform.
               | 
               | > More importantly, it's been an innovating force at the
               | language and editor tooling levels for web developers
               | worldwide.
               | 
               | MS has always been decent when it comes to tooling but
               | there's nothing particularly innovative about TS.
        
               | phillipcarter wrote:
               | We'll agree to disagree on everything you've said then :)
        
         | 3minus1 wrote:
         | > Bill Gates was the richest person...the 90s Java hype must
         | really have been otherworldly to make him panic this much
         | 
         | I kind of disagree with this line of reasoning. I think very
         | successful people sometimes overestimate possible threats, and
         | it may be one of the reasons for their success. I had this
         | realization when watching the most dominant Age of Empires
         | player stream once. I once struck by how paranoid he was about
         | what the opponent might be doing, but it meant he was
         | constantly prepared for worst-case scenarios. He seemed
         | genuinely worried most of the game, rather than confident like
         | I expected given his first-rank status.
        
           | r3muxd wrote:
           | "He who strikes terror in others is himself continually in
           | fear."
        
           | quux wrote:
           | If you read Nathan Myhrvold's reply he says something very
           | similar:
           | 
           | "It is a new and uncomfortable feeling to be the incumbent
           | rather than the challenger in one of these battles. However,
           | we must not panic. The current perceptual battle is a long
           | way distant from actual business and revenue issues, and we
           | can't let perceptual issues cloud our thinking too much."
        
         | nend wrote:
         | When you're at the top there's really only one direction left
         | to go.
        
           | chrisco255 wrote:
           | MS mcap 1996: $100B MS mcap 2022: $2.4T
        
             | nend wrote:
             | How does that disprove my statement? Microsoft essentially
             | had a monopoly on desktops and software in 1996. Just
             | because their market cap is larger now doesn't mean they
             | weren't on top in 1996.
             | 
             | Does anyone really think Microsoft has as much influence on
             | tech today than they did in 1996? They've clearly been
             | pushed out by Google, Apple, etc, which is exactly what
             | Gates was fearing would happen (although in this instance,
             | the threat he feared was from Java/Sun).
        
             | rchaud wrote:
             | Market cap during the Steve Ballmer CEO tenure would be a
             | better comparison, as it was during this time that MS was
             | fighting Blackberry, Nokia, Apple and Android on the mobile
             | OS front. This was the battle that Gates was worrying
             | about: the declining prospects of Windows as an application
             | platform.
             | 
             | Their stock exploded once Nadella came in, killed off DOA
             | products like Windows RT and Windows Phone, and shifted the
             | focus to Office 365 and Azure cloud where they had a deep
             | enterprise advantage.
        
               | chrisco255 wrote:
               | Why? The email is from 1996. Gates wasn't worried about
               | platforms that didn't exist in 1996.
        
               | rchaud wrote:
               | The consumer web absolutely existed in '96. Gates was
               | worried that Java could become the defacto choice for
               | authoring web applications. Microsoft didn't have much of
               | a foothold there at the time.
        
             | AnIdiotOnTheNet wrote:
             | I think what they were trying to say is that, to the kind
             | of mind capable of being as ruthless in getting to the top
             | as Gates was, the biggest anxiety they would have after
             | making it to the top is that someone will come and take it
             | from them.
        
               | chrisco255 wrote:
               | I mean, it's a rational position to want to defend the
               | business you created or the market share you carved out.
               | Every business has to do this to survive. The only
               | problem is when a business resorts to unethical tactics.
               | 
               | Gates seemed to go through a bit of a transition sometime
               | after this (perhaps after the antitrust case), where he
               | seemingly lost his uber competitiveness and then stepped
               | down from CEO position.
        
       | Labo333 wrote:
       | Well, people also lost their sleep in 2021 over java (log4j)...
        
       | iso1631 wrote:
       | "In the limit [Sun] can make the web totally OS agnostic"
       | 
       | Well yes, the web became OS agnostic, which is a great thing, but
       | I don't think Myhrvold really grasped what that would mean
        
         | jldugger wrote:
         | I think he did: an OS agnostic web means people choose OS based
         | on other factors. Obviously price is one, but features is
         | another. And he points out that winning on price is actually
         | the same as losing (and Sun's sale to Oracle appears to confirm
         | this). But can anyone name exciting new features in Windows 11?
         | Or Windows Vista?
         | 
         | In some sense the web enabled smartphones, but unlike Sun,
         | Google has a profit strategy for their cheap OS. And the
         | patents and wireless regulations put a high barrier on new
         | entrants, which MS was late to and had to acquire Nokia to
         | enter. And again, does anyone remember MS Mobile's killer
         | features?
        
       | imranhou wrote:
       | This is so relevant in terms of tech and business thinking, many
       | parts of the email response could be applied generically to any
       | competitive threat.
       | 
       | Albeit the blackberry story against iPhone doesn't really fit
       | this bill, the "incumbent" got put out of business pretty quickly
        
       | raverbashing wrote:
       | If we think about it, Java was hyped, but it had poor execution.
       | Very poor execution.
       | 
       | It tried to be too much and lost focus. "Run everywhere" where
       | everywhere was Solaris+X, some other Unixes+X and Windows.
       | 
       | The language itself was a bit better than C++ (while it filed
       | some hard edges and made it cleaner it wasn't much better) and
       | overly bureaucratic. The API/stdlib worked but wasn't great.
       | 
       | Nathan Myhrvold's answer was mostly on point and time proved it
       | right. Especially about what the PC should be.
        
         | thrower123 wrote:
         | There was that gaping pause after Java 6. I learned that
         | version in high school, took the AP test, went to college,
         | graduated, and got a software engineering job, and it was still
         | Java SE 6. It's almost incomprehensible nowadays to imagine a
         | programming language with that kind of stasis for five years.
        
           | kaba0 wrote:
           | It was a language in the hands of a dying company, so it is
           | sort of understandable.
        
       | jodrellblank wrote:
       | How did Sun manage to get so much hype around Java?
       | 
       | There can't be many things in tech which have had that kind of PR
       | achievement, especially if you move away from flashy user-facing
       | things like iPhones and Playstations.
        
         | tannhaeuser wrote:
         | I think part of it was that Java promised Unix-y/open systems
         | to stay around when in 1995 it seemed like Windows would
         | dominate server-side programming, in addition to the desktop.
        
         | pjc50 wrote:
         | As sibling says: applets. They were there from launch, and they
         | offered the never-before-seen combination of "write once, run
         | anywhere" and zero-installation and sandboxed code.
         | 
         | They were kind of clunky, but anyone who had the responsibility
         | of managing a client-server app across a fleet of PCs would
         | have had a lightbulb go on over their head on seeing that.
         | 
         | The university hype seems to have been real as well; I was
         | being taught Java in late 1997, when it had only launched in
         | 1996 and was maybe on version 1.1? Previous years were taught
         | object orientation through Modula-3, and you really don't see a
         | lot of that these days. Java offers the decisive advantage of
         | braces rather than BEGIN..END.
        
         | mwattsun wrote:
         | Richard Feldman (Elm) analyzes why programming languages become
         | popular and says Java is unique. It became popular because Sun
         | spent 100's of millions of dollars promoting it, even after the
         | dot com crash. Others like Ruby, had a killer app.
         | 
         | His thesis is object oriented programming wasn't inevitable or
         | is the best way to program. It was an accident of history that
         | OOP became so popular.
         | 
         | Why Isn't Functional Programming the Norm? - Richard Feldman
         | 
         | https://www.youtube.com/watch?v=QyJZzq0v7Z4
         | 
         | Another Java tidbit is that Miguel de Icaza (Gnome, Mono)
         | really wanted an open source higher level language on Linux so
         | he approached Sun about Java and they wouldn't work with him,
         | so he settled on C# and is probably the man most responsible
         | for the move to cross platform C# and .NET (dotnetcore, v5)
         | 
         | https://tirania.org/blog/archive/2006/May-11.html
        
         | renox wrote:
         | Lots of marketing backed by lots of money.. I remember trying
         | to use Java in the Java2 days when every magazine would tell
         | you how it's great, but the reality was that I was wasting a
         | lot of time working around bugs in the Java libraries (and once
         | even a bug in the JVM itself).
        
         | rsynnott wrote:
         | Java had a combination of things that made it really
         | interesting at the time; the tooling was free, it had automatic
         | memory management, it had easily distributable apps, it had
         | some sort of multi-platform UI (even if it wasn't very good).
         | Nothing else at the time really satisfied all of that. It also
         | had problems, of course (in particular, it was very slow at
         | first, and Java 1.0 had a lot of weird baggage that got fixed,
         | too late, in 1.1 and hung around for years), but it really was
         | something interesting at the time.
        
         | foldr wrote:
         | Others have mentioned that the tooling was free, but I think
         | younger folks might easily underestimate how big of a factor
         | this was. In 2000 I was blown away that I could download
         | NetBeans for free and learn the language just by reading free
         | documentation on Sun's website. Yes, there were already free
         | languages that had significant mindshare (e.g. Perl), but Java
         | was backed by a big name company and came with pretty
         | sophisticated GUI and networking libraries baked in. Perl was
         | associated with 'scripting', whereas Java was marketed as a
         | serious language for writing serious applications. Compared to
         | the free C++ dev environments available at the time it was mind
         | blowing.
        
         | robterrell wrote:
         | One way was Java applets. Back in the mid-nineties, applets
         | were the only way to make web pages meaningfully flashy and
         | interactive. They pioneered the space later conquered by Flash.
        
         | clusterhacks wrote:
         | Java and its compiler were free and easy to install into CS
         | department labs.
         | 
         | There was a huge hype train around object-oriented development
         | being _the way_ that somewhat continues to this day. OO was all
         | the rage along with the  "Design Patterns" book. OO hype in the
         | enterprise also seemed to drive CS departments to use Java for
         | just about all classes because it was "pragmatic" and a "real"
         | job skill to give students.
         | 
         | I mainly remember being excited about garbage collection.
        
       | Shorel wrote:
       | This nightmarish scenario for Microsoft actually happened. This
       | is Android OS.
       | 
       | What Microsoft avoided was this happening in PCs.
        
         | Longhanks wrote:
         | This scenario was a lot more nightmarish in the 2000s, when
         | Microsoft needed Windows and Windows software for making money.
         | 
         | Today, it is a lot less nightmarish.
        
         | wing-_-nuts wrote:
         | It's easy to handwave away Bill's concern today because windows
         | _is_ still the main OS on PCs and laptops.
         | 
         | That's kind of missing the point. What you _don 't_ see is all
         | the areas where MS could have 'won' had the world not moved in
         | a more platform agnostic direction. Remember all of the little
         | miniature laptops in the 90s? Practically _all_ of them ran
         | some version of windows even if it was laughably impractical
         | for such a device. MS completely missed the  'mobile' train and
         | could have dominated if they were paying attention.
         | 
         | Remember all of the enterprise systems running some version of
         | windows server? Imagine a world where java didn't exist and the
         | .net runtime was dominant. That's a cash cow without end.
         | 
         | As it is, MS missed out on both mobile and most of the
         | enterprise infra pie. If they had managed to capture both
         | they'd be an absolute behemoth.
        
           | nikanj wrote:
           | PCs took a hard turn towards power-constrained (i.e. laptop
           | running on battery) right around the same time Windows took a
           | hard turn towards "resources are cheap and plentiful, just
           | toss seven levels of XML in it"
        
           | arantius wrote:
           | > Remember all of the little miniature laptops in the 90s?
           | 
           | In the 90s? Laptops barely existed, definitely not "little
           | minature" ones. I remember e.g. the
           | https://en.wikipedia.org/wiki/Asus_Eee_PC launched in 2007,
           | and many follow-ons after that.
        
         | smrtinsert wrote:
         | The apps of tomorrow are not exclusive to Windows I would say,
         | Instagram, Google, eBay, etc so I would say he was right also.
         | The response emails were also right in that the existing
         | business was not immediately threatened, but it is definitely
         | diminished.
        
       | badRNG wrote:
       | I guess I've never read these emails before. I was a child when
       | these emails were released, so I really wasn't following these
       | events in real time.
       | 
       | I'm blown away at how openly they discuss being anti-competitive.
       | When I think about a company being monopolistic, I usually
       | envision market and environmental pressures that culminate in
       | actions that can be broadly identified as anti-competitive. I
       | don't typically envision leaders sending emails to each other on
       | how to best be cartoonish villainous monopolists. And I guess
       | it's strange that there was a time that it was considered even
       | feasible that Windows could corner the whole web. Then seeing
       | "embrace and extend" literally quoted in the email feels like
       | some bad hit piece on Microsoft.
       | 
       | Developers my age grew up with multiple OSes with web capability.
       | When I graduated, Chrome OS just came out, Android, iOS, and OS X
       | were all widely used. Most of my career Microsoft has...
       | "embraced" FOSS. Just some thoughts from a different perspective.
        
         | [deleted]
        
         | rsynnott wrote:
         | This was, I think, before it had really sunk in that emails
         | were available in discovery.
        
         | chasd00 wrote:
         | yeah, in addition, a lot of younger people see Gates as some
         | sort of savior given his philanthropy. I think a lot of older
         | people in the tech industry see it as Gates trying to buy his
         | way into heaven.
        
         | cwillu wrote:
         | The old groklaw.net site has a lot of interesting historical
         | context that came out of the lawsuits.
         | 
         | http://www.groklaw.net/staticpages/index.php?page=2005010107...
         | among others, as a lot of the other stories had microsoft
         | involvement.
        
       | agumonkey wrote:
       | Interesting to see Bill Gates being so anxious. Also interesting
       | to see him explain the anxiety clouds his creativity. Makes you
       | take some distance.
        
         | ZhangSWEFAANG wrote:
         | yeah whenever I relax my face, I start to feel ideas flow to my
         | brain. It's weird.
        
         | drzaiusapelord wrote:
         | Their relationship is so interesting to me because it ties to
         | the old "child" monarch vs his steely-eyed advisors. Long story
         | short, its emotional manipulation to come at someone from a
         | position of power and complain about "worry" and "losing
         | sleep." In fiction and history we see these childish kings
         | acting out with their advisors sort of calming them down as
         | this stereotype of how wrong monarchy is, but instead its a
         | valid and intentional leadership strategy: to emotionally
         | manipulate your underlings by seeming hurt and needing of help.
         | Gates played up this coddling attitude because it gets him the
         | results he wants with minimum effort. Nathan recognized this
         | signal and wrote out the logical part of the brain to counter
         | Gates' emotional side. He coddled the child king. This is his
         | job.
         | 
         | The C-levels in my life do this all the time. I've been
         | manipulated many times like this. I think its linked to the
         | habits of being a low-empathic personality. Its run of the mill
         | manipulation which is what powers offices and sales all over
         | the world. I imagine it gets results more often than not but
         | its a bit pathetic looking and an acknowledgment human beings
         | aren't logical animals, but primarily emotional and even the
         | most hardened tech CEO is essentially playing emotional games
         | with their staff, constantly. Its just so brazen and obvious
         | when you see it like this. Especially when Gates is supposed to
         | be the anti-Jobs, and this hard-nosed programmer not a diva,
         | but surprise, surprise its diva behavior top to bottom in the
         | C-suites, because diva-ism works.
        
           | ZhangSWEFAANG wrote:
           | damn, I never thought of it like this. So if I understood you
           | correctly - Gates wants to stroke his ego?
        
             | arkx wrote:
             | I don't think you understood correctly.
             | 
             | A wise leader surrounds themself with people they can truly
             | trust in. In this message we see a glimpse into the dynamic
             | between Bill Gates and Nathan Myhrvold, and my main
             | takeaway is that Bill truly trusts Nathan here, enough to
             | be vulnerable and speak openly about his worries.
             | 
             | While it's humorous and perhaps even enlightening to think
             | of him as a "child king", I don't think he was only
             | "seeming hurt" here or manipulating (unless you count all
             | forms of emotional appeal as manipulation). Being honest
             | and straight is a very effective way to lead those close to
             | you.
             | 
             | It's also the leader's job to worry about threats like this
             | and direct the attention of his advisors.
        
               | drzaiusapelord wrote:
               | I'm just not seeing your pangloss-like explanation in the
               | real world. Gates' words are very carefully crafted. He's
               | not being vulnerable, he's being a leader and that means
               | engaging in the Machiavellian action of manipulation and
               | dishonesty to get the outcome he wants. Nathan knows he's
               | being yelled at without being yelled at, its face-saving
               | for both of them. This is saying "Why the fuck are you
               | sleeping on Java, your future here depends on fixing the
               | Java problem and telling me how you're going to do it,"
               | without saying that.
               | 
               | That's what I was trying to point out in my original
               | comment. The "nice" and "hurt" leader is a common ploy
               | and it gets results.
        
               | arkx wrote:
               | I see where you're coming from in the general case; I
               | think it has been well established that leadership
               | positions attract people well described by the dark
               | triad. However, I don't agree that being a leader _has_
               | to revolve around manipulation and dishonesty, and I 've
               | certainly seen this in the real world.
               | 
               | Even if Bill Gates has the dark triad traits I do not
               | think they were on display in this particular email
               | exchange. I truly don't think they were engaging in any
               | "face-saving" here -- Nathan had been working for
               | Microsoft for 10 years at this point, leading Microsoft
               | Research and rising to the first ever Microsoft CTO. They
               | coauthored a book called "The Road Ahead" in 1995. Bill
               | has called him the greatest hire he made at Microsoft.
               | 
               | From every single source I've come across it seems clear
               | that Bill Gates and Nathan Myhrvold are friends and share
               | a deep mutual respect. No wonder they are still working
               | together in 2021! You'd think after a lifetime of
               | supposed abuse Nathan would have stopped working with him
               | after becoming a billionaire, right?
        
             | drzaiusapelord wrote:
             | I think the CEO playing as toddler has a ego stroking
             | element to it and probably why this strategy is preferred
             | over others. I tend to see C-levels in two groups, the
             | alpha-male no-BS type and then the emotional manipulator
             | type. I think both are ego pleasing (and probably both get
             | similiar results), because the alpha gets the validation of
             | his toughness and the manipulator gets the validation of
             | his cleverness.
             | 
             | I think the latter is probably more pleasing for most
             | personality types. You can still come off as the "nice guy"
             | in polite company, even though you're being very demanding.
             | Think how much warmer people like Sundar Pichai come off as
             | compared to someone like Larry Ellison.
             | 
             | I also think there's a salesmanship aspect here. Its easier
             | recruiting if you sell your company culture as a "nice"
             | place led by a "nice" leadership. I think its a harder see
             | to say "Look we're assholes here but the job and pay is
             | good."
        
       | ralmidani wrote:
       | Technically speaking (so ignoring Oracle), Java the language is
       | actually pretty good. When I took a MOOC and a Data Structures
       | course that were all Java, I actually enjoyed writing Java. It's
       | verbose, but very straightforward to work with once it clicks,
       | and a pretty powerful language.
       | 
       | My first two full-time dev jobs were at Java shops (one was about
       | ~100 employees, the other was Chase), and that's where I
       | developed a severe distaste for the ecosystem. Getters and
       | setters everywhere, dependency injection with Spring (I know
       | there are alternatives, but Spring seems the most popular), so
       | much convoluted and over-engineered garbage. Wrestling with that
       | nonsense was one of the triggers for a bout of depression last
       | year.
       | 
       | Also last year, I moved to Elixir and never looked back.
        
         | amarant wrote:
         | Man feel you. A few years ago I got out of the Spring swamp,
         | and worked at a shop using a different framework, but still in
         | Java. It got rid of almost all the bad things about the Java
         | ecosystem, and it was so liberating! Last year I was back in
         | the spring swamp again and I couldn't stand it! Glad to hear
         | it's not just me
        
       | Diesel555 wrote:
       | PDF version of Exhibit plex_5803 (1996)
       | 
       | http://techrights.org/wp-content/uploads/2009/06/plex_5803.p...
       | 
       | for those who do not have a twitter account (twitter won't let me
       | load all the images without asking me to log in) or just want a
       | textual version / transcript.
       | 
       | Text version in a website can also be found here about two pages
       | down under "Appendix: Comes vs. Microsoft - exhibit plex_5803, as
       | text":
       | 
       | http://techrights.org/2009/06/26/eee-versus-cross-platform/
       | 
       | * I'm Just providing an alternative, I'm not trying to start the
       | standard argument about twitter links.
        
       | ascendantlogic wrote:
       | I spent the 2000's writing a lot of java servlets with a
       | smattering of JSP and a little bit of Android. I spent the first
       | few years of the 2010's doing multiple Android apps. Java as a
       | language is verbose but overall isn't that bad. The problem is
       | enterprises _love_ patterns and love ceremony and boilerplate and
       | so that became the defacto way to write it, which then got cargo
       | culted everywhere else.
       | 
       | Over my 20+ year career I see programmers demanding their tools
       | give them the freedom to shoot themselves in the face. Then, upon
       | shooting themselves in the face they turn to the nearest person
       | and say "why did it let me do that?". Your tools are rarely the
       | problem. The problem almost always is how the people doing the
       | building actually use the tools.
        
       | brianmcc wrote:
       | As my 2014 (!) self wrote:
       | 
       | https://mcconnellsoftware.github.io/java-golden-handcuffs/
        
         | ChrisMarshallNY wrote:
         | You may remember this little gem:
         | https://news.ycombinator.com/item?id=19877916
        
           | brianmcc wrote:
           | I don't remember it but interesting discussion thanks!
        
       | goto11 wrote:
       | He should actually have been losing sleep over JavaScript. But
       | few saw that in 1996.
        
       | londons_explore wrote:
       | I still lose sleep over java over 25 years later.
       | 
       | For me it's mostly the unpredictability of the garbage collector
       | and it's magic ability to suffer cascading failures in cases you
       | thought you'd properly loadtested...
       | 
       | Perhaps billG and I are thinking on different levels...
        
         | ape4 wrote:
         | I'm sure others will point out that the garbage collector is
         | now very fast. Not an issue for the vast majority of
         | applications.
        
           | watwut wrote:
           | And it was not an issue for over 10 years.
        
         | smallerfish wrote:
         | > cascading failures in cases you thought you'd properly
         | loadtested...
         | 
         | That's hardly unique to Java. If you crash your processes
         | because you didn't design your application to scale to your
         | needs, there's not much the language can do about that.
        
           | londons_explore wrote:
           | It just seems easier to get yourself into a bad performance
           | corner with Java. Other languages seem to just start slowing
           | down as load increases. You see more variation in response
           | times, but still plenty of throughput. Whereas Java has a
           | sudden performance cliff that's reached, and you usually
           | won't get it to perform well again without either removing
           | 99% of the load or restarting the process.
        
             | kaba0 wrote:
             | > It just seems easier to get yourself into a bad
             | performance corner with Java
             | 
             | Well, Java's GCs are the state of the art. If they can't
             | deal with the amount of garbage a program creates than
             | nothing can.
             | 
             | As for the rest: Which may or may not be the correct
             | response depending on use-case. The JVM gives you the
             | freedom to choose the approach you want. The default G1 GC
             | for example has the target pause time setting where you can
             | set whether you would want lower latency or higher
             | throughput.
        
             | deschutes wrote:
             | This is a hard problem and definitely not unique to Java.
             | For example networks, or perhaps more appropriately,
             | network protocols, have these kinds of cliffs as the
             | offered load on the network increases.
             | 
             | As I understand a particularly bad traffic jam in the early
             | internet is what motivated congestion control in TCP. As a
             | matter of a fact traffic is also an example of this
             | phenomenon playing out without any (effective) compensating
             | measures.
             | 
             | I find "Metastable failures in distributed systems" [1] to
             | be a really interesting and accessible exploration of the
             | problem.
             | 
             | [1]: https://sigops.org/s/conferences/hotos/2021/papers/hot
             | os21-s...
        
             | smallerfish wrote:
             | I assume you've run profilers against it and captured
             | CPU/memory snapshots? You may be filling up the heap,
             | leading it to get into GC cycles to try to free memory. If
             | that's happening you either have a memory/resource leak, or
             | you just need to allocate more heap to run your
             | application.
        
       | adzm wrote:
       | And in December, Visual J++!
        
       | btschaegg wrote:
       | Something I'm really not surprised about, but it's nonetheless
       | interesting to see how the discusson never touches points like
       | "is this enthusiasm founded?", "what are they doing right?" or
       | "where do we lag behind? What could we learn from them? Where can
       | we improve?". Gates just immediately jumps to "how can we kill
       | it?".
       | 
       | That itself explains so much about even today's state of
       | computing in a simple e-mail conversation.
        
       ___________________________________________________________________
       (page generated 2022-01-06 23:02 UTC)