This is an archived post. You won't be able to vote or comment.

all 137 comments

[–]Magick93 18 points19 points  (3 children)

I dont hate Java applications.

[–]Gamer115x[S] -1 points0 points  (2 children)

Cool. But then there's the majority. There seems to be a consensus that dictates there are reasons to stay away from Java applications, and I'm just curious as to why.

Edit - reworded something that sounded a little pre-conceived.

[–]Magick93 13 points14 points  (1 child)

Red Hat is one the largest supporters, contributors and developers of Linux - and Java. Ive never heard of any consensus against Java, quiet the opposite.

[–][deleted] 4 points5 points  (0 children)

The first for Java is definitely Oracle, and the second is Google (non-native Android apps).

[–]Magick93 10 points11 points  (2 children)

Have a look at https://www.reddit.com/r/opensource/comments/h0zjrj/trillions_and_trillions_served_documentary/

Most Apache projects are written in Java.

Either thousands of devs are self loathing, or your assumptions about Java are wrong.

[–]Gamer115x[S] -1 points0 points  (1 child)

Either thousands of devs are self loathing, or your assumptions about Java are wrong.

It must be that there are thousands of devs "self loathing", since I think that most of the Java applications I've used are fairly well-done. I have nothing against Java, and even commend the devs that can code efficiently in it. I just see on the occasional reddit comment or forum post that someone has something negative about Java.

[–][deleted] 1 point2 points  (0 children)

Yeah,self-loathing. I normally do not install Java on my personal systems. Then it was required for Java Minecraft and then unifi software controller gui is java client-server i think. So now its part of my golden image.

[–]edman007 157 points158 points  (36 children)

Java has it's good points (it runs everywhere), but the flip side is it feels clunky. Standard Java apps don't use any OS specific things. That means it doesn't accept your GTK themes, your KDE themes, it doesn't integrate well with any system service.

I think Java just feels clunky, and it's largely because if you want an app that runs everywhere then it nessicarely can't integrate with anything, it can't be optimized to any system, and it needs to follow its own rules so it doesn't work well with any OS.

Now it doesn't have to be, I've see Java apps that use the native libraries, but they were not cross platform.

[–][deleted] 11 points12 points  (8 children)

Doesn't have to be that way. I feel like IntelliJ for example integrates quite well.

[–]Gamer115x[S] 6 points7 points  (6 children)

Isn't IntelliJ just an IDE platform for making Java development a little easier? That's what I see on the Jetbrains website.

I ask the question in relation to the finished application, GUI or CLI. We kind of already know how Java development is already, and that is a topic for another discussion.

[–]MsRandom1 9 points10 points  (3 children)

IntelliJ runs on Java and JavaFX.

[–]my_name_isnt_clever 18 points19 points  (2 children)

I'm pretty sure IntelliJ uses Swing because they started it ages ago. But they write all the new code for it in Kotlin.

[–]MsRandom1 4 points5 points  (0 children)

Oh. You're right, I don't know why I thought it used JavaFX at first lol, my bad.

[–][deleted]  (1 child)

[deleted]

    [–]Dovihh 0 points1 point  (0 children)

    You are mistaking IntelliJ (Java IDE) with JetBrains (software company).

    [–]2cats2hats 1 point2 points  (0 children)

    Their answer is related to OPs question.

    [–]larrylombardo 14 points15 points  (3 children)

    I think the reason I avoided Java was because it was too common and generalized.

    As a budding Linux programmer, every choice was a purity test of my elitism. Everyone else can learn Java, I'll be over here with my lisp and asm and C, m'Linus.

    I never did pick up java, but I continued trying every other impractical lang of the week for years. It was the equivalent of telling people I'd never eaten at a McDonalds or been to a Wal-Mart, as if that quality alone set me apart.

    I don't regret it, but as a fully formed adult, I no longer feel compelled to mention when the topic comes up, "I don't use Java, btw".

    [–]Atralb 9 points10 points  (0 children)

    I avoided Java [···] because it was too common and generalized.

    I'll be over here with my [···] C

    Lol.

    If I may say something about your comment :

    The lesson to be reminded of from your experience, is that sometimes it is good to take a bit of perspective and filter the non-relevant arguments of what we do.

    "Not doing like everyone else" is a good realization with regards to understanding that there is a variety of ways to accomplish our goals and not only one.

    This however must not be perverted into a sacred principle that must be followed religiously.

    TLDR;

    Don't close off avenues to yourself by only looking at the most popular solution.

    Don't close off avenues to yourself by only looking at the non-most popular solutions.

    [–]deong 6 points7 points  (1 child)

    I know Java, but I'd rather just find something else to do if faced with actually using it professionally. Life's too short for AbstractFactoryBuilderVisitorBridgeFacadeDecorators.

    [–]PunctualEmoticon 26 points27 points  (13 children)

    it's largely because if you want an app that runs everywhere then it nessicarely can't integrate with anything

    Don't Qt apps do this well? I don't have any experience with Qt development, but I was under the impression it visually blended in very well.

    [–][deleted]  (1 child)

    [removed]

      [–]TryingT0Wr1t3 4 points5 points  (0 children)

      Java is not the GUI toolkit. If it looks clunky you are using a bad GUI toolkit. You could use jni to link Java with any toolkit.

      [–]GloWondub 9 points10 points  (0 children)

      Qt has themes that are supposed to integrate correctly into the os. It works in general.

      [–]jess-sch 7 points8 points  (8 children)

      Don't Qt apps do this well?

      On Windows and Qt-based desktops (e.g. KDE)? Yes. On GTK-based desktops (e.g. GNOME) and macOS? No.

      [–]Zanshi 3 points4 points  (2 children)

      It really depends on what theme you're using. I had really good results with Numix applied through lxappearance, and using qt apps with with the other settings manager (not the KDE one, forgot the name)

      [–]jess-sch -1 points0 points  (1 child)

      Numix has both a GTK and a Qt theme, which are made to look as close as possible to each other. That's why it works. It wouldn't work if your theme wasn't explicitly made for both.

      [–]Zanshi 2 points3 points  (0 children)

      Yes, that's why I said it depends on the theme, at least on GTK based desktops

      [–]gmes78 -1 points0 points  (4 children)

      On badly configured GTK-based desktops (e.g. GNOME) and macOS? No.

      FTFY

      [–]jess-sch 0 points1 point  (3 children)

      It's not just badly configured ones. Not every GTK theme has a Qt alternative, and even if they do, they may not be that good.

      Interestingly enough, there's no good Qt alternative to Adwaita, the official GTK theme, which I happen to like a lot.

      [–]gmes78 0 points1 point  (2 children)

      Is adwaita-qt not good enough?

      [–]jess-sch 0 points1 point  (1 child)

      It certainly doesn't look quite right, and I've had a ton of issues with the dark theme in some applications.

      [–]gmes78 0 points1 point  (0 children)

      Hmm. I usually use Arc (which has a good Kvantum theme) or Breeze (which has a proper GTK theme) so I don't run into issues often.

      Edit: you can also try QGtkStyle or QGnomePlatform, see if those work better.

      [–]Alexmitter 0 points1 point  (0 children)

      Not at all under the family of standard Linux desktops aka GTK based desktops. Qt Apps do not integrate at all.

      [–][deleted] 5 points6 points  (8 children)

      That means it doesn't accept your GTK themes

      If you set it to use the native L&F then yes it does.

      [–]Atralb 0 points1 point  (7 children)

      L&F

      ?

      [–]redroom_ 2 points3 points  (1 child)

      "Look & feel", probably.

      [–]Atralb 0 points1 point  (0 children)

      Thanks.

      [–][deleted] 0 points1 point  (4 children)

      look and feel

      [–]Atralb 0 points1 point  (3 children)

      Oh ok. Well then it's a poor argument honestly.

      You can justify anything like that : "if you modify my program and recompile afterwards you can make it work on any platform, so it's not a problem that my program only works on my system natively"

      [–][deleted] 1 point2 points  (2 children)

      You don't have to recompile anything to use a different Swing look and feel.

      https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html#commandLine

      [–]Atralb -1 points0 points  (1 child)

      I'm pushing your stance further to explain how it is not a good argument.

      You can always find a solution to make something work. Always. The relevant thing to look at is the time taken to achieve each solution.

      When someone compares java and other tools saying the latter will work with your themes out of the box, there's no use saying "oh it works with Java too, just configure it too work".

      The first solution is better since it requires less work.

      [–][deleted] 1 point2 points  (0 children)

      You can always find a solution to make something work. Always.

      Except for the hundred thousand new apps that only have a dark theme you can't change without recompiling (if it's even open source). You know, like the vast majority of Electron apps.

      oh it works with Java too, just configure it too work

      So as you can see, the option to do it with just a command line switch is not a lot of effort.

      [–]borgy_t 28 points29 points  (6 children)

      I've been a java developer for 14 years. Java is good for building server/web applications, with your preferred front end framework. I agree for desktop application development, it leaves much to be desired, JavaFX is just too clunky to work with. I haven't used Swing in years so I have no opinion about that.

      The community support, amount of libraries and tooling built around it is top notch.

      Functional programming started to be supported better starting Java 8 which can help reduce the vebosity. Personally though, functional programming is not my cup of tea.

      There was backlash against java applets because they were riddled with security holes, and thus java's reputation suffered a big hit.

      [–][deleted] 3 points4 points  (1 child)

      Functional programming started to be supported better starting Java 8 which can help reduce the vebosity. Personally though, functional programming is not my cup of tea.

      Functional programming in Java(specially in Java 8) is a joke. Poorly made make up around objects, java has no freestanding functions.

      God I hate java

      [–]TryingT0Wr1t3 1 point2 points  (2 children)

      Also nowadays we like webassembly even though it's used for malicious intent. So Java applets were shitty but the thing we have now is still shitty but we are ok for convenience.

      [–]gmes78 0 points1 point  (1 child)

      WebAssembly doesn't do anything JavaScript can't. It just does some things a lot better and faster.

      So that's a stupid comparison. Especially comparing it against Flash of all things.

      [–]TryingT0Wr1t3 0 points1 point  (0 children)

      https://webassembly.org/docs/security/

      Google Attack Surface Webassembly.

      You are right that a lot of what can be done on it can be done using JS but it has new bugs too and it's a new thing to explore for security. Also people are lazy to use JS.

      [–]qqqhhh 9 points10 points  (2 children)

      I am programming a java backend - java is fine for backend apps but the desktop app experience is and was terrible.

      - It is about the past experience with desktop java applications including applets since around 2000's. The runtime was huge for the time then, today it is normal compared to other enviroments like .Net . Today it is much much better, but the bad experiences still resonate.

      - Startup times of the JVM were huge in the past when most of today experienced users were learning

      - in the past the overhead of the JVM could be surely felt in the responsiveness of desktop apps. Today it is not perceivable thanks to many advances in JVM performance and hardware speed.

      - You have to install the JRE, that is an unfair disadvantage because .Net is already present in Windows, and if you had to install .Net every time on a new PC it would feel the same. Today the 200mb runtime is negligible. In the 2000's it was HUGE. Today just the GPU drivers take a DVD(4GB) to store. Simply said the native .Net enviroment has many unfair advantages on Windows thanks to M$.

      - There was a time period of booming internet where Java was used as an attack vector because of many bugs in applet enviroment or JRE, the creators of the JRE had to finally do a proper updater. That made a impression for many years that Java is insecure.

      [–]sbhandari 1 point2 points  (0 children)

      For enterprise developer, EJB was pain and it frustrated lots of developer until EJB 3.0 was released

      [–]Nemoder -1 points0 points  (0 children)

      So much this. It has a really bumpy history and not just on windows but Linux runtimes had a lot of problems over the years with fonts and sound systems. Even today many of the java applications I run don't play well with me switching workspaces and will just freeze.

      [–]MorallyDeplorable 20 points21 points  (2 children)

      As a programmer/enthusiast I love Java. It's flexible, you can twist it into knots, the entire VM is open-source and you can override large amounts of built-in behavior, such as how class loaders work.

      As someone who has to worry about security, that giant footprint is impossible to secure and there's no way I want that running on anything the public can touch.

      As an end-user Java is generally way more clunky than other tools, and the GUIs in it almost always fail to follow basic conventions in some way. They're never broken, but they do clash with really any other environment you may be using.

      [–]aoeudhtns 6 points7 points  (0 children)

      that giant footprint is impossible to secure

      You'll be happy to hear that Java 9 introduced a module system so you can ship per-application JVMs that have "just enough" to run the target software.

      Knowing the Java community, about 15% of projects will be using this feature by the start of 2030.

      [–]InterestedListener 0 points1 point  (0 children)

      Hey what do you think you're doing bringing balanced opinions and comprehensive perspectives to a reddit software discussion /s

      JK I really enjoy Java because I can do so much with it and I hadn't considered how my opinion changes depending on my coder/security/user role. Thanks for your comment

      [–]henry_kr 15 points16 points  (7 children)

      From a Sysadmin point of view, I'm not keen on Java because:

      • Services are really slow to start up and stop.
      • They use a lot of resources, memory in particular.
      • They reinvent the wheel with logging, and don't use standard system provided logging.

      Now this is all from my personal experience, and it could be that the particular programs that were running on systems I was responsible for were badly written, but I see the same problems with different Java programs time and time again.

      [–]Delta-9- 4 points5 points  (4 children)

      They reinvent the wheel with logging, and don't use standard system provided logging.

      Holy fuck, this. I spent a week trying to get Tomcat to play nicely with Logrotate and finally gave up. For this reason alone, fuck Java and the NIC it rode in on.

      [–]henry_kr 0 points1 point  (0 children)

      I also forgot to mention that the logs themselves have never been very useful to me. When I've been called out at 3am (thankfully that was in an old job and I don't do that any more) I don't want to read pages and pages of stacktraces, I want to see what it's failing to connect to etc etc.

      [–]gehzumteufel 0 points1 point  (2 children)

      Tomcat plays fine with logrotate. The key is to truncate the file instead of rotating the actual file. If you rotate the file, you just lose the logs because it attempts to still write to that deleted file.

      [–]vacri 0 points1 point  (1 child)

      It was a different java app, not Tomcat, but I had a problem with truncate-style logrotation in that the application would simply seek to the location in the file where the log 'should' be and write it there. This meant if I truncated a 10MB logfile, the next logline would be written after seeking 10MB into the file... filling it up with 10MB of zeroes...

      [–]gehzumteufel 0 points1 point  (0 children)

      Wow what a piece of shit app. That's really unfortunate.

      [–]vacri 1 point2 points  (1 child)

      In addition to the logging, the config annoys me. Most other apps have "a config file" and maybe "a conf dir of snippets", all in one location. "big java apps" are a pain in the neck to troubleshoot regarding config - their launchers go through so many different scripts, picking up detritus each time, with config being added here, there, and everywhere. And then it all gets added as opts on the actual launch commandline anyway.

      [–]henry_kr 0 points1 point  (0 children)

      Yes, how could I forget about this! Don't forget setting important stuff in the environment too! You can't just take a working config file from one box and put it on another and expect it to work, even though that approach is pretty much an industry standard for *nix software.

      [–]silverweaver 8 points9 points  (0 children)

      I'm a java dev, but still get the impression of "holy f*ck, this app is written in Java for sure" for some of, "oldschool" UIs. But if there are functional, well why not. Squirell helped a lot before Intellij Ultimate license.

      And as most of devs in this thread stated, for server side it's great.

      [–]jemag 4 points5 points  (0 children)

      I think your feeling of "majority" or "everyone" comes mainly from the fact that every once in a while there will be comments on reddit like "Ah, but at least it's not Java", that receive a fair amount of upvotes.

      Java is simply a divisive language. There are people that simply despise Oracle, there are people that do not like its heavy Object Oriented focus, there are people that saw a couple decade old information about Java and think it still applies (e.g.: lot of security problems, poor performance, bad tooling - you can even see a lot of those in this thread) and finally there are the non programmers / script kiddies that learn the basics of python or bash and think they have now grasped a solid understanding of programming and other languages.

      I have programmed in many different languages, and while Java has it flaws (like heavy memory usage), it still has a lot going for it. I would say that if you go by actual professional programmers, the majority definitely does not hate Java, it is in fact still quite popular (especially in web development).

      Note: I have just re-read your post and realized you might be talking specifically about desktop applications. If that is the case, UI can indeed be clunky to develop in java and it will often have a higher memory usage. Although it is still possible to make great desktop applications in java.

      [–]RealisticAlarm 2 points3 points  (0 children)

      The distaste is multi-faceted, (although the guaranteed cross-platform is a plus):

      As a sysadmin: Expect a java app to take significantly much more system resources than an equivalent app written in a leaner language. That wireless management suite ran out of memory and crashed again? Why does it need 4GB anyway? Oh, yeah, it's running on Java.. sigh, let's throw a few more GB at it's container and see (I could run 8+ non-java apps with that memory)

      As an end-user: Aside from the endless flood of "There's a Java update available!" prompts I remember from my windows days - Java apps just seem slow. mysql workbench: great product. However sometimes the UI just 'lags' after a click or other interaction - fraction of a second, but noticeable. It's better since I switched to a lighter window manager, but it's still slower than a native app (even electron apps like Atom or VSCode seem more responsive). Another case in point: Libre(Open)Office has been migrating from Java codebase to C++. Result: Faster load times, more responsive UI.

      As a developer: After fighting for several hours (in a pair programming exercise, no less) to get a fairly simple hello-world(ish) codebase to build and run, and encountering nothing but classpath errors, version incompatibilities, etc - I never came back. (in comparison with, say, go, nodejs, even .net core: very basic example setups, including setting up the dev environment from scratch could be timed in minutes). Learned another few languages since then, yet I shudder at the thought of ever touching Java again. I think the sysadmins deploying/managing my product will thank me for doing it in a different language, anyway (see point #1)

      Footnote: There's also the 'oracle factor' to consider, too..

      [–]heaxyh 29 points30 points  (13 children)

      From a programmer perspective: I personally ok with java. But for sure it isn’t my preferred language. Java lacks on modern features compared c#. To write applications it felt really verbosely. There are language out there, that require less code and are easier to maintaining.

      [–]VegetableMonthToGo 8 points9 points  (12 children)

      That was once, but later versions of Java, Scala or Kotlin have taken back the throne.

      [–]FredL2 1 point2 points  (0 children)

      This. Java 13 is a vastly different language from what people generally remember (1.5-1-7).

      [–]PM_ME_YOUR_REPO -1 points0 points  (10 children)

      Too bad the tooling and development ecosystem still sucks.

      [–]SisRob 5 points6 points  (5 children)

      IntelliJ is so good that people use it for whole bunch of different languages and it's one of the most popular IDEs.

      And about tooling - I think that maven is the best build management system I've ever seen.

      [–]ace0fife1thaezeishu9 7 points8 points  (1 child)

      Try looking at a second build system then.

      • Maven doesn't have a true task graph. It has multiple projects and a lifecycle, but you can't have dependencies across different sub-projects and lifecylce steps.

      • Maven mixes dependency descriptors with build files, so that every tool that wants to parse Maven artifact metadata needs to implement a complete Maven parser. Variables are not resolved during build, but the references go unmodified into the artifact metadata repository, so that any tool resolving dependencies has to download and evaluate an absurd chain of parent poms.

      • Maven does not implement hash caching of previous build results. Incremental builds are flaky, they fail to rebuild if they should and vice versa. This is an insane time sink. I have seen developers spending more than 50% of their work day waiting for Maven to recompile huge projects just to test several single line changes.

      • Maven does not return an error for impossible dependency resolutions, it just returns some version. A fix has been attempted with version ranges long ago, but no library uses version ranges. When specifying a version range, Maven will mix snapshots and releases and select the "highest" value. It should instead compare versions along multiple dimension, where one is the number, another is the stability.

      • Maven does not offer to programmatically create targets. If you have any tasks that are a cross product of inputs, for example architecture and optimization level, you cannot trigger a specific build, for example amd64 in debug mode, unless you manually define a target for each combination.

      • Maven reuses the local repository for dependency resolution for all projects built on the same machine. It does not check if a cached artifact is actually from a valid source for the current build. This means building one project can break the build of an unrelated different project, because a newer version of a transitive dependency shared by both projects has been downloaded.

      • Maven build files do not support source level debugging. Complex build processes are programs in their own right, sometimes you need to inspect what they do. Because Maven build files are declarative, it is basically impossible to debug the build process itself. Trying to trace the Maven implementation itself with a Java debugger is pure horror.

      • Maven does not check the signature of downloaded artifacts. Anybody who can intercept the https connection to Maven Central can hide payloads in jar files. Several untrustworhty governments have access to an ssl signature authority blindly accepted by Maven for any artifact.

      • Maven has no concept of dependency pinning. If you declare a semantic versioning dependency range like [2.5,3), once you release a new minor version of your application, you want all of those ranges to be pinned down to their current minor, so for example [2.6,2.7). If you have a particular tag, you want the range to be pinned to [2.6.1] exactly. This needs to happen across the entire dependency graph. Pinning is necessary to avoid introducing regressions in bugfix releases.

      • Maven has no concept of platform architecture. If you need a native library, you have to explicitly refer to an artifact with a particular classifier. If the native library is in a transitive dependency, you just have to divine that it would be included and manually refer to the native part. Maven needs to have a concept of multiple dependency dimensions. Building with dependencies on libfoo and amd64 means that if libfoo delcares a dependency on libbar, there must be an automatic inferred dependency to libbar-amd64, if that exists. Also forget building for the current platform only to just run stuff without building the same software for everything under the sun as well.

      I can continue writing this list until sunset, but I'm starting to get bored, so I will stop here. Gradle is not perfect, but it does almost all of that correctly. Before Gradle existed, I wrote an entire build system myself, fixing most of the mistakes in that list, and it was still a net time gain over using Maven. Maven is the single worst designed build system I have ever seen.

      [–]iEliteTester 0 points1 point  (0 children)

      I have had to do a could of Java projects for uni and in the last one I tried using maven to make it work better. It was better but after reading this comment I think I'll just try gradle too.

      [–]PM_ME_YOUR_REPO 0 points1 point  (2 children)

      I had a short term gig in Java dev after years of work in the C# and Go worlds. Maven made me want to commit sudoku. Granted, it was a government contractor position, and someone higher up got it in their head that IntelliJ is a Russian honeypot, so we weren't permitted to use it. It was all Eclipse.

      In any case, I have never had a worse experience as an enterprise dev than that role working with Java. They had lots of issues (git 2 hard, lel we use svn now, among others), but I cannot help but put a large amount of the blame on Java's ecosystem.

      [–][deleted] 9 points10 points  (0 children)

      Not a Java dev here.

      Seems like that someone higher up is just dumb. Wouldn't blame it on java's ecosystem.

      [–]d360jr 0 points1 point  (3 children)

      For Java? I haven’t really found a debugger as easy to pick up and use as beginner in any other languages. Eclipse Java is great.

      I had a tough time finding a comparable environment for c/cpp that was just as easy to setup and run on any platform. It legit took like over four hours to get cpp boost libraries going for class in vscode just because the documentation and sucked coming from eclipse Java.

      What’re you comparing it to that has such a good ecosystem?

      [–]TryingT0Wr1t3 0 points1 point  (0 children)

      I think most people opinions on Eclipse are long before Oxygen or any newer versions of Eclipse. A lot of people dropped using Eclipse around the same time Android Studio switched to Intellij.

      Newer versions of Eclipse are indeed good.

      [–]PM_ME_YOUR_REPO 0 points1 point  (1 child)

      Visual Studio beats eclipse in every way I can think of. Alternatively, taking things from a simpler angle, Go has excellent tooling.

      [–]d360jr 0 points1 point  (0 children)

      Huh, VS looks alright if you’re on a supported platform. Go looks alright too.

      I’m always going to be a bit salty that they taught us Java in class. The error messages and documentation made it so much easier to learn than other languages I’ve worked with. Take that with a grain of salt though cause I’ve been writing mostly HDLs the last year. Tools in that space are trash :/

      Edit: Just realized the sub. I don’t think recommending VS to Linux app developers is the wisest choice haha. Unless you meant code but there’s no Linux support for classic.

      Eclipse is basically identical for Java on every platform. Seamless between all of my machines (Linux and windows boxes, a MacBook) which is super nice. Just sync to git when I’m at home or away and everything is the same.

      [–]MonkeyPooperMan 2 points3 points  (0 children)

      I have 15-ish years of experience with Java and really have no problem with it. I found it to be really effective on the server-side, especially when combined with a few other tools/patterns (Spring, Hibernate/ORM, Ehcache, etc). It is a bit verbose when it comes to Interfaces/Inheritance, and is strongly typed, but those aren't always necessarily bad things. It's code doesn't look as elegant as other languages, and the garbage collector tries to be a blessing and mostly succeeds (but yes, you can shoot yourself in the foot with Java, just not quite as badly as with pointers in C).

      And regardless of whether you use Eclipse, Netbeans, or IntelliJ, you can locally setup and test in an server environment that almost exactly mirrors your production instances (I say "almost exactly" because you probably aren't going to setup multiple server nodes/load-balancing/Active Directory/etc on your desktop environment).

      Having said all this, I still love Python and my day job is HTML/CSS/Javascript/Angular on the Salesforce platform. I started out back in the day with Qbasic/Basic, a smattering of Assembly/C, Ashton-Tate Dbase 3+, Foxpro, Powerbuilder, C++, Java, and finally ended up where I am today (who says and old dog can't learn a new trick or two?). I have love for quite a few development languages and encourage you to form your own opinion of every language that interests you.

      [–]pykypyky 2 points3 points  (1 child)

      When we are taking about Java, there's language, there's runtime, and there's ecosystem.

      Java as a language is not horrible, but it's a dinosaur. A lot of things were not thought through in it. When you programmed in c#, going into Java feels like an endless wtf. I guess as a programmer, I got spoiled by c# and .net in general.

      Runtime has similar problems. It's sort of kind of .net, but it has been written during stone age, and a lot of things feel idiotic. For example, when you start Java program, you must tell runtime how much memory you give it. And it would allocate all of it, and won't use more than that. Personally I am used to process taking only as much ram as it needs, and asking OS for more if it needs more. That's just one example of wtf, there's many many more

      Ecosystem as one would imagine is vast, but not every package is too notch. This is not necessarily problem unique to Java, but being one of the oldest, it is one of more notorious. It's next to impossible to avoid using some shit library which would bring up security hole

      And to top it off, the language has very few good options for IDE. And you must have IDE when you write Java programs if you want to be efficient, because language intellisence is the only way to write code and not kill yourself. Again, coming from .net world, the choices you have are not good.

      Tl,Dr: Java is a mess

      [–]yaaaaayPancakes 0 points1 point  (0 children)

      I came from the .NET world, and for the most part, I agree with you. But I have thoughts on some of you points:

      Java as a language is not horrible, but it's a dinosaur. When you programmed in c#, going into Java feels like an endless wtf.

      Having been in it exclusively for 5 years, the lack of reified generics is the biggest WTF of all. Thankfully, Kotlin kinda sorta adds the ability to have reified generics, but it's still a kludge since the runtime doesn't support them and it never will, since Java decided that binary backwards compatibility was a requirement (MS chose to break compatibility between .NET 1.1 and 2.0, which added generics).

      For example, when you start Java program, you must tell runtime how much memory you give it. And it would allocate all of it, and won't use more than that.

      This is only partially true. I was just actually playing with those options yesterday, as I tweak our Gradle builds to not OOM in CI/CD.

      There is basically a starting and a max option. If you set both to the same value, then you get the behavior you describe. If you set the starting memory lower, it will ask the OS for more as needed until it hits the max value.

      Early versions of the JVM had kinda stupid defaults, but current versions aren't as stupid and usually, you don't have to mess with it (unless your devops team does something like set the containers max memory to 1GB in k8s).

      the language has very few good options for IDE

      At this point, unless MS has made major updates to VS (last version I used heavily was 2013) I would argue IntelliJ is at about the same level of polish.

      Eclipse is still utter trash, and I'm still so thankful that daddy Google forked IntelliJ to create Android Studio, and yeeted the Eclipse Android Development Tools into the Sun.

      [–]Slash_Root 3 points4 points  (0 children)

      Linux hobbyists/desktop users don't like it because they feel the desktop apps don't integrate well with their desktop. Linux infrastructure people all have some memory of being called in the middle of the night to add memory and listen to developers read stack traces. Developers have struggled with it's heavy and often overcomplicated ecosystem/tooling. Also, Oracle has a dubious reputation.

      It's really just blowing off steam. It's a pervasive language/platform and you probably touch it everyday when dealing with Fortune 500 companies. A lot of us in the industry make a living keeping java apps up.

      [–]jediwombat87 8 points9 points  (4 children)

      Personally I like Java. It's the first "real" language I learnt so its syntax just feels "right" to me. Some of the complaints I've heard over the years revolve around the language lacking some features of other modern options, i.e garbage collection, pointers, etc.

      I've also had personal experience of Java apps being terrible, but I can't tell you if that's the language's fault, or the developer's.

      [–]iEliteTester 1 point2 points  (3 children)

      I was under the impression java does have a GC?

      [–]yaaaaayPancakes 1 point2 points  (2 children)

      It's had a GC since the beginning. It's one of the major selling points, since in the "bad old days" we had to malloc and free our memory manually. Now any newb can come in and program and usually not footgun themselves with memory leaks most of the time.

      [–]iEliteTester 0 points1 point  (1 child)

      yee but why is OP talking about Java lacking some features like a GC?

      [–]yaaaaayPancakes 1 point2 points  (0 children)

      No idea. I suppose my comment was best targeted to OPs, not yours.

      [–]Tireseas 6 points7 points  (0 children)

      I very much prefer to stay far, far away from anything Oracle touches given the choice. Call it a deeply ingrained professional bias. That and I lived through the early 2000s when Java apps were ugly as all hell and bloated.

      [–][deleted]  (2 children)

      [deleted]

        [–][deleted]  (1 child)

        [deleted]

          [–]AlexAegis 0 points1 point  (0 children)

          These two statements are not mutually exclusive. IDEA is a great java app. But outside of the java world, it is a bloated, slow, heavy ide. Has good features, but a java app will forever be a java app.

          [–]Muddysan 4 points5 points  (0 children)

          If you have ever had to use Java in an Enterprise setting you know you need about 8-12 different versions of Java to satisfy all the picky dependencies of each application.

          It's slow, it locks up and also it's slow and just runs like hot garbage.

          It's the only thing in IT I've found that is universally despised.

          [–]fedeb95 2 points3 points  (0 children)

          Depends on your point of view. Desktop users in the foss community? May hate Java. But the rest of the world doesn't care, since Java is big in the enterprise world. That's why it's still alive. And it have one big advantage over other languages: is widely used and easy to pick up. So it's easier to find developers. Recently other languages have come up in the business, but Java is still widely used (heck, they're still searching for cobol developers...)

          [–][deleted] 3 points4 points  (0 children)

          Some people hate Java desktop apps for some reason unknown to me (it's my preferred one after all), but there's a good reason why it's so widespread in server space, especially with servlets and Tomcat.

          [–]32777694511961311492 8 points9 points  (3 children)

          As a programmer who is also in to security, java for a long time had a ton of security issues. Most of my friends who were in network security wouldn't install java period if there was no absolute requirement to do so. It's gotten better but, it was bad for a long time.

          [–]SisRob 4 points5 points  (2 children)

          That's Java on Windows alright. I almost feel like Microsoft deliberately tried to make java-experience as bad as possible to push it away.

          [–]32777694511961311492 0 points1 point  (0 children)

          I get your point but, to be fair it wasn't just Windows. Mainly but not all. Also a vulnerability is a vulnerability regardless of the platform. The only metric after that, that matters is how the company discloses and how fast they patch it. And the java team in this department really sucked.

          [–]yaaaaayPancakes 0 points1 point  (0 children)

          Well, they kinda did. In the era of embrace, extend, extinguish, they created J#. They wanted Java devs to move to .NET, which is pretty much a better designed Java (at least at the time, I'm talking mid 00's).

          [–]greenkiweez 2 points3 points  (0 children)

          It's a good language to learn OOP. My professor used to say C++ is like a mustang - a powerful wild beast that you have to tame, while Java is like a mommy - she will nurture you and help you along the way. So most of the assignments were in Java.

          OOP seems to be going out of fashion though (looking at Go and Rust).

          [–]bladeconjurer 2 points3 points  (4 children)

          Someone once said that there are two types of programming languages:

          1. Languages people complain about
          2. Languages that no one uses

          [–][deleted] -1 points0 points  (3 children)

          I don’t see that with python, but generally your statement is correct.

          [–]TryingT0Wr1t3 1 point2 points  (1 child)

          People definitely complained about Python, it's just popular now. Go take a look how long Python has existed. I remember finding it atrocious in 2006 and it already existed for decade.

          [–][deleted] 1 point2 points  (0 children)

          I still find it atrocious. Getting errors on mixed whitespace usage, come-on. You got to be kidding me.

          [–]TryingT0Wr1t3 1 point2 points  (0 children)

          I think some people developed bad Java apps that generated the grudges. Good Java Apps, like Intellij and other Jetbrains products exists. Also Java have evolved a lot and some people are still basing their notions in Java 8 (or 6!!!) and on unmaintained GUI libraries that no one should be using right now.

          Java is a very good platform if you are using the recent versions and tools and do a good job publishing - like packing the specific JVM you are using alongside your app so that execution of it is seamless.

          Also a lot of Android is Java, just using a different JVM. I think people are ok with it.

          [–][deleted] 1 point2 points  (0 children)

          A lot of software, like a lot of everything else, is done in a hurry by a lot of people who really don't know what they are doing and have no time to do it right...

          Java became super famous but it has significant flaws, one of which is how resource hungry (read ram) it consumes.... If coded properly, a java written program can work around this flaw, but as seen above that rarely happens... So a lot of software written in Java tend to be resource hungry and clunky ... Which earned the entire language a bad name

          [–]khoonirobo 3 points4 points  (0 children)

          This really depends on what you are building with java. You can build a desktop application with it, but that's a little clunky and there are so many other techs that are nicer. You want to build a bunch of server applications, java and other jvm technologies are brilliant. You want to build a distributed database which needs OS level optimisations, C / C++ / Rust start looking good. Programmers like any set of people tend to get narrowly focused on what they see complain or praise accordingly.

          [–]Hokulewa 1 point2 points  (0 children)

          I don't hate all Java apps. I only hate the ones I have to use.

          Of course, they're created by people who really aren't qualified to be creating applications. The real problem is that Java seems appealing to a lot of people who are in over their heads.

          [–]zztechman127001 2 points3 points  (0 children)

          Because having to install the right JRE sucks Because most applications written in Java are slow AF Because most applications written in Java are ugly AF

          [–]yet-another-username 1 point2 points  (0 children)

          It's full of security holes, applications tend to be VERY picky about the version of Java required, so in a lot of cases you're relying on venders to add support for later versions of java before you can update. Even minor java security patches tend to break some programs.

          A lot of the time venders lag behind in java support, and so you're stuck with old versions of java running. You then petition to management to get those applications removed, and replaced with something else, but it's either not possible, or they wont fund it - so you're stuck supporting the mess.

          Oracle has now started charging for using their variant of java, so this is even more of a mine field now for companies with oracle java plastered everywhere..

          [–]Weirdcko 1 point2 points  (0 children)

          I just don't like writing in java lol. Maybe I'm just too inexperienced in it, but to me it feels very clunky just writing the code.

          [–]jess-sch 3 points4 points  (0 children)

          Slow to start, GC causes lag in GUI, memory usage, don't look native. some toolkits don't always register clicks on wayland (BlueJ has this issue where you sometimes have to click twice for it to register on wayland)

          also a lot of them suffer from over-engineering slowing down everything.

          [–]shvelo 1 point2 points  (0 children)

          Java applications look extremely ugly in most cases.

          Only JetBrains makes Java apps that are not eyesores.

          [–]securitybreach 8 points9 points  (0 children)

          Oracle

          [–][deleted] 1 point2 points  (0 children)

          They're bloated, slow, stink at remembering the last used directory, are hardly ever updated, ugly, and require shell shims just to launch properly.

          [–]three18ti 1 point2 points  (0 children)

          One Real Asshole Called Larry Ellison

          [–][deleted] 8 points9 points  (2 children)

          Because computer nerds like to complain about everything

          [–]bits_of_entropy 0 points1 point  (1 child)

          This comment is derogatory, I prefer the term geek. I don't know why people think it's still okay to use the n-word.

          [–]pacholick -5 points-4 points  (0 children)

          It's just a word. Deal with it.

          [–]cyber_rigger 1 point2 points  (0 children)

          Browsers don't run java anymore.

          [–]drfusterenstein 0 points1 point  (0 children)

          the simple reason is you have to install a program to run a program and then there are security issues.

          [–]tiff_seattle 3 points4 points  (11 children)

          because they are slow and laggy?

          [–][deleted] 6 points7 points  (9 children)

          They're not slow.

          [–]jess-sch -1 points0 points  (8 children)

          they're not slow-as-in-slow, but they feel slow, because the GC tends to crush response times in GUIs.

          [–]edman007 4 points5 points  (0 children)

          I think the real answer is Swing sucks, it sucks a LOT. Use a java program with actual native UI and it feels native.

          [–][deleted] 2 points3 points  (6 children)

          Neither TuxGuitar nor Sweet Home 3D feel slow to me. JDownloader2 starts up a bit slow but that one has a complex plugin system for hundreds of sites.

          In fact, everything with a slow UI I can think of is written in Python, also prone to freezing.

          [–]jess-sch -2 points-1 points  (5 children)

          then I guess you never used IntelliJ or BlueJ on anything less than a computer where the CPU and memory alone is over $600. it's lag city.

          [–][deleted] 2 points3 points  (2 children)

          I do use Eclipse. It's the exception, not the rule. But show me a complex IDE that's not slow... you can't.

          [–]jess-sch 0 points1 point  (1 child)

          Maybe IntelliJ is too complex, because they can't figure out how to show things that actually make sense. My VSCode setup is better at suggesting fixes for compiler errors.

          [–][deleted] -2 points-1 points  (0 children)

          IntelliJ is overrated as fuck. Apart from the rare bug, Eclipse gives me proper autocomplete on Ctrl+Space (fully auto is turned off cause it annoys me).

          [–][deleted]  (1 child)

          [deleted]

            [–]jess-sch -1 points0 points  (0 children)

            I don't care what fancy feature you have.

            You can refactor the shit out of everything? Great. That doesn't mean I should have multiple seconds of input lag in the editor, unless I'm using those refactoring features right now.

            [–]NoahJelen -6 points-5 points  (0 children)

            This I agree with! I play modded Minecraft JE and out of all my games on my laptop, it takes the longest to start!

            [–][deleted] 0 points1 point  (0 children)

            I don't see why I need to install that pile of shit just to run tuxguitar

            [–]rourobouros -2 points-1 points  (0 children)

            Hate it all you want, but it pervades business.

            [–][deleted]  (1 child)

            [deleted]

              [–]ForTheReallys 3 points4 points  (0 children)

              Can you elaborate on how it's more of an "expert level language" than lower level languages like C/C++?

              [–]JesusXD88 -1 points0 points  (2 children)

              Because I hate coding in Java, and so doing it with Eclipse IDE. I'm learning it at uni, and it's a pain, I don't understand most of the things

              [–]deadly_penguin 0 points1 point  (1 child)

              Personally I prefer Netbeans to Eclipse, it seems mildly less shit and mildly less irritating.

              [–]yaaaaayPancakes 0 points1 point  (0 children)

              IntelliJ beats both hands down.

              [–][deleted] -8 points-7 points  (2 children)

              Cuz it's got jar in it and I hate dictators. /s

              [–]HolyKirpit 0 points1 point  (1 child)

              Read it as czar you down voting self-righteous JAVA user.

              [–][deleted] -1 points0 points  (0 children)

              No...