Let me start off by giving a little background on myself just to set the context a bit …
I’ve been doing software development for almost 15+ years professionally. And probably 10+ years before that. A long time. I love building software and and learning languages. I’ve worked on applications ranging from “Enterprise” to “Startup.” And almost every application I’ve encountered is architected incredibly different (especially modern day “serverless” or “microservice” based patterns).
I come from a C# world. C# is a strongly typed language and I’ve used it for a long long time. I picked up Ruby as my first dynamic language and fell in love with it instantly. Obviously the two languages are incredibly different and the beauty of the Ruby language and the speed at which you can develop was an amazing change coming from the verbose world of C# (at the time it was like C# 3.0).
Eventually I found Node and Javascript and build some front-end and back-end tools using those as well. I’ve built many things using express, koa, react, vue, etc. I’ve leveraged Typescript and the benefits of the type system on top of Javascript. And I’ve explored Go as well.
I also discovered Erlang and Elixir along the way although I’ve never used them in a “professional” setting. Mostly just for personal projects. I love the benefits of functional programming. The Beam/OTP are absolutely amazing. And I think Phoenix and Ecto and some of the core utilities in the Elixir community are absolutely phenomenal. I absolutely love my personal projects that I’ve built with Elixir.
At this point, it feels like I’m humble bragging a bit and I don’t mean to come across like that. So let me move on to the point. I know this is highly subjective, but here we go …
Of all the languages and frameworks that I’ve seen and used … C# and Typescript (strongly-typed compiled languages) tend to provide the best long-term benefits of applications that I’ve developed. Especially applications that span 2+ years. Or personal projects that you start but then have to come back to months later and pick up again. Having a compiler and a type system just helps me forget about things for a while and then come back to quickly discover what it was I was doing.
The C# compiler and developer tools (Visual Studio, Rider, Resharper) have really spoiled me as a developer. The ability to refactor and debug code, in my personal opinion, is just unmatched by almost any ecosystem I’ve seen.
I have seen medium-to-large Ruby applications turn into monsters that are difficult to understand and it just feels like whack-a-mole when you try to change things in a production environment. I know the “fix” to this is to just “add massive amounts of tests.” And perhaps that is the answer? But in reality I’ve never experienced a well architected, well maintained, easily refactor-able application with dynamic-based languages (Ruby, Python, Javascript). The compiler just seems to provide you a safety net that is extremely beneficial (in my experience).
And since I haven’t seen an Elixir application in a professional setting. I’m curious if others could provide me any insight into their experience with maintaining a medium-to-large sized application in Elixir over the period of 1+ years of development.
Taking into account things like refactoring, debugging, tools, etc. If you could provide any insight on how not having a compiler or type system as a safety net has been in your real world experience. Or any other things that you have found beneficial about the medium-to-long-term maintenance of applications that you have built with Elixir.
Thank you so much in advance for any insight or thoughts that you can provide.