Programming thread - your favorite language is actually shit

SIGSEGV

Segmentation fault (core dumped)
Admin
My new job forces me to write Java and I'm not exaggerating when I say that everyone responsible for Java's design deserves to be shot.
>no operator overloading because it's somehow "bad" and "confusing"
>no const correctness
>no implicit constructor calls (e.g., if a method expects a Pattern as an argument, you can't just pass it a string)
>no unsigned types
>everything has to be part of a class
>try-with-resources is the closest thing Java has to RAII, and it doesn't even work with shit like mutexes
>inconsistent naming (e.g., size(), length(), and length)
>no default parameters, forcing you to choose between writing several constructors or using the builder pattern
>no equivalent to C++'s raw string literals or C#'s verbatim strings until the introduction of text blocks in Java 13, but everyone is still using fucking Java 8 for some reason
>no default copy constructor even for classes that should be trivially copyable
>overly verbose syntax (SomeType obj = new SomeType(arg1, arg2); instead of SomeType obj(arg1, arg2);)
>formatting and style of JavaDocs is fucking awful and cppreference shits all over it
>allows fucking retards to program
Fuck this language.
Edit: apparently text blocks still process escape sequences, so they're fucking useless for regular expressions lol
 
Last edited:

ColourTheory

Welcome to the coomplex.
>no equivalent to C++'s raw string literals or C#'s verbatim strings until the introduction of text blocks in Java 13, but everyone is still using fucking Java 8 for some reason
Java 8? Isn't that the recommended version which Minecraft uses? wow, everyone around you must be a Minecraft developer. Autism.
 

The Fool

sus
Brave™ User
>no operator overloading because it's somehow "bad" and "confusing"
What's that new language, Zig or something? They have the same philosophy. I can't fucking stand retards who think this way.
Yeah functions can do whatever they want but operators, an entire separate part of the language, can only be used for numbers?
This dumb fucking philosophy is why Java and JavaScript make you write "if (thing.Equals(other))" instead of using "==" because "==" just compares the pointer of all fucking things (and is not a compiler error/warning so it's a fantastic noob trap, because again, it's common sense to use operators for everything and making people unlearn natural behavior is retarded).
Someone needs to tell these assholes that a programming language is meant to be a human language that prioritizes readability and not meant to make pseudo-intellectual asshats feels like "they know what the runtime/compiler is doing" (the entire fucking point of a runtime/compiler is to do things without needing to know about it. Fuck off and use Assembly if you disagree).

>overly verbose syntax (SomeType obj = new SomeType(arg1, arg2); instead of SomeType obj(arg1, arg2);)
I think they added "var" a while back but, that's the beautiful thing about Java. Newer versions are incompatible with older ones because they keep changing the bytecode spec. Which is a fucking riot, because the entire reason the Java compiler erases generic types is so they wouldn't break the bytecode ABI (which they do regularly anyway), but .NET added generics to the runtime itself without breaking anything. The guys who work on Java are factual genuine retards and that is definitive proof.

This is the problem with the language being a siamese twin with the runtime, same issues Python has. C# and the CLR are totally different, independent projects and they literally cannot step on each other's toes.
 

The Fool

sus
Brave™ User
Oh, you know some more retarded Java? They have no interface naming convention. In C# you put a capital letter I in front of every interface, IDoSomething etc.. Java coding standards do not do this and Java programmers never advise it. Why? "Because it's confusing".
Tell me one goddamn time you'd ever be confused by seeing a capital "I" in a type name followed by another capital letter and not understand it's an interface. Maybe in Java that's a problem due to dogshit naming conventions (or lack thereof). C# coding standards handle this fine, a type name that's an acronym of more than two letters cannot be all uppercase, so "OS" is a fine type name, but "API" must be named "Api", so an interface named "API" would be "IApi". I don't think the users of Java are intelligent enough to figure out a naming scheme like that, so a capital letter "I" actually does fuck up their reasoning when attempting to figure out if a type is a class or an interface. So they just level the playing field by making it outright impossible to know if a type is an interface without using an IDE.

This literally is a language made by someone who hates linguistics and wants the user to be more of a computer than the computer itself.
 

FaggotPuncher

Punching faggots and taking names
Convince your company to convert their java code to Kotlin. It still has the same issues as Java, but at least it's less verbose.
 
Last edited:

FaggotPuncher

Punching faggots and taking names
Imagine not being a Beaner.

System.out.println("/thread");
You're coding java you retard, your value is determined by the number of lines and curly brackets in your code.
Java:
package com.drinker;

public class Main {
    public static void main(String[] args){
        String message = "/thread";
        
        try {
            for (var letter : message.toCharArray()) {
                System.out.print(letter);
             }
        } catch (Except e) {
            e.printStackTrace();
        }
    }
}
 

SIGSEGV

Segmentation fault (core dumped)
Admin
Hard disagree. Fuck Java but I don't mind Javadoc.

Also, SIG, you write C++. You have no authority to call languages shithouse.
Correction: I wish I was still writing C++. My new job uses Java because of course it does.
rust c c++.png
 

SIGSEGV

Segmentation fault (core dumped)
Admin
Imagine not being a Beaner.

System.out.println("/thread");
I actually use Beanshell for most of the Java shit I write at my new job, being able to just write shit without the typical Java boilerplate is pretty based tbh.
 

SIGSEGV

Segmentation fault (core dumped)
Admin
Guys how do I use an interface to specify behavior shared by several classes without violating DRY?
 

The Fool

sus
Brave™ User
Guys how do I use an interface to specify behavior shared by several classes without violating DRY?
make a class(es) that implements all the behavior, have every implementer instance the class and write one-line methods that call methods in that class. Or if the interface just has one method, you could go with a static method instead.

Also sometimes violating DRY is fine. Being overly concerned with DRY just makes you end up writing one method that has 20 different boolean arguments to choose what it does instead of just, making a bunch of normal, small methods that all have small variations from each other.
 

FaggotPuncher

Punching faggots and taking names
Nevermind I'm retarded, Java 8 has default methods in interfaces that do exactly what I'm talking about.
That has to be the dumbest thing java has ever introduced. I fucking hate default interface methods. Just fucking use an abstract class if you want to have implementations in your interfaces.

Default interface methods are just Java's way of coping with the fact that it doesn't have multiple inheritance.

GOD I AM SO FUCKING MAD AT THE INTERNET RIGHT NOW.

REEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
 

The Fool

sus
Brave™ User
That has to be the dumbest thing java has ever introduced. I fucking hate default interface methods. Just fucking use an abstract class if you want to have implementations in your interfaces.

Default interface methods are just Java's way of coping with the fact that it doesn't have multiple inheritance.

GOD I AM SO FUCKING MAD AT THE INTERNET RIGHT NOW.

REEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
The C# community universally hated it when it got introduced in C# 8, it's considered taboo or or an emergency measure.
But also multiple inheritance is a fucking nightmare and I'm thankful no language besides C++ was stupid enough to implement it.
 
Top