ML for the Working Programmer, 2nd Edition (1996)
cl.cam.ac.uk
cl.cam.ac.uk
Search for ML in the monthly job postings. Guess how many mean machine learning and how many refer to the programming language :).
It had me hooked when I got to this part of the introduction:
"ML is not perfect. Certain pitfalls can allow a simple coding error to waste hours of a programmer’s time. The new standard library introduces incompatibilities between old and new compilers. Warnings of possible hazards appear throughout the book. They look like this:
"[skull and crossbones icon] Beware the Duke of Gloucester. O Buckingham! take heed of yonder dog. Look, when he fawns, he bites; and when he bites, his venom tooth will rankle to the death. Have not to do with him, beware of him; Sin, Death, and Hell have set their marks on him, and all their ministers attend on him.
"I hasten to add that nothing in ML can have consequences quite this dire. No fault in a program can corrupt the ML system itself. On the other hand, programmers must remember that even correct programs can do harm in the outside world."
Standard ML always seemed like a great teaching language, but it was never clear to me how it would work for general programming. So the title 'for the working programmer' always seemed unintentionally ironic.
However, it doesn't have the kind of library support you expect for most practical tasks (unlike its sibling Ocaml).
There is no particular reason to refer to the first edition now, since the second edition is the same book. The second edition brought the book (originally published in 1991) up to date for 1996, and it is in a sense still current now, because the language hasn't changed since then. The update added the SML Basis library which was just being standardised, plus better coverage of modules.
There is a small info page about the first edition here: https://www.cl.cam.ac.uk/~lp15/MLbook/first/
I wish it was updated to OCaml, Scala, and maybe even Haskell.
Also Rust and Swift and influenced by ML.