Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Which Lisp/Scheme and why and how to learn?
3 points by joeclark77 on Sept 6, 2014 | hide | past | favorite | 6 comments
Since starting to read HN, the idea has entered my consciousness that there'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'm a Windows and Linux user so cross-platform is important. Which Lisp/Scheme variant(s) would be valuable for me to try to learn and use? And what's the best way to learn?



I'm currently using Racket ( 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/ ). I'm using it for a small site, with a few hundreds users.


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/

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


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


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.


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/Getting+Started


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.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: