I use JavaScript and python regularly and I am willing to learn a new language that will increase my programming capabilities. What are some good suggestions and why?
Haskell because of the type system. It's very satisfying to start a change in one location and have the compiler automatically tell you all the other places you need to modify across the whole project to finish the change and practically guarantee that it runs correctly. It's also great to not have to rely on human documentation to learn how to use a library. Looking at the type signatures is enough to learn how to use most of them. The type system also alleviates the need to write many tests.<p>It's also efficient in that it runs very, very fast thanks to being compiled. The size of the compiled executables can be very small too, when you chose to use dynamic linking of the libraries. Choosing static linking comes with the advantage of not having to worry about installing library dependencies (beyond libc) where-ever you chose to run the resulting executables.
Lua. Its main selling points are that it's small, simple to embed and easy to learn. You also won't find many interpreted languages that can even come close to match its speed.<p>Also multiple returns. I find it hard to believe that nobody else thought of that, but it's just not something any other language has.
As a skills exercise, I'd recommend pure-functional programming with immutable data structures (clojure, elixir, etc). Getting to a point where you "own" recursion and non-mutation will pay dividends in any language.
Python is easily the most efficient at getting things done at our shop. Not sure it’s the smartest, but we care a lot less about that.<p>We were a C# shop for a long while, but even with .Net Core and a Windows/azure heavy tech stack Python is just consistently better at getting things into production.<p>Dynamic types aren’t always the greatest though.