For personal growth, each of the following will 'expand your mind'. In no particular order:
* Common Lisp, Clojure, or Scheme / Racket (macros[0], functional programming, and unique and minimal syntax)
* Assembly (about as low-level as you can get, so you will really understand what's going on when programs run)
* Prolog (logical programming)
* Forth (stack-based language)
* APL or J (array-based languages and wild syntax)
* C (very similar to other languages but you'd learn pointers and manual memory management, and more open-source projects use C than any of the other languages I've listed, so you'd be able to contribute to projects you find interesting)
And probably Haskell and maybe Erlang but I don't know enough about them.
Other languages have wisely added macros, but I don't know enough about them to suggest any.
The other languages in your list won't expand your mind much after being familiar with those.
[0] The sort of macros I'm referring to aren't simple text-substitution macros as in C and C++. I'm referring to "syntactic macros", which kind of let you add new features to the language. https://en.wikipedia.org/wiki/Macro_(computer_science)#Synta... is very much not the best intro, but I don't have better links handy.)
Comments
For personal growth, each of the following will 'expand your mind'. In no particular order:
* Common Lisp, Clojure, or Scheme / Racket (macros[0], functional programming, and unique and minimal syntax)
* Assembly (about as low-level as you can get, so you will really understand what's going on when programs run)
* Prolog (logical programming)
* Forth (stack-based language)
* APL or J (array-based languages and wild syntax)
* C (very similar to other languages but you'd learn pointers and manual memory management, and more open-source projects use C than any of the other languages I've listed, so you'd be able to contribute to projects you find interesting)
And probably Haskell and maybe Erlang but I don't know enough about them.
Other languages have wisely added macros, but I don't know enough about them to suggest any.
The other languages in your list won't expand your mind much after being familiar with those.
[0] The sort of macros I'm referring to aren't simple text-substitution macros as in C and C++. I'm referring to "syntactic macros", which kind of let you add new features to the language. https://en.wikipedia.org/wiki/Macro_(computer_science)#Synta... is very much not the best intro, but I don't have better links handy.)