\PassOptionsToPackage{unicode=true}{hyperref} % options for packages loaded elsewhere
\PassOptionsToPackage{hyphens}{url}
%
\documentclass[]{article}
\usepackage{lmodern}
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\usepackage{fixltx2e} % provides \textsubscript
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
  \usepackage[T1]{fontenc}
  \usepackage[utf8]{inputenc}
  \usepackage{textcomp} % provides euro and other symbols
\else % if luatex or xelatex
  \usepackage{unicode-math}
  \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase}
\fi
% use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
% use microtype if available
\IfFileExists{microtype.sty}{%
\usepackage[]{microtype}
\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
\IfFileExists{parskip.sty}{%
\usepackage{parskip}
}{% else
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}
}
\usepackage{hyperref}
\hypersetup{
            pdftitle={Free Programming Language Textbooks and Tutorials},
            pdfauthor={H. Conrad Cunningham},
            pdfborder={0 0 0},
            breaklinks=true}
\urlstyle{same}  % don't use monospace font for urls
\setlength{\emergencystretch}{3em}  % prevent overfull lines
\providecommand{\tightlist}{%
  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\setcounter{secnumdepth}{0}
% Redefines (sub)paragraphs to behave more like sections
\ifx\paragraph\undefined\else
\let\oldparagraph\paragraph
\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
\fi
\ifx\subparagraph\undefined\else
\let\oldsubparagraph\subparagraph
\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
\fi

% set default figure placement to htbp
\makeatletter
\def\fps@figure{htbp}
\makeatother

\usepackage{caption}
\DeclareCaptionLabelFormat{nolabel}{}
\captionsetup{labelformat=nolabel}

\title{Free Programming Language Textbooks and Tutorials}
\author{\textbf{H. Conrad Cunningham}}
\date{\textbf{17 February 2018}}

\begin{document}
\maketitle

Copyright (C) 2018, \href{http://www.cs.olemiss.edu/~hcc}{H. Conrad
Cunningham}\\
Professor of \href{https://www.cs.olemiss.edu}{Computer and Information
Science}\\
\href{http://www.olemiss.edu}{University of Mississippi}\\
211 Weir Hall\\
P.O. Box 1848\\
University, MS 38677\\
(662) 915-5358

Note: Not fully updated for Spring 2018

I maintain this document as text in the Pandoc's dialect of Markdown
using embedded LaTeX markup for the mathematical formulas and then
translate the notes to HTML, PDF, and other formats as needed.

\textbf{Advisory}: The HTML version of this document requires use of a
browser that supports the display of MathML. A good choice as of
February 2018 is a recent version of Firefox from Mozilla.

\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\item
  \href{https://github.com/vhf/free-programming-books/blob/master/free-programming-books.md}{GitHub
  Free Programming Books list}
\item
  BETA--a pure object-oriented language from the ``Scandinavian School''
  of object-oriented languages. This School originated with Simula, the
  first object-oriented language.

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \tightlist
  \item
    Ole Lehrmann Madsen, Birger Moller-Pedersen, and Kristen Nygaard.
    Object-Oriented Programming in the Beta Programming Language, ACM,
    1993:\\
    {[}\href{http://www.daimi.au.dk/~beta/Books/betabook.pdf}{PDF
    book}{]}
  \end{enumerate}
\item
  Elixir
\item
  Erlang--a concurrency-oriented functional programming language
  developed in the 1980s at the Ericsson Computer Science Laboratory but
  which is now available in an open-source implementation.

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \item
    Joe Armstrong, Robert Virding, Claes Wikstrom, and Mike Williams.
    Concurrent Programming in ERLANG, Second Edition, Prentice-Hall,
    1996:\\
    {[}\href{http://www.erlang.org/download/erlang-book-part1.pdf}{Section
    1 PDF}{]}
  \item
    Fred Hebert. Learn You Some Erlang for Great Good, No Starch Press,
    2011:\\
    {[}\href{http://learnyousomeerlang.com/}{HTML book}
  \end{enumerate}
\item
  Forth

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \tightlist
  \item
    Leo Brodie, Thinking Forth, ANS Forth Edition, 2004:\\
    {[}\href{http://thinking-forth.sourceforge.net/}{PDF book page}{]}
  \end{enumerate}
\item
  Haskell

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \item
    William R. Cook. Anatomy of Programming Lanuages (new textbook on
    programming language theory under development):\\
    {[}\href{http://www.cs.utexas.edu/~wcook/anatomy/}{HTML book}{]}
  \item
    H. Conrad Cunningham.
    \href{https://john.cs.olemiss.edu/~hcc/csci450/notes/haskell_notes.pdf}{Notes
    on Functional Programming with Haskell (old version)}

    {[}\href{https://john.cs.olemiss.edu/~hcc/csci450/notes/HaskellNotes/IntroFP_Haskell.html}{new
    expanded version, partial draft}{]}
  \item
    Kees Doets and Jan van Eijck. The Haskell Road to Logic, Math and
    Programming, March 2004:\\
    {[}\href{http://fldit-www.cs.uni-dortmund.de/~peter/PS07/HR.pdf}{PDF
    book}{]}
  \item
    Paul Hudak. The Haskell School of Music: From Signals to Symphonies,
    Version 2.5, January 2013:\\
    {[}\href{http://haskell.cs.yale.edu/wp-content/uploads/2015/03/HSoM.pdf}{PDF
    draft book}{]}

    Source code from Paul Hudak's \emph{The Haskell School of
    Expression: Learning Functional Programming through Multimedia},
    Cambridge University Press, 2000:\\
    {[}\href{otherFP/SOE-20120121}{local files}{]}
  \item
    Miran Lipovaca. Learn You a Haskell for Great Good:\\
    {[}\href{http://learnyouahaskell.com/}{HTML book}{]}
  \item
    Simon Marlow. Parallel and Concurrent Programming in Haskell:\\
    {[}\href{http://chimera.labs.oreilly.com/books/1230000000929}{HTML
    book}{]}
  \item
    Bryan O'Sullivan, Don Stewart, and John Goerzen. Real World
    Haskell:\\
    {[}\href{http://book.realworldhaskell.org}{HTML book}{]}
  \item
    Jonathan Tang. Write Yourself a Scheme in 48 Hours: A Haskell
    Tutorial (writing a Scheme interpreter in Haskell):\\
    {[}\href{http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours}{HTML
    book}{]}
  \item
    Source code from Simon Thompson's \emph{Haskell: The Craft of
    Functional Programming}, Third Edition, Addison Wesley, 2011:
    {[}\href{otherFP/Craft3e-0.1.0.10}{local files}{]}
  \end{enumerate}
\item
  Icon and Unicon

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \item
    Ralph E. Griswold and Madge T. Griswold. The Icon Programming
    Language Third Edition, Peer-to-Peer Communications, 1996, and other
    Icon books at Arizona:\\
    {[}\href{http://www.cs.arizona.edu/icon/books.htm}{book links}{]}
  \item
    Clinton Jeffery, Shamim Mohamed, Jafar Al Gharaibeh, Ray Pareda, and
    Robert Parlett. Programming with Unicon, Second Edition, 2013:\\
    {[}\href{http://unicon.sourceforge.net/book/ub.pdf}{PDF book}{]}
  \end{enumerate}
\item
  Javascript

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \item
    Marijn Haverbeke. Eloquent JavaScript: A Modern Introduction to
    Programming, First Edition, No Starch Press, February 2011:\\
    {[}\href{http://eloquentjavascript.net/}{HTML book}{]}
    {[}\href{http://eloquentjavascript.net/2nd_edition/preview/}{2nd ed
    preview}{]}
  \item
    Addy Osmani. Learning JavaScript Design Patterns, O'Reilly Media,
    Inc., 2014:\\
    {[}\href{http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/}{HTML}{]}
  \item
    Axel Rauschmayer. Speaking JavaScript, O'Reilly Media, Inc., 2014:\\
    {[}\href{http://speakingjs.com/es5/index.html}{HTML}{]}
  \item
    Kyle Simpson. You Don't Know JS series:\\
    {[} \href{https://github.com/getify/You-Dont-Know-JS}{series
    page}{]}
  \end{enumerate}
\item
  Linda

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \tightlist
  \item
    Nicholas Carriero and David Gelernter. How to Write Parallel
    Programs: A First Course, 1992:\\
    {[}\href{http://www.lindaspaces.com/book/}{HTML/PDF book}{]}
  \end{enumerate}
\item
  Lisp

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \item
    Paul Graham. On Lisp: Advanced Techniques for Common Lisp, Prentice
    Hall, 1993:\\
    {[}\href{http://www.paulgraham.com/onlisp.html}{free book page}{]}
  \item
    Daniel Holden. Build Your Own Lisp (in C), CreateSpace Independent
    Publishing Platform, October 2014:\\
    {[}\href{http://www.buildyourownlisp.com/}{HTML}{]}
  \item
    Doug Hoyle. Let Over Lambda--50 Years of Lisp, Second Edition,
    2013:\\
    {[}\href{http://letoverlambda.com/}{HTML book}{]}
  \end{enumerate}
\item
  Lua

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \item
    Fabio Mascarenhas.
    \href{http://www.dcc.ufrj.br/~fabiom/lua/}{Programming in Lua
    Lecture Notes}, for a course based on Roberto Ierusalimschy's (PiL)
    Programming in Lua, Third Edition, 2013.
  \item
    \href{http://lua-users.org/wiki/LuaTutorial}{Lua Tutorial}
  \end{enumerate}
\item
  ML

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \item
    Robert Harper. Programming in Standard ML, Carnegie Mellon
    University, 2011:\\
    {[}\href{http://www.cs.cmu.edu/~rwh/smlbook/book.pdf}{PDF draft}{]}
  \item
    John Harrison. Introduction to Functional Programming, 1996:\\
    {[}\href{http://www.cl.cam.ac.uk/teaching/Lectures/funprog-jrh-1996}{PS
    book/slides}{]}
  \end{enumerate}
\item
  OCaml

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \tightlist
  \item
    Yaron Minsky, Anil Madhavapeddy, and Jason Hickey. Real World OCaml,
    O'Reilly Media, 2013:\\
    {[}\href{https://realworldocaml.org/\%3EHTML/PDF\%20draft\%3C/a\%3E\%5D\%20\%3C/li\%3E\%0A\%20\%20\%0A\%3C/ol\%3E\%0A\%3C/li\%3E\%0A\%3C/p\%3E\%0A\%0A\%3Cp\%3E\%0A\%3Cli\%3E\%20Oberon\%0A\%0A\%3Col\%20type=a\%3E\%0A\%3Cli\%3E\%0AHanspeter\%20Mossenbock.\%20\%3Ccite\%3EObject-Oriented\%20Programming\%20in\%0AOberon-2\%3C/cite\%3E,\%20Second\%20Edition,\%20Springer,\%201994:\%0A\%5B\%3Ca\%20href\%20=\%20}{PDF
    book}{]}
  \end{enumerate}
\item
  Prolog

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \tightlist
  \item
    Patrick Blackburn, Johan Bos, and Kristina Striefnitz. Learn Prolog
    Now, 2006-12:\\
    {[}\href{http://www.learnprolognow.org}{book site}{]}
  \end{enumerate}
\item
  PureScript

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \tightlist
  \item
    Phil Freeman. {[}Purescript by
    Example{]}(\url{https://leanpub.com/purescript}, Leanpub, 2017.
  \end{enumerate}
\item
  Python

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \tightlist
  \item
    Allen B. Downey. Think Python: How to Think Like a Computer
    Scientist, Green Tea Press, 2013:\\
    {[}\href{http://greenteapress.com/thinkpython/thinkpython.html}{PDF/HTML
    book page}{]}
  \end{enumerate}
\item
  Ruby

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \item
    Chris Pine. Learn to Program, 2009:\\
    {[}\href{http://pine.fm/LearnToProgram/}{HTML book}{]}
  \item
    why the lucky stiff (Jonathan Gillette). why's (poignant) guide to
    Ruby:\\
    {[}\href{http://mislav.uniqpath.com/poignant-guide/}{Tutorial}{]}
  \end{enumerate}
\item
  Scala

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \item
    Michel Schniz and Philipp Haller. A Scala Tutorial for Java
    Programmers:\\
    Original from
    \href{http://www.scala-lang.org/docu/files/ScalaTutorial.pdf}{\textless{}http://www.scala-lang.org\textgreater{}}
    (Documentation, Manuals, A Brief Scala Tutorial).\\
    {[}\href{../ScalaForJava/ScalaForJava.html}{Cunningham's
    revision}{]}
  \item
    Martin Odersky. \emph{Scala by Example}:
    {[}\href{localcopy/ScalaByExample.pdf}{local}{]}\\
    Original at
    \href{http://www.scala-lang.org/docu/files/ScalaByExample.pdf}{\textless{}http://www.scala-lang.org\textgreater{}}
    (Documentation, Manuals, Scala By Example).
  \item
    Martin Odersky, Lex Spoon, and Bill Venners. \emph{Programming in
    Scala}, First Edition, Artima, 2008:\\
    {[}\href{http://www.artima.com/pins1ed/}{HTML book}{]}
  \end{enumerate}
\item
  Scheme

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \item
    (SICP) Harold Abelson and Gerald J. Sussman with Julie Sussman.
    Structure and Interpretation of Computer Programs, Second Edition,
    MIT Press, 1996:\\
    {[}\href{http://mitpress.mit.edu/sicp/}{book site at MIT Press}{]}
    {[}\href{http://mitpress.mit.edu/sicp/full-text/book/book.html}{HTML
    book}{]} {[}{[}SICP ebook site{]}
    (\url{http://sicpebook.wordpress.com/}){]}
    {[}\href{otherFP/SICP_allcode}{local source code}{]}
  \item
    Stephen Bloch. Picturing Programs: An Introduction to Computer
    Programming (uses the Racket dialect of Scheme):\\
    {[}\href{http://www.picturingprograms.com}{HTML/PDF book}{]}
  \item
    Kent Dybvig The Scheme Programming Language, Fourth Editio, MIT
    Press, 2009:\\
    {[}\href{http://scheme.com/tspl4/}{HTML book}{]}
  \item
    Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram
    Krishnamurthi. How to Design Programs, Second Edition (uses the
    Racket dialect of Scheme):\\
    {[}\href{http://www.ccs.neu.edu/home/matthias/HtDP2e/index.html}{HTML
    book}{]}
  \item
    Brian Harvey and Mathew Wright. Simply Scheme: Introducing Computer
    Science, Second Edition, MIT Press, 1999:\\
    {[}\href{http://www.eecs.berkeley.edu/~bh/ss-toc2.html}{book
    site}{]}
  \item
    Kurt Normark.
    \href{http://people.cs.aau.dk/~normark/prog3-03/html/notes/theme-index.html}{Functional
    Programming in Scheme With Web Programming Examples}, Department of
    Computer Science, Aalborg University, Denmark
  \end{enumerate}
\item
  Simula--the first object-oriented programming language. It is a
  ``Scandinavian School'' object-oriented language designed for
  simulation programming.

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \tightlist
  \item
    Rob Pooley. An Introduction to Programming in Simula, Oxford
    Blackwell Scientific Publications, 1987:\\
    {[}\href{http://www.macs.hw.ac.uk/~rjp/bookhtml/}{HTML book}{]}
  \end{enumerate}
\item
  Smalltalk--a dynamically typed, reflective, object-oriented
  programming language originally designed at Xerox PARC in the 1970s.

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \item
    Andrew P. Black, Stephane Ducasse, Oscar Nierstrasz, Damien Pollet,
    Damien Cassou, and Marcus Denker. Squeak by Example:\\
    {[}\href{http://squeakbyexample.org/}{PDF book}{]}
  \item
    Andrew P. Black, Stephane Ducasse, Oscar Nierstrasz, and Damien
    Pollet, Damien Cassou, and Marcus Denker. Pharo by Example:\\
    {[}\href{http://pharobyexample.org/}{PDF book}{]}
  \item
    Alexandre Bergel, Damien Cassou, Stephane Ducasse, and Jannik Laval.
    Deep into Pharo, 2013:\\
    {[}\href{http://deepintopharo.com/}{PDF draft}{]}
  \end{enumerate}
\item
  Snobol4--the classic string-processing language and precursor to Icon

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \tightlist
  \item
    R. E. Griswold, J. F. Poage, and I. P. Polonsky. The Snobol4
    Programming Language, Second Edition, Prentice-Hall, 1971:\\
    {[}\href{ftp://ftp.cs.arizona.edu/snobol/gb.pdf}{PDF book}{]}
  \end{enumerate}
\item
  Programming language design

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \item
    \href{Kamin_Budd_interpreters/}{Source code} for interpreters in the
    the textbook: Samuel N. Kamin. Programming Languages: An
    Interpreter-Based Approach, Addison Wesley, 1990.
  \item
    Shiram Krishnamurthi. Programming Languages: Application and
    Interpretation, Second Edition,
    {[}\href{http://cs.brown.edu/courses/cs173/2012/book/}{HTML}{]}
    {[}\href{http://cs.brown.edu/courses/cs173/2012/book/book.pdf}{PDF}{]}
    {[}\href{http://cs.brown.edu/courses/cs173/2012/}{Fall 2012
    course}{]} {[}\href{http://cs.brown.edu/courses/cs173/2013/}{Fall
    2013 course}{]}
  \item
    Simon Thompson. Type Theory and Functional Programming,
    Addison-Wesley, 1991:\\
    {[}\href{https://www.cs.kent.ac.uk/people/staff/sjt/TTFP/}{book
    site}{]}
  \end{enumerate}
\end{enumerate}

\end{document}
