this post was submitted on 13 Nov 2024
835 points (96.1% liked)

Greentext

4432 readers
1378 users here now

This is a place to share greentexts and witness the confounding life of Anon. If you're new to the Greentext community, think of it as a sort of zoo with Anon as the main attraction.

Be warned:

If you find yourself getting angry (or god forbid, agreeing) with something Anon has said, you might be doing it wrong.

founded 1 year ago
MODERATORS
 
top 50 comments
sorted by: hot top controversial new old
[–] [email protected] 3 points 4 days ago* (last edited 4 days ago)

Anyone who knows me knows that I hate Java with the fire of a thousand suns, but this is just sad. Most of these are true of any programming language. There are plenty of legitimate reasons to hate Java besides the fact that its concurrency utilities are as utterly shite as those of its 90s contemporaries, like the fact that it does not support multiple inheritance, or remote interface implementation, or any form of namespacing besides the goddamned filesystem, or unsigned integers, or string formatting. Or you could rant about the primitive type/object dichotomy and how you can't use primitive types in generics, or the fact that type erasure is a thing and you can't return a generic type from a method because javac is too stupid to remember what generic parameters you passed to a class, or the JVM's atrocious memory efficiency, or the fact that it's not backwards compatible thus requiring end users to install multiple versions of the JVM for different projects, or

[–] [email protected] 30 points 6 days ago (1 children)

My inner mathematician respects Java. The first step in any problem is defining your universe

load more comments (1 replies)
[–] [email protected] 28 points 6 days ago (5 children)

Hello World

30 minutes of boilerplate

writing imports

$ cat <<EOF > Hello.java
public class Hello {
  public static void main(String args[]) {
    System.out.println("Hello world!");
  }
}
EOF
$ java Hello.java
Hello world!

ok

[–] [email protected] 22 points 6 days ago (4 children)

Welcome to java, we have a couple unconventional ways of doing things, but overall I'm like every other mainstream oo language.

People: AHH! Scary!

Welcome to python. your knowledge of me wont help you elsewhere as my syntax is purposefully obtuse and unique. Forget about semicolons, one missed space and your code is as worthless as you after learning this language.

People: Hello based department

[–] Classy 9 points 6 days ago (2 children)

Oh my god I got fucked by a python script once because of a single space. It took forever to figure out what went wrong

[–] [email protected] 2 points 5 days ago

You can't use Python without a linter. I have everything setup in vscode to use tabs yet copilot autocomplete insists on inserting random spaces everywhere creating indentation errors. The linter is essential to quickly see and fix them.

[–] [email protected] 3 points 6 days ago* (last edited 6 days ago)

I refuse to code in Python without a really good IDE and linting like PyCharm. When using PyCharm it's very rare I have issues like this, because it catches them in one way or another, but I notice it catches those kinds of issues a lot when I'm coding soooooooo....

I have also setup the IDE to specifically color code comments like

' # End If and ' # Next

in the same style as their beginning statements as I find it much easier to visually scam through code when they are present.

load more comments (3 replies)
[–] sugar_in_your_tea 18 points 6 days ago* (last edited 6 days ago) (1 children)

Python:

print("Hello world!")
[–] [email protected] 12 points 6 days ago* (last edited 6 days ago) (3 children)

C:

#include <stdio.h>

int main() {
    printf("Hello World!");
    return(0);
}

EDIT: POSIX-compatible shell:

echo "Hello World!"
[–] [email protected] 5 points 6 days ago (1 children)
[–] [email protected] 4 points 6 days ago

Rust:

Still fighting the burrito check fil er
load more comments (2 replies)
[–] [email protected] 7 points 6 days ago (9 children)

This is getting a little better nowadays.

> cat Hello.java
void main() {
    System.out.println("Hello, World!");
}
> java --enable-preview Hello.java
Hello, World!

Things to notice:

  1. No compilation step.
  2. No class declaration.
  3. Main method is not public static
  4. No String[] args.

This still uses preview features though. However, like you demonstrated already, compilation is no longer a required step for simplistic programs like this.

load more comments (9 replies)
[–] [email protected] 4 points 6 days ago

He types REALLY slow.

load more comments (1 replies)
[–] [email protected] 15 points 6 days ago (1 children)

Forgot the JVM eating the entire machine's RAM for breakfast

[–] [email protected] 19 points 6 days ago

JVM is like a gas. It expands to fit it's container, however large that is.

[–] [email protected] 13 points 6 days ago (3 children)

I really enjoyed the text.

From the perspective of a python programmer it all seems valid.

A Java-Dev would probably write the same about an embedded engineer.

[–] [email protected] 7 points 6 days ago

Sorry, you had a small error in the spacings of your post; Therefore I cannot parse a thing you're saying. Didn't mean to scare you with a semicolon either. It's just a tool in language's to end a clause and begin a related, independent clause. That could be useful somewhere...

[–] [email protected] 6 points 6 days ago

As embedded dev, the stack trace alone scares me. It would be funny to watch the Java runtime blow the 8 frame deep stack on a PIC18 tho

[–] sugar_in_your_tea 4 points 6 days ago* (last edited 6 days ago) (2 children)

Honestly, I prefer C to Java, it's incredibly simple without all the BS that Java throws at you:

  • interfaces - compiler will fail if you provide the wrong types; w/ Java, figuring out what types to pass is an effort unto itself
  • functions - everything needs to be in a class; even callback functions are wrapped in a class (behind the scenes if you use modern Java); in C, you just pass a function
  • performance - Java uses a stop the world GC, which can cause issues if you have enough data churn; in C, you decide when/if you want to allocate or free memory, no surprises

There are certainly some bad parts, but all in all, when I run into an issue in C, I know it's my fault, whereas in Java, there are a million reasons why my assumptions could be considered valid, and I have to dig around the docs to find that one sentence that tells me where I went wrong w/ the stuff I chose.

That said, I prefer Rust to both because:

  • get fancy stack traces like I do in Java (I really miss stack traces in C)
  • compiler catches most of my stupid mistakes, Java will just throw exceptions
  • still no stupid interface hell, I just satisfy a specific trait and we're good
  • generally pretty concise for what it is; I can rarely point to a piece of syntax and say it's unnecessary

I use:

  • Python - scripting and small projects
  • Rust - serious projects or things that need to be fast
  • Go - relatively simple IO-heavy projects that need to be pretty fast
  • C - embedded stuff where I don't want to mess w/ the Rust toolchain

Java has been absent from my toolbox for well over a decade, and I actively avoid it to this day because it causes me to break out in hives.

load more comments (2 replies)
[–] [email protected] 14 points 6 days ago (3 children)
[–] [email protected] 13 points 6 days ago (3 children)

I'm sure that's Fireship, without clicking the link.

load more comments (3 replies)
load more comments (2 replies)
[–] [email protected] 9 points 6 days ago

Must be several years old - otherwise, javafx deserves quite a bit more ire.

[–] [email protected] 8 points 6 days ago (3 children)

I still think Java is good for teaching newbies precisely because it will throw an error quickly if they are doing it wrong.

[–] [email protected] 8 points 6 days ago

Rust over there like

Hey kid, tired of putting off your problems?

[–] [email protected] 4 points 6 days ago

So will so many better languages, more so actually.

[–] [email protected] 4 points 6 days ago (1 children)

So will pretty much anything except JS.

[–] [email protected] 4 points 6 days ago

Arguably there’s Typescript now, too.

[–] [email protected] 7 points 6 days ago (1 children)

Java is terrible and I hated it but I feel like this stuff is not why, this mostly just seems like stuff that most powerful object oriented languages do.

[–] [email protected] 6 points 6 days ago (2 children)

Java is amazing and I love it, and I agree that this is not really a good list of problems. (Not that I expect green texts to be well thought out, rational, real, fair, or anything other than hyperbolic rants lol.) There are good reasons to critique it and the ways people use it, but this isn't it.

Particularly funny is the one about race conditions. That's something you'd have to deal with in any sort of multi threaded environment.

load more comments (2 replies)
[–] [email protected] 5 points 6 days ago
[–] [email protected] 5 points 6 days ago (13 children)

Aside from the general stupidity, Java is a heavily front-loaded language in my experience. I'm not going to engage in any tribalism about it or claim that it's better or worse than others. As a matter of personal taste, I have come to like it, but I had to learn a lot until I reached a level of proficiency where I started considering it usable.

Likewise, there is a level of preparation on the target machines: "Platform-independent" just means you don't have to compile the program itself for different platforms and architectures like you would with C and its kin, as long as the target machines have an appropriate runtime installed.

Libraries and library management is a whole thing in every general-purpose language I've dealt with so far. DSLs get away with including everything domain-specific, but non-specific languages can't possibly cover everything. Again, Java has a steep learning curve for things like Maven - I find it to be powerful for the things I've used it in, but it's a lot to wrap your head around.

It definitely isn't beginner-friendly and I still think my university was wrong to start right into it with the first programming classes. Part of it was the teacher (Technically excellent, didactically atrocious), but it also wasn't a great entry point into programming in general.

[–] [email protected] 7 points 6 days ago (1 children)

I'm not a Java dev, but I know enough of it to fix simple bugs in the backends I work with. My main issue with it is that 99% of the code doesn't seem to do anything. The clear, obvious place that looks like it handles the feature you're looking for? None of it does anything! It just instantiates another class from God knows where to actually do the work. I swear I spend most of my time in Java projects just looking for the damn implementation in a sea of AbstractSingletonFactoryBean shit.

load more comments (1 replies)
load more comments (12 replies)
load more comments
view more: next ›