I participated in the Exercism challenge of 48 challenges in 2024. The challenges/exercises came weekly and with 52 weeks in a year and even with a few weeks skipped I was kept pretty busy.
I did not reach the goal of finalizing all 48
, but I did do about 66
and some in 14
different languages.
- leap: 10 - calculating leap years
- reverse string: 7 - reversing strings
- rain drops: 4 - basic flow control
- roman numerals: 3 - converting numbers to roman numerals
- protein translation: 4 - translating RNA to proteins
- list ops: 0 - list operations
- acronym: 2 - string manipulation
- circular buffer: 0 - circular buffer
- parallel letter frequency: 0 - parallel letter frequency
- allergies: 2 - bit manipulation
- sieve: 1 - prime numbers
- luhn: 2 - checksums
- scrabble score: 1 - scoring words
- difference of squares: 1 - basic math
- pangram: 1 - string manipulation
- all your base: 1 - basic math
- zebra puzzle: 0 - constraint-satisfaction problem
- mine sweeper: 0 - data structures
- d&d character: 1 - random numbers and data structures
- pig latin: 1 - string manipulation
- space age: 4 - basic math
- yacht: 0 - basic math
- matching brackets: 1 - string parsing
- rna transcription: 0 - string manipulation
- binary search: 1 - searching algorithms
- spiral matrix: 0 - algorithms
- secret handshake: 1 - bit manipulation
- anagram: 2 - string manipulation
- kinder garten garden: 1 - data structures
- robot simulator: 1 - data structures
- knapsack: 0 - math and data structures
- meetup: 1 - date manipulation
- pascal's triangle: 0 - basic math
- hamming: 1 - string manipulation
- rotational cipher: 1 - string manipulation
- phone number: 1 - string parsing
- isogram: 1 - string manipulation
- bob: 1 - string manipulation
- two bucket: 0 - algorithms
- grade school: 1 - data structures
- bank account: 0 - data structures
- food chain: 1 - data structures
- eliud's eggs: 0 - bit manipulation
- collatz conjecture: 1 - basic math
- run-length encoding: 1 - string manipulation
- armstrong numbers: 2 - basic math
- diamond: 1 - string manipulation
- largest series product: 1 - string manipulation and basic math
Through the any challenges I touched the following languages ordered alphabetically:
- C
- Clojure
- Common-Lisp
- C++
- Elixir
- Go (my primary learning path)
- Javascript (my secondary learning path)
- jq (part of my toolbox on a basic level though)
- Mips
- Nim
- Perl 5 (my primary language and part of my boring stack)
- Python
- Ruby
- Typescript
In the beginning I did one challenge and covered several languages. Later as time went by I stuck to one language and did several solutions and as the deadline approached I did the problems in the language I was most familiar with (Perl) and then revisited the challenges in familiar languages working my way out to more and more unfamiliar languages.
Every time I started a new challenge I disabled Copilot VSCode, because I found out it was very knowledgeable on these problems. I had to do this manually, but after the challenge ended and I was doing some Exercises I found out that I could disable Copilot by setting up the Workspace like so (I just copied in the file when I can pulled the exercise from Exercism).
File: .vscode/settings.json
{
"github.copilot.enable": {
"*": false
}
}
Overall it was awesome and very educational to solve problems and familiarize myself with some very unfamiliar languages and every time I touched a new language I also had to set up the tooling and do a "Hello World" exercise. Often I got stock, even with easy exercises and it was most frustrating. I often had to sleep on problems, syntax, used method or approach - alternatives to sleeing was going for run or hike all very familiar methods of stepping away from a problem and then returning to it. Other days I would solve 3 exercises in a row.
I learned a lot about thinking about problems and generalizing my approach - not that is not something I do not do everyday, but practicing it on very isolated problems without:
- Company specific constraints or politics
- Deadlines
- Legacy code
- Disturbances
Made the problem solving very focused and I could really concentrate on the problem at hand.
I also learned a lot about the problems themselves as I started to see patterns in the problems and the solutions and many of the problems were very similar, but with a twist. An example when you are working with ciphers, many of them follow specific patterns, as do many string oriented problems. Often you can develop a method, which is generally useful. Often when you work on a programming task as part of a larger problem, area you are solving it and moving on to another part in your application, which is somewhat different. For many of the cipher or string related problems, I would do parsing, tokenizing and then the special part by shuffling the tokens to solve the problem ad hand, it has also lead me to go back to improving a few of my solutions as I learned better approaches.
I am always recommending Exercism, whether you just want to practice your programming with some funny exercises or your want to learn a new language it is a very good platform.
Even though the challenge has completed, I am still doing exercises and hopefully I will be able to complete some of the tracks at some point.
The problem solving part has really influenced my work and if I get around to it I might see of I can come up with some exercises, which have challenged me at work, which can be isolated to small contained problems, perhaps well suited for Exercism exercises or in my case for easier modelling and understanding.
If I get the time I would very much like to share my notes on adopting the various languages and perhaps even my solutions to some of the exercises. I have some reservations to doing the latter, since it does spoil the fun of solving the exercises for you. I have made some basic tooling which could be of interest/inspiration to you if you are in on Exercism.
Top comments (0)