About this course

This course is about designing and implementing more intelligent software capable of reasoning using symbolic knowledge representations, and doing so with maintainable testable code.

This is a learn-by-doing course. Class meetings will be to demonstrate new concepts, try out things, and ask questions, not listen to lectures. For more, see How this course works.

The primary languages for this course are Common Lisp and JavaScript. Prior Lisp knowledge is not expected, but fluency in programming is.

The textbook for Lisp is Paul Graham's ANSI Common Lisp. You must have this book for the exercises. It has some great examples, plus an appendix describing all 900+ Common Lisp functions.

JavaScript is everywhere, from browser to back-end. Douglas Crockford has called JavaScript Lisp in C's clothing. This is not accidental. Brendon Eich, who created JavaScript, was originally going to implement Scheme.

The recommended online references for JavaScript are The Modern JavaScript Tutorial, and the Mozilla Developer site. For starters, see my tips on modern JavaScript. For more of an introduction to JavaScript tutorial, you can try my tutorial, Hello, JavaScript.

The first thing to do is set up the CS325 coding environment. As soon as that is done, start working on some exercises.

Bring a laptop to every class. Many classes will include computational activities, either web-based or Lisp-based. Participation in these activities is about 10% of your grade.

"Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp." — Greenspun's Tenth Rule
"Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot." — Eric Raymond, How to Become a Hacker
"Please don't assume Lisp is only useful for Animation and Graphics, AI, Bioinformatics, B2B and Ecommerce, Data Mining, EDA/Semiconductor applications, Expert Systems, Finance, Intelligent Agents, Knowledge Management, Mechanical CAD, Modeling and Simulation, Natural Language, Optimization, Research, Risk Analysis, Scheduling, Telecom, and Web Authoring just because these are the only things they happened to list." — Kent Pitman, Quotes, Quoted Back