Links to languages we're using this year:
Smalltalk
Elixir/Erlang
Haskell
Rust
StackOverflow 2017 survey, most loved languages: #1 Rust, #2 Smalltalk, #7 Elixir, #13 Haskell and these languages don't do badly on "most wanted" and a lot of other questions
Four Languages from Forty Years Ago or "Why you should learn 'Galaxy Brain' programming languages"
Source Code Management
Source code management systems are how modern professional programmers work with code. They allow you to track progress, commit code as it becomes valid, compare with previons versions of code, bisect versions to show where a bug showed up, and many other useful things. As a developer, you should get used to using an SCM as part of your normal workflow.
We will be using Fossil SCM. This is the system that Professor Mason personally uses and recommends for other purposes as well. There are descriptions of how to set it up for this course here.
There are many other SCMs in existence, such as GIT, Mercurial, SVN, darcs, Monotone, CVS. Wikipedia has a good list. Each has its good points, but for a small development team, fossil has some very nice properties, including built-in wiki, bug-tracker and blogging, in addition to the primary version-control aspect.
Books
- Lots of freely available Smalltalk books
- Freely available books including Smalltalk, Elixir, Haskell, and Rust
- Previous text:
Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages
Bruce A. Tate, The Pragmatic Bookshelf, 2010. ISBN: 978-1-93435-659-3 -
Seven More Languages in Seven Weeks Languages That Are Shaping the Future
Bruce Tate, Fred Daoud, Jack Moffitt, Ian Dees, The Pragmatic Bookshelf, 2014. ISBN: 978-1-94122-215-7 - A previous text:
Concepts of Programming Languages, Ninth Edition
Robert W. Sebesta, Addison Wesley, Pearson Education 2010. ISBN: 978-0-13-607347-5 - Functional Programming Patterns in Scala and Clojure: Write Lean Programs for the JVM
-
Programming Elixir
Dave Thomas, The Pragmatic Bookshelf, 2014. ISBN: 978-1-93778-558-1 - The Rust Book various
We're not doing the following languages this year
Pony
D Language
Go
- Go is an open source programming language that makes it easy to build simple, reliable, and efficient software. (How to write Go code)
- Comparison of Go and Swift
Applied Type System
Clojure
- Clojure home page
- Programming Clojure
- Parsers which is just one of many kinds of libraries available for Clojure
- List comprehensions in Clojure
Scala
- Scala main page
- Case Classes
- Sequence Comprehensions
- Currying
- Traits
- Implicit Parameters
- Implit Classes
- Actors API
- PragPub articles:
Forth and Stack-Based Languages
- Forth the original concatenative language
- Factor
- Retro
- Gershwin a stack-based language connecting up with Closure
- Joy
bits of Java
I assume you know Java fairly well, but will talk about a few features that you may not be familiar with
History of Programming Languages
- Mostly Wrong History and original may be funnier (and see the comments)
- An excellent paper on Patterns and Architectures
- The Pervert's Guide to Computer Programming Languages - a talk and paper on psychological treasoning about programming languages
Types
- The advantage of dynamic types
- Type Wars wherein Bob Martin, a famous C++er and programming guru asserts, "The Smalltalkers will, eventually, win. So says this old C++ programmer." While he is talking about dynamic typing, and includes Ruby and Python in the Smalltalk camp, I think he may be literally right.
Functional Paradigm
- Functional Geekery is a series of podcasts of interviews about functional programming
- The Value of Values or "Why you should care about functional programming"
- Why Monoids matter
- Functional Programming
- Lambda Calculus is the theoretical basis for functional programming. You can find a lambda-calculus interpreter here
- FP from John Backus
- ML Programming Language influential, particularly for type inference
- Miranda the proximate influence on Haskell
- Hope and this a strict predecessor to Haskell
- Functional Reactive Programming
- Elm is a Functional Reactive Programming language (and this) that runs in the browser and is based on Haskell. See a great talk here.
- Elm in Action book
- A video on using Elm
- A course on Building Web Apps in Elm
Object-Oriented Paradigm
- Polymorphism - As It Is Played - read this if you think you understand OO programming (or if you don't)
- Learning OOP
- Reflective Kernel
Language Popularity
Generally interesting languages
- Wikipedia - Comparison of Programming Languages
- New kids Go, Julia, Rust vs old boys C, Haskell, Lisp, Python, Smalltalk
- Comparison of Rust vs. Nim
- 27 languages to improve your Python An essay from one of the co-designers of Python
- Functional Programming in Python - free book
- Python Object Model
- Why Astronomers Love Python And Why You Should Too
- Crystal is a Ruby-inspired systems programming language
- Haxe is a cross-platform language (Flash, PHP, Java, Javascript,...)
- Flash ASM is an IDE for writing x86 assembler code for Windows and Linux
- ECMAScript 6 - a very complete and readable description
- Javascript/ECMAScript may not be interesting - except that it runs on every browser on the planet (not to mention servers) - but this is an interesting article about how to evolve a language with such broad deployment.
- Super-surrogates of Javascript talks about some of the many languages that transpile to Javascript
- Algol 60 another language better than most of its successors
- Nim is another systems programming language with similar goals to Rust
- Julia high-level, high-performance dynamic programming language for technical computing
- Common Lisp resources
- WeScheme interactive Scheme on the web
- If you think you need to use C, read this
- L.B.Stanza (or Stanza for short) is a new optionally-typed general purpose programming language from the University of California, Berkeley. Stanza was designed to help programmers tackle the complexity of architecting large programs and significantly increase the productivity of application programmers across the entire software development life cycle.
- A Programming Language for Games - some videos discussing language design. And a description of JAI - possible new replacement for C/C++ - particularly for games
- If programming languages were vehicles "humour"
Ruby
Modern Hardware Driving Language Innovation
- Moores law hits the roof
- Go Parallel - resources for parallel computation