32 comments

[ 2.7 ms ] story [ 68.2 ms ] thread
This is awesome! Thanks so much! For general discussion: what are all the L<insert-language>THW sites? How do they compare (how far do you get, ease of use, etc)
"Programming MotherFucker - Do you speak it?" -Zed Shaw

Couldn't resist the above quote from Zed Shaw; the guy who started the Learn X The Hard Way series. Overall I think these tend to be a very good approach to learn, especially for someone just starting out.

I'm about to learn Lisp and/or Clojure(Script). How does this book differ from for e.g Land of Lisp? I was planning to get my fingers dirty with some more light material before digging in the recommendations (PAIP, PCL, SICP).
Looks like this one isn't totally finished, at the moment. You're probably better off starting with Land of Lisp.
If you're interested in looking at Clojure, checkout Clojure for the Brave and True.

http://www.braveclojure.com/

Thanks for the repleis! I'm currently close to web development (as people nowadays) so that's why I'm thinking about learning clojure/script rather than Lisp - because I can use clojure in daily work but not Lisp.
Practical Common Lisp is the best Common Lisp learning book there is. Land of Lisp is funny and all, but it doesn't make any attempt to really help you get set up with practical tools for interacting, relies on CLISP which is buggy and slow, and is honestly a bit too in love with huge, complex nested data trees and car/cdr wizardry.

PCL will teach you CL, how CL works, in clear language and examples.

Ultimately, though, I realized I prefer the Scheme family (especially Racket). CL is crufty and arcane, and I prefer the Lisp-1 model (this does come at a cost to macro ease of use, but I'm not yet a huge macro fanatic, and once you learn the harder Scheme/Racket macros they can do insanely great things).

For learning Scheme, SICP is the classic, and there's an interactive version of it. I also recommend the Little Schemer for getting yourself in the mindset of learning how to use recursion in clever ways.

For Racket, the go to choices are Realm of Racket (which you can think of as a more clearly written Racket version of LoL but with a slightly less interactive approach), and How To Design Programs (which is quite a lot to get through, being designed as a full year course in CS).

I started my Lisp journey seeking to learn Clojure too. I starting out with The Little Schemer[1]. I chose Scheme so that I could first wrap my head around the basic Lisp syntax, along with the recursive and functional thinking. To keep things as simple as possible, I did 95% of the exercises using a composition notebook and pencil[2]. This kept the incidental complexity to a minimum.

Later, I moved on to the Clojure books. Working through the Little Schemer was invaluable (and its bibliography is excellent too).

[1] http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/02...

[2] https://github.com/evanspa/TheLittleSchemer/blob/master/sche...

I don't want to be too mean, but it looks like very little has changed since the six months or so when this last popped up on HN. The book still has none of the exercises that the exposition places so much weight on. Meanwhile, the introduction still mostly tells rather than shows—for all the discussion about how LISP is an elite hacker language, there are no actual examples backing up that statement (IS it in fact widely used by hackers?). Telling me how great LISP is and rambling on about Heinlenian mysticism is not going to work if theres no real substantive material.
Agreed. I bookmarked LLTHW a few months ago when I decided I "need" to learn a Lisp (if, indeed, one can ever be said to truly know a Lisp), but found the extreme WIP-nature off-putting. I think it will be a good resource in a few more years, though.

In the meantime, I've had GigaMonkeys.com open in a separate tab ever since and plan on purchasing the silly "Learn Lisp Through Games!" book.

Edit: But I did find the author's nouveau mysticism/occultism quite interesting. I tend to forget that those belief systems are still around.

This is slightly off-topic, but I think it's worth explaining that I don't have a "belief system", per se. I'm a deductive thinker (which I realize is weird for a programmer), so I find metaphor and allusion to be useful tools for explaining myself. Mystical language, in particular, is very rich, colourful, and goes hand-in-hand with Lisp culture, since the multi-paradigm nature of the language appeals to deductive thinkers. Obviously I have studied psychonautics and chaos magick in some depth, and I was particularly taken by the idea from these modern schools of mysticism, that belief is a tool, that can be wielded to consciously control your own mind, much like (but not exactly like) how a programmer controls a computer by writing software.

As for my own heavily transhumanist "system" of Neuro-Occultism, it's more of a philosophical framework---the basic premise is that all supposedly supernatural phenomena can be explained in terms of psychology, neuroscience, and the physical sciences; that only once you have ruled out the possibility that a supposedly supernatural experience is a purely psychological phenomenon can you begin to model a physical explanation; that the experience of supposedly supernatural phenomena are more interesting and powerful when examined in this light; and that even qualitative systems such as the human mind can be described quantitatively, by adapting research in quantum computer science and biological computation to the field of neuroscience. It's not so different from Cognitive Science, only it emphasizes that once you know that all belief systems are just paradigms, that the human mind can support multiple, simultaneous, even contradictory paradigms, and that your fundamental being is in fact a quantitative system, you can really start to put your brain to work. The problem lies with the fact that the language of the unconscious mind is purely symbolic and associative; thus, a mystical language is necessitated by the structure of our minds---even though a rigorous, mathematical model would be preferable in terms of the scientific method. Lisp, metaphorically applied to the model of the mind, brings us most of the way there.

The purpose of Neuro-Occultism is to develop such a rigorous, mathematical model of consciousness and being; and in so doing, deprecate itself. I see this as an essential aspect of the "technological singularity", both for the realization of emergent machine intelligence, and for the transfer of human consciousness to a computational system---because until such time as the human mind can be understood quantitatively, the singularity will remain science-fiction and fantasy. But then, even the idea of the singularity is a problem, a fundamental limitation of current consciousness that prevents us from seeing past the event horizon of this convergence of technology, biology, individual and social psychology; in order to both achieve the singularity and transcend it, we need to first transcend our own segmented and qualitative perception of self.

There's a lot more I'd like to say on the subject, but that would be a book of its own. Back on topic: I do realize that the heavy-handed mystical tone and Lisp proselytization currently present in the introductory text of LLTHW is useless cruft; I'm a passionate and excitable person by nature, but I recognize that it is holding back the work and interfering with Zed Shaw's methodology. Writing a book is an iterative process, and my effort has been focused on getting a complete scope in order to pump out solid, relevant exercises---so for the time being, I've simply marked the intro chapters as rejected/need-to-be-rewritten. I really hope it won't take me a few more years to finish this book though!

Thanks for responding. To be clear, I don't object to the inclusion of the mysticism, I simply find it intriguing. Most surprising to me were not your beliefs, but that you had coined a term, "Neuro-Occultism," that is utterly ungooglable--the only results returned are your own writings. I spent some time reading your blog where you discussed at length your connections between mysticism and Lisp.

I was disappointed, though, to learn that your place of employment is not strictly Lisp-only.

...Now I feel like a total stalker. It's all a few clicks away from the LLTHW site, I swear!

Haha---it's fine. The internet makes everyone's life an open-book. Which place of employment do you mean, though? As a contractor, I jump around a lot; but I'm also involved with a start-up (but that's still running in stealth mode, so there's not much posted about it online). I have managed to use Common Lisp at nearly every contract or job I've worked at for the past few years though---once employers and clients became more responsive to it again. Even when the job didn't strictly allow it, I used Lisp for code generation anyway.

As to your clarification---yes, that was understood. I was more speaking to the general criticisms about my tendency towards mystical language, since that comes up fairly often. I would be more surprised if there was third-party material discussing Neuro-Occultism, TBH---the occult community at large dislikes it because I deny a metaphysical explanation; and most of the people in the scientific community that I've shown it to dislike it because it even deals with the problem of mysticism (much like Freud criticized the work of Carl Jung for the same reason). How dare I!

That being said, I have been making good progress this year on my adapted process calculus---I'm just putting the finishing touches on the BNF grammar, and then I can begin testing its logical consistency and writing proofs. Once it's finished, I'm hoping to be able to describe physics, quantized consciousness, quantum and classical computing all with the same notation. Fingers crossed.

I've been working on LLTHW pretty much every day since LLTHW was first posted on HN, but as I said in my reply to austenallred, I'm still working on shaping the content, in order to have a very clear work-plan to follow as I write the exercises. I'm hoping that my progress will be more visible once I have finished scoping the content of each chapter.
> Lisp—the friendly nickname for Common Lisp

Sorry, but this is an awful way to start... just get the Wikipedia definition?

Or dont talk about these prehistoric details _at all_.

Dont talk about the 80s. Dont talk about 27 different and incompatible implementations. Dont talk about lambda calculus or McCarthy. Dont talk about 1001 different editors. Nobody finding about Lisp today cares about these things, it is just annoying noise that dilutes the message.

If youre stealing the title of a Python book, then at least make the experience as newbie-friendly as Python is.

I really think the title for this should be changed. The title mimics zedshaw's "Learn X the Hard Way," (which, by the way, is fantastic), but the content doesn't mimic any of the things that make "Learn X the Hard Way" great.

The brilliant thing about zedshaw's "Learn X The Hard Way" is that it focuses on typing the code and learn-by-doing programming. Learn Lisp the Hard Way just explains Lisp then tacks on a few exercises.

I (and presumably Zed, from his previous comments), wouldn't mind if the author had mimicked the entire format, because it works. "Learn Lisp the Hard Way" would be necessarily very different from "Learn JavaScript the Hard Way," but this is just a programming book with a familiar yet misleading title slapped on top.

You're right, of course. It's a little overwhelming at times, how much interest and attention this project has garnered---especially so early into the 2nd draft, where I'm still shaping the breadth, depth, scope, and direction of the content. The first time this project was posted to Hacker News earlier this year, I felt forced to push out exercises for the first two chapters as quickly as possible, just to give visitors some material to actually work with; but they do not yet reflect the final style and methodology that I'm aiming for. I do want to make it clear, though, that I'm not going to stop working on this project until it meets the standards set down by Zed Shaw for LxTHW-based books.

The most important factor, as I understand it, is the show-don't-tell method; it's also the most difficult to achieve for a language like Common Lisp, which is so foreign to most people. For the purposes of this draft-in-progress, however, just consider every explanation currently in the text as a placeholder for concrete examples that will illustrate the point better.

Another important factor is the pace of each exercise. One of the biggest features I noticed about Zed Shaw's Learn Code The Hard Way books is how perfectly he scaled the difficulty of progressive exercises, to maintain an even pace. For an absolute beginner to programming, an exercise should take no more than an hour to complete---and that's a goal I'm working towards for LLTHW as well.

To achieve these goals, once I finish laying out the content and direction with the intro text to each chapter, I'm going to be working backwards in each Part, writing progressively easier exercises, to make sure that all necessary material is covered, and that the pace is structured properly. But even once the 2nd draft is complete, I will still be relying on user feedback to adjust the ordering and pace of the material, as needed.

Thanks for your feedback, and I hope you'll continue participating in this project as I work out all the kinks!

> Common Lisp is not a ‘pure’ functional language, however, such as Haskell; it is multi-paradigm like OCaml. You can choose to use the functional paradigm in Common Lisp if you like, but you can also use Procedural, Object-Oriented, Event-Oriented, novel new paradigms like Aspect-Oriented, or mix and match to your hearts content. __Strict Functional programming languages do not offer this flexibility__.

"Strict functional programming languages" could be interpreted as languages with strict evaluation. But I guess it is clear in this context that they mean pure functional languages (or pretty rigorous with regards to purity).

That's a very expansive table of contents. I'm loving the site design and I look forward to the more difficult chapters, particularly the math-heavy ones. Good luck!
Thanks HN, the site is now throwing a 502. I didn't even make it into the second part of the preface. ;)
And it looks like my webhost is now automatically blocking the process. Sorry everyone!
The _really_ hard way. Bad Gateway.
Just a quick note, even though it's been mentioned already: I let people and even encourage them to copy my method and use a similar title to me own Learn X The Hard Way. That is all.
Thanks everyone for your continued interest and support of this project as I work towards completing the second draft!

Unfortunately, it looks like the traffic spike has once again caused my webhost to kill and block the web application's process---so I'm going to have to move over to a better cloud service and an async web-app to better support this level of interest from the community.

I will announce the re-launch of LLTHW through my blog, which is syndicated on Planet Lisp. Until then, I do highly recommend Practical Common Lisp by Peter Seibel, also available online for free at: http://www.gigamonkeys.com/book/

The best lisp book I have found to learn Lisp, while really understanding all that's happening underneath is "COMMON LISP: An Interactive Approach".

Basically, there's no hand waving in this book. It doesn't teach you to have a lisp blog in five minutes doing copy paste of code you don't understand.

It respects you as a smart learner, and makes you write the code, you learn doing stuff by yourself being smartly led by the author, and by the end of the book you have written a very complex piece of software with many advanced concepts and you understand more about lisp than you could have by following endless web tutorials.

The book can be downloaded from: http://www.cse.buffalo.edu/~shapiro/Commonlisp/

It is to me a vastly underrated resource for all people interested in Lisp.

Thanks for the link! I'm surprised that I have not seen this before.

The methodology in this book is definitely close to what I'm trying to achieve with LLTHW. I'll be sure to add it to the list of references, and look forward to what it can teach me about teaching Lisp.