Land of Lisp
vsedach writes "Remember the 1980s and BASIC, when programming was simple, brains flew through space, and everyone ate lasers? Computer magazines came with code listings, and classics like David Ahl's BASIC Computer Games offered a fun and easy way to get started in computer programming. Conrad Barski remembers, and with Land of Lisp, he's set out to demystify programming in the 21st century." Keep reading for the rest of Vladimir's review.
Land of Lisp: Learn to Program in Lisp, One Game at a Time!
author
Conrad Barski, M.D.
pages
504
publisher
No Starch Press
rating
10
reviewer
Vladimir Sedach
ISBN
978-1-59327-281-4
summary
Learn to Program in Lisp, One Game at a Time!
This is no small feat. Modern computers don't come with anything that looks like BASIC. Getting started with a "real" programming language like Java requires installing and learning hundreds of megabytes worth of compiler and integrated development environment. Barski's thesis is that Lisp is a refreshing alternative - it offers BASIC's ease of getting started (get a prompt, type in code, and it works), while providing a combination of modern features unmatched in other programming languages.
The first thing that immediately jumps out about Land of Lisp is that it has a lot of comics. The book is an outgrowth of Conrad's Casting SPELs in Lisp illustrated online tutorial, which originally appeared in 2004 (incidentally, around the same time as why's (poignant) guide to ruby, probably the most famous and epic programming language comic book). The comics are humorous and irreverent - if you're a C programmer, you might be surprised to know that you're a Cro-Magnon fighting the COBOL dinosaur.
Despite the silly humor and Barski's approach of introducing programming completely from scratch, Land of Lisp builds up to cover topics like graph theory, search algorithms, functional and network programming, and domain-specific languages. All throughout, the book emphasizes various techniques for doing I/O. The topics covered will leave the reader with a solid understanding of what modern programming entails and a good basis from which to explore either application or lower-level systems programming.
The most unintentionally impressive aspect of Land of Lisp is that it manages to completely explain web programming. No more hiding behind complicated software stacks and impenetrable web server packages - chapter 13, titled "Let's Create a Web Server!," does exactly what it promises, in only 15 pages. Later chapters introduce HTML and SVG to build a graphical game as a web application. If nothing else, this book will leave the reader with all the necessary basic skills and total confidence in their understanding to build real-world web applications.
Other introductory programming books use Lisp, but none fall into the same category as Land of Lisp. Abelson, Sussman and Sussman's Structure and Interpretation of Computer Programs, arguably the greatest introductory programming book ever written, requires a solid math background to understand the examples. Felleisen et alia's How to Design Programs offers a much deeper introduction to programming than Land of Lisp, but is an academic textbook, and hence lacks funny cartoons and may be boring. Friedman et alia's The Little Schemer is a favorite of many, but doesn't have LoL's real-world applications.
Land of Lisp is an excellent book for someone who wants to learn how to program, for web programmers who want to move up out of their niche and start learning about CS theory and systems programming, and for anyone who is puzzled about what really goes on behind the web and wants to learn what web programming is really about. Experienced programmers who want to jump into using Lisp are probably better off with Peter Seibel's Practical Common Lisp, though.
Watch Conrad's hilarious promotional music video for the book.
You can purchase Land of Lisp: Learn to Program in Lisp, One Game at a Time! from amazon.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
The first thing that immediately jumps out about Land of Lisp is that it has a lot of comics. The book is an outgrowth of Conrad's Casting SPELs in Lisp illustrated online tutorial, which originally appeared in 2004 (incidentally, around the same time as why's (poignant) guide to ruby, probably the most famous and epic programming language comic book). The comics are humorous and irreverent - if you're a C programmer, you might be surprised to know that you're a Cro-Magnon fighting the COBOL dinosaur.
Despite the silly humor and Barski's approach of introducing programming completely from scratch, Land of Lisp builds up to cover topics like graph theory, search algorithms, functional and network programming, and domain-specific languages. All throughout, the book emphasizes various techniques for doing I/O. The topics covered will leave the reader with a solid understanding of what modern programming entails and a good basis from which to explore either application or lower-level systems programming.
The most unintentionally impressive aspect of Land of Lisp is that it manages to completely explain web programming. No more hiding behind complicated software stacks and impenetrable web server packages - chapter 13, titled "Let's Create a Web Server!," does exactly what it promises, in only 15 pages. Later chapters introduce HTML and SVG to build a graphical game as a web application. If nothing else, this book will leave the reader with all the necessary basic skills and total confidence in their understanding to build real-world web applications.
Other introductory programming books use Lisp, but none fall into the same category as Land of Lisp. Abelson, Sussman and Sussman's Structure and Interpretation of Computer Programs, arguably the greatest introductory programming book ever written, requires a solid math background to understand the examples. Felleisen et alia's How to Design Programs offers a much deeper introduction to programming than Land of Lisp, but is an academic textbook, and hence lacks funny cartoons and may be boring. Friedman et alia's The Little Schemer is a favorite of many, but doesn't have LoL's real-world applications.
Land of Lisp is an excellent book for someone who wants to learn how to program, for web programmers who want to move up out of their niche and start learning about CS theory and systems programming, and for anyone who is puzzled about what really goes on behind the web and wants to learn what web programming is really about. Experienced programmers who want to jump into using Lisp are probably better off with Peter Seibel's Practical Common Lisp, though.
Watch Conrad's hilarious promotional music video for the book.
You can purchase Land of Lisp: Learn to Program in Lisp, One Game at a Time! from amazon.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
(incidentally, around the same time as why's (poignant) guide to ruby, probably the most famous and epic programming language comic book)
Hey, take it easy there, this is a book review meant for humans (not some code for an interpreter)!
Oh great, now you've got me doing it too. Do you have any idea how long it took for this to go away the last time I coded Lisp?
*obsessively tallies and double checks to make sure he closed all his parentheses before hitting submit*
My work here is dung.
But where's our new hyper advanced LISP machines?
Nothing will beat the Symbolics Lisp machine. Clozure is great, but not quite there yet.
I'd buy that!
...they'd never end... Sigh. I remember David Ahl's Basic Computer Games with such nostalgia, spending my first weeks in late 1974 as a freshman typing in SUPER STAR TREK onto paper punch cards to run on the IBM360 at University of Tennessee. As a county bumpkin coming into the land of Oz where there were Real Actual Computers I could work with for the first time, I though I had Entered The Future. Little did I know that the future had only begun, and continues today. Probably will continue into tomorrow, too.
If you're a C programmer, you might be surprised to know that you're a Cro-Magnon fighting the COBOL dinosaur.
From the "random" quote of the day at the bottom right of the page:
COBOL is for morons. -- E.W. Dijkstra
My work here is dung.
What do Smileys do to Lisp?
My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
Denote keyword arguments?
(happy :o(sad))
What I want to know is why, in 2010, most commonly used languages (Java, C++, C#, etc) do not have even a tiny fraction of the metaprogramming ability that LISP provided to us many decades ago. LISP itself isn't so practical, but we could have learned from it, and we didn't.
What happened there? We have lots of *other* things, but somehow it feels like we dropped the ball there. We waste massive amounts of expensive programmer time because of it.
Every Windows PC comes with VBscript - open a *.vbs file, and just start typing away Visual Basic.
Every PC comes with multiple javascript runtimes - just open a *.html file and start scripting away.
I wouldn't recommend BASIC or LISP for someone wanting to learn modern object-oriented programming today. A lot of us started out with a structured languages like this, but you wouldn't want to start out that way if you were doing it for the first time now. My university uses Alice and it works pretty well. Alice teaches much more modern object-oriented principles that would be much more useful than BASIC or LISP to a modern programming student.
SJW: Someone who has run out of real oppression, and has to fake it.
I initially learned to code (BASIC) from 3-2-1 Contact magazines.
The premise that modern computers don't provide a language as accessible as BASIC seems questionable.
Macs ship with Python and AppleScript, for example. The former is pretty simple syntactically and provides the "get a prompt, type in code, and it works" behavior. The latter is also (arguably) easy to understand, and is available from a simple IDE just by opening AppleScript Editor.
Alice, who the fuck is Alice?
What's this "object oriented" thing you speak of? If you can't do it in C or LISP, is it really necessary? :-)
Terrorist, bomb, al Qaeda, nuclear, yellowcake, kill, assassinate. Carnivore is dead... long live Echelon.
I wouldn't recommend BASIC or LISP for someone wanting to learn modern object-oriented programming today. A lot of us started out with a structured languages like this, but you wouldn't want to start out that way if you were doing it for the first time now. My university uses Alice and it works pretty well. Alice teaches much more modern object-oriented principles that would be much more useful than BASIC or LISP to a modern programming student.
Common Lisp has object oriented techniques that Java-like languages still fail to have, like multiple-dispatch and metaclasses. Read your manuals before speaking lies, Common Lisp has the most advanced OO system among modern programming languages.
I remember David Ahl. I don't think he gets enough respect today for what he did for the industry with his magazines and books. BTW you can get the text of old articles from Creative Computing at: http://www.atarimagazines.com/
Coder's Stone: The programming language quick ref for iPad
Pay no attention to my user name- I promise to respectfully answer any questions you may have, about Lisp or the book!
Can anyone post links to any Lisp web application?
It can be something different then the HTML & SVG web game, though I would be extra keen to see that run...
San Francisco?
Slashdot's rate-of-post filter: Preventing you from posting too many great ideas at once.
Because there is no -1 Moron
To get the most out of LISP, you really have to approach it with a mindset particularly distinct from most programming. It also happens to be distinct in nearly requiring recursion that is generally not part of an 'easy' getting started with programming. That and most people will club themselves over the head trying to sort out how many close parentheses are needed when they write something *particularly* 'clever'.
If in modern Windows, Powershell is a good starting point, if in Linux, Python. Unlike LISP, both yield immediately marketable skills and are easy to start toying with basics and do not require a lot of knowledge of where to go to get it running, it already exists on your platform (almost certainly).
I do agree that 'web frameworks' have mutated the relatively straightforward nature of underlying http into a frightening looking mystery to the uninitiated, but at least some in the industry are swinging back to the basics and discarding some of the oddly complex schemes over HTTP.
XML is like violence. If it doesn't solve the problem, use more.
Common Lisp, which is what the book uses, has the first ANSI standard OO programming system, CLOS - short for the "Common Lisp Object System" - which includes multiple inheritance, generic functions, a meta-object protocol, and is in all essentials, a superset of the capabilities of the object systems of mainstream OO languages such as C++, Java, Smalltalk and Objective-C.
No one is advocating entering a time warp to the 1960s to use LISP 1.5 for the teaching of modern OO programming, least of all Conrad Barski, the author of Land of Lisp, which uses ANSI standard Common Lisp.
Please, please say there will be a Kindle and/or iBook version of this book...
I'll preorder the physical copy anyway, but it would make a great eBook I think (not having seen it yet).
I think everyone, doing anything, should learn Lisp just to really open yourself to alternative programming approaches. I have used different techniques I learned in Lisp in every programming language I have ever used, from shell scripts to full languages like Java, C++, or Objective-C.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
TV Voice: "Do you remember a time when cookies came fresh from the oven? Pepperidge Farm remembers!"
Fry: "Ahh, those were the days."
TV Voice: "Do you remember a time when women couldn't vote and certain folk weren't allowed on golf courses? Pepperidge Farm remembers!"
One convenient locations...in Africa.
http://www.planetpdf.com/codecuts/pdfs/ooc.pdf
Can I buy it as an elecrtonic copy, e.g. Kindle?
I saw electronic copies available on O'Reilly's site. Not exactly a huge cost benefit but that seems to be the norm.
My work here is dung.
What Lisp promised then is what Python promises now. With one difference, in that Python respects the visual limitations of humans.
Different from parentheses, it's very easy to undo a bunch of indentations, just put the left margin where you want it.
Well, if only the TAB character had never been invented... TAB is a kludge to make a typewriter behave sort of like a spreadsheet but, unfortunately, it fucks up the excellent "Don't mix content with presentation" principle.
First, Lisp is not an acronym.
Second, Lisp has the CLOS, which is an advanced OOP system in its own right with multiple inheritance, polymorphism, encapsulation, multiple dispatch and all that other groovy nonsense. It's no setback compared to "modern" OOP.
Can anyone post links to any Lisp web application? It can be something different then the HTML & SVG web game, though I would be extra keen to see that run...
Can't find it hosted but found the code to the book at the homepage that includes both the svg.lisp and webserver.lisp (also check out CL-HTTP). As to your more generic question, I think this year's lisp game expo competition had a few good Lisp web games.
My work here is dung.
I'm a 21 years old software engineering student who is mostly being taught Java (alongside some courses on C/C++). I also have some experience with PHP and very basic experience with Python but that's it. "Lisp" is - alongside "COBOL", "Fortran", etc. - are alien to me. My reaction to them is: "Oh. That was a programming language in the... seventies? Sixties? Eighties? Anyways, I've seen references to it on XKCD."
Delving into this book might be refreshing, interesting and educational at the same time. I'm intrigued by a book that is directed at beginners and yet goes into search algorithms and the like... And the reference to teaching how to create a webserver in 15 papes practically got me drooling. However, is there a reason why all such couldn't be explained with something more modern, like Python? I would love to learn new languages because they're interesting or for personal improvement but I'm a student with two jobs (well, one is very secure and the other pays really well. I don't want to give up either in this economy) and the job market is a tough place. I really don't have time to study things that don't directly relate to the jobs I want to apply to. (This might be why India is kicking our ass. We can't compete in prices when it comes to generic students with limited skillsets but we don't really have a chance to develp wider sets of skills) Using one service to search for open jobs gives me 106 results for "java", 8 results for "python", 200 for "php", 49 for "c++", 19 for "C#"... and 0 for "Lisp".
So... Can anyone suggest me a book like this for some more common language or provide arguments with which I could reason myself to buy this one?
http://landoflisp.com/
I think she's a friend of Bob's.
Who cares about a "cost benefit" when you can enjoy a book about Lisp this very instant?
At oreilly.com, I was able to buy the combo package that will send me the physical book, but also let me download the book in ePub or PDF - I just downloaded the PDF and am enjoying it now!
I would have waited for a Kindle version, but honestly I prefer to pay more for an open format like PDF, so I did.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Thmileys make lithp talk thrange.
Free Martian Whores!
The great thing about learning Lisp as a first language is the lack of marketability, because it's to about setting you up on a path, it's about giving you fundamentals.
As noted there is enough syntactic sugar now to not cause the kinds of rough work that used to be around, and I think the brevity of the language can be good for people in that there's not a ton of syntax to learn to actually get something real built.
Once you have programmed in at least two languages, you have a much better idea of what you are doing I think. So given that you'll learn some "practical" language to do something, let Lisp be that "other language".
"There is more worth loving than we have strength to love." - Brian Jay Stanley
It took you so much effort to type that, when you could have simply clicked on the provided link? No wonder you're AC.
I'm waiting for Lisp# to use as my asp.net codebehind.
Politics is the art of looking for trouble, finding it everywhere, diagnosing it incorrectly and applying the wrong fix.
I don't completely agree. A true beginner doesn't really need to understand how to structure a large program, which is what the modern principles are for. The first goal should be to write "linear" programs of the input-process-output model, learn the basic control structures and operators, and how to debug. From that foundation, you could go one way and learn how things work "under the hood" and try C or even assembly, or the other direction to learn how to build large programs (such as OO, patterns, etc).
Thus, I actually think BASIC (not line-numbered BASIC, the modernized ones) sweeps enough of both under the rug so that the beginner can concentrate on dealing with the code logic itself.
Whoosh ... and since you probably didn't get the other joke either ...
She runs Alice's Restaurant in Stockbridge, MA, of course.
I am officially gone from
It's a joke, don't get your panties in a bunch.
Security is mostly a superstition... Avoiding danger is no safer in the long run than outright exposure. - Helen Keller
*obsessively tallies and double checks to make sure he closed all his parentheses before hitting submit*
If you're using a good editor, you just need to hold shift-zero until it starts getting angry. At least that's how I usually ended up finishing off programs.
i STILL eat lasers ....
Read radical news here
I disagree, LISP is fine for beginners. I mean an entire OS, emacs, is written in LISP; too bad it doesn't come with a good editor...
Sure it is. It stands for "list processor."
No wonder you're a humorless dick.
Seriously, guys, who in their right mind believes there have been no major advances in programming languages since Lisp?
Oh, I'll admit that 99.9% of the supposed "advances" have been horseshit...
Seastead this.
Yes, you would. Objects are meant to solve a problem, and simply get in the way until and unless you run into that problem. Of course, the same goes for structured programming...
Does it also teach them why OO programming is used? Because if it doesn't, it'll produce plenty of fodder for TheDailyWTF...
Forget magic. Any technology distinguishable from divine power is insufficiently advanced.
Sure it is. It stands for "list processor."
No, that makes it an abbreviation, or a contraction, not an acronym.
Amen. It changes the way you think of computers. All other languages flail before the almighty Lisp.
Infuriate left and right
I heard Eve knows them both, but they don't know she even exists.
Infuriate left and right
generation y obviously lacks the higher order brain functions that are required to enjoy irony or true humour.
This is very interesting, I wish I had modpoints :-(
I'm a minority race. Save your vitriol for white people.
Oh come on. Even when I took Lisp in CS (not just last week boyo), you could close all remaining open parenthesis by going ). -- a closing parenthesis followed by a period. No more counting to see how many were open and whatnot. Also, since taking that course, everytime I say LISP, it comes out like LiTHp.
Yes, some of the concepts were transferrable to more modern, practical languages, but so were the concepts in BASIC.
Lisp goes way, way beyond just if statements and functions though, helping you to think about program STRUCTURE in ways that are applicable to any modern programming language.
I also learned LOGO and Basic, they were just as you said - LISP really does, as the foreward of the book says, fundamentally change the way you approach programming (and for the better).
"There is more worth loving than we have strength to love." - Brian Jay Stanley
In fact I held back a bit when I noted I downloaded the PDF before, for at the same time I had downloaded the ePub version as well!
Using both in iBooks on an iPhone, the ePub is much nicer to read as it does a better job typesetting. I'll have to see if there's some way to load it into the Kindle software reader as well to compare... the PDF version also works in iBooks, but is not nearly as nice to read.
O'Reily is a nice place to buy this, as not only can you download the totally open PDF and ePub versions, they guarantee you can re-download them forever from your account in case you lose track of them.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Ahh that takes me back to my Oktoberfest days :)
...programming language in the end are covered at http://occupyfun.com/jokes/joke.php?title=Wittle-Wabbit ;-)
First, Lisp is not an acronym.
Funny, I thought that that's exactly what "LISt Processing" was.
You are not a brain: http://books.google.com/books?id=2oV61CeDx-YC
sounds bad till you think about it for a second . Think how much relearning was not required. How much re-use is going on . How much work would not have to be redone and how comprehensive your library would become .
Python respects the visual limitations of humans
It does exactly the opposite, unless humans can evolve to literally "see" whitespace characters.
The zen-like empty indentation technique drove me mad when I had to maintain some python software. It reminded me for exactly the thing I hated most about the little Fortran I had done in school, the punch-card like need for rigid character placement in something that was, to my mind, meant to be a totally logical construct.
As another poster noted, Python mixes presentation with content and that makes it really awful to do refactoring, or for tools to be able to offer you meaningful help in reformatting. A code reformatter can take a mess of code differently indented and make it correct according to your preferred spacing. It can also take pasted code and place it at exactly the right level of indentation. What is a code formatter to do when you try to paste code directly after an indented line of python? Any guess can be wrong, and all it CAN do is guess.
I actually like the language otherwise, I like the constructs, but the whitespace thing makes it basically unusable for me in practice. At this point if I want to learn a nice alternative and powerful language, I'm going for Erlang.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Hahaha, I knew someone would make that comment! But it really is called "why's (poignant) guide to ruby" and not "why's poignant guide to ruby."
Nope, they did the same thing as the people behind Fortran, BP and KFC have done: redefine the abbreviation as a meaningless string of letters.
Nicely done.
"No matter where you go, there you probably are." -- Buckaroo Heisenberg
I'm the reviewer, so I can probably explain how this happens.
I started out writing posts on my blog about old obscure distributed systems and programming books that I thought deserved more attention. Then I got a copy of Masterminds of Programming for giving a lightning talk at a conference (International Lisp Conference 2007; O'Reilly were giving out books to lightning talkers), and decided to write a review on my blog (it's an interesting book).
A few months later, Peter Seibel's Coders at Work was about to come out, and Peter noticed that I had written about Masterminds and decided that I would be interested in a preview copy of Coders at Work (which I was). Then he mentioned that I should consider writing a review for Coders at Work on Slashdot instead of my blog, and I liked the suggestion, so I wrote a review (it is a good book). Peter says it helped the book's sales a lot.
I heard about Land of Lisp from the O'Reilly media relations mailing list (I'm on the list because I'm the O'Reilly User Groups program contact for the Montreal JavaScript user's group; they give us discounts and freebies). The media relations list is basically O'Reilly spamming you with descriptions of upcoming titles - if you think something is interesting, you ask them to send you a review copy. Actually, I had heard about Land of Lisp a long time ago (the book was originally supposed to come out in 2007), but forgot about it in the meantime. If it wasn't for the O'Reilly mailing list, I wouldn't have heard about the book until after it had come out (and then only because I'm very involved in the Lisp community).
So the lesson here is you should look for someone interested in the book's subject who has written about other books before, offer to send them a review copy, and suggest they write a review for Slashdot. It helps to stroke their egos ("I really like your writing, would you like a super-special advanced exclusive preview copy for super-smart special people? The proles won't get to see this for another two months!")
Obviously blogs are the best places to find these people; look at blog aggregators on whatever subjects your book is about (for example, the Lisp-related postings on my blog are syndicated on Planet Lisp and Russian Lisp Planet).
O'Reilly has by far the best book promotion efforts of any technical publisher (media relations mailing list, user's group program, and an extremely active presence at conferences), but it's actually not very effective compared to being part of whatever community your book is about, and simply informing community members of your book's existence. Conrad does pretty well in this respect. I'm sure if I hadn't written a review of Land of Lisp for Slashdot, someone else would have.
FYI for those with Safari Library subscriptions: this book is available there.
Common lisp has OO (defined as some macros). So in lisp, you can make it any kind of language you want. OO/ not-OO / whatever else you care to think of.No need to create a new language
To expose students to the different kind of thinking that comes with functional programming, I'd rather use Haskell or XSLT than Lisp.
I believe that functional programming is finding new relevance in applications for distributed processing. If I were putting together a comparative languages course, I'm pretty sure it would have at least one assignment where everyone has to come up with a job that is appropriate for map/reduce.
For Object Oriented programming in particular, I'd actually lean toward Ruby. I'd assume that everybody (in a 300-400 level languages course) knows C++, C# and Java, but probably not Ruby. And by Ruby, I mean Ruby, not Rails.
-fb Everything not expressly forbidden is now mandatory.
"Lost In Stupid Parentheses."
Oddly enough what I hate about LISP (Language to Induce Stress in Programmer) was the parens but it wasn't because there was so many of them. It was because you had to have exactly the right number. One set too many or too few and your program crashed. Drove me up the figurative wall. (That and that whole thing not using the damn return key to break up things onto multiple lines. What's wrong, does your keyboard give you 50,000 volt shock if you hit the return key? Oh well, now I know why my teachers in grade school complained about my run on sentences. They were like LISP, hard to read because each would just go on and on.)
Did you know 80 to 90% of the moderators on slashdot wouldn't recognize a troll even if one dragged them under a bridge.
I'm sure that I spent more hours playing Super Star Trek than I have all other games put together. I've ascended three races in Nethack and have 4 level 80 WoW characters, and I still think the trek game wins the time sink award. I still play a version of it, pretty often. Modding this game taught me a lot (but a lot of wrong things too) about programming.
-fb Everything not expressly forbidden is now mandatory.
(sorry)
I could have sworn that there is a book out there that teach python programming with a primary focus on game creation.
And the python interpreter have a interactive mode.
comment first, facts later. http://chem.tufts.edu/AnswersInScience/RelativityofWrong.htm
Yeah it is an acronym - Lost In Superfluous Parenthesis.
If you can't do it in C and Lisp, it can't be done.
If a student needs to learn to program, object oriented stuff isn't the first thing they should see. Please for all that is holy, teach them structured programming, algorithms, and data structures first.
That's the most bonkers thing I've ever read.
What, like for loops?
For loops are a perfect example. Why the hell do all these programming languages force me to write the same damn patterns over and over, like, say, reducing a sequence of values:
How many million times have you written a loop that follows this pattern? What about this one:
Looks familiar, right? C-style languages all but force you to constantly spell out how to iterate over the elements of a collection or sequence and combine their values; the only ways to abstract it are way more verbose than this (e.g., iterator classes, Visitor pattern), or are subject to additional problems (function pointers in C aren't anonymous, and are not lexically scoped).
The first of those examples should just be reduce(function, initial_value, collection). The second is map(function, collection). These functions allow you to write code that's shorter, because you don't need to write the same damn canned for loop pattern over and over.
In addition, there's a more important, subtler benefit, that comes down to this:
This means that, for example, when you see map being used, you know automatically that the result is a collection of the same size as the input, where the value of each element of the output collection depends only on the element of the input in the corresponding location; i.e., map has predictable invariants that help you reason about the code. When you see a for loop with a complicated body, on the other hand, you have to read the damn thing, often very carefully, to figure out what the hell is going on.
http://en.wikipedia.org/wiki/Lisp_(programming_language)
"Lisp or LISP is a family of computer programming languages with a long history and a distinctive, fully parenthesized syntax....."
"...The name LISP derives from "LISt Processing". "
http://dictionary.reference.com/browse/acronym
"a word formed from the initial letters or groups of letters of words in a set phrase or series of words, as Wac from Women's Army Corps, OPEC from Organization of Petroleum Exporting Countries, or loran from long-range navigation. "
> Alice teaches much more modern object-oriented principles that would be much more useful than BASIC or LISP to a > modern programming student object-oriented principles such as what? You cannot seriously put BASIC and Lisp into one sentence. Have you even looked at the object system of Common Lisp (CLOS) ? It is quit a bit more powerful than Alice/Java OOP. Please provide a list of object-oriented principles that Alice teaches that Lisp would not.
Not to pile on, but the biggest problem with sounding like a know-it-all is when you fuck up. And I don't mean that in a colloquial 'when *one* fucks up' sort of way. I really mean *you*.
As for the rigors of LISP (UC to make you crazy), your jumping sixty yards past Turing-complete in your defense of LISP makes me guess you probably also think PDE's are a great way to teach math to schoolkids...
Funny. To date, Common Lisp still has the most powerful and feature-complete OOP system ever designed in a programming language.
Modern. You keep using that word. I don't think it means what you think it means...
You could make the same arguments for immediacy and ease of installation for Perl or tens of other freely available modern PC languages. And they don't have LISP's nightmarish tangle of parentheses. LISP rivals APL for the 'language handicapped by its notation' award, and at least APL looks cool. Interesting to see btw that the Trek variant in that Atari book is actually called Star Trek, and that they went to the trouble of begging Paramount for permission to use the name.
Two comments about the summary:
Programming today is easier than programming in the 80s, if you pick the right language. BASIC wasn't that easy -- although at least on most computers there was no installation step.
Most people who typed in games from magazines weren't doing it to learn -- they wanted to play the game, and printing the BASIC code on paper was more cost effective for the publishers than gluing a cassette to the magazine. Typically there would be no comments, no discussion of the techniques use, and towards the end of this practice's lifetime, it wasn't unusual for the program to be a small piece of BASIC for poking integers into memory, followed by several A4 pages of hex characters; the machine code for the game.
I wouldn't recommend BASIC or LISP for someone wanting to learn modern object-oriented programming today. A lot of us started out with a structured languages like this, but you wouldn't want to start out that way if you were doing it for the first time now. My university uses Alice and it works pretty well. Alice teaches much more modern object-oriented principles that would be much more useful than BASIC or LISP to a modern programming student.
What a horrendous idea. If the whole goal is to learn more OO principles, that's a f* up goal by itself. Not everything is OO; reality is multi-paradigm; and beyond a certain granularity OO code is intrinsically tied to modular, structural and procedural principles. Barring the naturally gifted, people can't learn proper OO skills (much less general analysis and design skills) without knowing modular, procedural and structured programming.
One of the greatest failures of CS education has been the failure to teach that, the fallacy that you can simply use nothing but one or two OO languages and a 100% OO paradigm as a general plan for teaching programming. Testament of this is that, even after 3 decades, people still can't tell you precisely what a good OO system is like. One just have to look at the OO code base that is out there. Truly hideous and anything but OO.
A good chunk of people think they are doing OO when in reality they are using OO languages to implement poorly written procedural code (typically without any notion of structural soundness or modularity.)
In fact, a lot of what the world needs right now combines/requires procedural programming. RDBM access is strictly procedural/declarative - and don't bring the fallacy of ORMs. People can't effectively use ORMs without knowing the procedural/declarative interfaces that lie underneath it. Services are intrinsically procedural and so are the languages that interface/combine them (think BPEL.)
When people miss that and are confronted with the *real* multi-paradigm world, they either try to force a OO paradigm on the procedural interfaces/services, or the service-accessing code devolves into an in-cohesive, inflexible procedural lasagna.
I've been doing OO development for quite a while now, quite successfully if I may add, and I've worked in teams that have made the transition (quite successfully also) from procedural/modular to OO programming. From experience I can tell you most CS students cannot fully understand (or fail to understand) OO principles without understanding procedural, structural and modular principles (and spending a lot of credit hours in them.)
We need people that are exposed to the nitty gritty details of multi-paradigm realities of world problems, not pampered from the beginning with graphical systems intended to show... yay... more OO principles. You want to teach people more OO principles? Then lay a solid multi-paradigm foundation with plenty of credit hours in several programming languages, getting them to deal with issues of structure, modularity, procedures and the like.
Kids that get exposed to those will get much more mileage from OO education, and equally useful, that exposure will filter those who really can't cut it for CS because not everyone is cut for it (and this applies for any degree and people trying to get in them.)
Thanks for that helpful interjection Mr Turing.
Want an apple?
That's the most bonkers thing I've ever read.
Not really, it actually closely resembles practical things that need to be done in many large scale systems written in procedural languages. People have been doing a lot of (mostly) good things to implement re-use and modularity in procedural languages for a long time (just as there are plenty of strategic/tactical reasons to use a procedural programming language over an object oriented one.)
Furthermore, reading that gives the novice reader a glimpse at how things occur under the hood. At the end of the day, OO is syntactic sugar use for the sake of modularity and structural soundness. It eventually has to be implemented on a procedural manner (even if it is invisible to your eyes thanks to the compiler.)
> *obsessively tallies and double checks to make sure he closed all his parentheses before hitting submit*
You can just use a single right square bracket to close all your current lparens.
Do daemons dream of electric sleep()?
Redefining it doesn't change history. They may have decided to starting starting spelling it "Fortran" but it STILL comes from "formula translator." Same is Lisp. They can decide to start spelling it "Lisp" but that doesn't change the fact it comes from "list processor!" Nor, do I believe it's acceptable to chastise people who still spell it FORTRAN or LISP, and act like those names were ALWAYS spelled the new way. Revisionist history is a load of crap.
Once you have programmed in at least two languages, you have a much better idea of what you are doing I think. So given that you'll learn some "practical" language to do something, let Lisp be that "other language".
I concur, and would add that being proficient with five languages is not too high a bar to set for a professional developer. (Not a world-leading expert, but able to Write Good Code(tm))
Heck, I know C, C++, python and shell scripting *very* well (IMNSHO); haskell, java and scala decently; scheme, elisp and SML/NJ somewhat; javascript, C# and perl superficially, [...].
But then again, scheme and javascript are basically the same language, and python is a funky dialect of it with elisp being a close cousin. C++, java and C# are becoming more and more similar (there's a language conceptual overlap, aneehoo), C is a subset of C++, ML ~= Haskell. As you might see, ten languages is a lot easier to learn than ten times the difficulty of learning the first language.
(Sorry if I come off as bragging; I don't mean to, I'm just using myself as an example, and I don't think I'm a crazy-ass whiz kid)
Properly, the upper-case names FORTRAN and LISP refer to old versions of the respective languages. Both languages have changed so much that a new name is IMHO justified.
No, it really is bonkers. I can understand wanting to know how the compiler implements objects and inheritance and what-not - although in the end it's somewhat compiler dependent.
One might as well argue that C is merely syntactic sugar for assembler - which would be true, but rather misses the point. Syntactic sugar does more than help the medicine go down, so to speak, it frees the mind from the mundane details and allows one to concentrate on more important things. Like program structure and so-on.
Why one would want to use the ideas in that paper to write an actual computer program is utterly beyond me.
Can someone who would prefer to learn the Clojure flavor of Lisp be able to adapt the book's explanations and code?
= 9J =
Viper mode disagrees with you.
I know tobacco is bad for you, so I smoke weed with crack.
Lisp _is_ an acronym that I remember very well: Lost In Stupid Parentheses -- My work here is done 8^)
Lots of Irritating Stupid Parentheses?