There are a ton of programming languages. Each language then holds a specific set of values that lend itself to solving certain problems. Too much time is spent arguing over which language is best and for what reason instead of looking at which languages match can help you solve a problem or match your values.
This last point is why I have spent a lot time exploring new languages.
Early in my career my manager had told me to focus on a depth and breadth strategy for developing in my career; go deep on one technology but explore others to see what is out there. And so I set off to become a better Java developer while still exploring languages and technologies that I came across. Soon I learned about containers, learned how they worked, how they were made and what languages worked best to create lightweight containers. This is where I started developing in Go. Over time I grew to love developing in Go and moved on from Java.
Yet it didn’t really strike me until recently that too often we need to learn languages to explore different technologies. If someone had an interest in machine learning they should learn Python. They could struggle in other languages to use the technology but all too often it is a waste because a certain ecosystem will be built up around that technology in a specific language. But this extends beyond technologies like containers and ML. Other times it can be learning a new paradigm like functional programming, systems programming, or even a LISP. So often I find myself keeping a list of languages to learn in order to understand these paradigms and technologies.
In practice I follow a pretty regimented way to learning a language. First I read… a lot. Blogs, articles, books, papers, whatever I can get my hands on. This gives me the background and theory behind the language, most of its use cases and best practices. At this same time I will watch talks to help me get the same information. Once I feel confident I have my own version of the “Real World” application to help me learn how to build a quick API or front end. This Beer APIs project gives me a pattern to follow but in a different domain to help me solve my own problem rather than following a step by step guide from someone else. This often brings me to searching various examples and trying different things to get a good sense how it feels to develop in the language. From there I will build something on my own to suit my own needs.
I still focus on growing my Go skills which is the language I am most comfortable in at the moment. It is the language I use to get things done. Yet it does not solve all of my needs. In an interviews with Zach Tellman and David Heinemeier Hansson they both mention this notion of finding a language that works in the same way that their brains work. This idea of an ergonomic language that feels comfortable to use without a desire to find anything else has really spoken to me. Go may be that language but I want to see what other languages I can find. Following my projects and posts may give an indication of where I am currently exploring but who knows. Currently I’m experimenting with Rust, Elm and revisiting Elixir but in the future am looking at Ocaml and Haskell. I am not sure where this will all end up but this is the reason I am in this industry. So many problems with so many solutions and so much to learn.