15d99aa7fd90

Finally
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Sat, 04 Aug 2018 13:20:42 -0700
parents 09fe133e6c33
children 63c2a02ed78c
branches/tags (none)
files content/blog/2018/08/a-road-to-common-lisp.markdown

Changes

--- a/content/blog/2018/08/a-road-to-common-lisp.markdown	Sat Aug 04 12:57:08 2018 -0700
+++ b/content/blog/2018/08/a-road-to-common-lisp.markdown	Sat Aug 04 13:20:42 2018 -0700
@@ -1,7 +1,7 @@
 +++
 title = "A Road to Common Lisp"
 snip = "One way to learn this old, deep language."
-date = 2018-07-03T16:00:00Z
+date = 2018-08-01T16:00:00Z
 draft = false
 
 +++
@@ -304,7 +304,8 @@
 multiple implementations of it, which gives you choices.  There are a bunch of
 options, but I'll make it simple for you:
 
-* If you're comfortable with the command line, installing packages with a package manager, and already have a text editor you like, choose [SBCL][].
+* If you're comfortable with the command line, installing packages with
+  a package manager, and already have a text editor you like, choose [SBCL][].
 * Otherwise, choose [ClozureCL][CCL] (often called "CCL").
 
 That's Clozure with a Z.  Clojure is something entirely different that just
@@ -610,8 +611,58 @@
 
 ### Learning Paradigms
 
+At this point you should have a pretty good handle on the basics of Common Lisp,
+and have set up one of the more powerful development environments.  Your next
+goals should be to learn how to write idiomatic Common Lisp and to get some
+practice using your fancy new environment.
+
+I think the perfect book for both of these is [Paradigms of Artificial
+Intelligence Programming][TODO], often abbreviated as PAIP.  The book was
+recently made available for free as a PDF, or you can buy a paper copy from
+if you prefer.
+
+This book was written in 199 TODO so it's not about the hyped up AI fields
+you've been hearing about in the news like machine learning or deep learning
+— instead it's a tour of [Good Old-Fashioned AI][gofai].  Even if you're not
+particularly interested (yet?) in this kind of AI, the book is a great example
+of how to write Common Lisp code.
+
+One thing I really love about this book is that almost all the functions in it
+have docstrings.  If you look at most other programming books they omit the
+documentation strings, presumably for space reasons and because they feel the
+surrounding text is documentation enough.  But writing helpful docstrings is an
+art in and of itself, and I think books that omit them train users that "good
+code omits docstrings", which is a bad habit to get into.
+
+The book contains *plenty* of exercises, conveniently categorized by how
+difficult or involved they are:
+
+* `S` for "seconds".
+* `M` for "minutes".
+* `H` for "hours".
+* `D` for "days".
+
+This is a very good idea which more books should steal.  Do all of the `S` and
+`M` exercises, and try your hand at at least a few of the `H` ones.  If a `D`
+sounds particularly interesting don't be afraid to spend some time on it
+— really digging into a problem is exactly what you need at this point in your
+Lisp journey.
+
+[gofai]: TODO
+
 ### Recipes for Success
 
+The final book I'll recommend to every aspiring Lisp programmer is [Common Lisp
+Recipes][TODO] (abbreviated as CLR).  Unlike most of the other books I've
+recommended so far this one is relatively recent: it was published in 2015 TODO.
+It's not free, but I think it's well worth the money it costs.
+
+The book is written by the author of several very heavily used Common Lisp
+libraries.  It's a bit of a grab bag of topics (which is why I think you need
+a decent amount of Lisp under your belt before you tackle it) but it's a very
+well-written grab bag that will teach you a lot of things you won't find in
+other books.
+
 ## Where to Go From Here
 
 If you made it through all the books and activities in the previous section:
@@ -763,9 +814,9 @@
 “package”) to mean different things than people mean today. Things get easier
 once you internalize what Common Lisp means by the terms.
 
-NOTE: I posted a quick-and-dirty version of this section as a [comment][] on Lobste.rs
-while I was waiting for a plane — this section of the post is an expanded
-version of that comment.
+NOTE: I posted a quick-and-dirty version of this section as a [comment][] on
+Lobste.rs while I was waiting for a plane — this section of the post is an
+expanded version of that comment.
 
 [comment]: https://lobste.rs/s/fwhuz5/my_lisp_journey_1_getting_started_with#c_ebhvzq
 
@@ -940,14 +991,15 @@
 #### Recap
 
 Here's a quick recap of the different layers of project structure you'll
-encounter in Common Lisp:
+encounter in Common Lisp.  Jot these down on a post it note you can refer to as
+you're learning.
 
 * **Files** are files on your hard drive.
 * **Packages** are containers of symbols. They are orthogonal to files.
-* **Systems** are collections of code, instructions on how to load this code,
+* **Systems** are collections of code, instructions on how to load that code,
   dependency lists, and metadata. They are orthogonal to packages.
 * **Projects** are high-level collections of... "stuff" such as code,
-  documentation, maybe some image assets, etc. They are (mostly) orthogonal to
+  documentation, maybe some image assets, etc.  They are (mostly) orthogonal to
   systems (are you seeing a trend here?).
 * Common Lisp itself knows about files and packages.
 * ASDF adds systems.
@@ -975,7 +1027,8 @@
 more than one library tries to claim the same two-letter name it causes
 problems.  An example of this is Bordeaux Threads which has a package called
 `bt`.  It's too late to change this now, but try to avoid such easily-clashing
-names when making new packages.
+names when making new packages.  I'd even try to avoid three or four letter
+names, but I'll admit I've broken this rule myself a couple of times.
 
 Another question that comes up is: "I see a lot of projects called `cl-whatever`
 — should I name my projects with the `cl-` prefix?".  Some Common Lispers hate
@@ -1014,12 +1067,12 @@
 
 Common Lisp doesn't have a *large* of a community as some newer languages, but
 it still has a lot of libraries because it's had a community for a longer time.
-The stability of the core language means that libraries that were written in
-portable Common Lisp ten or twenty years ago can still run just fine.
+The stability of the core language means that many libraries that were written
+in portable Common Lisp ten or twenty years ago can still run just fine.
 
 In this section I'll give you a quick overview of some of the more popular
 libraries you might run into as you learn the language.  You don't have to use
-all of them, of course, but it's helpful to have some idea of what's available.
+all of them, but it's helpful to have some idea of what's available.
 
 #### Alexandria