% Free Programming Language Textbooks and Tutorials
% **H. Conrad Cunningham** 
% **17 February 2018**

| Copyright (C) 2018, 
  [H. Conrad Cunningham ](<http://www.cs.olemiss.edu/~hcc>)
| Professor of 
  [Computer and Information Science ](<https://www.cs.olemiss.edu>)
| [University of Mississippi ](<http://www.olemiss.edu>)
| 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.

**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.


1.  [GitHub Free Programming Books list
    ](<https://github.com/vhf/free-programming-books/blob/master/free-programming-books.md>)
	

#.  BETA--a pure object-oriented language from the "Scandinavian
    School" of object-oriented languages. This School originated with
    Simula, the first object-oriented language.
	
    a.  Ole Lehrmann Madsen, Birger Moller-Pedersen, and Kristen
        Nygaard. Object-Oriented Programming in the Beta Programming
        Language, ACM, 1993: \
		\[[PDF book ](<http://www.daimi.au.dk/~beta/Books/betabook.pdf>)\]


#.  Elixir


#.  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.
	
    a.  Joe Armstrong, Robert Virding, Claes Wikstrom, and Mike
        Williams. Concurrent Programming in ERLANG, Second Edition,
        Prentice-Hall, 1996: \
		\[[Section 1 PDF 
		](<http://www.erlang.org/download/erlang-book-part1.pdf>)\]

    #.  Fred Hebert. Learn You Some Erlang for Great Good, No Starch
        Press, 2011: \
		\[[HTML book 
		](<http://learnyousomeerlang.com/>)
		
#.  Forth

    a.  Leo Brodie, Thinking Forth, ANS Forth Edition, 2004: \
	    \[[PDF book page 
		](<http://thinking-forth.sourceforge.net/>)\]
		
#.  Haskell

    a.  William R. Cook. Anatomy of Programming Lanuages (new textbook
        on programming language theory under development): \
		\[[HTML book 
		](<http://www.cs.utexas.edu/~wcook/anatomy/>)\]

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

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


#.  Icon and Unicon

    a.  Ralph E. Griswold and Madge T. Griswold. The Icon Programming
        Language Third Edition, Peer-to-Peer Communications, 1996, and
        other Icon books at Arizona: \
		\[[book links ](<http://www.cs.arizona.edu/icon/books.htm>)\]
		
    #.  Clinton Jeffery, Shamim Mohamed, Jafar Al Gharaibeh, Ray Pareda,
        and Robert Parlett. Programming with Unicon, Second Edition,
        2013: \
        \[[PDF book](http://unicon.sourceforge.net/book/ub.pdf)\]


#.  Javascript

    a.  Marijn Haverbeke. Eloquent JavaScript: A Modern Introduction to
        Programming, First Edition, No Starch Press, February 2011: \
        \[[HTML book
		](<http://eloquentjavascript.net/>)\] 
		\[[2nd ed preview 
		](<http://eloquentjavascript.net/2nd\_edition/preview/>)\]
		
    #.  Addy Osmani. Learning JavaScript Design Patterns, O'Reilly
        Media, Inc., 2014: \
        \[[HTML 
		](<http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/>)\]
		
    #.  Axel Rauschmayer. Speaking JavaScript, O'Reilly Media, Inc.,
        2014: \
		\[[HTML ](<http://speakingjs.com/es5/index.html>)\]
		
    #.  Kyle Simpson. You Don't Know JS series: \
	    \[ [series page 
		](<https://github.com/getify/You-Dont-Know-JS>)\]


#.  Linda

    a.  Nicholas Carriero and David Gelernter. How to Write Parallel
        Programs: A First Course, 1992: \
		\[[HTML/PDF book 
		](<http://www.lindaspaces.com/book/>)\]


#. Lisp

    a.  Paul Graham. On Lisp: Advanced Techniques for Common Lisp,
        Prentice Hall, 1993: \
		\[[free book page 
		](<http://www.paulgraham.com/onlisp.html>)\]
		
    #.  Daniel Holden. Build Your Own Lisp (in C), CreateSpace
        Independent Publishing Platform, October 2014: \
        \[[HTML ](<http://www.buildyourownlisp.com/>)\]
		
    #.  Doug Hoyle. Let Over Lambda--50 Years of Lisp, Second Edition,
        2013: \
		\[[HTML book ](<http://letoverlambda.com/>)\]


#. Lua

    a.  Fabio Mascarenhas. 
	    [Programming in Lua Lecture Notes 
		](<http://www.dcc.ufrj.br/~fabiom/lua/>), 
		for a course based on Roberto Ierusalimschy's 
		(PiL) Programming in Lua, Third Edition, 2013.
		
    #.  [Lua Tutorial ](<http://lua-users.org/wiki/LuaTutorial>)


#. ML

    a.  Robert Harper. Programming in Standard ML, Carnegie Mellon
        University, 2011: \
		\[[PDF draft 
		](<http://www.cs.cmu.edu/~rwh/smlbook/book.pdf>)\]
		
    b.  John Harrison. Introduction to Functional Programming, 1996: \
        \[[PS book/slides 
		](<http://www.cl.cam.ac.uk/teaching/Lectures/funprog-jrh-1996>)\]


#. OCaml

    a.  Yaron Minsky, Anil Madhavapeddy, and Jason Hickey. Real World
        OCaml, O'Reilly Media, 2013: \
		\[[PDF book 
		](<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>)\]


#. Prolog

    a.  Patrick Blackburn, Johan Bos, and Kristina Striefnitz. Learn
        Prolog Now, 2006-12: \
		\[[book site 
		](<http://www.learnprolognow.org>)\]


#.  PureScript

    a.  Phil Freeman. [Purescript by Example
	    ](<https://leanpub.com/purescript>, Leanpub, 2017.


#. Python

    a.  Allen B. Downey. Think Python: How to Think Like a Computer
        Scientist, Green Tea Press, 2013: \
        \[[PDF/HTML book page 
		](<http://greenteapress.com/thinkpython/thinkpython.html>)\]


#. Ruby

    a.  Chris Pine. Learn to Program, 2009: \
	    \[[HTML book ](<http://pine.fm/LearnToProgram/>)\]
		
    #.  why the lucky stiff (Jonathan Gillette). why's (poignant) guide
        to Ruby: \
        \[[Tutorial ](<http://mislav.uniqpath.com/poignant-guide/>)\]


#. Scala

    a.  Michel Schniz and Philipp Haller. A Scala Tutorial for Java
        Programmers: \
        Original from 
        [<http://www.scala-lang.org>
		](<http://www.scala-lang.org/docu/files/ScalaTutorial.pdf>)
        (Documentation, Manuals, A Brief Scala Tutorial).		
		\[[Cunningham's revision ](<../ScalaForJava/ScalaForJava.html>)\]

    #.  Martin Odersky. *Scala by Example*:
	    \[[local](<localcopy/ScalaByExample.pdf>)\]\
        Original at
        [<http://www.scala-lang.org> 
		](<http://www.scala-lang.org/docu/files/ScalaByExample.pdf>)
        (Documentation, Manuals, Scala By Example).

    #.  Martin Odersky, Lex Spoon, and Bill Venners. 
	    *Programming in Scala*, First Edition, Artima, 2008: \
		\[[HTML book 
		](<http://www.artima.com/pins1ed/>)\]


#. Scheme

    a.  (SICP) Harold Abelson and Gerald J. Sussman with Julie Sussman.
        Structure and Interpretation of Computer Programs, Second
        Edition, MIT Press, 1996: \
		\[[book site at MIT Press 
		](<http://mitpress.mit.edu/sicp/>)\] 
		\[[HTML book 
		](<http://mitpress.mit.edu/sicp/full-text/book/book.html>)\]
        \[[SICP ebook site] 
		(<http://sicpebook.wordpress.com/>)\] 
		\[[local source code 
		](<otherFP/SICP_allcode>)\]

    #.  Stephen Bloch. Picturing Programs: An Introduction to Computer
        Programming (uses the Racket dialect of Scheme): \
		\[[HTML/PDF book 
		](<http://www.picturingprograms.com>)\]

    #.  Kent Dybvig The Scheme Programming Language, Fourth Editio, MIT
        Press, 2009: \
		\[[HTML book ](<http://scheme.com/tspl4/>)\]

    #.  Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and
        Shriram Krishnamurthi. How to Design Programs, Second Edition
        (uses the Racket dialect of Scheme): \
		\[[HTML book
		](<http://www.ccs.neu.edu/home/matthias/HtDP2e/index.html>)\]

    #.  Brian Harvey and Mathew Wright. Simply Scheme: Introducing
        Computer Science, Second Edition, MIT Press, 1999: \
		\[[book site
		](<http://www.eecs.berkeley.edu/~bh/ss-toc2.html>)\]

    #.  Kurt Normark. 
	    [Functional Programming in Scheme With Web Programming Examples 
		](<http://people.cs.aau.dk/~normark/prog3-03/html/notes/theme-index.html>),
        Department of Computer Science, Aalborg University, Denmark


#. Simula--the first object-oriented programming language. It is a
    "Scandinavian School" object-oriented language designed for
    simulation programming.
	
    a.  Rob Pooley. An Introduction to Programming in Simula, Oxford
        Blackwell Scientific Publications, 1987: \
		\[[HTML book 
		](<http://www.macs.hw.ac.uk/~rjp/bookhtml/>)\]


#.  Smalltalk--a dynamically typed, reflective, object-oriented
    programming language originally designed at Xerox PARC in the
    1970s.

    a.  Andrew P. Black, Stephane Ducasse, Oscar Nierstrasz, Damien
        Pollet, Damien Cassou, and Marcus Denker. Squeak by Example: \
        \[[PDF book ](<http://squeakbyexample.org/>)\]

    #.  Andrew P. Black, Stephane Ducasse, Oscar Nierstrasz, and Damien
        Pollet, Damien Cassou, and Marcus Denker. Pharo by Example: \
        \[[PDF book ](<http://pharobyexample.org/>)\]

    #.  Alexandre Bergel, Damien Cassou, Stephane Ducasse, and Jannik
        Laval. Deep into Pharo, 2013: \
		\[[PDF draft ](<http://deepintopharo.com/>)\]


#. Snobol4--the classic string-processing language and precursor to
    Icon

    a.  R. E. Griswold, J. F. Poage, and I. P. Polonsky. The Snobol4
        Programming Language, Second Edition, Prentice-Hall, 1971: \
        \[[PDF book ](<ftp://ftp.cs.arizona.edu/snobol/gb.pdf>)\]


#. Programming language design

    a.  [Source code ](<Kamin_Budd_interpreters/>) 
	    for interpreters in the the textbook: 
		Samuel N. Kamin. Programming Languages: An
        Interpreter-Based Approach, Addison Wesley, 1990.

    #.  Shiram Krishnamurthi. Programming Languages: Application and
        Interpretation, Second Edition,
        \[[HTML ](<http://cs.brown.edu/courses/cs173/2012/book/>)\]
        \[[PDF ](<http://cs.brown.edu/courses/cs173/2012/book/book.pdf>)\]
        \[[Fall 2012 course ](<http://cs.brown.edu/courses/cs173/2012/>)\]
        \[[Fall 2013 course ](<http://cs.brown.edu/courses/cs173/2013/>)\]

    #.  Simon Thompson. Type Theory and Functional Programming,
        Addison-Wesley, 1991: \
		\[[book site 
		](<https://www.cs.kent.ac.uk/people/staff/sjt/TTFP/>)\]
