Why does Java tend to get a lot of hate? It's the only language I know...

Why does Java tend to get a lot of hate? It's the only language I know, but I know it quite well and really enjoy using it. I would like to hear actual criticisms and not just "pajeet".

Attached: dbgxt2rvpd26udoyzcqn.0.0.jpg (1200x800, 43K)

Other urls found in this thread:

expertfromindia.com/Hire-PHP-Laravel-developer-india.html
youtube.com/watch?v=LR8fQiskYII
youtube.com/watch?v=NvWTnIoQZj4
en.wikipedia.org/wiki/Criticism_of_Java
stackoverflow.com/questions/1305570/closures-why-are-they-so-useful
dzone.com/articles/whats-wrong-java-8-part-iii
twitter.com/NSFWRedditGif

It's too easy and isn't "pure" It's also verbose if you don't know what you're doing

>"pure"
What do you mean by that?

>too verbose
I felt that the verbosness of java helped me to better understand programming as java is my first language

jobless neckbeards freak out if a language is garbage collected.

hmm, couldn't you just avoid the GC by using "lazy deletion"?

>implying anyone on Jow Forums knows anything about programming

Don't worry about that, bro.
There's always PHP.

Jvm should be garbage collected.

>It's the only language I know

And that's exactly the problem here.

Java was also my first programming language and I thought it was good. But if you take a deep dive into other langauges you start to see the flaws.

Learn Ruby, Scala or Smalltalk and you'll realize that Java isn't OOP at all.
C# or Swift can teach you how comfy it can be to implement getters and setter.
Learn C or C++ and you'll realize how clumsy and verbose Java handles some things.
Learn Scheme and you'll realize what recursion really is and what data structures can be.
Learn Haskell, JavaScript or basically any other modern language to realize how comfy closures and functions like filter/map/reduce are (I know Java has streams but they are an artificial layer on top of the existing langauge design and - of course - they are verbose as fuck).

Java isn't terribly bad, it's just not a good language.

Learn more languages and you will see yourself.

Your list is too long. Noone will get wyat's your message.
I'd just suggest starting with C. It's a good lang that will make java less magical for dev.

>claims you'll see flaws in Java after a deep dive into other languages
>first suggestion for other language is Ruby
fucking kek

Attached: 1520986979048.jpg (423x395, 208K)

There's no native java CPU.
It's pretty much the equivalent to writing a code for the gamecube and making everyone install dolphin on their computers to run your code.

All memes aside, Ruby is a fucking great language.


This list is long because I tried to give Op some ideas what points to consider and also ideas of what to learn next.
Of course this is a long list, I've been programming for a decade. But I didn't mean to become a pro in each of those langauges. Just taking a few days to dabble into each of them will be enough.


I also think at some point of your career you should learn C and even Assembly. If you learn C, you'll understand Java much better. You'll understand that C is much more elegant, but you'll also realize that garbage collection is a cheap price to pay for removing a big pain in the ass.
And assembly will make you realize that C is simply one big macro system. Once you understood some basics about the Register-transfer level, you'll have a better understanding of what pointers really are.

And THAT'S exactly the point where you should take have a year to work yourself through SICP. Now you've reached enlightenment, code is data, data is code, it's all about different states in your programm.

Now you back to C and whenever you use something you have a deeper understanding of waht you're actually doing.
Then you go back to Java and have a deeper understanding of waht' you're actually doing.
Then you go and learn something like Perl, Ruby or Python and realize (once again) that you're simply using a macro system for a macro system for a macro system.

Then it clicks: What are APIs? What are frameworks?
Evenetually you're always doing the same shit, only on different levels of abstraction.

Now move on to some thign very high level (i.e. speech recognition) and apply what you've learned.. is it difficult anymore? Or simply a matter of chosing the right abstractions and some research?

Here you go, now you can truly call yourself "developer" and get big bucks.

If you mean reference counting, then, no, that doesn't work as a substitute for GC. Otherwise, just no.

expertfromindia.com/Hire-PHP-Laravel-developer-india.html

>Learn Ruby, Scala or Smalltalk and you'll realize that Java isn't OOP at all.
I'd like you to explain what exactly makes java not a OOP language.

You can skip all that go straight to Haskell though.

I've tried to read SICP and it's a load of boring bullshit. More than 10 years in software development, C, C++, Perl, some Java. I just don't see why people are jacking off to SICP. Babby's first programming book?

Similar to what we've seen with a lot of things, Java has been trashed by a culture around its use.

Noone seems capable of using Java without pooing in it. Some of the applications that become big in enterprises, like vSphere, Backup Exec, have become retarded-tier slow. I have an application doing basically fuck all on a server with 24GB RAM and we reboot it nightly just to deal with the memory use.

If you support any Java applications in a business, you're well aware that they are as fragile as hell and if you look at it wrong you will NullPointerException all over the floor.

The language encourages layers of abstraction that generally aren't helpful to you. Guess why you need all these?

You guessed it. So that independent offshore developers can get micromanaged to hell and have the best chance of churning out something usable.

Honestly most of these complaints come from the Indian development teams more than the language, which these days is 95% either Java or PHP.

I knock it myself but I do need to acknowledge, if I wanted a cross-platform GUI application, it's either Electron or Java. It's also one of the few options for Android development.

Ruby has the same problem as desu. It's a good language, but it's mostly used with Rails and Rails is becoming more bloat than good.

I wish that "SICP in Clojure" Kickstarter finished. The whole reason I won't do SICP is I want to use a language used in the last decade. And I'm not convinced that "SICP in Python" book makes any sense, the language is too different.

It gets taught as the first language at a lot of universities and thus is synonymous with "newbie," but honestly it's a decent language, portable so what you write on any machine will work on any other machine and any other OS (not locked in to one OS like you are with C#) and it's high level enough so that you don't get bogged down with too many details (garbage collector, so no checking for memory leaks or anything)

true oop is about message passing, not inheritance bullshit

Message passing in Java is implemented as calling methods. Now what?

Haskell is also a great thing to learn, but so are other langauges (i.e. Erlang). I don't consider Haskell above all other lngauges only because it has an emphasis on set theory..


OOP is all about encapsulating states in objects. You're trying data structures and operating methods together and provide an "interface" by visible methods.

Ok, now that states are settled, you have to think about the remaining two things:
Data structures and methods (that manipulate data structures).

Java has an artificial distiction between "primitive data types" and something like the type Integer.
In other langauges like Ruby or Scala, numbers are also objects. So can do things like:

print "yay!" if 1.odd? and 2.even?

This sounds like a gimmick, but is is profound.
It gets even more profound when you think about passing functions to a function.

(On a side note:
Consider what you pass to a method: In Java it's only Objects and native types. The best practice is to use native types which get auto-boxed and un-boxed to type Integer if you need. But unlike Haskell guys you don't know what you're actually doing here..)


This leads to some very strange work arrounds ("Java Design Patterns") and also to the realization, that Java tries to allow multiple inheritance by make Interfaces more and more like Mixins with every version, to emulate multiple inheritance. (Of course you don't know what Mixins are, just look at Scala or Ruby to see an example).

Because mutliple inheritance isn't a big deal if you have a good language design. And because eventually it's a must to inject functions somewhere at run time, and Java's way of doing this, is (surprise, surprise!) terribly verbose and cumbersome; by using Reflections or creating Subclasse at runtime (factory pattern and what not) you can emulate this behaviour somehow. Yeah, that's what industry actually does. But you're more or less working against the langauge or arround it.

>It's the only language I know, but I know it quite well and really enjoy using it
Then how could you possibly expect to understand why people don't like it?

Here are the usual criticisms:
It runs in a VM to make it cross platform but this adds to overhead and general systems fuckery, Extra memory usage for no good reason, the need to tune the heap size at runtime is stupid, and annoying, from a sysadmin perspective It's often frustrating to deal with, and don't get me started on fucking tomcat.

you can't make good native feeling apps with it, anyone who's been around it long enough can smell it on an application.

The fact that it's pathologically object oriented hasn't won it any fans. the fact I have to instantiate a class to run main is stupid and unintuitive.

It's standard library is THIC and not in a good way.

due to the JVM it's slow to start compared to other languages, it used to also have pretty weak performance compared to other stuff but that's mostly gotten better.

It's owned by Oracle

Because it's taught in every fucking god damn CS program in the country there are a lot of shit heads who don't know anything writing really really bad java code. These shit heads get hired by all sorts of companies and write this bad code and it goes into products that people then have to use and deal with. See anything made by atlassian.
There are examples of well-written and good java applications but they are in the minority (serverside example that comes to mind is elasticsearch, I'm still amazed that it performs as well as it does while being written in java)

I think there's also a bit of a hippster thing going on, because as I said before it's taught everywhere so everyone knows it so it's not exciting.

Oh I forgot to mention exception handling and logging thereof is the WORST in java.

>something like the type Integer.

Attached: mathsinjava.jpg (674x490, 57K)

Does it matter (besides experiencing different paradigms) which programming language you choose?
Are experienced programmers able to write something good in every programming language or is the knowledge about the specific quirks of the language so important for good code that you have to heavily specialize to become an expert?

t. pajeet

You should really look into Smalltalk to get a deeper understanding of what "message passing" can be..


Of course your mileage may vary. For me SICP was a great read, especially iwth some programming back ground.

The reason why it makes sense to learn Scheme is simply because it has almost no syntax. You can "learn" Scheme in a day. But you can spend a few month to understand what you can do with it.

For me I learned a big deal about many topics that seem to be easy, but the devil is in the details. One example that comes to my mind:

Why is it a bad idea to calculate Fibonacci like this?

int fib(nr as int) {
if (nr == 1 || nr == 2) {
return 1;
} else {
return fib(nr -1) + fib(nr - 2);
}
}


Because it's tree-recursive!
You're calculating fib(1) a lot of times, basically for every nr smaller than the first one..

Now a good compiler might realize this and optimize it away. But can you be sure that this is already successfull if you code get's more complicated?

And more important:
It's simply bad programming and shows your lack of understanding recursion.

This would be real ("tail recursive") recursion:


int fib(nr as int) {
return fib_iter(nr, 0, 1);
}

fib_iter(cnt as int, nr1 as int, nr2 as int) {
if (cnt == 0) {
return nr2;
} else {
return (--cnt, nr2, nr1 + nr2);
}
}

(I didn't test the code, but it's something like this...)

While I don't really enjoy programming in Java, there's not that much wrong with it other than
-how verbose the syntax is
-how big the standard library is
-it's kind of memory hungry

That said there's millions of shitty Java applications, but mainly because of shitty Java developers who a) can't code b) over-engineer things with FactoryServerImplApplShitFuck c) don't maintain their code because their job is about hacking together enough barely working features to please the business

.t did java enterprise work for over a year

Also Java 8 helped improve a lot with all the functional stuff.

There are much, much worse languages (PHP).

>You should really look into Smalltalk to get a deeper understanding of what "message passing" can be..
You should really, really learn the art of turning your thoughts into words. You wrote so much and yet you failed to answer the simple question I asked.

I'm not asking for you to bestow your divine knowledge on me (which is what it seems you're doing with your meaningless walls of text). I want to argue with you. All you had to do was list properties that Java lacks that are needed for OOP language. The only thing remotely relevant that you listed is that java's primitive values are not objects. That's meaningless. 2.even? is not useful.

In the end, your best is "just get brainwashed like i got and then you'll believe".

Welp, in Scala or Ruby those two statements are literally the same:

1.+(1)
1 + 1


It's way easier to write:
divide_round_up(2 * (bsim1 + -2), n)


Isn't it?


>Does it matter (besides experiencing different paradigms) which programming language you choose?

Difficult question.
Differnt programmign langauges are like different cars. You can go pretty much anywhere with any car. But maybe it makes more sense to use a Lamborghini when you want to drive a race, and if you go ot the mountains a Jeep offers some advantages. Now you're short on budget, then maybe you'd rather have a Toyota.


Look at this:

youtube.com/watch?v=LR8fQiskYII

youtube.com/watch?v=NvWTnIoQZj4


>Are experienced programmers able to write something good in every programming language

Yes. Just like bad programmers can write bad code in any langauge.

Programming is a craftsmanship, not an art. If you programmed a certain thing a couple of times you and maybe even differnt programming langauges, you can programm it pretty much every langauge (let's ignore APL for a second).

Software engineering is about things like maintainability, coupling, robustness, testing and simplicity. You can (and will) develop those skills with any programmign language if you programm for a couple of years, at least if you programm "real stuff" and not only coding challenges.


>is the knowledge about the specific quirks of the language so important for good code that you have to heavily specialize to become an expert?

Again, this depends.
I think if you have a PL/SQL job you'd rather hire the T-SQL developer with 10 years of experience and give him a crash course instead of hiring someone straight from university with a certification in PL/SQL.

But then again sometimes having projects in a certain langauge is a must for a certain position.

Java is shit.
Scala is good.

>if I wanted a cross-platform GUI application, it's either Electron or Java
>javascript
>java
why not Qt, then you get to use C++?

That's pretty rude.
You want me to spoonfeed you and insult me at the same time?.

>"I only know addition and substraction, but please explain why the Lebesgue integral it cooler than the Riemann integral!"

This guy did already give you a lot of points:
Also I said that Java is not a terrible langauge, just not a good one.
There is nothing wrong with learning Java, but once you have learned other langauges you can never go back without realizing that it takes so long to even get the simplest tasks done.


But hey, you can make a lot of money with Java, so go ahead and learn it. At least you have decent web frameworks these days (spring boot).


You see, with Java it's the same as with Java Script:
10 years ago they were terrible langauges, nowadays they are bearable.


No problem if you don't get what I am talking about.
You takeaway should be: there are other languages out there that might be more fun to use. You may consider playing with them somewhere int the future. And they you can probably answer the question yourself, why nobody likes Java.

I'm not OP, I'm not asking for your advice, and I get very well what you are talking about from reading your posts. You don't have arguments why Java is not an OO language. You're repeating some other well known cunt who is upset that Java is popular and his esoteric language is not. No, I'm not asking you to spoonfeed me, I'm asking you to publicly defend your point of view that java is not an OO language, and you can't, which is a pretty good outcome for me.

>spring boot
Do you have any experience with it? Can you reccomend it?

>I'm asking you to publicly defend your point of view that java is not an OO language, and you can't, which is a pretty good outcome for me.

Oh noes, my evil plans have been spoiled!
I lost in this internet fight, how can I probably go on..


Let's take a close about OOP.
Alan Kay, the inventor of OOP said:
>OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme LateBinding of all things.

He also gave this early definition:
>1. EverythingIsAnObject.
>2. Objects communicate by sending and receiving messages (in terms of objects).
>3. Objects have their own memory (in terms of objects).
>4. Every object is an instance of a class (which must be an object).
>5. The class holds the shared behavior for its instances (in the form of objects in a program list)
>6. To eval a program list, control is passed to the first object and the remainder is treated as its message.

Now ask yourself:
Is EVERYTHING an object in Java?
Can you send messages between objects in Java?
Are those messages objects as well?
Are classes objects as well?


Java is simply not a good exmaple of OOP.
If it helps your sleep, call it an OOP langauge, but it's a very weird, shallow and incomplete way of implementing OOP.

Not personally, but every Java dev I know seems to like it.

Java is, in many ways, C++-.

>Is EVERYTHING an object in Java?
That's not relevant. Imagine a language that would be just like Java but with its primitive types being objects. There would be no noticeable difference for the programmer. This is just the guy being upset that other languages managed to better his original idea -- "yeah, it works just like OOP, but you see this tiny detail that does wonders for performance technically is not OOP so I can't bestow the title of OOP on you".

>Can you send messages between objects in Java?
>Are those messages objects as well?
Yes, you can send messages. Method calls are Java's way of sending messages between objects. Yes, methods are objects. And, yes, their arguments are objects too. No, "learn about smalltalk and then you'll learn to trust what i say" is not a valid counter-argument here.

>Are classes objects as well?
Yes, they are in java.

>their arguments are objects too
trashy code monkey bullshiting.

sorry but primitive types in java aren't objects

>Imagine a language that would be just like Java but with its primitive types being objects.
>There would be no noticeable difference for the programmer.


Scala:
object Main extends App {
val keywords = List("Apple", "Ananas", "Mango", "Banana", "Beer")
val result = keywords.sorted.groupBy(_.head)
println(result)
}

Java:
import java.util.*;

class Main {
public static void main(String[] args) {
List keywords = Arrays.asList("Apple", "Ananas", "Mango", "Banana", "Beer");
Map result = new HashMap();
for(String k : keywords) {
char firstChar = k.charAt(0);
if(!result.containsKey(firstChar)) {
result.put(firstChar, new ArrayList());
}
result.get(firstChar).add(k);
}
for(List list : result.values()) {
Collections.sort(list);
}
System.out.println(result);
}
}

*****

Scala:
Array(1,2,3).map(x => x * x ).foldLeft(0)((s,i) => s + i )


Java:
public int sumSquare(int[] list) {
int s = 0;
for(int i = 0; i < list.length; i++) {
s += list[i] * list[i];
}
return s;
}

Also:
>en.wikipedia.org/wiki/Criticism_of_Java

it takes far more effort to make c++ code work on multiple platforms especially if you add to that the qt gui thing
compared to js and java being effectively write once use everywhere

Fascinating. I'm not asking for comparison between Java and Scala. Like i said before, if a new language that is just like Java except with primitive types being objects existed, your comparison snippets between that language and Scala would be the same as ones you posted. You seem to be trying to convince me that Java is not a very good language. I don't care about that in the slightest. The only point I'm arguing is that Java is an OO language, and it is, despite supporting primitive types for performance.

if you use Qt, then why not take advantage of all the other classes they provide, with qmake I didn't have to change a single line of code for compiling between linux/winshit

>language is not pure OOP
>huhhhhh it's not a good OOP language
Nice fucking point.

as far as my admittedly limited knowledge of qt goes, i've had quite a few problems in regards of the ui consistency on linux and windows mostly little things like in linux everything is fine but in windows elements are slightly overlapping/misaligned, or vice versa depending on where it was aligned in qt

As I said before:
If it helps your sleep, call it an OOP langauge, but it's a very weird, shallow and incomplete way of implementing OOP.

Java doesn't really make use of the possibilities of what OOP can be (or rather should be).
The mere fact that numbers aren't objects which you can pass messages at is a reason to say Java isn't a real OOP language.
The mere reason that you can't pass functions to objects (or only with weird workarround) makes it a bad example of OOP for me.
The mere reason that you don't have real closures in Java makes it a bad examle of OOP.

See:
>stackoverflow.com/questions/1305570/closures-why-are-they-so-useful


Of course you can use the OOP-paradigm in Java.
You can also use the OOP paradigm in C or even assembly.
But that doesn't mean those langauges reflect the thoughts behind OOP.

A E S T H E T I C

Just switch to Kotlin OP

You're absolutely free to claim that you don't like how Java implements OO concepts, but to say it is not OO shows that you are just biased.

Primitive numbers are not objects, but nothing is stopping you from writing in your method an argument as Integer arg, and then arg is a proper object and you can do whatever you want with it.

>The mere reason that you can't pass functions to objects
>immediately admitting in the same sentence that you actually can
I just can't.

Quality over Speed
Java/js programs suck compared to c++ ones.

Your criticism is out of date, buddy. Java has lambdas now.

>Java/js programs suck compared to c++ ones.
That's just plain wrong. Over90% of all C++ programs are unoptimized and badly coded and all of them are slower than Java.

Java uses more memory but I wouldn't call it slow.

She means application quality over development effort.

>Java
>faster than anything

"Java is not an OOP langauge."
Now sue me.


Java "Lambdas" are a joke.
They are not real Closures.
You also can't use Currying in Java.

See:
>dzone.com/articles/whats-wrong-java-8-part-iii


You see, Java is like an ugly b*tch wearing a lot of makeup.
Of course she looks not that ugly with her makeup on, but if you look closely it's still the same ugly cunt.

There actually is

>Now sue me.
I already did, and you made a huge fool out of yourself in the thread. More than enough for me.

OK, kid.

I gave you a coherent reasoning about OOP by explaining some thoughts behind OOP and why Java differs from the original OOP though ().
Aftwerwards I gave you an example of numbers (arguably an important part of any language) not being objects in Java. Your reaction was to say it "woudn't make any differnce". So I gave you two code examples to show how much of a difference it really makes in practice (). You simply dodged this issue and moved the goal posts by claming you don't want a comparison between langauges.


Basically you are a fanboy in the state of denial. You are trying to counter any argument of me to reduce the cognitive dissonance for you. You probably invested a lot of time in Java and the fact that it might have been a bad investment is just to big to deal for you right now.

Calm down, that's normal.
I know it hurts when someon bursts your bubble, but you'll get over it.
And if you did, you're free to grow and to learn something new.

You can hate me now, but in 2 years you'll be glad I saved you from the nightmare you're currently living in.

>Java "Lambdas" are a joke.
>They are not real Closures.
>You also can't use Currying in Java.


hahahahhah what the fuck are you rambling about you dumb ass piggot? a lambda function isn't a "closure", but you can create a closure using a lambda function

got damn it man, you don' know shit, get back to school and learn a thing or two before you open your disgusting pajeet mouth

>I gave you a coherent reasoning about OOP by explaining some thoughts behind OOP and why Java differs from the original OOP though
Yeah and you demonstrated that you know fuck all about Java with that.

>Aftwerwards I gave you an example of numbers (arguably an important part of any language) not being objects in Java.
If you actually wanted to show how everything an object could be useful, you would have given me an example of Java-with-primitives vs Java-without-primitives. What you did instead was, you actually gave me a comparison between languages, and Scala snippet was shorter because you used functionality from Scala that doesn't exist in Java.

All this armchair psychologist garbage that you wrote in the second part of your post only makes you look worse.

... isn't that his point, exactly?

Lambda is never a closure, a closure is a product of using a lambda function. Closure is a function together with the environment, and lambda is a function in this context.

Closure is a function that _encloses_ the environment

>In programming languages, a closure (also lexical closure or function closure) is a technique for implementing lexically scoped name binding in a language with first-class functions. Operationally, a closure is a record storing a function[a] together with an environment.

Samefag in damage control..


>you would have given me an example of Java-with-primitives vs Java-without-primitives
>you actually gave me a comparison between languages, and Scala snippet was shorter because you used functionality from Scala that doesn't exist in Java

So I should show you an comparison of Java against Java how it could be.. but without using functionality that doesn't exist in Java..?


Uhm...
How do I break this down for the mentally challenged?
What you want is mutally exclusive, you foul-mouthed poppycocker.

Java is a good language u guys!
ur all microshills trying to push c# on Jow Forums

Someone should seriously redo that wikipage

It's not mutually exclusive at all. Write a snippet of useful Java code that could work if java's primitives were objects, but doesn't work, and it doesn't work only because Java's primitives are not objects. Those vain insults are not helping your case.

>i don't like it so it must be wrong!

First gen mass scale company programmer, Unix C,C++ or Academia hate Java because no low level or no higher level.

It's vague and unprecise

C# is just as retarded

>a closure is a record storing a function together with an environment.
As clear as it gets. Are you ok?

>ITT: argue with some java code monkeys

You just don't.

You don't understand what I mean obviously, but that's ok

>y-y-y-you wouldn't understand!
Fascinating.

Yup

If you don't want to defend your point of view, I have nothing to add.

There's nothing to defend

You have a view on closures that contradicts what's written in wiki. You expressed it in the thread, and when the contradiction was pointed out, it's now on you to defend your point of view, and you refuse to do that.

Yup

>Write a snippet of useful Java code that could work if java's primitives were objects, but doesn't work, and it doesn't work only because Java's primitives are not objects.

See here:
Scala is LITERALLY Java with a differnet syntax, you poor bloke.


This.
So much this.

shouldn't you learning algorithms, good practices and analysis instead of jumping from language to language like a spastic monkey?

You should have no issue writing the code in java then.

>i have no argument so I'll just call him a monkey and move on

>can't you avoid the GC by using this one weird hash table trick
What did you mean by this? Are you using some definition of "lazy deletion" I'm not familiar with?

It has a shitton of overhead for doing even simple tasks, is REALLY slow, and requires the JDK for even simple shit.
>It's the only language I know
That is why you do not hate it yet. Try ANY other language and see why it sucks. If you want quick dev time, you have Python. If you want fast run time, you have C. Java is that shitty middle child that does nothing particularly well and thus it has no real use aside from a learning tool.

>Java has no real use
>C does
Spotted the NEET. Java is industry standard because it compiles once runs anywhere.

I know C, C++, C#, Perl, Python, Java, JS and Lua very well and I don't hate Java. Also Java isn't slow, that's just your ignorance talking.

Contrarians. Keep in mind 98% of posters here done program for a living and their opinion doesnt matter

It's "C++--", you misquoting mongoloid.

It used to be the only language I knew. But after learning c++ I love it so much more. Java fucking eats up memory and is hella slow, even compared to my shitty C++ code. The only thing I miss from Java is the built in jOptionPane for easy/very bad guis but still cross platform.

I never said it was not used. I just said it was not good. The "hur dur platform independent" argument rarely holds water if you are developing for one platform.