

Ask HN: Which Lisp/Scheme and why and how to learn? - joeclark77

Since starting to read HN, the idea has entered my consciousness that there&#x27;s something of value to be learned in the Lisp family of programming languages.  I am primarily a Python programmer now with experience in BASIC, Pascal, Perl, PHP, R, etc but no Lisps.  My programming needs are for web apps and for (non-graphical) simulation models.  I&#x27;m a Windows and Linux user so cross-platform is important.  Which Lisp&#x2F;Scheme variant(s) would be valuable for me to try to learn and use?  And what&#x27;s the best way to learn?
======
gus_massa
I'm currently using Racket ( [http://racket-lang.org/](http://racket-
lang.org/) ), it's a Scheme dialect. It supports Windows, Linux and OSX. It
has a nice IDE with support for macro expansion. And it has a lot of packages
("batteries included") and is usually faster than Python.

It also has a web server ( [http://docs.racket-lang.org/web-
server/](http://docs.racket-lang.org/web-server/) ). I'm using it for a small
site, with a few hundreds users.

~~~
brudgers
I'll second Racket but for somewhat different reasons.

1\. Like Python, the Racket community is oriented toward teaching people to
learn Racket. This is something it inherits directly from Scheme's creation in
part as a teaching language and four decades of use as one. [This is in
contrast to Common Lisp, which tends to be more oriented toward practical
professional programming].

This means that the Racket community is attentive to the onboarding process
and sensitive to the fact that people come to it with widely varying levels of
technical sophistication and familiarity with programming.

2\. The core of the Racket contributors are in academia and this provides both
stability to the core language's roadmap [e.g. Felleisen has been working on
Racket and it's predecessor for several decades], and contributions from the
edges of computer science to both Racket's libraries and core [i.e.
Felleisen's graduate students have been working on Racket and its predecessor
for several decades].

This means that Racket as an ecosystem is both big, and has canonical
libraries for a lot of the non-core functions a programmer might wish to use.

3\. However, one of the Downsides of Racket is a lack of IDE options. Dr.
Racket doesn't really compare to big iron grade IDE's like Eclipse, IntelliJ,
or Visual Studio. It's more like a top of the line Huffy than something you'd
choose for a double century.

That's not to say that Emacs isn't an option, or that a more traditional Lisp
development approach aren't alternatives - for the former see Geiser [1], for
the latter see the Systems Programming with Racket Tutorial [2].

4\. The other alternatives are Clojure and Common Lisp. Both communities are
targeted more at the professional programmer than at onboarding a population
with diverse levels of technical expertise and objectives. You sort of have to
dive into the middle.

Clojure's community being newer has much more of a "web 2.0" vibe. Being
focused on leveraging popular virtual machines [JVM, javascript, CLR] and
having a single celebrity spokesmodel, there is also more of a tendency of the
community to get behind tools, libraries and methods as canonical and to make
these available in a more contemporary fashion.

On the other hand, Common Lisp has decades of really smart saavy developers
creating efficient tooling and well written documentation for it. There's a
lot out there. The community is just more diverse and the resources often
require access through "web 1.0" style interfaces. The community shows its
heritage in the "pre-internet".

One of the great positives is that the Common Lisp community has a greater
willingness to go deeply intellectual on programming and general. It doesn't
have marketing brochures.

[1]: [http://www.nongnu.org/geiser/](http://www.nongnu.org/geiser/)

[2]: [http://docs.racket-lang.org/more/index.html](http://docs.racket-
lang.org/more/index.html)

------
craigching
I don't have a lot of advice about LISP proper, but Scheme ... ah, Scheme is
near and dear to my heart. But which one? Look for a standard one that is
current. The usual suspects are Chicken, Guile, Gambit, Racket, Chez (Petite
Chez) (am I missing any?). I prefer Chicken or Petite Chez because I'm
currently going through "The Reasoned Schemer" and those two seem to work best
with the code from the book.

But my ultimate suggestion for a LISP is Clojure. Runs on the JVM, has good
Java interop (and a huge community of open source software) and has nice
syntax to boot (I love the use of [, {, etc. instead of just ( for the syntax
to differentiate different data structures).

------
malisper
I would say the easiest to learn is Common Lisp because of the amazing
debugger + conditions/restarts. If you make a mistake, instead of aborting the
program like most programming languages would, Common Lisp will give you a
list of _restarts_ which let you specify how to continue executing (change
variable values, return a new value instead, etc).

To learn it I would recommend _COMMON LISP: A Gentle Introduction to Symbolic
Computation_ to get a good foundation. After reading that, I would suggest
_ANSI Common Lisp_ , which introduces some of the more advanced features and
gives some pretty good examples of what you can do with Lisp (writing a DSL
for generating HTML is one of them). Then I would recommend _On Lisp_ which
gives all kinds of crazy things you can do with Lisp (embedded Prolog, DSL for
parsing English, and many other cool things).

There are many other great books out there which you may way want to look at.
_Land of Lisp_ and _Practical Common Lisp_ are both good introductory books,
but I find that they introduce too much too fast and it makes it difficult to
get very far in them. _Paradigms of AI Programming_ is probably one of the
best programming books out there, but there is a lot of advanced material in
it.

------
informatimago
Common Lisp (any implementation, you may start with ccl, clisp, sbcl, but the
other implementations are useful in specific (deployment) situations, like
abcl on JVM, ecl to be embedded in C/C++ applications, etc).

[http://cliki.net/](http://cliki.net/)
[http://cliki.net/Getting+Started](http://cliki.net/Getting+Started)

------
stevenspasbo
I've been working my way through SICP the last few weeks using mit-scheme, but
the other night I installed Racket. They have pretty good documentation, as
well as a few tutorials to get you started.

