Working
From 2018 until 2022 I used Elixir “occasionally”. I’ve been using it everyday now in my daily professional practice in at least three different customer projects from the end of 2024 onwards.
The functional mindset doesn’t come easy to me and neither is it something that comes naturally. I came to software engineering through design. I didn’t start off with knowledge of compilers or a foundation in computer science. I studied multimedia design (graduated in 2005). My first principals were usability heuristics, user experience and aesthetic “oooo”. When I made something, “working” was good enough for me. At least initially. It wasn’t until I came across Django in 2006 that “tests pass” replaced “working” as my defacto standard. Django made it very easy to author pseudo-integration tests using the http client, unit testing was very easy and the two worked together very well. Also it was “a enter stage left TDD” period in time.
At some point in 2013 when I was the lead engineer in a small team of three at SoPost I began to learn the hard lesson of scalability. Working was a minimum measure of competence. Tests passing just mean the work could go out into production. Having tens of thousands of people descend on an application teaches you many things. Lot’s of ops things, lots of architectural things but most importantly, lots of application based performance things.
By 2018 I’d learned a tonne. Whilst the lessons happened quickly, the learning was slow. It took a period of time that rounds up to plurals of decade.
Exercism
I joined Exercism in 2018 but I never engaged. It wasn’t until 2026 when I applied for a Lead Engineer position that I came back to it. The company in question (Remote) had Exercism on their publicly available handbook and I thought a good signal would be to complete one aspect from each of the nodes in the Elixir track. Since then I’ve committed to completing the entire track. I didn’t get the gig as I failed the technical stage. I should have used AI, but I didn’t. Lesson learned.
Now you might argue that in todays world where AI is so prevalent, Exercisms flavour of lessons are pointless. I think there’s some truth to that if you view the lessons as a means to an end. But if you treat them as exercises in understanding situational contexts and sandboxes to practice idiomatic approach they become very useful. Here’s an example called Allergies (and my solution). As a standalone exercise it was about powers of two and not very useful. But it connected a dot for me. The same technique can be used (and is used in unix/linux file permissions) for permission and access control and in a very compact way.
It’d also be a great means of designing in permissions in an application. In the integer 1,048,576 you could hold up to twenty different permissions. Obviously, whilst that is clever in an web environment it is pointless, but in small environments where every byte matters, it’s a winning pattern.
What I’m learning now
Every day I do two things before I start work. The first thing is an exercise from Exercism on the Elixir track. Some days I don’t finish it. That’s fine. Most days I do. The other task is touch typing, but that’s a conversation for another day. Reprogramming 26 years of hunt and peck is hard, and mildly physically painful.
The main takeaways for me in this process are that learning can be slow. It can (and probably should?) span decades. Slow learning doesn’t make you instantly more knowledgable (the neural pathways need to be developed for that) but it does let you become more relaxed about that process.
It isn’t urgent. It’s deliberate and it sets the scene for a far healthier approach to learning.