For January, there’s no official theme, but we’re suggesting you do one of two things:
Push yourself on your day-to-day language. There are likely loads of Exercism exercises that can be solved in lots of ways and allow you to explore different ideas in your day-to-day language. Bob and Food Chain are two such great exercises.
Choose a language you’ve always wanted to learn. Is there something you’ve always meant to try out but never got round to? Elixir, Go, Rust or Lisp maybe. Then give one of those a go in January.
If neither of those feel applicable, and you want a suggestion, then maybe start with Elixir or Go, which many devs have never tried but are great Exercism tracks
Whatever you do, have fun! Let me know what you’ve chosen in the thread below!
I’ve decided to start with Haskell. The immediate inspiration came from a discussion today about monads, which got me reading the tutorial mentioned in this comment on our monads thread. It’s a really great article because it avoids both unnecessary theory and silly metaphors like burritos. And it also kind of convinced me that they are really best understood within the framework of Haskell, where they truly live.
This is my current list along with a brief justification for each language. TBH I’m not learning languages for fun. It is fun (thanks to this community!) but the biggest lesson I’ve learned so far is that no software is created in a vacuum. We live in a world that runs on code, and being a programmer means being situated within a rich ecosystem that is inextricably linked to the unified community of programmers. I find that as I progress and start to want to make more interesting things, it becomes increasingly necessary to understand code that already exists, whether I’m trying to integrate a cool library into an app, or “liberate it” by porting it to something else (i.e. Clojure). So for me, the question is not “what is cool”, but “what is essential”? (Rust being the one exception, which I’m only interested in because so many of my friends use it!)
Clojure - my main language already so kind of a given
Typescript - used increasingly in web libraries I need to use/understand
Prologue - I’m very curious about logic programming, and it is the inspiration for Datalog, the query language that powers many important modern graph databases like Datomic
Rust - The stereotypical language of the trans community
MIPS Assembly - gotta know some assembly, but x86 is way too complicated
Elixir - I’m a fan of functional languages on the front end, if I didn’t use Clojurescript already this would likely be my next choice
C - mostly to understand classic algorithms in books and papers
Tcl - it’s fun to say “tickle”. It’s also the basis of Tk, the classic cross-platform graphics toolkit which I wouldn’t mind actually using. I made a proof of concept for creating GUIs in babashka via Tcl/Tk, and it would be quite useful to develop further
Haskell - the gold standard in functional programming
PL/SQL - it’s wild that Postgres has a whole programming language, and SQL is essential
Sounds like a nice challenge, my first draft of the list of languages to pick (all languages are rather new to me):
Julia - As I wanna learn more about ML
Kotlin - Something mainstream, but avoiding Java
Pharo/Smalltalk - I wanna see why people rave of it’s IDE/tooling
Lua - Different/new paradigm (prototypes) and it’s going to be default for Neovim
Unison - Some new functional, Idris isn’t an option and I feel I’m past the newbie regarding Haskell
Assembly - Just to get a deeper understanding of computers/compilers
Racket - Can’t not have a LISP, I’ve already learned some Clojure. Racket sounds interesting as folks use it write other languages/DSLs
Raku - Perl5 was one of my first languages, curious what the “next” version has become
Prolog - New paradigm, wish Datalog was also an option
F# - Handy if I ever need to do something .NET related
Cobol - Just something completely different
?
I was hoping to add Zig / Gleam / Pony to that list, but their track is not an option atm, so I’m thinking of getting better at Rust, unless someone has a good suggestion?
Crystal is a very cool language to know if you have experience in Ruby.
It is static compared to ruby which is dynamic, it has a similar concurrency model as go and the language is very fast compared to ruby.
All this and meanwhile it keeps large parts of rubys simple syntax.
This January I’m going to try to (finally) learn Haskell.
Its syntax is very similar to Unison (presently what I work in), but somehow I’ve gotten by in my experience with functional programming thus far with just Scala and Unison. This effort is timely because the Unison tooling is actually written in Haskell and I should probably be better at supplementing the team’s feature work.
I’m also really excited to explore the Ballerina track because I’m interested in the concurrency model.
For 10-12 you could add something different to tickle your brain?
Since you already have Java & Kotlin on that list, perhaps add a functional language that also runs on the JVM, Clojure or Scala?
Once the latest PR gets merged, I think we’re ready to launch the “8th” track. 8th is a cross-platform FORTH dialect. It will tickle your brain (thanks @Tuxified). Whether that ends up being a pleasant sensation remains to be discovered.
I have been thinking about Rust for some time, and good recommendations from a colleague. So Rust it is.
I started on Exercism a couple of years ago to learn Go in a more fun way and it was fun and now I’m back!
I started with Bash three days ago and 5 exercises are pretty fast to accomplish. So now I think of speedrunning it. Or add other restrictions? Only take languages that have a syllabus, so that I can “finish the tree”?