Further resources on Programming Languages
Online courses and notes
A lot of the course is based on the following two resources. Following these courses would be a great learning experience:
- Dan Grossman’s PL Course has a lot of material available, and occasionally is offered through Coursera. There are videos on the site, assignments and notes. The course covers SML (a language close to OCAML), Racket and Ruby and examines numerous topics along the way.
- Shriram Krishnamurthi’s PL Course using a version of Racket and building an interpreter along the way. There are extensive videos, assignments to build an interpreter for a version of Python, and a book.
Languages worth looking into
I have ordered the languages in the order that emphasizes the new ideas you will learn by studying these languages.
- Haskell is a lazy functional programming language where all evaluations are delayed until actually needed. It has an immensely expressive type system, and is often a language where new ideas in PLs are implemented.
- Prolog is a great way to learn about Logic Programming, a different paradigm. It has strong links to Artificial Intelligence and Linguistics. Or you can try Mercury.
- Erlang was designed by the Ericsson telecommunications company to support distributed, fault-tolerant, soft real-time, highly available, non-stop applications. You can literally hot-swap your update to your application without stopping the system. Erlang is a great place to learn about concurrency and fault tolerance.
- Icon is a very interesting high-level language emphasizing “goal-oriented execution”.
- Forth is a stack-based imperative programming language that feels quite different from other languages. See also Factor.
- Idris is a purely functional programming language with dependent types (types that depend on a value), something fairly rare. It is used in interactive theorem proving. Agda and Coq are other languages from the same category.
- Rust is a systems programming language (i.e. serving similar goals to C) with strong functional influences and aiming for type safety.
- Oz is a trully multi-paradigm programming language combining almost every programming paradigm.
- Scala is emphasizing functional programming paradigms combined with objects and a strong type system. It runs on top of the Java Virtual Machine.
- Clojure is a language based on the Lisp/Racket family, also running on top of the JVM.
- F# is a functional programming language derived from the ML family (OCAML) and targeting the .NET platform.
- C# is an object-oriented language with commonalities with C++ and targeting mostly the Windows Platform and .NET.