I was looking at code.golf the other day and I wondered which languages were the least verbose, so I did a little data gathering.

I looked at 48 different languages that had completed 79 different code challenges on code.golf. I then gathered the results for each language and challenge. If a “golfer” had more than 1 submission to a challenge, I grabbed the most recent one. I then dropped the top 5% and bottom 5% to hopefully mitigate most outliers. Then came up with an average for each language, for each challenge. I then averaged the results across each language and that is what you see here.

For another perspective, I ranked each challenge then got the average ranking across all challenges. Below is the results of that.

Disclaimer: This is in no way scientific. It’s just for fun. If you know of a better way to sort these results please let me know.

  • HTTP_404_NotFound@lemmyonline.com
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    I’d love to see the same comparison with more real-world use-cases.

    Code golf, is mostly pretty simple use-cases, which have been optimized many times over.

    When, you build out an application with a user-interface, proper event handling, etc… c++ is MUCH more verbose then c# for example, and they are ranked pretty close together.

    • bleistift2@feddit.de
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      You can write concise Java. Just like you can write readable Haskell. It’s just not idiomatic to do so.

      • zik@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        1 year ago

        Don’t you mean:

        class AgreementManagerClass {
            public static void main(String[] args) {
                System.out.println("I agree."); 
            }
        }
        
    • kaba0@programming.dev
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      It is always dismissed as too verbose, while in go’s case it is never mentioned, when in fact the latter is way more verbose… People’s bias show.

      • coloredgrayscale@programming.dev
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        Maybe also bias by the number / experience of people using it.

        1st semester students getting shocked by public static void main(String args) and meming it on the internet.

        Go on the other hand likely isn’t a common choice / option for a first language.

  • spencerwi@lemm.ee
    link
    fedilink
    arrow-up
    0
    ·
    edit-2
    1 year ago

    I’m really surprised to see Java ranked as less-verbose than OCaml.

    Here’s an equivalent code sample in Java 17 vs OCaml:

    Java:

    abstract sealed class Expr permits Value, Add, Subtract, Multiply, Divide {
      abstract long eval();
    }
    record Value(long value) extends Expr {
      @Override
      long eval() { return value; }
    }
    record Add(Expr left, Expr right) {   
      @Override
      long eval() { return left.eval() + right.eval(); }
    }
    record Subtract(Expr left, Expr right) {
      @Override
      long eval() { return left.eval() - right.eval(); }
    }
    record Multiply(Expr left, Expr right) {
      @Override
      long eval() { return left.eval() * right.eval(); }
    }
    record Divide(Expr left, Expr right) {
      @Override
      long eval() { return left.eval() / right.eval(); }
    }
    

    OCaml:

    type expr = 
      | Value of int
      | Add of expr * expr
      | Subtract of expr * expr
      | Multiply of expr * expr
      | Divide of expr * expr
    
    let rec eval = function 
      | Value value -> value
      | Add (left, right) -> (eval left) + (eval right)
      | Subtract (left, right) -> (eval left) - (eval right)
      | Multiply (left, right) -> (eval left) * (eval right)
      | Divide (left, right) -> (eval left) / (eval right)
    

    …Java has so much more syntactical overhead than OCaml, and that’s even with recent Java and being pretty aggressive about using boiler-plate reducing sugars like Records. And F# has even less, since it doesn’t require you to use different operators for numerics or do as much manual casting between strings/numerics