As a software engineer and as a business-oriented person I always try to be pragmatic. That’s why I think both Ruby and Rails are still, in 2017, a great choice to start a new project. In the end, the choice of the technology doesn’t matter (unless you’re in a special kind of niche) — it’s all about delivering and creating a business value.
It doesn’t stop me, though, from experimenting with other technologies, looking for the next big thing, or just for the new concepts to bring to my daily Ruby toolbox. I’ve played with the number of programming languages: Ada, Clojure, Scala, Go, Elixir, and Rust, to name a few. Thanks to this I was able to compile the list of features that impressed me the most, not to mention my programming techniques have improved dramatically.
The programming language I want but doesn’t exist yet would be statically-typed. Ada, Scala, and Rust showed me all the advantages of programming with types. To simplify, these annotations are invaluable when designing interfaces and even deriving implementation from the type signatures! Also, I must stress I don’t think types are a replacement for tests.
One of the pain points I had with Scala was the myriad of options to model one thing. That’s where Go shines: maybe it sometimes feel too simple but forces the developer to express the code in one way. In my opinion that’s a great advantage when working in teams on bigger projects.
Another thing I disliked when programming in Scala was abuse of syntax shortcuts and cryptic operators. More verbose and readable language like Ada spoke to me more.
Clojure showed me how important and useful immutability is. It greatly affected my style of designing data structures and manipulations around them.
I don’t believe in the orthodox approach to functional programming (I’m looking at you, Haskell). At the same time, most of us will agree there is no coming back when you try pattern matching and higher-order functions. This will and should leave a trace about how you structure your object-oriented code and mix it with these functional concepts.
REPL has always been the one of the most significant parts of my daily workflow. I can’t imagine writing code without the experiment phase first or the debugging session in the console later on. It’s a shame one of my newest toys, Rust, doesn’t support it (yet).
This brings me to the question: what’s the language I should name as the most wanted by me. After giving it some thought I would pick… Rust. More pragmatic than Ada, more strict than Clojure, a better Scala (?), a smarter Go, and just a statically-typed Elixir, high-level enough to meet my general-purpose programming needs.
Disclaimer: I believe all the languages mentioned here are great. The purpose of this post is just to mention things I would like to see in my perfect language.
Note: There is a part two of this post available here!