The 28 Best Programming Languages of All Time

The 28 Best Programming Languages of All Time Featured Image

Before you get riled up, there’s a couple things you should know about me and this article. Each year, I like to do a list post to celebrate my birthday. In years past, I’ve covered topics from tech to anime. This year, I figured I’d talk about programming languages.

Now, to be fair, the title is nothing short of clickbait. In reality, I don’t much care for the usual pissing contests that happen in tech circles around different tools. That said, I do occasionally find it fun to lean into the memes, which is the purpose of today’s article. As a result, don’t take it too seriously! And, definitely don’t use this article as a tool to gatekeep other folks from the field.

Now, without further ado, let’s get into it!

Table of Contents

Credibility Where It’s Due

Before we get into the official list, I already know there are questions you might have. For example, who the hell has worked with 28 programming languages realistically? The short answer: I haven’t.

If I were to draw up a distribution of the programming languages I’ve been exposed to and how much I’ve used them, there would probably be only a handful of languages with any serious use in my repertoire.

That said, I should mention that I am the maintainer of a rather large collection of code snippets called Sample ProgramsOpens in a new tab.. At the time of writing, this repo featured 162 programming languages and 621 code snippets. As a result, I’ve clearly been exposed to many, many programming languages.

Does that make me qualified to rank the top 28? Probably not! But, this is a shit post, so who cares? At the very least, I hope this list gives you a laugh, and maybe you’ll even find a new language to learn for yourself.

Rating Scale

When I was first putting this list together, I was sort of working from a gut feeling. However, once I hit the 20 language mark, I found it a lot hard to actually rank the languages. As a result, I thought I’d make a rating scale.

Now, because I’m trying to have some fun with this, the rating scale is going to have to be fun as well. Here are my criteria (each are out of 10):

  • Fun: for me, a language needs to be fun to use. Fun is subjective and somewhat hard to quantify, but it usually maps to how hard it is to do simple things (I’m looking at you Java).
  • Useful: for me, useful is a measure of practicality for a language. While a language may be fun to use, that doesn’t mean it’s actually practical (I’m looking at you Brainfuck).
  • Nice: for me, a language is nice if it is pleasing to the eyes (I’m looking at you C++).

Now, we have a scale that can be used to rank the programming languages according to how FUN they are. Who doesn’t love a rating scale that’s a bit recursive? Anyway, let’s get started.

Best Programming Languages from Worst to Best

Chances are when you look through this list, you’ll see languages you’ve never heard of. To help you put some context around the languages, I’ll first share what a program looks like in that language. To keep things consistent, I’ll be showing what FizzBuzz looks like in each of the languages (for which the program exists in the Sample Programs repo).

As usual, we’ll start with the worst language and work backwards. You can see my official ratings for each language at the bottom of each section.

[#28] Objective-C

#import <Foundation/Foundation.h>

int main (int argc, const char *argv[]){
    NSAutoreleasePool *pool =[[NSAutoreleasePool alloc] init];
    NSMutableString* fizzbuzz = [[NSMutableString alloc] init];

    int i;
    for (i = 1; i <= 100; ++i) {
        [fizzbuzz setString: @""];

        if (i % 3 == 0) {
            [fizzbuzz appendString: @"Fizz"];
        }

        if (i % 5 == 0) {
            [fizzbuzz appendString: @"Buzz"];
        }

        if ([fizzbuzz length] != 0) {
            NSLog(fizzbuzz);

        } else {
            NSLog(@"%d", i);
        }
    }

    [fizzbuzz release];
    [pool drain];
    return 0;
}

Alright, the worst programming language to make it on this list is Objective-C. As far as I know, Objective-C is/was the language used to build iOS apps, and I believe it’s also used in OS X development.

I’ve never personally used it, but I find it to be one of the ugliest programming languages ever made. I mean look at it? What the hell is a pool? Why are we draining it? Why are there so many square bracket? What is an NSMutableString?

Languages like C and C++ are also quite ugly, and Objective-C somehow managed to make them worse. At least, the language is somewhat useful.

CategoryScore
Fun2
Useful6
Nice0
Average2.7

[#27] Perl

use strict;
use warnings;
use diagnostics;
use 5.10.0;

for my $n (1..100) {
    !($n % 15) ?    say "FizzBuzz"    :
    !($n % 3)  ?    say "Fizz"        :
    !($n % 5)  ?    say "Buzz"        :
                    say "$n";
}

Let’s face it. If I wanted to code with symbols, I would just use brainfuck. What were the developers thinking when they made Perl? I’m hardly surprised that a language like this ended up forking (see RakuOpens in a new tab.).

With that said, I suppose there is some merit to Perl. As far as I know, it’s fairly useful as a scripting language on Unix/Linux systems, and it’s most famous for text manipulation. Regardless, I had to throw this one in the trash.

CategoryScore
Fun3
Useful5
Nice1
Average3

[#26] Visual Basic

Option Explicit On
Module FizzBuzz
    Public Sub Main()
        FizzBuzz()
    End Sub
    Sub FizzBuzz()
        Dim first = True
        Dim i As Integer
        For i = 1 To 100
            If i Mod 15 = 0 Then
                If first Then
                    System.Console.Write("FizzBuzz")
                    first = False
                Else
                    System.Console.Write(", FizzBuzz")
                End If

            ElseIf i Mod 5 = 0 Then
                If first Then
                    System.Console.Write("Buzz")
                    first = False
                Else
                    System.Console.Write(", Buzz")
                End If
            ElseIf i Mod 3 = 0 Then
                If first Then
                    System.Console.Write("Fizz")
                    first = False
                Else
                    System.Console.Write(", Fizz")
                End If
            Else
                If first Then
                    System.Console.Write(Str(i))
                    first = False
                Else
                    System.Console.Write($", {Str(i)}")
                End If
            End If
        Next
    End Sub
End Module

I first picked up programming when I was 18. At that time, I started learning Java. That said, I distinctly remember some of my friends learning Visual Basic in high school.

That becomes somewhat of a funny memory for me now because I am very thankful I never put myself through that. I mean, again, look at this code. The UpperCamelCase style is ugly enough, but also this program is enormous.

If I took my shot at Apple for Objective-C, you bet I’m taking my shot at Microsoft for this one. I’d rather use C in either case.

CategoryScore
Fun3
Useful6
Nice1
Average3.3

[#25] Brainfuck

++++++++++>>++++++++++[<++++++++++>-]<[>>+>>+++>>>>+>+>+<<<<<<<<[>+>->+<[>]>[<+>
-]<<[<]>-]>>>[>>>-<<<[-]][-]<[-]+++++<[<+>-]<[>+>->+<[>]>[<+>-]<<[<]>-]>>>[>>>>-
<<<<[-]]>>>[>>>-[------->+<]>---.[-->+++<]>.-[--->+<]>++..[-]<<<<[-]<<[-]]>[>>++
++[++++>---<]>-.++[----->+<]>+.+++++..[-]<<<[-]<[-]]>[<<<<<<<[>>>>>>>>+>>>>>>>>+
<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>-]<<<<<<++++
++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>>[-]>>>++++++++++<[->-[>+>>]>[+[-<+>]>
+>>]<<<<<]>[-]>>[>++++++[-<++++++++>]<.<<+>+>[-]]<[<[->-<]++++++[->++++++++<]>.[
-]]<<++++++[-<++++++++>]<.[-]<<[-<+>]<[-]<[-]]<<<<<[-]<[-]<[<+>-]<<<<.>-]

Look, I told you my rating scale was measured in fun. If this is your first time seeing brainfuck, you’re welcome. This language features just 8 characters and can read and write text.

Obviously, brainfuck is incredibly useless and hard to use. That said, esoteric languages exist for a reason, and this one is a lot of fun.

CategoryScore
Fun8
Useful1
Nice1
Average3.3

[#24] C++

#include <iostream>

int main()
{
    for (int i = 1; i <= 100; i++) {
        if (i % 15 == 0)
            std::cout << "FizzBuzz\n";
        else if (i % 5 == 0)
            std::cout << "Buzz\n";
        else if (i % 3 == 0)
            std::cout << "Fizz\n";
        else
            std::cout << i << "\n";
    }
    return 0;
}

C++ was one of the first programming languages that I really didn’t like. And keep in mind, I got my degree in Computer Engineering, so I’m used to using hardware languages like assembly and Verilog.

Unfortunately, C++ is ubiquitous, so just knowing language can score you a job just about anywhere. That said, has anyone really tried to use it? It is one of the most bloated languages I’ve ever used. As a result, 10 people could write code for the same problem and come up with 10 different solutions. That makes it a very unfun language to use in a team. And I would know, I’ve had the misfortune of writing code for a locomotive camera system in C++.

CategoryScore
Fun0
Useful10
Nice0
Average3.3

[#23] C

#include <stdio.h>

int main(void)
{
    for (unsigned int i = 1; i <= 100; i++) {
        if (i % 15 == 0) {
            puts("FizzBuzz");
        } else if (i % 3 == 0) {
            puts("Fizz");
        } else if (i % 5 == 0) {
            puts("Buzz");
        } else {
            printf("%u\n", i);
        }
    }
    return 0;
}

Looking back on this list, I feel like I did C somewhat dirty. See, C by itself is honestly pretty elegant, lightweight, and compact. It’s its proximity to C++ that I think makes me hate it as well.

That said, if I really had to complain, I’d have to say that C is just too low level to have any real fun. I’m not trying to write everything from scratch. Likewise, I’m not trying to deal with a mess of makefiles and object files.

Of course, I would be lying if writing Arduino code wasn’t a little bit fun, so hats off to you C.

CategoryScore
Fun2
Useful10
Nice1
Average4.3

[#22] Lisp

(defun divides-by (num divisor)
    (= (mod num divisor) 0))

(dotimes (num 100)
    (write-line
      (cond
        ((and (divides-by (+ num 1) 3) (divides-by (+ num 1) 5)) "FizzBuzz")
        ((divides-by (+ num 1) 3) "Fizz")
        ((divides-by (+ num 1) 5) "Buzz")
        (t (write-to-string (+ num 1))))))

Lisp is one of those relics of the past, like C/C++, that just never quite went away. On the plus side, Lisp is far more lightweight and potentially easier to learn than either of those languages, so it’s somewhat hard to complain.

That said, as the forefather of functional programming, it leaves a lot to be desired. Mainly, it’s syntax around parentheses is messy. Even with a well formatted program like the one above, it’s hard to tell exactly what’s going on.

Regardless, I would prefer to use a functional language like this than some of the messes above.

CategoryScore
Fun5
Useful5
Nice4
Average4.7

[#21] Pascal

program FizzBuzz(output);
var
   i : integer;
begin
   for i := 1 to 100 do
      if i mod 15 = 0 then
         writeln('FizzBuzz')
      else if i mod 3 = 0 then
         writeln('Fizz')
      else if i mod 5 = 0 then
         writeln('Buzz')
      else
         writeln(i)
end.

At this point, we get to the languages I would consider “mid.” In other words, if I were asked to use them, I wouldn’t really complain.

The very first “mid” language is Pascal, and it comes from the era of C. In fact, it looks a lot like C, but it uses begin and end keywords to mark blocks instead of braces. To me, this makes the language a lot easier on the eyes. Though, the fact that Pascal is case insensitive is a little weird.

One thing I’m a big fan of in Pascal is the distinction between functions and procedures. This is one of those ideas I talk about when comparing statements and expressions, and it’s cool to see this relationship in a language.

All that said, I haven’t really used Pascal, but I’ve heard some nice things from folks in the past. So, I’ll stick it in the “mid” bucket.

CategoryScore
Fun5
Useful5
Nice5
Average5

[#20] Lua

for i = 1, 100 do
    output = ""

    if i % 3 == 0 then
        output = output .. "Fizz"
    end

    if i % 5 == 0 then
        output = output .. "Buzz"
    end

    if output == "" then
        output = i
    end

    print(output)
end

As I understand it, Lua is a scripting language that has made its way into game development. I haven’t personally used it, but it looks fine. As a result, I’ll throw it down as “mid.” At the very least, it has to be more fun to use than C++.

CategoryScore
Fun5
Useful5
Nice5
Average5

[#19] Scheme

Note: the following program computes the reverse of a string, not FizzBuzz.

(define (reverse-string x)
  (list->string (reverse (string->list x))))

(display (reverse-string (list-ref (command-line) 1)))

Again, I don’t really know how Scheme is different from Lisp, but a cursory glance tells me that it’s a bit nicer to use. I’m noticing these arrow operators which are apparently the convention for writing conversion functions.

That said, it looks like Scheme has many of the same drawbacks as Lisp—namely the obsession with parentheses. However, given that I know languages like Scheme and Clojure are used in production code, I had to put them over Lisp.

CategoryScore
Fun6
Useful6
Nice4
Average5.3

[#18] MATLAB

function [] = fizzBuzz(x)

  % Loop from 1 to 100
  for i = 1:100
    fizzbuzz = '';
    
    % Check if i is divisible by 3
    if mod(i,3) == 0
      fizzbuzz = [fizzbuzz 'Fizz'];
    end
    
    % Check if i is divisible by 5
    if mod(i,5) == 0
      fizzbuzz = [fizzbuzz 'Buzz'];
    end
    
    % If fizzbuzz variable is empty,print i
    if isempty(fizzbuzz)
      disp(i)
    else
      % If fizzbuzz variable is not empty, print the variable
      disp(fizzbuzz)
    end
  end
end

You might be surprised to see MATLAB above .500 in this list. I know it’s one of those languages that is looked down upon by folks in the tech community.

That said, I think it has some really good utility in the STEM space. For example, I know a lot of folks use it for number crunching and simulation.

However, in my experience, it’s fairly unfun language to use. I could point to things like indexing from one (I should say hi to Lua while I’m at it), or the fact that the language is proprietary. I could also point to the weird cycle of clearing that you have to do to purge the namespace. As a result, I hesitate to give it much more attention than it deserves.

CategoryScore
Fun4
Useful9
Nice3
Average5.3

[#17] Racket

#lang racket
(for ([i (in-range 1 101)])
  (cond
    [(and
      (equal? 0 (modulo i 3))
      (equal? 0 (modulo i 5)))
     (printf "FizzBuzz\n")]
    [(equal? 0 (modulo i 3)) (printf "Fizz\n")]
    [(equal? 0 (modulo i 5)) (printf "Buzz\n")]
    [else (printf "~a\n" i)]))

Since we’re on a kick of functional programming languages, let’s talk about Racket. I’m not a functional language person, but I get the appeal. Given that we’ve already covered Lisp and Scheme, the question becomes: what makes Racket better?

As far as answers go, I don’t really have a good one. However, I do have a soft spot for Racket for a variety of reasons. First, I’m a big fan of its macro system which allows you to literally modify the syntax to your needs, and apparently there are a bunch of modules for that.

Likewise, when I was looking into Pyret (a language much higher on this list), it name dropped Racket as one of its contemporaries and influences.

Of course, Racket has all the same sort of syntax issues as Lisp and Scheme, so it’s hard to really say which on is best.

CategoryScore
Fun6
Useful6
Nice5
Average5.7

[#16] PHP

<?php

for ($i = 1; $i < 101; $i++)
{
  $output = "";

  if ($i % 3 == 0)
  {
    $output .= "Fizz";
  }

  if ($i % 5 == 0)
  {
    $output .= "Buzz";
  }

  if (!$output)
  {
    $output = $i;
  }

  echo $output . "\n";
}

One language that’s almost universally hated is PHP, yet it makes up the backend of a majority of the websites on the web. As a result, it’s really hard to ignore its influence.

That said, it’s quirky and messy, and I even recall that you’re able to mix strings with regular code. That seems like a recipe for disaster.

However, given its influence, it has a massive ecosystem that makes it a practical language for anyone looking to get into web development. And for me, web development is the only fun way to make GUIs.

CategoryScore
Fun4
Useful10
Nice3
Average5.7

[#15] JavaScript

function fizzbuzz(num){
    for(let i=1; i <= num; i++){
      if(i % 15 == 0){
        console.log("FizzBuzz");
      }
      else if(i % 5 == 0){
        console.log("Buzz");
      }
      else if(i % 3 == 0){
        console.log("Fizz");
      }
      else console.log(i);
   }
  }
  
fizzbuzz(100);

At this point, we start getting to the heavy hitters. I’m not saying JavaScript is fun to use by any stretch, but it’s incredibly useful. And like I’ve said, I enjoy a bit of web development myself.

That said, like C++, JavaScript is full of weird syntax that has compounded over many, many years. And it seems like every couple of months, I see someone advocated for a different way to use the language. That’s definitely a downside for me.

But, hey! I gave it a 6, so it must be decent.

CategoryScore
Fun5
Useful10
Nice3
Average6

[#14] Bash

#!/bin/bash

for i in {1..100}; do
    if (( $i % 15 == 0 )); then
        echo "FizzBuzz"
    elif (( $i % 5 == 0 )); then
        echo "Buzz"
    elif (( $i % 3 == 0 )); then
        echo "Fizz"
    else
        echo $i
    fi
done

Bash is one of those languages that is extremely useful but hard to get used to. Back when I used to toy around in Linux, I wrote many a bash script to solve little problems here and there.

Generally, I find the syntax unpleasing, but there are few languages with the amount of power that bash has. If you already know how to navigate the Linux command line, you have most of the tools needed for building up scripts. As a result, I put Bash in the top of this list.

CategoryScore
Fun5
Useful10
Nice5
Average6.7

[#13] TypeScript

let line: string;

for (let i = 0; i <= 100; i++) {
   if (i % 3 == 0 && i % 5 == 0) {
      line = "FizzBuzz";
   } else if (i % 3 == 0) {
      line = "Fizz";
   } else if (i % 5 == 0) {
      line = "Buzz";
   } else {
      line = String(i);
   }
   console.log(line);
}

I’m going to be honest. TypeScript is a language that I’ve never used. That said, if it’s even as remotely as useful as JavaScript, it has to be good.

In my experience, JavaScript is a bit clunky to use. Any language that reduces the complexity of JavaScript while also including a convenient syntax is going to be a win in my book. Hell, I know the selling point is types, but if Typescript is to JavaScript what Kotlin is to Java, then I’m sold.

CategoryScore
Fun5
Useful9
Nice6
Average6.7

[#12] Scala

object FizzBuzz {

  def main(args: Array[String]): Unit = {
    for (i <- 1.until(101)) {
      var output: String = ""
      if (i % 3 == 0) {
        output += "Fizz"
      }
      if (i % 5 == 0) {
        output += "Buzz"
      }
      if (output.isEmpty) {
        output += i
      }
      println(output)
    }
  }

}

To be quite honest, I’m not really sure how Scala made it this high in the list. I suppose using averages on a rating scale is going to benefit languages that aren’t quite good at one thing.

Regardless, I am somewhat familiar with Scala as a Java clone/impovement. I wrote about it awhile back when I was building out the Sample Programs repo, so I remember it being very Java-like.

Overall, though, I am somewhat glad to find it this high in the list—if for no other reason than to piss off this guy:

Scala Critic
CategoryScore
Fun6
Useful8
Nice6
Average6.7

[#11] Java

public class FizzBuzz {
  public static void main(String[] args) {
    for (int i = 1; i < 101; i++) {
      String output = "";
      if (i % 3 == 0) {
        output += "Fizz";
      }
      if (i % 5 == 0) {
        output += "Buzz";
      }
      if (output.isEmpty()) {
        output += i;
      }
      System.out.println(output);
    }
  }
}

Look, I don’t really like Java. It was my first programming language, and I’ve come to hate it the more I use it.

However, it’s fairly undeniable how important Java is as a programming language. I would put it up against languages like C and JavaScript in terms of ubiquity. As far as fun, it’s a mixed bag. I’ve done a lot of fun things with Java, but there are aspects of it that are a huge pain. For instance, it’s one of the most verbose languages in existence, and don’t even get me started on dependency management.

All that said, if I were to recommend a programming language to someone new in the field, I’d probably have Java somewhere near the top of that list. If you’re interested in learning it yourself, I have a fairly old tutorial series that I think could get you started.

CategoryScore
Fun5
Useful10
Nice5
Average6.7

[#10] Go

package main

import "fmt"

func main() {
    for i := 1; i <= 100; i++ {
        if i%15 == 0 {
            fmt.Println("FizzBuzz")
        } else if i%3 == 0 {
            fmt.Println("Fizz")
        } else if i%5 == 0 {
            fmt.Println("Buzz")
        } else {
            fmt.Println(i)
        }
    }
}

Go is one of those languages I hear about in like 2014 that I didn’t fully understand the hype around. Since then, I may have used the language only a handful of time, and it honestly looks like some mix of Pascal and C.

So, what is it doing this high on the list? Well, it’s C but better and not in the ways that C++ tried to be better. I mentioned already that C should probably be higher on this list, and the only reason I don’t feel so bad about where it’s at is because of languages like Go and, as you’ll see soon, Rust.

All that said, I’m not sure how useful Go is. I estimated an 8 because it was built at Google. Maybe folks out there are using it daily. I have no clue.

CategoryScore
Fun7
Useful8
Nice6
Average7

[#9] Ruby

def fizzbuzz(number)
    divisibleBy3 = (number % 3 == 0)
    divisibleBy5 = (number % 5 == 0)

    case
        when divisibleBy3 && divisibleBy5
            puts "FizzBuzz"
        when divisibleBy3
            puts "Fizz"
        when divisibleBy5
            puts "Buzz"
        else 
            puts number
    end
end

(1..100).each {|n| fizzbuzz n}

Okay, now we’re getting into the good languages. Up first, I wanted to talk about one of the cooler scripting languages out there, Ruby. Again, I haven’t really used Ruby, but I know it’s incredibly popular for web development.

Given how nice the syntax looks, I can’t help to fall for it. That said, the few times I actually tried using Ruby, I tripped over some of its quirkiness.

Overall, I think the utility of Ruby makes it a great choice, but I’m definitely into its vibe. It looks like a language that would be relatively painless to learn.

CategoryScore
Fun7
Useful9
Nice6
Average7.3

[#8] Rust

fn main() {
    for number in 1..101 {
        if number % 3 == 0 && number % 5 == 0 {
            println!("FizzBuzz");
        } else if number % 3 == 0 {
            println!("Fizz");
        } else if number % 5 == 0 {
            println!("Buzz");
        } else {
            println!("{}", number);
        }
    }
}

Rust is one of those languages that has exploded in popularity recently. My understanding is that it’s supposed to replace C/C++. I have no clue if it’s doing that, but I literally only hear good things from folks.

I will say there are some weird syntax things that sort of bothered me when I looked into the language. In general, metaprogramming is a weird feature, and it seems to be a native feature of Rust (I realize I mentioned this as a strength of Racket. I never claimed this was a serious post). Just look at that `println` macro above.

That said, if Rust really is this hyper performant and easy-to-use language, I’m sold.

CategoryScore
Fun7
Useful9
Nice6
Average7.3

[#7] Swift

func fizzBuzz(start: Int = 1, end: Int = 100) -> Void {
    let range = start...end
    
    for number in range {
        guard number % 5 == 0 || number % 3 == 0 else {
            print(number)
            continue
        }
        
        var fizzAndOrBuzz = ""
        
        if number % 3 == 0 {
            fizzAndOrBuzz = "Fizz"
        }
        
        if number % 5 == 0 {
            fizzAndOrBuzz += "Buzz"
        }
        
        print(fizzAndOrBuzz)
    }
}

fizzBuzz();

Okay, hear me out. I’m not an Apple person. While I have an iPhone, I’ve never owned an OS X device. As a result, I haven’t personally done any Swift development.

However, in 2018, I was poking around the language and sort of fell in love with it. The idea of having guard clauses built in as syntax elements is awesome. Also, I love any language that actively tries to avoid the concept of null, so building in Optional types with associated operators are awesome features.

Given that Swift is more or less restricted to the Apple ecosystem, it’s not exactly the most useful language, but it sure beats the hell out of Objective-C.

CategoryScore
Fun8
Useful7
Nice9
Average8

[#6] Pyret

Note: the following program was borrowed from the Pyret docsOpens in a new tab. and is not FizzBuzz.

fun sum(l):
  cases (List) l:
    | empty => 0
    | link(first, rest) => first + sum(rest)
  end
where:
  sum([list: ]) is 0
  sum([list: 1, 2, 3]) is 6
end

Okay, Pyret is one of those programming languages you’ve probably never heard of, and unlike most of the languages on this list, it’s FUN score is inverted. See, as far as I know, Pyret isn’t all that useful—at least not in production environments. However, what it lacks in utility, it makes up for with some truly nice syntax.

I first learned about Pyret when I was writing an article about programming language features. Pyret stuck out to me because it had inline testing (see the `where` clause above). Basically, this means you can write a function and test it natively. No need to bust out a testing framework.

Now, I suppose inline testing isn’t super practical for real world development. That said, I quite like it as an educational language. If I were to ever teach my own programming course, I might use Pyret—though, I’m aware students don’t really like learning tools that aren’t practical.

Regardless, I hope one day Pyret gets enough backing that it becomes a production tool. To me, it’s just too nice to pass up.

CategoryScore
Fun10
Useful5
Nice9
Average8

[#5] Haskell

Note: the single quotes below should be backticks.

module Main where

fizzbuzz :: Int -> String
fizzbuzz x
    | x 'mod' 15 == 0 = "FizzBuzz"
    | x 'mod' 3  == 0 = "Fizz"
    | x 'mod' 5  == 0 = "Buzz"
    | otherwise       = show x

main = mapM (putStrLn . fizzbuzz) [1..100]

At long last, we finally get to the holy grail of functional programming languages. As someone who has dabbled in Lisp, Scheme, Racket, and Elixir, Haskell seems like the only functional programming language with a nice syntax.

Now to be honest, I haven’t used Haskell myself, but I find the language to be really pretty. Outside of that, the syntax makes a lot of sense to me—even as someone who spends most of their time in imperative languages.

CategoryScore
Fun9
Useful7
Nice8
Average8

[#4] Julia

for i = 1:100
    str = i % 3 == 0 ? "Fizz" : ""
    str *= i % 5 == 0 ? "Buzz" : ""
    if isempty(str)
        str = i
    end
    println(str)
end

Ah, Julia is yet another one of those languages that has a fairly niche utility. That said, in its limited use, it does a lot of things well—namely data analysis.

To me, Julia is a lot like Python with some of the drawbacks of languages like R or Perl. Again, I really don’t care for languages that make a lot of use of operators (like what the hell is this `⊻`), but I suppose it makes sense for a language appealing to math folks.

Overall, Julia is one of those languages that, if I had the time, I’d start learning tomorrow. For now, I’ll keep using Python for all my data analysis.

CategoryScore
Fun8
Useful8
Nice9
Average8.3

[#3] Kotlin

fun main(args: Array<String>){
    for (i in 1..100){
        when {
            (i % 3 == 0 && i % 5 == 0) -> println("FizzBuzz")
            i % 3 == 0 -> println("Fizz")
            i % 5 == 0 -> println("Buzz")
            else -> println("$i")
        }
    }
}

Probably one of the more surprising rankings in this list is Kotlin. However, if you’ve ever used Java, then Kotlin feels like transitioning from a rusted up bicycle to a luxury car. Both are going to get you to where you’re going, but one is going to be significantly more enjoyable.

Personally, I don’t use Kotlin, but I tried using to make a mobile app for my wife. In my short time toying with the language, I found that it was similar to Java but with many of the annoying aspects of the Java removed. For instance, variable declarations are not nearly as verbose.

In short, it seems like whoever wrote Kotlin designed it specific to flip the bird at Java.

CategoryScore
Fun9
Useful7
Nice9
Average8.3

[#2] C#

namespace FizzBuzz
{
    public class Program
    {
        public static string FizzBuzz(int number)
        {
            string temp = "";
            if (number % 3 == 0)
            {
                temp += "Fizz";
            }
            if (number % 5 == 0)
            {
                temp += "Buzz";
            }
            if (string.IsNullOrEmpty(temp))
            {
                temp += number;
            }
            return temp;
        }

        private static void Main(string[] args)
        {
            for (int i = 1; i <= 100; i++)
            {
                string line = FizzBuzz(i);
                System.Console.WriteLine(line);
            }
        }
    }
}

I’m going to sound a bit repetitive here, but C# is essentially Java++ (just not in all the bad ways that C++ was to C). Frankly, the only reason C# makes it ahead of Kotlin is utility. As far as I know, Kotlin is primarily a mobile app development language, whereas C# has a bit more reach (e.g., game development).

I first picked up C# when I was writing code for Unity. At the time, I thought it was basically a Java clone, but quickly I noticed there were tons of features to make my life easier. It’s likely that Kotlin does this even better, but C# is just too ubiquitous at the moment.

Regardless, I would take either of them over Java every day of the week.

CategoryScore
Fun8
Useful9
Nice9
Average8.7

[#1] Python

for n in range(1, 101):
    if n % 3 == 0:
        print("FizzBuzz" if n % 5 == 0 else "Fizz")
        continue
    print("Buzz" if n % 5 == 0 else n)

You might have noticed that periodically throughout this list there would be a sizable jump in scores between items. For instance, there is a 1.3 point jump between C# and Python. The reason for this is pretty obvious: Python has no competition.

For the doubters, let me put it this way. I’ve been using Java for a significantly longer time than I’ve been using Python, yet when I have an idea, I can prototype in a quarter of the time it would take me to do it in Java. So, we’re not even talking about an issue of skill difference. Python is just built differently.

All jokes aside, I really stand by Python as one of my favorite tools to use by a mile. This year will be my tenth your of developing software, and I’m very fortunate to have stumbled upon Python so quickly.

CategoryScore
Fun10
Useful10
Nice10
Average10

What’s Your List?

With my meme of a list out of the way, let me ask: what would yours look like? Be aware that if you’re older than me, you have to come up with even more obscure languages.

In the meantime, I might as well share some resources to get you learning Python. After all, it’s the one true language:

Also, special shout out to Brently, my latest Patreon subscriber! Hope you have a good one. And to everyone else, thanks for stopping by!

Happy Birthday to Me (8 Articles)—Series Navigation
wp-content/uploads/2021/02/noun_Ballon_1554163-e1613695765109.png

Every year I like to write a list post to celebrate my birthday. I’ve been doing this since my 23rd birthday in 2017, and I plan to keep that trend indefinitely. Of course, I’ll need to come up with cool ideas every year, so don’t hesitate to share some of your own.

Jeremy Grifski

Jeremy grew up in a small town where he enjoyed playing soccer and video games, practicing taekwondo, and trading Pokémon cards. Once out of the nest, he pursued a Bachelors in Computer Engineering with a minor in Game Design. After college, he spent about two years writing software for a major engineering company. Then, he earned a master's in Computer Science and Engineering. Today, he pursues a PhD in Engineering Education in order to ultimately land a teaching gig. In his spare time, Jeremy enjoys spending time with his wife, playing Overwatch and Phantasy Star Online 2, practicing trombone, watching Penguins hockey, and traveling the world.

Recent Posts