Which language should you choose for January in #12in23?

For all the months from February onwards we’ll be having a specific theme (you can suggest themes you’d like in What monthly themes should we choose for #12in23?).

For January, there’s no official theme, but we’re suggesting you do one of two things:

  1. 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.
  2. 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 :slight_smile:

Whatever you do, have fun! Let me know what you’ve chosen in the thread below!


I’ve found 5 exercises that I hadn’t completed in Python. I’m 1/12 done now ;)


Alright then, here are five newly completed Haskell exercises:

where clauses (and let expressions) are really nice. When writing in other languages I very regularly miss them.

1 Like

I just started Go. Im really liking it so far.

1 Like

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!)

  1. Clojure - my main language already so kind of a given
  2. Typescript - used increasingly in web libraries I need to use/understand
  3. 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
  4. Rust - The stereotypical language of the trans community
  5. Bash - everyone needs to know it
  6. Python - necessary to understand deep learning libraries and mathematical things. Example: This 150 line Autograd engine/neural net library
  7. MIPS Assembly - gotta know some assembly, but x86 is way too complicated
  8. 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
  9. C - mostly to understand classic algorithms in books and papers
  10. 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
  11. Haskell - the gold standard in functional programming
  12. 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):

  1. Julia - As I wanna learn more about ML
  2. Kotlin - Something mainstream, but avoiding Java
  3. Pharo/Smalltalk - I wanna see why people rave of it’s IDE/tooling
  4. Lua - Different/new paradigm (prototypes) and it’s going to be default for Neovim
  5. Unison - Some new functional, Idris isn’t an option and I feel I’m past the newbie regarding Haskell
  6. Assembly - Just to get a deeper understanding of computers/compilers
  7. Racket - Can’t not have a LISP, I’ve already learned some Clojure. Racket sounds interesting as folks use it write other languages/DSLs
  8. Raku - Perl5 was one of my first languages, curious what the “next” version has become
  9. Prolog - New paradigm, wish Datalog was also an option
  10. F# - Handy if I ever need to do something .NET related
  11. Cobol - Just something completely different
  12. ?

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?


Not that I am biased or so but… (I am biased)

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.

1 Like

Did Go first. Really nice language.

1 Like

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.


I was going to list a dozen languages to learn, but then I realized, oh wait, I’ve already done that. :grin:

This worked out pretty well timing-wise since I was making plans to do a self-guided #30daysofcode for Clojure using some exercises here.

Sounds like a fun challenge. My rough list is something along the lines of:

  1. Python - currently working on this and planning to interview with it soon
  2. TypeScript - useful for jobs I’m in the market for
  3. SQL - I know the bare basics but would love to become proficient
  4. Java - refreshing what I used in school
  5. Kotlin - a variety of the above flavor
  6. Bash - useful gap in my knowledge
  7. C++ - for the fun of it and to better understand some of my favorite projects
  8. Cobol - DB2 is still alive and well
  9. Rust - I’m told the cool kids like it
    10-12. ???

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.

1 Like

Sounds like a great idea. Thank you for the suggestion!

Python, JS, Go, Rust and C# are leading the way so far for January… https://twitter.com/exercism_io/status/1611813018450464771

1 Like

«as we’d expect» because these five languages have been the most popular for the last few months, or for some other reason?

Do you see any hint of a #12in23 influence on language choice?

1 Like

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!


Welcome 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”?