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

We're not doing the following languages this year

Pony

D Language

Go

Applied Type System

Clojure

Scala

Forth and Stack-Based Languages

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

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

Object-Oriented Paradigm

Language Popularity

Generally interesting languages

Ruby

Modern Hardware Driving Language Innovation

Resources on learning languages