+If you hope to have the class satisfy the logic requirement for Philosophy PhD students, this needs to be discussed with us and approved in advance. If this would be
+your first or only serious
+engagement with graduate-level formal work you should consider
+carefully, and must discuss with us, (1) whether you'll be adequately
+prepared for this course, and (2) whether you'd be better served by
+taking a logic course
+with a more canonical syllabus.
+This term you could take PHIL-GA 1003, [Logic for Philosophers](http://jdh.hamkins.org), offered by Joel Hamkins on Wednesdays 12-2.
+
+Faculty and students from outside of NYU Linguistics and Philosophy are welcome
+to audit, to the extent that this coheres well with the needs of our local
+students.
+
+
+## Recommended Software ##
+
+During the course, we'll be encouraging you to try out various things in Scheme
+and OCaml. Occasionally we will also make remarks about Haskell. All three of these
+are prominent *functional programming languages*. The term "functional" here means they have
+a special concern with functions, not just that they aren't broken. But what precisely is
+meant by "functional" is somewhat fuzzy and even its various precisifications take some
+time to explain. We'll get clearer on this during the course. Another term used roughly the same as "functional"
+is "declarative." At a first pass, "functional" or "declarative" programming is primarily focused on complex
+expressions that get computationally evaluated to some (usually simpler) result. In class I gave the examples
+of `1+2` (which gets evaluated in arithmetic to `3`), `1+2 < 5` (which gets evaluated in arithmetic to a truth-value), and `1`
+(which gets evaluated in arithmetic to `1`). Also Google search strings, which get evaluated by Google servers to a
+list of links.
+
+The dominant contrasting class of programming languages (the great majority of what's used
+in industry) are called "imperatival" languages, meaning they have more to do with following a sequence of commands (generating what we
+called in class "side-effects", though sometimes what they're *alongside* is not that interesting, and all the focus is instead
+on the effects). Programming languages like C and Python and JavaScript and so on are predominantly of this sort.
+
+In truth, nothing that gets marketed as a "programming language" is really completely 100% functional/declarative, and even the
+languages I called "imperatival" will have some "functional" *fragments* (they evaluate `1+2` to `3`, also). So these labels aren't
+strictly exclusive. The labels are better thought of as concerning different
+*styles* or *idioms* of programming. Languages like Scheme and OCaml and especially Haskell get called "functional languages" because
+of the extent to which they emphasize, and are designed around those idioms. Languages like Python and JavaScript are sometimes themselves
+described as "more functional" than other languages, like C.
+
+In any case, here is some more context for the three languages we will be focusing on.
+
+* **Scheme** is one of two or three major dialects of *Lisp*, which is a large family
+of programming languages. Scheme
+is the more clean and minimalist dialect of Lisp, and is what's mostly used in
+academic circles.
+Scheme itself has umpteen different "implementations", which share most of
+their fundamentals, but have slightly different extensions and interact with
+the operating system differently. One major implementation is called Racket,
+and that is what we recommend you use. If you're already using or comfortable with
+another Scheme implementation, though, there's no compelling reason to switch.
+
+ <!-- Racket doesn't have R7RS-small, and won't anytime soon. :-( Perhaps prefer Chicken? -->
+
+ Racket stands to Scheme in something like the relation Firefox stands to HTML.
+
+ (Wikipedia on [Lisp](http://en.wikipedia.org/wiki/Lisp_%28programming_language%29),
+[Scheme](http://en.wikipedia.org/wiki/Scheme_%28programming_language%29),
+and [Racket](http://en.wikipedia.org/wiki/Racket_%28programming_language%29).)
+
+* **Caml** is one of two major dialects of *ML*, which is another large
+family of programming languages. Caml has only one active "implementation",
+OCaml, developed by the INRIA academic group in France. Sometimes we may refer to Caml or ML
+more generally; but you can assume that what we're talking about always works more
+specifically in OCaml.
+
+ (Wikipedia on [ML](http://en.wikipedia.org/wiki/ML_%28programming_language%29),
+[Caml](http://en.wikipedia.org/wiki/Caml),
+and [OCaml](http://en.wikipedia.org/wiki/OCaml).)
+
+
+* Those of you with some programming background may have encountered a third
+prominent functional programming language, **Haskell**. This is also used a
+lot in the academic contexts we'll be working through. Its surface syntax
+differs from Caml, and there are various important things one can do in
+each of Haskell and Caml that one can't (or can't as easily) do in the
+other. But these languages also have *a lot* in common, and if you're
+familiar with one of them, it's generally not hard to move between it and the
+other.
+
+ (Wikipedia on [Haskell](http://en.wikipedia.org/wiki/Haskell_%28programming_language%29).)
+
+
+<a name=installing></a>
+[[How to get the programming languages running on your computer|installing]]
+
+
+## Recommended Books ##
+
+It's not *mandatory* to purchase these for the class. But they are good ways to get a more thorough and solid understanding of some of the more basic conceptual tools we'll be using. We especially recommend the first three of them.
+
+* *An Introduction to Lambda Calculi for Computer Scientists*, by Chris
+Hankin, currently $18 paperback on
+[Amazon](http://www.amazon.com/dp/0954300653).
+
+* *The Little Schemer, Fourth Edition*, by Daniel P. Friedman and Matthias
+Felleisen, currently $29 paperback on [Amazon](http://www.amazon.com/exec/obidos/ASIN/0262560992).
+This is a classic text introducing the gentle art of programming, using the
+functional programming language Scheme. Many people love this book, but it has
+an unusual dialog format that is not to everybody's taste. **Of particular
+interest for this course** is the explanation of the Y combinator, available as
+a free sample chapter [at the MIT Press web page for the
+book](http://www.ccs.neu.edu/home/matthias/BTLS/).
+
+* *The Seasoned Schemer*, also by Daniel P. Friedman and Matthias Felleisen, currently $29 paperback
+on [Amazon](http://www.amazon.com/Seasoned-Schemer-Daniel-P-Friedman/dp/026256100X). This is a sequel to The Little Schemer, and it focuses on mutation and continuations in Scheme. We will be covering those topics in the second half of the course.
+
+* *The Little MLer*, by Matthias Felleisen and Daniel P. Friedman, currently $31 paperback / $29 kindle
+on [Amazon](http://www.amazon.com/Little-MLer-Matthias-Felleisen/dp/026256114X).
+This covers much of the same introductory ground as The Little Schemer, but
+this time in a dialect of ML. It doesn't use OCaml, the dialect we'll be working with, but instead another dialect of ML called SML. The syntactic differences between these languages is slight.
+([Here's a translation manual between them](http://www.mpi-sws.org/~rossberg/sml-vs-ocaml.html).)
+Still, that does add an extra layer of interpretation, and you might as well
+just use The Little Schemer instead. Those of you who are already more
+comfortable with OCaml (or with Haskell) than with Scheme might consider
+working through this book instead of The Little Schemer. For the rest of you,
+or those of you who *want* practice with Scheme, go with The Little Schemer.
+
+* Another good book covering the same ground as the Hankin book, but
+more thoroughly, and in a more mathematical style, is *Lambda-Calculus and Combinators:
+an Introduction*, by J. Roger Hindley and Jonathan P. Seldin, currently $74 hardback / $65 kindle on [Amazon](http://www.amazon.com/dp/0521898854).
+This book is substantial; and although it doesn't presuppose any specific
+mathematical background knowledge, it will be a good choice only if you're
+already comfortable reading advanced math textbooks.
+If you choose to read both the Hankin book and this book, you'll notice the authors made some different
+terminological/notational choices. At first, this makes comprehension slightly slower,
+but in the long run it's helpful because it makes the arbitrariness of those choices more salient.
+
+* Another good book, covering some of the same ground as the Hankin, and the Hindley & Seldin, but delving deeper into typed lambda calculi, is *Types and Programming Languages*, by Benjamin Pierce, currently $77 hardback / $68 kindle on [Amazon](http://www.amazon.com/dp/0262162091). This book has many examples in OCaml.
+
+
+----
+
+All wikis are supposed to have a [[SandBox]], so this one does too.