uku.dev

Advent of Languages: Introduction

02 December, 2019

1 minute read

Every December for 5 years running, software engineers gather amidst wintery snacks and weather to a calm place on the internet to take part in The Advent of Code. It’s 25 days of software challenges, starting easy and getting progressively harder. I’ve always loved the idea, but life has gotten in the way. This year is different. Armed with plenty of unused vacation days and no family to be responsible for, I’ve come up with a challenge for myself:

I’ll solve every day’s puzzle in a different programming language. I call it, creatively, the Advent of Languages. Along with every challenge, I’ll write a short post about the language of the day and how I solved (or god forbid, failed to solve) the puzzle.

Why do this, might you ask?

In the eternal words of George Mallory: Because it’s there.

Also because I loved learning lots of random languages as a hobby when younger, and I miss it. Much like Christmas movies, winter makes me harken back to a simpler time.

The Languages

Doing 25 challenges means we have to use 25 languages. However, I don’t want to cop out and run many flavors of languages that I’m very comfortable in, as we’re in it to play around with stuff we might not play around with otherwise. This means I’ll only do one flavor of JavaScript, only Kotlin and not Java, Ansi C and not C++, etc. This is a set of languages we could choose, in no particular order:

  • x86 assembly
  • Ansi C
  • A flavor of JavaScript (maybe CoffeeScript to be retro?)
  • COBOL
  • Scheme
  • Elixir
  • Erlang
  • Rust
  • Go
  • Ruby
  • Python
  • Crystal
  • Haxe
  • SQL
  • Prolog
  • Haskell
  • Elm
  • OCaml (reason flavor)
  • Kotlin
  • PHP
  • Bash
  • Brainfuck
  • Swift
  • Objective-C
  • Smalltalk

In case I get stuck or for other random reasons, we could switch out for some of these:

  • Vim script
  • Scratch
  • Fortran
  • Pascal
  • Wren
  • Ada

I will try to start with the languages I find more intimidating, like assembly, as the challenges will get tougher later.

The Practical

I cobbled together this blog based on the excellent Gatsby to document every language and challenge. There will be days where I skip challenges, only to later come back and do multiple in a day, as life still needs attending to. I’m keeping this blog as more of a public motivator to finish this challenge I’ve set. I’ll come back and fix up the blog itself when I have time. I’m already multiple days late to get started, after all.

The code for the challenges is on github.