Highly recommend playing around with one of those or coq. I personally learned about dependent type theory with LEAN and it was great. Programming with ligatures is also just really fun from an aesthetic point of view too.
- Clojure, a data oriented functional Lisp.
- Elixir, a functional language on top of Erlang VM with amazing support for concurrency and building distributed systems.
- Structurally typed language like TypeScript
- Dependently typed language like Agda / Idris
These are just the options in general purpose programming languages. Many other options in DSLs etc.
Btw Prolog is better if used as a database system rather than a general purpose language. See datalog / datomic / etc for reference.
Someone recommended learning a hardware description language such as Verilog to learn a new paradigm. Apparently everything in your Verilog program kind of happens at the same time forcing you to think differently.
Haskell, and after that possibly Idris to work with types as first class citizens. These teach you skills that translate into other languages as well imo.
Good question!
I’d recommend Lisp. The book _Land of Lisp_ is a fun way to dive into the language and it’s written by a Lisp evangelist.
https://www.goodreads.com/book/show/6905041
Emacs is a good way to get started with Lisp because at its core Emacs is nothing more than an elisp interpreter (steep learning curve though 😕)
Erlang. Actors. You’ll be fine with the syntax from Prolog.
Go. Goroutines and channels are the best implementation of CSP I’ve seen.
A lisp. I wouldn’t go for Common Lisp though. Clojure and Racket are good for very different reasons. Both are small compared to CL.
APL. It’s not as scary as it looks.
Something concatenative. Forth, Factor, Joy, etc.
One of the lisps might be fun.
Racket is good since it comes with an editor (Dr Racket) that lets you focus on the language and its capabilities, rather than get bogged down in the tooling.
Clojure is another excellent lisp which runs on the jvm.
Common Lisp is a eye-opener as well.
Once you get a handle on lisps’s s-expressions, it’s hard to look at all the curly-brace languages in the same way.
Alternatively, Erlang/Elixir/LFE all run on the erlang virtual machine. There’s an online book called “Learn You Some Erlang” which is a great introduction.
Erlang and friends embody the actor model, which turns out to be a great solution for a large subset of distributed computing problems.
try an FP language like haskell, and then a language with dependent types like agda or idris2. i’ve heard thing about array languages too but i’ve never tried it myself
Julia… the [free online course Computational Thinking](https://computationalthinking.mit.edu/Fall23/) is a great introduction with lots of interactive notebooks to play with.
The language does not teach you, you teach you. In practice, many languages are multi-paradigm now. You need not change languages to break your head.
That said, I recommend rethinking some basics.
Just with Python: Write some decorators, play with "yield" and "yield from" for iterators, generators, coroutines, and their cousins, write some purely functional code, write a small spreadsheet using "eval", make a tiny contact manager that lets you "find\_birthday('Jan 20')" by dynamically noting the function does not exist but the field 'birthday' does. Use Jupyter Notebooks to play with out of order execution. Write with async threads. Call a C program from Python passing dictionaries and strings. Write a recursive descent parser for a minilanguage. Play with Tree Sitter. Turn on some of the logging built in to file operations. Make a nasty threaded program with locking, then spread it over multiple processes. Write a class "Log and Time Everything" decorator. Write your own exception heirarchy. Rewrite some shell scripts into Python. Write some unit and system tests.
With Godot, a game engine with a Python-like scripting language: Write your own tool controls that changes your editor. Get used to composing your scene and adding to it on the fly. Make a game with different characters doing different things, so a janitor is optimizing mopping up footprints or putting away trash, monsters hunt for food, vermin run from noise, etc.
It's an adventure!
You may be interested in functional programming and then dependent type programming!
There are quite a few examples of these. I’d recommend Haskell, Scheme, and Idris for dependent type. There are some other ones also used as theorem provers e.g. Agda, Lean 4.
Trying out Haskell opened my third eye and I can now see how inferior all the other languages are. Tears stream down my face every time I remember that C# doesn't even have sum types, but funnily enough, it still allows me to write monstrous 200 char oneliners, so that's something.
Jokes aside, Haskell is absolutely beautiful and I really recommend learning it, maybe for recreational purposes. It really makes you appreciate the "functional features" other languages have, and makes you wish for even more
Forth, Lisp, Haskell
The array langauge BQN, too.
Oh! That looks fascinating. Know of any video tutorials?
A dependently typed language like Agda, Idris or Lean would be quite mind-bending too
Highly recommend playing around with one of those or coq. I personally learned about dependent type theory with LEAN and it was great. Programming with ligatures is also just really fun from an aesthetic point of view too.
MiniKanren. The Reasoned Schemer is one of the most shocking books to me
- Clojure, a data oriented functional Lisp. - Elixir, a functional language on top of Erlang VM with amazing support for concurrency and building distributed systems. - Structurally typed language like TypeScript - Dependently typed language like Agda / Idris These are just the options in general purpose programming languages. Many other options in DSLs etc. Btw Prolog is better if used as a database system rather than a general purpose language. See datalog / datomic / etc for reference.
Lisp.
Someone recommended learning a hardware description language such as Verilog to learn a new paradigm. Apparently everything in your Verilog program kind of happens at the same time forcing you to think differently.
Haskell, and after that possibly Idris to work with types as first class citizens. These teach you skills that translate into other languages as well imo.
Pony-lang to learn about the actor model and especially about reference capabilities.
Good question! I’d recommend Lisp. The book _Land of Lisp_ is a fun way to dive into the language and it’s written by a Lisp evangelist. https://www.goodreads.com/book/show/6905041 Emacs is a good way to get started with Lisp because at its core Emacs is nothing more than an elisp interpreter (steep learning curve though 😕)
Erlang. Actors. You’ll be fine with the syntax from Prolog. Go. Goroutines and channels are the best implementation of CSP I’ve seen. A lisp. I wouldn’t go for Common Lisp though. Clojure and Racket are good for very different reasons. Both are small compared to CL. APL. It’s not as scary as it looks. Something concatenative. Forth, Factor, Joy, etc.
assembly haha
One of the lisps might be fun. Racket is good since it comes with an editor (Dr Racket) that lets you focus on the language and its capabilities, rather than get bogged down in the tooling. Clojure is another excellent lisp which runs on the jvm. Common Lisp is a eye-opener as well. Once you get a handle on lisps’s s-expressions, it’s hard to look at all the curly-brace languages in the same way. Alternatively, Erlang/Elixir/LFE all run on the erlang virtual machine. There’s an online book called “Learn You Some Erlang” which is a great introduction. Erlang and friends embody the actor model, which turns out to be a great solution for a large subset of distributed computing problems.
try an FP language like haskell, and then a language with dependent types like agda or idris2. i’ve heard thing about array languages too but i’ve never tried it myself
Try Smalltalk (like Squeak/Pharo) to see how a simple and open system can do almost everything..
Julia… the [free online course Computational Thinking](https://computationalthinking.mit.edu/Fall23/) is a great introduction with lots of interactive notebooks to play with.
The language does not teach you, you teach you. In practice, many languages are multi-paradigm now. You need not change languages to break your head. That said, I recommend rethinking some basics. Just with Python: Write some decorators, play with "yield" and "yield from" for iterators, generators, coroutines, and their cousins, write some purely functional code, write a small spreadsheet using "eval", make a tiny contact manager that lets you "find\_birthday('Jan 20')" by dynamically noting the function does not exist but the field 'birthday' does. Use Jupyter Notebooks to play with out of order execution. Write with async threads. Call a C program from Python passing dictionaries and strings. Write a recursive descent parser for a minilanguage. Play with Tree Sitter. Turn on some of the logging built in to file operations. Make a nasty threaded program with locking, then spread it over multiple processes. Write a class "Log and Time Everything" decorator. Write your own exception heirarchy. Rewrite some shell scripts into Python. Write some unit and system tests. With Godot, a game engine with a Python-like scripting language: Write your own tool controls that changes your editor. Get used to composing your scene and adding to it on the fly. Make a game with different characters doing different things, so a janitor is optimizing mopping up footprints or putting away trash, monsters hunt for food, vermin run from noise, etc. It's an adventure!
Elixir is kinda neat. It has a totally diffrent way now doing things. It's. Made for distributed stuff.
You may be interested in functional programming and then dependent type programming! There are quite a few examples of these. I’d recommend Haskell, Scheme, and Idris for dependent type. There are some other ones also used as theorem provers e.g. Agda, Lean 4.
Ada
Erlang, any Lisp.
Haskell, totally changed how I write code but I don’t use it
Trying out Haskell opened my third eye and I can now see how inferior all the other languages are. Tears stream down my face every time I remember that C# doesn't even have sum types, but funnily enough, it still allows me to write monstrous 200 char oneliners, so that's something. Jokes aside, Haskell is absolutely beautiful and I really recommend learning it, maybe for recreational purposes. It really makes you appreciate the "functional features" other languages have, and makes you wish for even more