Note: This is fairly rough right now. I may come back and revise it in the future.
This will not be an introduction to Elm. If you do not know what Elm is, have a look at the wikipedia article about Elm and the Elm website.
Prior to learning Elm, I did not know anything about functional programming aside from
map and some vague understand of
reduce. Of course, functional programming is a lot
more than just
reduce. Elm is also more than just another functional
programming language. The goal of Elm, from what I understand, is to provide a robust
platform for writing robust web application in the face of churn and chaos in the rest of
programming for developers of all skill levels.
As a platform for web development, it exhibits many great qualities. Having worked on various small projects in Elm, I was able get something on screen quickly and easily. The compiler is also quite the experience. It’s not like any compiler I’ve used since – I know rust, for example, has a pretty cool and helpful compiler, but I haven’t begun that journey of learning yet but I do look forward to diving in soon.
Even after doing some extensive TypeScript development, it’s not quite the same experience. When configuring TypeScript, I opted to enabled the strongest typing options possible and utilize the type system as much as possible. It’s was a decision heavily influenced by my Elm development experience. The compiler did obviously help countless times by catching common type level issues and enable myself and other developers to easily refactor code, add new code and remove code with a lot more confidence.
I founded a lot of value from learning Elm and developing some small projects in it. It’s a different experience. It’s not always going to be the right tool for every job. It’s important to be able to choose the right tool. Learning Elm required some amount of dedication. There are no familiar classes and you’re in a whole new paradigm. But the dedication is worth it because you’re be exposed to a new way to think about problems. You’re see that it’s possible to take a set of functions that to do something and compose them in many different ways. I really find my self wishing there was a builtin pipe operator in more languages. You will also have a greater appreciation for types and will miss some of the first class type features Elm provides. Pattern matching is also another thing I wish I could do in other languages.
But moving away from just the syntax, Elm’s approach to architecting application has been very influential. By making use of types, you gain the ability to reason about application state, design functionality without breaking other things and know when (and how) to fix other things when you do break something during a refactor or feature addition (or deletion).