Slashdot Mirror


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.

330 comments

  1. Oh Come On! This is a Book Review! by eldavojohn · · Score: 4, Funny

    (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.
  2. Lisp is cool... by RocketRabbit · · Score: 2, Interesting

    But where's our new hyper advanced LISP machines?

    Nothing will beat the Symbolics Lisp machine. Clozure is great, but not quite there yet.

    1. Re:Lisp is cool... by Animats · · Score: 4, Interesting

      Nothing will beat the Symbolics Lisp machine.

      Ever use one? I've used the refrigerator-sized Symbolics 3600. 45 minute garbage collections. Flaky electronics. An arrogant service organization. Those things lost out to general purpose UNIX workstations for good reasons. Even for running LISP, a SUN 2 was better than a Symbolics 3600.

      (Symbolics was also tied in strongly to the 1980s expert systems crowd, the "strong AI Real Soon Now" people", like Ed Feigenbaum. I went through Stanford CS when those guys were running the department, just as it was becoming clear that expert systems really couldn't do all that much. Not a happy time in academic computer science. Stanford had to move computer sciences from Arts and Sciences to Engineering, and put in adult supervision.)

    2. Re:Lisp is cool... by weav · · Score: 4, Funny

      WHO ARE YOU TO JUDGE OUR SERVICE ORGANIZATION, PEASANT?

      Sorry, old habits...

      The 45 minute GC's ended with the first Generation-scavenging GC which may have come along after you game up on lispms...

    3. Re:Lisp is cool... by Anonymous Coward · · Score: 2, Interesting

      I detested programming in Lisp. The endless parentheses tracking and macro soup made it a miserable experience. It seems to be mainly popular with people who don't have to actually write the code.

    4. Re:Lisp is cool... by Kittenman · · Score: 1
      I heard once that LISP stood for "Lots of Insane, Silly Parentheses".

      (On reflection, that would make it "loisp" but you take my point)

      --
      "The greatest lesson in life is to know that even fools are right sometimes" - Winston Churchill
    5. Re:Lisp is cool... by vsedach · · Score: 1

      You'd be surprised at the number of people working on that (in terms of large-scale "LispM in the cloud" startups, and even new OS efforts). The problem IMO is that Lisp programmers were 15 years late to the Free Software game, and didn't understand the value of portability. The 90s were basically a lost decade for Lisp infrastructure because of that, but I think it's really changed in the past 5 years.

      It's amazing how prescient RMS was on the issue. If you didn't know, he started the FSF because he believed Symbolics, the first commercial Lisp machine spinoff from MIT, was going down the wrong path. He was totally validated on everything. If Genera had been open sourced, Symbolics probably would still be a thriving company today.

    6. Re:Lisp is cool... by Darinbob · · Score: 1

      Lisp machines essentially died when some RISC machines added trap instructions, getting similar performance for much lower cost. Before then the generic Unix workstations were not good enough if you wanted performance (definitely not Sun 2s). When the Sparcstation got the same performance for a fraction of the price was when the last nail was put in the Lisp machines coffin.

    7. Re:Lisp is cool... by Darinbob · · Score: 2, Insightful

      Dismissing lisp because of parentheses is like dismissing Citizen Kane because it was in black and white. It totally misses everything else in the language that's far more important. Lisp is a milestone in computer language history, it was extremely influential to modern fashionable languages, and it is still relevant. To miss all that because of some parentheses is short sighted.

    8. Re:Lisp is cool... by gknoy · · Score: 1

      If you use Emacs' automagical indentation (TAB == "indent this line Properly"), and set your editor to display the corresponding parenthesis for any one you have selected, it becomes much easier to track parentheses. I am absolutely addicted to Emacs' magic indentation, even when it Does It The Way I Don't Want. (It has a brace style for Perl and C which I don't quite like, and can't seem to get changed.)

      Go watch some screencasts of Clojure or Slime. Some of them use TextMate (I think), some use Emacs, but generally there is some brace-handling awesomeness going on there. Use Emacs, and your lisp indentation concerns will nearly disappear.

    9. Re:Lisp is cool... by White+Flame · · Score: 1

      Have you ever used SBCL's disassembler to see what's going on underneath? Especially when you've got reasonable declares set up? We don't need specialized hardware to run Lisp fast anymore. Of course, if you're on Windows and need things like threading then CCL's quite reasonable as well.

      Sure, specialized hardware would undoubtedly be faster than running on general purpose CPUs (as would be the case for any situation), but the translation from Lisp-speak to general assembly-speak is very good.

    10. Re:Lisp is cool... by aiht · · Score: 1

      I detested programming in Lisp. The endless parentheses tracking and macro soup made it a miserable experience. It seems to be mainly popular with people who don't have to actually write the code.

      That's what the macros are for: so you don't have to write the code, you can just leave it to the machine.

    11. Re:Lisp is cool... by Anonymous Coward · · Score: 0

      > If Genera had been open sourced, Symbolics probably would still be a thriving company today.

      Selling what, exactly? God knows not Lisp Machines (most overrated kit since tube amps).

      Oh right, support. Probably the one thing _everyone_ hated about Symbolics.

    12. Re:Lisp is cool... by Anonymous Coward · · Score: 0

      Parent either worked for Symbolics, or for the Sirius Cybernetics Corp.

    13. Re:Lisp is cool... by Anonymous Coward · · Score: 0

      Right here baby:

          http://www.unlambda.com/cadr/index.html

    14. Re:Lisp is cool... by Anonymous Coward · · Score: 0

      Just as they started circling the bowl, Symbolics (first registered Domain name sonny) ported to 64-bit DEC Alpha's running Unix (OSF/1)

      They also had a sweet pizza box XL1200 with the classic META, CTRL, ALT, Shift keyboard

      Nothing beat the row of refrigerators that was out stable of 3600's. Reseating components on racks of HUGE cards was a monthly ritual. ...and you have GOT to love the two phase power (or was it three phase)

    15. Re:Lisp is cool... by dogcar3604 · · Score: 1

      Just as they started circling the bowl, Symbolics (first registered Domain name sonny) ported to 64-bit DEC Alpha's running Unix (OSF/1) They also had a sweet pizza box XL1200 with the classic META, CTRL, ALT, Shift keyboard Nothing beat the row of refrigerators that was out stable of 3600's. Reseating components on racks of HUGE cards was a monthly ritual. ...and you have GOT to love the two phase power (or was it three phase)

    16. Re:Lisp is cool... by dogcar3604 · · Score: 1

      Right here: http://www.unlambda.com/lisp/cadr.page [unlambda.com]

    17. Re:Lisp is cool... by Just+Some+Guy · · Score: 1

      If you use Emacs' automagical indentation (TAB == "indent this line Properly"), and set your editor to display the corresponding parenthesis for any one you have selected, it becomes much easier to track parentheses.

      Or you can just bind a key to slime-close-all-parens-in-sexp and let Emacs add enough parentheses to finish your statement. I agree with your main idea: get a good editor and let it help you.

      --
      Dewey, what part of this looks like authorities should be involved?
    18. Re:Lisp is cool... by badkarmadayaccount · · Score: 1

      Except for keeping the dataflow with the control flow (the cpu has a hard time tracking values for superscalar operation as is, jmp instructions with no information on dataflow, like a conditional swap, makes it hell), and write barriers for the GC, and a assembly level typing system (the language is too dynamic to be statically checked).

      --
      I know tobacco is bad for you, so I smoke weed with crack.
    19. Re:Lisp is cool... by White+Flame · · Score: 1

      Except for keeping the dataflow with the control flow

      How is that Lisp-specific? That's a general programming issue.

      write barriers for the GC

      There is no GC-related code injection in the machine language for writes in any of the modern Lisp disassemblies I've seen.

      the language is too dynamic to be statically checked

      SBCL does compile-time type inference, removing dynamic checks and bit tags wherever it can. Only where it still needs the dynamic checks & behavior does it insert code to do so. In any Lisp, using the declaration system should eliminate any applicable runtime ambiguities as well.

    20. Re:Lisp is cool... by vsedach · · Score: 1

      When it comes to typing, there's no advantage to microcode and baked-in type schemes vs byte-addressed but word-aligned machines (ie - pretty much 99% of today's computers). On 32-bit systems you get 3 bits of tag - more than enough for the basic types you need to make a fast runtime. 64-bit gives you 4 tag bits, and if you actually look at any CL compilers today, most of them are unused.

      Further, you can exploit various properties of modulo arithmetic over the full pointer to actually produce *faster* code than would be possible with baked-in type checking (see the alignment section in "Arm porting notes and issues" in the Clozure wiki; I'd link but Slashdot box won't let me copy-paste, probably as an anti-spam measure).

      As far as GC goes, the biggest problem isn't the hardware, it's the operating system. Look at the Azure Linux kernel patches - they're getting similar GC performance on commodity 64-bit hardware as they did on their custom Java processors with various GC-accelerating features.

    21. Re:Lisp is cool... by SpammersAreScum · · Score: 1

      Ever use one?

      I did. Eventually, for a couple years I maintained a network which grew to about a dozen of them as well, starting with a couple 3600s and adding 3670s and 3640s when they came out. Fortunately, my experience did not match yours. Yeah, I found I needed to re-seat a board on the backplane a few times, but overall life was good. Had a Sun 2 on my desk years later and missed the Lispm's.

    22. Re:Lisp is cool... by badkarmadayaccount · · Score: 1

      1.I agree.
      2.Because the would screw performance. Write barriers were used only on appropriate hardware (though if you have access to the MMU, anything will do, with some hacks).
      3.There is still performance degradation for dynamic type checks.

      --
      I know tobacco is bad for you, so I smoke weed with crack.
    23. Re:Lisp is cool... by badkarmadayaccount · · Score: 1

      Did those Azure patches get in mainline? I think Red Hat would have an interest in that.

      --
      I know tobacco is bad for you, so I smoke weed with crack.
    24. Re:Lisp is cool... by White+Flame · · Score: 1

      2. So, um yeah. You agree as well then? And really, it's not as much a Lisp issue as it is a threaded GC issue. As reiterated below, most GC developers claim that GC tricks and performance are tied much more to what the OS allows than to any language specific features.

      3. If you have dynamic code, I would trust the compiler to generate type dispatching code that would be faster than doing manual dispatch from a statically typed language, especially for primitives, or in complex type analysis cases.

      Consider the simple case of manually using function dispatch tables in C vs using virtual dispatch in C++. In the latter, the compiler has a higher-level idea of what's going on, and can allocate and dedicate resources in a much more targeted way than a general lookup, dedicate a register to the "this" pointer, etc.

      Sure, if you use less powerful languages, they do less for you, and you're stuck bolting on higher-order functionality with semantics that the compiler does not know about and cannot tailor optimizations toward. That's not really a benefit.

    25. Re:Lisp is cool... by RocketRabbit · · Score: 1

      It's about the environment, not the actual speed of the computer.

      Nothing touches a Symbolics machine for CODING IN LISP, even 25 years later.

  3. How about one of these for Python? by Anonymous Coward · · Score: 0

    I'd buy that!

    1. Re:How about one of these for Python? by monopole · · Score: 1

      “Invent Your Own Computer Games with Python”

  4. Those Were The Days My Friends, We Thought... by cybrpnk2 · · Score: 4, Interesting

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

    1. Re:Those Were The Days My Friends, We Thought... by cybrpnk2 · · Score: 2, Informative

      LOL, I see that Basic Computer Games was printed in 1978. In 1974, I was typing it in directly from an issue of David Ahl's groundbreaking mid-1970s magazine Creative Computing, which he compiled into the book several years later. David Ahl is the reason I became a geek, long before there was even a TRS-80 to play with and I had to IMAGINE what the CC program listings would do becasue I didn't have a computer to run them on. Thanks, Dave!!!

    2. Re:Those Were The Days My Friends, We Thought... by jelizondo · · Score: 1

      Just remember to be buried facedown, nine-edge first

      Those were the days!

      Any youngsters reading this, GET OFF MY LAWN!

      --
      Be very, very careful what you put into that head, because you will never, ever get it out. - Cardinal Wolsey
    3. Re:Those Were The Days My Friends, We Thought... by Rufus+Xavier · · Score: 3, Funny

      I happened to look at the bombs away game on that list and it has this wonderful question: "Is this your first Kamikaze Mission (Y or N)"

    4. Re:Those Were The Days My Friends, We Thought... by PRMan · · Score: 1

      I have that book. I was just looking at it the other day. I remember typing the listings in to my Atari computer at home and the Apple in the library at school. Once I typed in Super Star Trek (and changed the characters to look like the ships), everyone wanted a copy.

      --
      Peter predicted that you would "deliberately forget" creation 2000 years ago...
    5. Re:Those Were The Days My Friends, We Thought... by Paul+Fernhout · · Score: 1

      Yeah, I remember typing in a long basic game from probably that same book, on a teletype that my school had for a timeshared regional PDP-10 in the late 1970s.

      I think you can learn a lot by just retyping stuff.

      While I first started learning programming on the KIM-1, in my early teens, it was very confusing (working in assembly).

      I think programming really gelled for me by playing with Radio Shack TRS-80 computers in the store and reading and doing the BASIC exercises in the TRS-80 "User's Manual for Level I" by David A. Lien -- with pencil on paper, as I did not have a computer but could afford to get the manual. :-)

      I think it did make a difference it had some funny cartoons. Others think so, too:
          http://en.wikipedia.org/wiki/TRS-80
      "Level I Basic was based on Li-Chen Wang's free Tiny BASIC, additional functions added by Radio Shack. It achieved a measure of noteworthiness due in large part to its outstanding manual, written by David Lien, which presented lessons on programming with text and humorous graphics, making the subjects very easy to understand"

      But, then typing in a couple of larger basic computer games and figuring out the typos built on that.

      I understood assembly better by using a "CARDIAC" cardboard computer later.
          http://en.wikipedia.org/wiki/CARDboard_Illustrative_Aid_to_Computation

      I think there is a lot to be said for imagining how the computer is working. It helps better later with design and debugging.

      Kids these days... :-)

      Although they may just learn to do some different things on another level...

      --
      A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
    6. Re:Those Were The Days My Friends, We Thought... by cybrpnk2 · · Score: 1

      Long before I was playing Super Star Trek in BASIC, I was playing nim on a Digicomp-1 that was my first computer. Wish I still had that thing. Maybe I'll rebuild it one day...

    7. Re:Those Were The Days My Friends, We Thought... by A+nonymous+Coward · · Score: 1

      You have lawn?

      In my day ....

    8. Re:Those Were The Days My Friends, We Thought... by Bigbutt · · Score: 1

      Yep, made my own changes and added a console like display and three dimensions to the "galaxy". So you could travel up or down as well as on the single plane. I even added in a Retinal Scan to self-destruct the Enterprise!

      I called it 3d-Startrek (because I changed from a 2d plane for travel to a 3d cube) and even got a mention in one of the gaming magazines.

      [John]

      --
      Shit better not happen!
    9. Re:Those Were The Days My Friends, We Thought... by Paul+Fernhout · · Score: 1

      Cool. http://en.wikipedia.org/wiki/Digi-Comp_I
      "The Digi-Comp I is a functioning, mechanical digital computer sold in kit form. It was originally manufactured from polystyrene parts by E.S.R., Inc. starting in 1963 and sold as an educational toy for $5.95."

      Before I was "programming", I was doing digital electronics with things like flip-flop circuits from Radio Shack. When I was around nine or so I build my first "computer" from ideas in a book for kids that was just made out of a few switches and wires and a light bulb (to get at "and" and "or" gates).

      The time I most felt "in control" of a computer was using Forth on a Commodore VIC and a Commodore 64 -- you could have a sense of everything that was going on, reset the computer and still have your data in memory, actually change things at various memory addresses by hand and see results, and FORTH was just high enough a level language to feel you were sort of talking to the computer. :-) So, FORTH on a Commodore sort of bridged the low level of assembler and the high level of BASIC, but being better than either in many ways. FORTH was what taught me something about bottom up programming and refactoring.

      I guess we should maybe be a bit more understanding when someone who has never had the early experiences you and I had? Hard to imagine what they think (or don't think) is going on in there. :-) It's hard at this point to really think about all the years of early experiences that went into shaping me as a software developer -- and all the levels of confusion along the way that slowly cleared up (in most cases. :-)

      --
      A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
    10. Re:Those Were The Days My Friends, We Thought... by cybrpnk2 · · Score: 1

      Funny thing, I was reading an article on this just the other day, talking about how object oriented programming in general and Java in particular lacked the clarity ond straightforwardness of declarative languages like my all time favorite, Visual Basic 6. Laugh if you want, I don't care, with VB6 I understood what was going on and could Get Things Done. Google "criticism object oriented programming" and dig in on the real problem.

    11. Re:Those Were The Days My Friends, We Thought... by drolli · · Score: 1

      in late 1974 is was just preparing my appearance on the world. Nevertheless the last LISP Program with a real productive use which i wrote is from 2003 or 2004. It was an Autocad Script saving me from drawing 8000 Arcs (sligly varying parameters) by hand.

    12. Re:Those Were The Days My Friends, We Thought... by Paul+Fernhout · · Score: 1

      A lot of the "benefits" of object-oriented systems had little to do directly with things like data abstraction, encapsulation, modularity, polymorphism, and inheritance.

      In the case of Smalltalk (which I do like) they had to do with:
      * garbage collection
      * a good set of libraries with consistently named functions
      * message passing (not quite the same as objects, though usually related)
      * good tools including inspectors and debuggers (where you could restart code with corrections)
      * GUIs and related support
      * a virtual machine
      * machine-architecture independent virtual images of computing structures
      * version control
      * a way of naming functions with keyword syntax where the meaning of arguments was clear
      * a full numerical tower including fractions as a special case of representation
      * often, an event loop
      * probably other good stuff

      Visual Basic had some of these even without having pure objects. A language like C++ has none of these even while having objects. Which mix is better depends on the task.

      Ultimately, what matters most about object-oriented programming is actually "message passing". Alan Kay has said he misnamed it. He should have called it message-oriented programming. Example:
      http://lambda-the-ultimate.org/node/3265
      "For me, the bottom line is that modern, mainstream OO languages have been sold to us as a bill of goods. There's really nothing "real-world" about mainstream OO. I believe Alan Kay lamented the fact that he didn't call OO message-oriented programming."

      If you do real-time programming or parallel programming, with message queues and semaphores and event loops, in a way, you are doing message-oriented programming.
      http://www.google.com/#q=message-oriented+programming

      And here is why it is always hard to model the real world as simplistic "objects" because of various data-representation problems (including splitting and joining representations of "objects" as needs change):
      "Data and Reality [Excerpts]"
      http://www.bkent.net/Doc/darxrp.htm

      ==== From the preface to the Second Edition of Data and Reality:

      Preface to the Second Edition

      Despite critical acclaim, outside of a small circle of enthusiastic readers this book has been a sleeper for over twenty years. Publishers have recently offered to market and distribute it with more vigor if I would provide a new revised edition, but I've resisted. Laziness might be seen as the excuse, but I'm beginning to realize there's a better reason.

      A new revised edition would miss the point of the book. Many texts and reference works are available to keep you on the leading edge of data processing technology. That's not what this book is about. This book addresses timeless questions about how we as human beings perceive and process information about the world we operate in, and how we struggle to impose that view on our data processing machines. The concerns at this level are the same whether we use hierarchical, relational, or object-oriented information structures; whether we process data via punched-card machines or interactive graphic interfaces; whether we correspond by paper mail or e-mail; whether we shop from paper-based catalogs or the web. No matter what the technology, these underlying issues have to be understood. Failure to address these issues imperils the success of your application regardless of the tools you are using.

      That's not to say the technical matrix of the book is obsolete or antiquated. The data record is still a fundamental component of the way we organize computer information. Sections of the book exploring new models including behavioral elements are precursors of object orientation.

      The scope of the book extends beyond computer technology. The questions aren't so much about how we process data

      --
      A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
  5. Quote of the Day Analyzes Article Text Now? by eldavojohn · · Score: 3, Funny
    From the review:

    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.
  6. Re:Oh Come On! This is a Book Review! by TaoPhoenix · · Score: 1

    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
  7. Re:Oh Come On! This is a Book Review! by Anonymous Coward · · Score: 3, Funny

    Denote keyword arguments?

    (happy :o(sad))

  8. metaprogramming FTW! by Anonymous Coward · · Score: 0

    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.

    1. Re:metaprogramming FTW! by icebike · · Score: 2, Interesting

      Perhaps it speaks to the fact that there are so few real world programming tasks that require cool but obtuse capabilities that take longer to master than the much simpler code in other languages?

      --
      Sig Battery depleted. Reverting to safe mode.
    2. Re:metaprogramming FTW! by jandrese · · Score: 1

      I thought the problem with metaprogramming is that using it for more than just some trivial examples can make your program effectively impossible to debug? Its one of those tools that let people be really clever with the code on small projects, but on large projects are nothing but a nightmare. Plus the explosion of external libraries for nearly every function you could want really reduced the justification for metaprogramming in the first place. There are probably a few places where it could still benefit, but nobody wants to open up that huge can of worms for a few corner cases.

      --

      I read the internet for the articles.
    3. Re:metaprogramming FTW! by Waffle+Iron · · Score: 1

      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.

      Because metaprogramming is confusing. For example, it allows and encourages every developer to come up with his own personal class system, templating system, and collections framework, along with their own custom language keywords to define novel control constructs. Of course each personal framework is incompatible with anybody else's personal framework. This kind of balkanization has been the story of Lisp ever since it was invented.

    4. Re:metaprogramming FTW! by FooAtWFU · · Score: 0

      Perhaps, but it could just speak to the fact that so many real world programmers suck, and probably can't even do a proper FizzBizz without straining themselves.

      As with any other programming tool, there are times when it's useful, and times when it's not. A few lines of metaprogramming can save you thousands of acres of massively redundant code (and as I'm sure many of us know all too well, redundant code means redundant bugs. and redundant effort adding new features, for that matter.) Or you can twist it all into a hellish mess that would make Cthulu green with envy. It's up to the skill and discipline of the programmers.

      Around these parts, though, we generally prefer having the code do the busy-work, not the (expensive) programmers.

      --
      The World Wide Web is dying. Soon, we shall have only the Internet.
    5. Re:metaprogramming FTW! by Anonymous Coward · · Score: 0

      One of the reasons I prefer C before C++.

    6. Re:metaprogramming FTW! by Raffaello · · Score: 0, Troll

      Perhaps it speaks to management's desire to treat programmers like assembly line labor inputs - unskilled and easily replaceable. This approach will always lead to lower quality software, and/or project budget overruns and/or schedule slips, and/or outright project failures.

      Programmers are not unskilled labor. Since management insists on treating them as such, management settles on tools that can be mastered by the least skilled programmers. Since that's what the market wants, most schools teach to that low-ball target (i.e., university education in computer science becomes mere java vocational training).

      Those wise enough to understand that programmers are highly skilled labor know that they should get out of the way and let the experts choose their own tools. When that happens, such enlightened organizations will frequently choose languages other than C, C++, C#, and Java. They'll sometimes even use languages such as common lisp as ITA software does for its QPX system which powers most of the online travel search business, such as Orbitz, Bing Travel, many large arilines, etc. and which is why Google is trying to acquire ITA...

    7. Re:metaprogramming FTW! by mad.frog · · Score: 1

      Because, as it turns out, syntax matters, and the majority of programmers find C/Java style code to be easier to deal with than Lisp. (Myself included.)

    8. Re:metaprogramming FTW! by cduffy · · Score: 3, Informative

      Speaking as someone who does a lot of real-world programming in non-LISPy languages, I don't think so.

      I love Python, and it's considerably more capable than Java or C in terms of metaprogramming... but I can't tell you how many times I wish I could add a bit of syntactic sugar to replace an awkward construct built to work around Python's no-sharp-edges syntax. LISP-style macros may be abusable, but they're also beautiful, beautiful things.

    9. Re:metaprogramming FTW! by SuperKendall · · Score: 2, Insightful

      Because when every programmer is a god, all ends in strife and horror and mutation.

      See: Greek Pantheon. Or Bioshock.

      Mind you, I love Lisp. But I wouldn't if I were working with anyone else on the same code for any length of time.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    10. Re:metaprogramming FTW! by Raenex · · Score: 1

      There are plenty of highly skilled programmers who don't like Lisp. You can't just blame it all on management.

    11. Re:metaprogramming FTW! by jandrese · · Score: 2, Insightful

      No, I don't really know of lots of copy and paste style redundant code in my C or C++ applications. Generally functions take care of that. If a problem comes up enough, said function is stripped out and added to a library. These are not new or novel concepts, people have been doing them for decades now.

      Sometimes people will add lots of copy and paste code to a codebase. We call these people bad programmers, and they tend to be fired.

      --

      I read the internet for the articles.
    12. Re:metaprogramming FTW! by slapout · · Score: 1

      Perhaps it speaks to the fact that its not very well taught. I've looked at learning LISP but just couldn't understand Abelson and Sussman.

      --
      Coder's Stone: The programming language quick ref for iPad
    13. Re:metaprogramming FTW! by Anonymous Coward · · Score: 0

      > Perhaps it speaks to the fact that there are so few real world programming tasks that require cool but obtuse capabilities that take longer to master than the much simpler code in other languages?

      Ah. The low-level language argument. From your POV then, we should be using COBOL, or perhaps even assembly language. We can just pay legions and legions of programmers to duplicate those higher level cool but obtuse features of C++ or Java. COBOL syntax is much easier to master than C++!

      Or maybe, since programmer time is expensive, we could pay fewer people to use higher level tools and produce more functionality and quality per unit time. The same applies with metaprogramming. You can get more productivity out of fewer people. Not only that, you get more quality and robustness, because the alternative to metaprogramming is almost always code duplication, which leads to quality and maintenance problems.

      Every argument you can make against metaprogramming *also* applies to the use of Java or C# or C++ over lower level languages.

    14. Re:metaprogramming FTW! by Anonymous Coward · · Score: 1, Informative

      > No, I don't really know of lots of copy and paste style redundant code in my C or C++

      If you are using C or C++, I guarantee that you do have large amounts of code duplication.

      Really. I guarantee it, absolutely, with no doubt possible.

      You may not see it, because you are so used to it that you think that's "just how things are". You are blind to certain things because you know them like the back of your hand. But that doesn't mean it doesn't exist. You DO have code duplication in your C++ program. The language for all practical purposes does not allow you not to.

      Further, there are things which are not code duplication, but could be expressed in a far shorter way if you had higher level language features than you have in C/C++.

    15. Re:metaprogramming FTW! by jandrese · · Score: 2, Interesting

      What, like for loops? Variable assignments? Could you give an example of code duplication common in C code that would not occur in Lisp?

      --

      I read the internet for the articles.
    16. Re:metaprogramming FTW! by MrEricSir · · Score: 1

      (What (is (so (complicated (about (LISP's (syntax( ? )))))))))

      --
      There's no -1 for "I don't get it."
    17. Re:metaprogramming FTW! by cduffy · · Score: 3, Interesting

      ...which is why Clojure (by providing tools to interoperate with its host VM's class system and providing its own collections framework -- the latter tightly integrated with the language and supporting copy-on-write support to ease functional programming with immutable objects) has the potential to pull LISP into widespread, real-world use.

      I've actually had a (Fortune 50) employer put Clojure to use for a tool parsing an extremely high-volume data feed in near-real-time; the project was a roaring success, and the choice of tools was no small factor.

    18. Re:metaprogramming FTW! by Anonymous Coward · · Score: 0

      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.

      Dunno what happened to you poor bastards - I'm over here enjoying coding in a language with real metaprogramming while I laugh at the B&D language enthusiasts who have made their languages so "safe" that now it's OK to ship it to n00bs overseas at 1/10th the cost...

    19. Re:metaprogramming FTW! by drxenos · · Score: 1

      You mean like you repeating yourself every other sentence?

      --


      Anonymous Cowards suck.
    20. Re:metaprogramming FTW! by adamofgreyskull · · Score: 1

      This. Who cares if it's quick and easy to write if no-one else can debug/modify the code? If it's a small enough project, in an ideal world, where one Grand Wizard passes down his arcane secrets to his apprentice before retiring, then it would be A-OK. However the world doesn't work like that. More "simplistic" languages remove ambiguity and make it easier for maintenance programmers to pick up where the last guy left off.

    21. Re:metaprogramming FTW! by forkazoo · · Score: 1

      Basically, the stuff that you would reasonably use templates for in C++ can only be done with a bunch of duplicated code in C. Even in the C Standard Library (created by people who obviously know C very well), you see many very similar functions named with a suffix noting the data type that it takes or returns. They likely all have very similar implementations as well.

    22. Re:metaprogramming FTW! by Anonymous Coward · · Score: 0

      > Could you give an example of code duplication...

      I'm not the guy you're replying to, but I think I can give you a few.

      Have a look in your .hpp files. See all those prototypes for your class methods? Now have a look in you .cpp files. See all that code at the top of your function definitions that is essentially a duplication of your prototypes? You have to damn near replicate the same bit of text. To make things worse, it's not *exactly* replicated code, it's just *almost* replicated, so you have to cut and paste the prototype, then modify it, and maintain them separately.

      Or here is another. You have a class which inherits from some superclass. Then you want to use that superclass explicitly in the derived class. You can only do this in C++ by replicating code - there is no other way other than to re-mention the superclass. Even if you typedef it to base_type or some such, that typedef *itself* is code replication!

    23. Re:metaprogramming FTW! by Anonymous Coward · · Score: 0

      Have you ever #included a header from more than one cpp file? Then you have code duplication.

      Have you ever created get/set methods? Then you have code duplication.

      Have you ever made a const and a non-const version of the same get method? Even if you just implement the one with a const_cast of the other? Then you have code duplication. Don't get me wrong, I don't argue against constness, but the C++ method of achieving it is code duplication.

      That's just off the top of my head. If I sat down to think it over, I could come up with many dozens for you, which more or less every non-trivial C++ program has.

      C++ is a great language, I love it myself, but let's not pretend it's the be-all end-all of expressing programs.

    24. Re:metaprogramming FTW! by tibit · · Score: 1

      Metaprogramming does not have to be obtuse, it just happens to be implemented that way in C++; in Lisp it seems to be a natural fit but only after you get a feel for how Lisp code should look, feel and behave.

      --
      A successful API design takes a mixture of software design and pedagogy.
    25. Re:metaprogramming FTW! by goose-incarnated · · Score: 1

      !this.

      I'm working on a java project now. It will run on a jvm, that will run on a virtualised system, that will run on a cluster. The levels of indirection between actual code and hardware is mind-boggling, and I don't even get the abstraction of common lisp.

      This "simplistic language" project needs maven to pull in the libraries (hence no reproducability or repeatability), for a framework (that does message passing) that runs in a framework (that does network and protocol comms), that runs on the jvm, that runs on the virtualised machine, that runs on the cluster. The application uses XML for it's run-time configuration (because that's how the framework and the other framework is configured), and numerous pom.xml files to build (because the frameworks use it).

      A simple message-passing system that does nothing but run hooks for the various types of messages it may receive has had me scratching my head for the last week, as *something* has changed (not the code, thank god for svn) in all of this that has introduced a bug.

      Fuck it - gimme lisp any day of the week - these simplistic languages need a hairy amount of complexity from the programmers end to simply work properly.

      --
      I'm a minority race. Save your vitriol for white people.
    26. Re:metaprogramming FTW! by tibit · · Score: 1

      You don't have to look far.

      Anything related to string handling, with multiple and recurring strlen()s, strcpy()s, strdup()s, etc. I'm porting an originally Xlib/Xt-based C project to Qt / C++ and anything string-related shrinks in size like crazy. Other things shrink too once you use what you got with C++/Qt.

      Anything related to data lifetime: C only handles PODs and POD elements in structs. And those don't need anything special: by default, they don't get initialized, and destroying them implies just releasing the memory occupied by them. Everything else? You have to manually call initialization, copying, and destruction functions -- you have to write those even if you merely aggregate data types exposed by library APIs. You forget something and you deal with uninitialized data or memory leaks. C++ takes care of all that. Case in point: in C++ a struct containing a public std::string is safe to use and doesn't require any extra code, compiler writes it all for you. In C, you have to at least call free() on the string pointer before you call free() on the struct pointer.

      There are plenty of semi-standard (glib) and roll-your own (look around) approaches to type hierarchies in C. They all involve slapping a type field into a structure, and plenty of typecasts. Not only downcasts, but also upcasts (casts to a parent type)! In C++, you get dynamic_cast for every instance of a polymorphic class, upcasts are automatic, and typeid() lets you determine the actual type of said instance.

      C containers cannot be, by definition, type-safe unless you duplicate code. And even if you're OK with duplication costs of type safety, there is plenty of manual construction-and-deletion necessary everywhere.

      In short, even C++ gives you solid benefits in type safety, expressiveness and productivity over C, never mind LISP.

      --
      A successful API design takes a mixture of software design and pedagogy.
    27. Re:metaprogramming FTW! by Anonymous Coward · · Score: 0

      Abelson and Sussman don't teach Lisp (or Scheme). They teach the abstract structure of computer programs in general. What their book is about is introducing readers to thinking in the computer science way, with an emphasis on the science part. It's completely incidental that the code examples are in a particular Lisp-like language.

    28. Re:metaprogramming FTW! by fishbowl · · Score: 1

      >Sometimes people will add lots of copy and paste code to a codebase. We call these people bad programmers, and they tend to be fired.

      I just finished very deliberately doing a copy-and-paste job on a service. Right now, these two services are extremely similar. But I know that they will be diverging in a significant way, and I have no interest in trying to do this with polymorphism or conditional logic. I realize this means that changes in one module will have to be tracked in the other, and that's a compromise I'm willing to make. The next person who touches this code will thank me, even if they think copy-and-paste programming is generally a bad idea.

      Sometimes simplicity of a function is more important than re-use or versatility.

      --
      -fb Everything not expressly forbidden is now mandatory.
    29. Re:metaprogramming FTW! by shutdown+-p+now · · Score: 1

      I can't tell you how many times I wish I could add a bit of syntactic sugar to replace an awkward construct built to work around Python's no-sharp-edges syntax. LISP-style macros may be abusable, but they're also beautiful, beautiful things./quote

      It's a pleasure to write neat, concise code with no repetitions using Lisp macros.

      It's also a nightmare to read, especially when dealing with a new and unfamiliar codebase, because you first have to figure out what all the macros mean (and which parts of syntax are macros). Yes, it's not fundamentally different from any other kind of code reuse (functions, generics), but macros, due to their flexibility, require much more attention in practice.

    30. Re:metaprogramming FTW! by badkarmadayaccount · · Score: 1

      Parent is right, marketing gotta take the heat too.

      --
      I know tobacco is bad for you, so I smoke weed with crack.
    31. Re:metaprogramming FTW! by badkarmadayaccount · · Score: 1

      Balkanization?

      --
      I know tobacco is bad for you, so I smoke weed with crack.
    32. Re:metaprogramming FTW! by Waffle+Iron · · Score: 1

      Balkanize
      –verb (used with object), -ized, -izing.

      1. to divide (a country, territory, etc.) into small, quarrelsome, ineffectual states.

      2. ( often lowercase ) to divide (groups, areas, etc.) into contending and usually ineffectual factions: a movement to balkanize minority voters.

    33. Re:metaprogramming FTW! by Anonymous Coward · · Score: 0

      Ever tried to convert a Boost Spirit parser to ANTLR? That's balkanization. Yet Lisp easily allows one to adapt older coding styles to newer libraries, or vice versa. It's almost impossible to paint oneself into a corner with Lisp. At a deep technical level the balkanization either does not exist, or does not matter. It is a human issue, and it can only be solved at the level of humans. This is not a problem with Lisp per se.

  9. Modern Computers do come with BASIC by Anonymous Coward · · Score: 1, Informative

    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.

    1. Re:Modern Computers do come with BASIC by Purity+Of+Essence · · Score: 1

      True but those are far more complex languages. In important detail that those lack, and what classical microcomputer BASIC has, is an immediate mode interpreter. That instant response to input is a powerful tool for the beginning programmer. Javascript and VBScript also lack the straightforward user I/O that BASIC has.

      --
      +0 Meh
    2. Re:Modern Computers do come with BASIC by Second_Derivative · · Score: 2, Interesting

      You're kidding about VBScript, right? Short of abusing Scripting.Dictionary in some rather awful ways you can't even define data structures in it, and writing code that spans more than one module involves the use of some obtuse XML crap (.scs files) which most people don't even know about. VBScript has its place but using it for anything other substantially more complex than short straight-line automation scripts is lunacy.

      You could write some ephemeral JavaScript programs in an .html file that can't even interact with the filesystem, sure, but these creations would be obvious fourth-class citizens on your shiny 21st century computer, which doesn't yield a particularly satisfying experience for the novice programmer.

      No, if a kid with an internet connection wants to start programming stuff then in some senses the ground has never been more fertile. Even if you're not willing to leave Win32 you can quickly and easily download IDLE or a win32 build of Ruby, and the latter has plenty of really gentle tutorials to ease a novice into the world of programming, to the point where the interested reader could probably stumble oneward from there through Wikipedia well enough for most of the intermediate concepts to stick. The sort of things you can easily accomplish with MinGW and a bit of Googling today would have absolutely blown my ten year old mind back when anything above the level of BASIC was a forbidden art unheard of outside of obscure BBSes (which show up on your parents' phone bill) or a university library.

      On the other hand, a modern PC environment is a frightfully complicated beast compared to an Amiga or a Spectrum. That I think is far more of a problem than the availability of simple tools and documentation these days... that and a more comfortable consumption-oriented environment on a modern desktop that doesn't force you to make your own fun.

    3. Re:Modern Computers do come with BASIC by Lennie · · Score: 1

      JavaScript is much, much closer related to LISP than Basic.

      http://www.crockford.com/javascript/javascript.html

      It just has C-like syntax, that is all.

      --
      New things are always on the horizon
    4. Re:Modern Computers do come with BASIC by clone53421 · · Score: 1

      You could write some ephemeral JavaScript programs in an .html file that can't even interact with the filesystem, sure

      .hta

      But be forewarned... you’re using IE. Less importantly, your virus scanner might not like you for it.

      --
      Alexander Peter Kristopeit bought his basement from his mommy for one dollar.
    5. Re:Modern Computers do come with BASIC by Bigjeff5 · · Score: 1

      And it's still extremely limited.

      Seriously, have you ever used them?

      --
      Security is mostly a superstition... Avoiding danger is no safer in the long run than outright exposure. - Helen Keller
    6. Re:Modern Computers do come with BASIC by clone53421 · · Score: 1

      ...yes?

      What specific limitations are you talking about? I know of some, but they’re not necessarily deal-breakers. Except maybe not supporting binary file I/O, and there’s no way to make a window always-on-top.

      --
      Alexander Peter Kristopeit bought his basement from his mommy for one dollar.
    7. Re:Modern Computers do come with BASIC by Hatta · · Score: 1

      VBScript has its place but using it for anything other substantially more complex than short straight-line automation scripts is lunacy.

      It sounds like the perfect modern analogue to BASIC then.

      --
      Give me Classic Slashdot or give me death!
    8. Re:Modern Computers do come with BASIC by gknoy · · Score: 1

      You may be able to open it up in Notepad, but Notepad SUCKS as a programming editor. If Microsoft shipped Windows with an editor that was remotely modern (or hell, just bought Notepad++, if that were possible), scripting for WSH or in VB would be infinitely easier.

    9. Re:Modern Computers do come with BASIC by shutdown+-p+now · · Score: 1

      Actually, every Windows PC with Vista or 7 (which seem to be the majority in the shops these days) does come with BASIC - or rather Visual Basic .NET (the compiler is part of .NET Framework; Vista comes with .NET 3.0, Win7 with .NET 3.5). One could debate whether it's true to the spirit of BASIC or not, but it definitely is plenty easy to use.

  10. "Alice" one of the best learning languages today by elrous0 · · Score: 3, Informative

    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.
  11. 3-2-1 Contact by emkyooess · · Score: 1

    I initially learned to code (BASIC) from 3-2-1 Contact magazines.

    1. Re:3-2-1 Contact by Dachannien · · Score: 1

      I learned it from ENTER Magazine, which eventually got folded into a programming section in 3-2-1 Contact.

  12. computers come with accessible languages by Anonymous Coward · · Score: 0

    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.

    1. Re:computers come with accessible languages by SuperKendall · · Score: 1

      Sure, but they don't give you the visual feedback programming did "back then".

      I would actually argue that at the moment, an iPod Touch is actually the best programming environment for a kid wanting to learn to program, because the feedback is visual and kind of tactile, and they can easily show off work to friends.

      The pure text programming plays are too dry to hook many kids early, I think...

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    2. Re:computers come with accessible languages by falzer · · Score: 1

      > Sure, but they don't give you the visual feedback programming did "back then".

      Don't they? Explain visual feedback programming differences between running python on today's macs with running basic on, say, the Apple II of old.

      To get an idea of where you're coming from, what is your "back then" experience?

    3. Re:computers come with accessible languages by Anonymous Coward · · Score: 0

      I started out with TRS-80 Level II BASIC and I don't think I was getting much visual feedback. I suppose simple graphics were better integrated into the BASIC interpreters of the time than they are in Python or AppleScript.

      My kids have played with MIT's Scratch a little bit. It's a decent learning environment for some programming concepts and is entirely visual, and it has a sharing mechanism.

    4. Re:computers come with accessible languages by fusiongyro · · Score: 2, Insightful

      AppleScript is much easier to understand than to write. Nearly everyone winds up using it in an autotools-like way, looking for examples online and adapting them, with a lot of superstitious behavior. It's extremely hard to write non-trivial AppleScript, and I'm speaking as a professional programmer with command of plenty of languages.

    5. Re:computers come with accessible languages by Urkki · · Score: 1

      The premise that modern computers don't provide a language as accessible as BASIC seems questionable.

      Modern languages don't have IO interface comparable to decent line-number BASIC. I'm talking about commands and functions like these in gwbasic: screen, locate, print, p(re)set, line, input, inkey$, sound, timer.

      And no complex concepts like functions (introducing identifier scopes and things like that).

      And goto! Let's not forget goto, the ultimate tool for adjusting the complexity of the program approximately by a factor of (number of gotos/10)^10, as compared to an equal structured program.

      That translates to really trivial simple demo programs and games. No setup needed, no worrying about screen resolutions or character encodings or locales or libraries or... anything.

    6. Re:computers come with accessible languages by Urkki · · Score: 1

      > Sure, but they don't give you the visual feedback programming did "back then".

      Don't they? Explain visual feedback programming differences between running python on today's macs with running basic on, say, the Apple II of old.

      Consider this GW Basic one-liner (draws a "rainbow hour glass" that fills the screen):

      screen 7:for x=0 to 320:color x/4 mod 15+1:line (x,0)-(320-x,200):next

      I think that's the kind of visual feedback that was meant.

      Oh, and I'd be very interested in seeing how long Python program is needed. Can't be very many lines with something like pygame, can it?

      (Google for gwbasic if you want to find an interpreter which can run that, for Windows. I'm almost certain "aptitude search gwbasic" or equal would give suitable package in Linux.)

    7. Re:computers come with accessible languages by slthytove · · Score: 1

      Here's some Python, that will work in Python 3.1 (which is the most consistent for educational purposes, in my opinion). No external libraries required - all the standard distributions of Python 3.1 include turtle graphics.

      from turtle import *
      tracer(10, 0) # speeds up display - turtles can be slow!
      for x in range(-160, 160):
              color(x / 320 % 1, x / 160 % 1, x / 100 % 1)
              penup()
              goto(-x, -100)
              pendown()
              goto(x, 100)

      More fun, in my opinion, are recursive functions:

      from turtle import *

      delay(0)

      def tree(length):
              if length 1:
                      fd(length)
                      bk(length)
              else:
                      fd(length)
                      lt(20)
                      tree(length * .6)
                      rt(60)
                      tree(length * .6)
                      lt(40)
                      bk(length)

      lt(90)
      tree(50)

    8. Re:computers come with accessible languages by Anonymous Coward · · Score: 0

      So to show how great python is, you wrote something in LOGO? Let's see you do it without imports, please.

    9. Re:computers come with accessible languages by SuperKendall · · Score: 1

      Well, first there was a ZX81 where you were plotting very large pixels onto a screen.

      Around the same time I was also using basic on a TRS-80, and Apple II - also which were plotting some pixels, or plotting characters to positions on screens.

      Yeah you have curses kinds of abilities in a terminal now, but come on - to a modern kid that is going to look like nothing, and to do even simple text plotting is too hard to get started (and as I noted not really very interesting to a modern kid).

      Not to mention explaining the whitespace indentation to a 10-year old is an experience with a desirability I'd put way below having talks about how sex worked.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    10. Re:computers come with accessible languages by clone53421 · · Score: 1

      That’s not LOGO, it’s Python. LOGO syntax doesn’t use parentheses.

      --
      Alexander Peter Kristopeit bought his basement from his mommy for one dollar.
    11. Re:computers come with accessible languages by clone53421 · · Score: 1

      Modern languages don't have IO interface comparable to decent line-number BASIC. I'm talking about commands and functions like these in gwbasic: screen, locate, print, p(re)set, line, input, inkey$, sound, timer.

      Yeah, that was what really turned me off C back when I was first trying to write simple programs. None of the C books told how to do “simple” stuff like the equivalent of LOCATE, COLOR, CLS, SOUND... they were all focused on learning to program (write algorithms). I knew how to write an algorithm already.

      --
      Alexander Peter Kristopeit bought his basement from his mommy for one dollar.
    12. Re:computers come with accessible languages by bbtom · · Score: 1

      And these days, it isn't so necessary with the various bridges that exist between good scripting languages (Python and Ruby) and both Cocoa and OSA - namely, PyObjC, MacRuby, RubyOSA etc. - and plenty of command-line interfaces to various bits of the OS. Indeed, if you use an OSA bridge in Ruby, you have a much more powerful way AppleScript because you can combine code from the Ruby stdlib, Unix command line tools, abstracted C libraries (and inlined C) and the AppleScript interfaces. If you want to use a Java library, you wrap the OSA bridge stuff in a class and FFI out to it from JRuby. You get so much more, and you get to write it in a syntax that doesn't drive you completely batshit insane.

      You also get a much better development experience: irb or ipython plus your favourite editor (vim, emacs, textmate etc.) beats the pants off the damn AppleScript script editor. Who in their right mind thought that not being able to save a file unless it compiled was a sensible idea? With irb, you can interactively examine your objects. Bash lines into the shell and see what happens. Much more useful than Script Editor which basically gives you an edit-compile-run cycle.

      AppleScript is one of those things I wish Apple would replace. Now they are pursuing App Stores and iOS though, I don't hold out much hope that they'll deprecate AppleScript and encourage people to use Ruby instead. The idea that normal people are going to suddenly learn AppleScript because it has a "friendly" syntax is laughable.

      --
      catch (HumourFailureException e) { e.user.send("You, sir, are a humourless idiot."); }
  13. Re:"Alice" one of the best learning languages toda by Anonymous Coward · · Score: 1, Funny

    Alice, who the fuck is Alice?

  14. Re:"Alice" one of the best learning languages toda by mdf356 · · Score: 1

    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.
  15. Re:"Alice" one of the best learning languages toda by Anonymous Coward · · Score: 2, Informative

    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.

  16. David Ahl by slapout · · Score: 1

    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
    1. Re:David Ahl by BitwizeGHC · · Score: 0, Offtopic

      It turns out David Ahl is a tea-party-grade conservative. Remember "Ninja-Endo", the blatantly racist, WWII-propaganda-style smear against Nintendo? Yeah, that was him who came up with that.

      As instrumental as he was in bootstrapping the computer hobbyist community, today's computing world is probably better off without folks like him in high prominence.

      --
      N4st0r, trixx0r h0bb1tz0rz! Th3y st0l3 0ur pr3c10uzz!
    2. Re:David Ahl by slapout · · Score: 1

      So just because you disagree with someone politically, they can't contribute positively to the field?

      --
      Coder's Stone: The programming language quick ref for iPad
  17. Hi- I'm the Author by smug_lisp_weenie · · Score: 5, Informative

    Pay no attention to my user name- I promise to respectfully answer any questions you may have, about Lisp or the book!

    1. Re:Hi- I'm the Author by Anonymous Coward · · Score: 0

      will you help me write a book about Lisp?

    2. Re:Hi- I'm the Author by robi5 · · Score: 1

      Can I buy it as an elecrtonic copy, e.g. Kindle?

    3. Re:Hi- I'm the Author by smug_lisp_weenie · · Score: 4, Funny

      I'd be glad to give you some pointers :)

    4. Re:Hi- I'm the Author by smug_lisp_weenie · · Score: 3, Informative

      For some reason, mopi and epub files take a couple extra weeks to make. They should be appearing on nostarch.com and amazon in a couple of weeks.

    5. Re:Hi- I'm the Author by Anonymous Coward · · Score: 0

      I'm not trying to start a Lisp vs Scheme flamewar, but is there any chance you could do a Scheme version?

    6. Re:Hi- I'm the Author by Anonymous Coward · · Score: 3, Funny

      Some pointers? Surely you mean cons cells!

    7. Re:Hi- I'm the Author by A+nonymous+Coward · · Score: 2, Funny

      He said Lisp, not C.

    8. Re:Hi- I'm the Author by wonkavader · · Score: 1

      How do you get a book reviewed on slashdot? I'm serious. My book's languishing on Amazon. Great reviews on Amazon, but I've got no eyeballs (I mean this as a term of art -- I have not been blinded by spoon-wielding ninjas).

      What printing company did you go with or did you find a real publisher? If you went with a publisher, are they doing a good job promoting your book?

    9. Re:Hi- I'm the Author by johnjaydk · · Score: 2, Interesting

      I paged through the book yesterday and I'm looking forward to go through it in detail. It's SO nice to find a book on lisp that doesn't make You want to carve out Your eyeballs due to sheer dryness.

      --
      TCAP-Abort
    10. Re:Hi- I'm the Author by Dasuraga · · Score: 1

      Gotta say this is the sort of book I've always been waiting for. I learned C by following game tutorials, and I've always found it hard to learn a language without some solid complete examples that don't bore me to death. I've always found games to be the best way to show most anything, considering how complete such examples are. Even though I rarely buy these kinds of books( these books are so expensive: you're no exception) You've just gotten at least one sale. Now to find somewhere in europe where I can get the book+ebook combo for cheap enough.

    11. Re:Hi- I'm the Author by Twisted64 · · Score: 1

      I'd be in for that, but a couple of weeks is a long time to remember... I'll make a note of it. Mailing list might be good?

      --
      Consciousness is a myth. Trust me.
    12. Re:Hi- I'm the Author by smug_lisp_weenie · · Score: 1

      Actually, it looks like the mobi & epub just became available!

      http://nostarch.com/lisp.htm

    13. Re:Hi- I'm the Author by Twisted64 · · Score: 1

      Your cheque's in the mail :)

      --
      Consciousness is a myth. Trust me.
    14. Re:Hi- I'm the Author by smug_lisp_weenie · · Score: 1

      It's a lot of work to write a book. I'm a big fan of Scheme, but this isn't in the cards at this very moment.

    15. Re:Hi- I'm the Author by Anonymous Coward · · Score: 0

      Hello,

      Have you played around with Clojure yet? I just came back from clojure-conj and was impressed with the language and it's principal designer: Rich Hickey.

    16. Re:Hi- I'm the Author by Anonymous Coward · · Score: 0

      Is there any way to buy the ebook without a credit or debit card or paypal? I don't like handing out my personal info, and I'd like to use something like a visa gift card.

    17. Re:Hi- I'm the Author by e40 · · Score: 1

      Does Kenny know you stole his user name??

    18. Re:Hi- I'm the Author by e40 · · Score: 1

      Should have included this: http://smuglispweeny.blogspot.com/

      (I'm joking of course... it will take some getting use to not thinking of KT behind your posts, though)

    19. Re:Hi- I'm the Author by Anonymous Coward · · Score: 0

      As long as he can '(dereference) them!

    20. Re:Hi- I'm the Author by Anonymous Coward · · Score: 0

      First off, linking to your book in your post might help you out.

    21. Re:Hi- I'm the Author by smug_lisp_weenie · · Score: 1

      i've used that name for a long time- Not sure who was first.

        i think it's from the "jargon file".

    22. Re:Hi- I'm the Author by smug_lisp_weenie · · Score: 1

      i also love clojure. rich hickey is an amazing designer.

    23. Re:Hi- I'm the Author by metalcup · · Score: 1
      Hello Dr. Barski,

      Thanks for taking part in this discussion - I appreciate it - it is always great to chat with the author of a book on a subject you like..! I have a problem that I am hoping you, as an author of a book that teaches a language, might have some insight into. Thanks for taking the time to read this :)

      I've been on the internet in one way or another since the early 90's (I started out using bulletin board services, yahoo was a directory listing, and I used GOPHER/ARCHIE) on 14.4K and then 56K modems to start with - so I would like to think that I have some skill with technical stuff. However, I have tried and repeatedly failed over the years to learn any programming language -though I can hack together simple shell scripts and PERL scripts to get the job done in a pinch. I suspect this is might be because of two reasons:

      a) Lack of a real problem to solve (i.e. lack of motivation)

      b) Programming requires a completely different way of thinking that is alien to me. So I can never 'get it' :/

      Since I am now a biologist doing my PhD in molecular genetics, where I often work with large-scale datasets (RNA sequencing data, microarray data, genome-wide mRNA expression data, etc), good programming skills would allow me to ask questions that I cannot even consider because of lack of skill. This gives me my problem that I need to solve. However, I have spent lots of time trying to learn LISP/Scheme/Python and failed miserably. I am very tempted to get your book, and I recognize that you cannot ensure that I learn programming; however, I was hoping you had some tips or suggestions on how I could approach the topic and learning the/a language in general.

      Thanks!

      --
      "Laziness is an optimisation protocol"
    24. Re:Hi- I'm the Author by Anonymous Coward · · Score: 0

      And pay no attention to mine....

      I have a 10 year old who is interested in learning computer programming (mostly because he likes games). Would this be a reasonable book on which to start him out? [I'm a bit of a Python weenie, and I'm trying not to impose my neuroses on him.]

    25. Re:Hi- I'm the Author by R2.0 · · Score: 1

      Would this book be suitable for a relatively precocious 10 year old? My son wants to learn how to make computer games, but he has the attention span of a gnat on Red Bull. But his math skills are excellent (about 7th grade level) and his reading is above average too, with a scary vocabulary. He'd be attracted to the comic format, but what level of programming knowledge does it assume? I'd be available to help him, except the last time I programmed anything was 20 years ago - in FORTRAN.

      --
      "As God is my witness, I thought turkeys could fly." A. Carlson
    26. Re:Hi- I'm the Author by clone53421 · · Score: 1

      Is there any way to buy the ebook without a credit or debit card ... I'd like to use something like a visa gift card.

      That’s a credit card.

      --
      Alexander Peter Kristopeit bought his basement from his mommy for one dollar.
    27. Re:Hi- I'm the Author by Just+Some+Guy · · Score: 1

      How do you get a book reviewed on slashdot?

      I wrote a review when a publisher sent me a free copy (seemingly at random; maybe because of the mailing lists I was active on at the time?) and it interested me enough to want to tell others about it.

      This is not a request for everyone to start sending me books. My days aren't that long. :-) Just passing along how it happened to work in my case.

      --
      Dewey, what part of this looks like authorities should be involved?
    28. Re:Hi- I'm the Author by vsedach · · Score: 1

      I think it could work. The book starts out at a very basic level. The only trouble I could see is that it doesn't define what functions and variables are, but it explains how to define a variable and how to define a function and what that does. Other than that, it pretty much starts out at the beginning explaining what the different types are and how they work, arithmetic and binary numbers, etc.

    29. Re:Hi- I'm the Author by R2.0 · · Score: 1

      Functions and variables shouldn't be a problem; they are already into algebra in his math class, and they are something that I understand vis a vis programming, so I can explain it.

      --
      "As God is my witness, I thought turkeys could fly." A. Carlson
    30. Re:Hi- I'm the Author by Twisted64 · · Score: 1

      Just a quick note - I haven't checked the pdf yet, but the mobi has issues with some of the code. Enjoying the style tremendously though!

      --
      Consciousness is a myth. Trust me.
  18. Lisp web apps? by Anonymous Coward · · Score: 1, Interesting

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

    1. Re:Lisp web apps? by vbraga · · Score: 1

      Yahoo! Stores, I believe, was built on Lisp.

      --
      English is not my first language. Corrections and suggestions are welcome.
  19. Land of the Lisp? by scorp1us · · Score: 1

    San Francisco?

    --
    Slashdot's rate-of-post filter: Preventing you from posting too many great ideas at once.
    1. Re:Land of the Lisp? by khallow · · Score: 1

      Lisp is an East Coast thing. Blame MIT. The Snowbol/Pike/Perl progression was so much more open to the San Francisco lifestyle.

    2. Re:Land of the Lisp? by the_hellspawn · · Score: 0

      lol I got it.

      --
      "The laws of science be a harsh mistress." --Bender
    3. Re:Land of the Lisp? by Anonymous Coward · · Score: 0

      Homosexual stereotype joke fail.

      P.S. Behave!

    4. Re:Land of the Lisp? by Anonymous Coward · · Score: 0

      Try Scheme, a dialect of Lisp, land o' course 6.

      Most graduate students write a Scheme compiler at one point.

    5. Re:Land of the Lisp? by Anonymous Coward · · Score: 0

      San Francisco?

      Go walk around the Castro and prance and lisp and flip your wrist. Get your ass kicked sure as wearing a 9ers jersey on International in Oakland.

    6. Re:Land of the Lisp? by scorp1us · · Score: 1

      Swinger stereotype joke fail?

      --
      Slashdot's rate-of-post filter: Preventing you from posting too many great ideas at once.
  20. Re:FOOLISH MODERATOR! by jgtg32a · · Score: 4, Funny

    Because there is no -1 Moron

  21. LISP a bad choice as a starter language. by Junta · · Score: 4, Insightful

    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.
    1. Re:LISP a bad choice as a starter language. by fusiongyro · · Score: 4, Insightful

      Your information about Lisp is about 30 years out of date. It's not an acronym, Common Lisp has many looping constructs that are much more widely used than recursion, and closing parenthesis is as trivial to any modern editor or IDE as managing any other aspect of syntax. I think if you look at the cover of this book, it should be obvious to you that the target audience is not particularly interested in the marketability of their skills.

    2. Re:LISP a bad choice as a starter language. by UnknownSoldier · · Score: 1, Insightful

      > and closing parenthesis is as trivial to any modern editor or IDE as managing any other aspect of syntax.

      That's a hinderance, not an advantage. I should be able to easily enter in blocks of code without having to rely on crutches like IDEs to make sure I have the correct number of parenthesis. While I admire LISP for its simplicity, elegance, and consistency, back in the Real World (TM) it has a lot of unncessary and redudant parenthesis that do nothing except clutter up code, making that crap near un-readable -- at least in C/C++ you can remove the braces for one-liners. Algol-like languages have a better mapping to mathematical functions. foo(x) vs (foo x)

      i.e.

      void foo( int x )
      {
            if (true-expresion)
            {
                    then-expression ;
            }
      }

      vs. the leading '(' is complely redundant but needed because of the syntax.

      (defun bar (x)
          (if (true-expression)
                  (then-expression)
          )
      )

    3. Re:LISP a bad choice as a starter language. by Abcd1234 · · Score: 1

      Indeed. If you want a clean, readable functional language, you're much better with something like Haskell (assuming you don't write Haskell like an academic... seriously, *WTF* is with all these single character variable names? Yes, Haskell looks like a system of equations, but it's still a fucking programming language, people).

    4. Re:LISP a bad choice as a starter language. by Anonymous Coward · · Score: 0

      It most certainly is an acronym. It stands for "list processor!"

    5. Re:LISP a bad choice as a starter language. by ultranova · · Score: 3, Insightful

      While I admire LISP for its simplicity, elegance, and consistency, back in the Real World (TM) it has a lot of unncessary and redudant parenthesis that do nothing except clutter up code, making that crap near un-readable -- at least in C/C++ you can remove the braces for one-liners.

      Thus saving a whole single character per line. That's real efficiency.

      Algol-like languages have a better mapping to mathematical functions. foo(x) vs (foo x)

      I wonder how many bugs have been introduced when people have confused Algol-like functions (which have side effects) with mathematical ones (which don't)?

      --

      Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

    6. Re:LISP a bad choice as a starter language. by SuperKendall · · Score: 2, Interesting

      I should be able to easily enter in blocks of code without having to rely on crutches like IDEs to make sure I have the correct number of parenthesis.

      That's an issue with braces in any other language, just check your C++ example... or any code with nested if statements and a bunch of closing braces.

      As with any paired construct, the solution is to enter both halves before you type anything else - so I always enter:

      ()

      And then type into it. You don't mismatch parens that way - editors are nice in that they can check veracity, but not really necessary if you format code at all well.

      Also since you are big on saving characters, what happens when you add an else into your example:


      void foo( int x )
      {
          if (true-expresion)
          {
              then-expression ;
          }
          else
          {
              else-expression;
          }
      }

      vs:

      defun bar (x)
          (if (true-expression)
              (then-expression)
              (else expression) )
      )

      Over a lot of code, I always found Lisp to be more readable and less wordy even if there are a few more parens.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    7. Re:LISP a bad choice as a starter language. by ari_j · · Score: 1

      General rule: Someone who spells it LISP has not used it either enough or recently enough to present an accurate, credible, or relevant criticism of the language.

    8. Re:LISP a bad choice as a starter language. by Lamesword · · Score: 2, Informative

      I agree that Python is a better beginning language than Lisp, but I think the book is pitched more as an introduction to Lisp (and functional programming) than as an introduction to programming. That said, I'd like to say a few words in defense of Lisp as a first language.

      In my experience (having taught a number of courses that involve coding), beginning programmers love to write bad code. The path of least resistance for them is to write monolithic blocks of code with one-character variable names and zero documentation, and to perform tasks in a remarkably contrived way that reflects a resistance to thinking ahead, somehow managing to do in cubic time what the "obvious" (to me) approach would do in linear time. Python tolerates this--it's such an awesome language that it is often easy to get something done even in the presence of terrible habits and lazy thinking (e.g., its readability makes monolithic code manageable).

      Lisp does not make it so easy to get away with being a bad programmer. Writing monolithic functions, for instance, is relatively hard work in Lisp; the programmer who attempts this is punished with parentheses, and soon finds that the path of least resistance involves many relatively short functions with well-defined purposes. In other words, Lisp requires a level of care and forethought that other languages don't. Pedagogically, this is a virtue (though it comes with the heavy drawback that beginners can easily get discouraged).

      There are exceptions, certainly. For instance, the easiest way to compute the nth Fibonacci number in Lisp is naive recursion, resulting in exponential runtime. Less naive recursion allows linear time, but a beginner would have trouble with that. (And a mathematically inclined programmer can compute it in constant time, if you assume arithmetic operations take constant time.)

      In my view, the only *bad choice* of a starting language is one that causes brain damage, such as BASIC. Python tolerates brain damage (since it accommodates almost any programming style), but is safe under proper supervision. Lisp avoids brain damage.

    9. Re:LISP a bad choice as a starter language. by Wolfbone · · Score: 2, Interesting

      rely on crutches like IDEs [...] t has a lot of unncessary and redudant parenthesis that do nothing except clutter up code, making that crap near un-readable [...] Algol-like languages have a better mapping to mathematical functions. foo(x) vs (foo x)

      IDE? A programmer's editor is all you need. In the Real World (TM) I suspect most programmers are already 'reliant' on such ubiquitous crutches!

      The parentheses are necessary and are not redundant - the necessary minimum in fact - and do not "do nothing except clutter up code". Far from it. One of the first things someone new to Lisp should know - especially if they are used to languages bogged down in complex syntax and so ironically initially view the parentheses as a distraction instead of as an aid (as more experienced Lispers will) - are the great advantages of having the written code in the form of a simple tree structure. The fabled power of Lisp macros - something many people have heard about and which may have attracted them to Lisp in the first place - is facilitated by this simplicity.

      "Better mapping to mathematical functions"? I can't even guess at how you arrived at that judgement. All I can say is that, of all the programming languages I've tried, Lisp is by far the most pleasingly congruent with my mathematical aesthetics, conventions and habits of thought. (And no, I don't like Haskell - I've heard it said how "mathematical" it is but I suspect that in this case the programmer and comp. scientist view may be at odds with the generalist mathematician's view.)

      PS. It's confusing and cluttery bad Lisp style to put the closing parentheses on lines by themselves. ;-)

    10. Re:LISP a bad choice as a starter language. by vsedach · · Score: 1

      I think Conrad addresses this criticism effectively in the first few chapters of the book. There's no weird recursive code, and the whole premise is you just download CLISP, get a prompt, and start working (on Debian, apt-get it). That's not any harder than getting Python.

      I also don't see how Lisp is not a marketable skill, it's been pretty good at putting bread on my table for a few years now.

    11. Re:LISP a bad choice as a starter language. by Anonymous Coward · · Score: 0

      A programmer's editor is all you need.

      I demand an editor with an "Eliza" program built in. And Tetris.

      Where could I find one of those?

    12. Re:LISP a bad choice as a starter language. by HiThere · · Score: 1

      Common Lisp is a language that I've often looked at, and always avoided. None of the books I examined have told me how to handle utf8 files. It's probably simple if you already know the language, but since I don't, it a killer. Ditto for linking to various C libraries. Databases, GUIs, etc. Lisp doesn't have a large number of libraries that are written to be used with it, the way C and C++ do, so there needs to be an obvious way to handle this. I get referred to ffi, which is documented somewhat sparsely and without examples of how to use it.

      Lisp is an important language of the past, but it doesn't seem to be taking the steps to make it an important language of the future.

      P.S.: This comment isn't only applicable to LISP. Many of the minor languages are susceptible to the same criticism. (OTOH, C & C++ need to deal with garbage collection, even if it means breaking compatibility with old code. A compiler switch could handle this, or a PRAGMA statement. And they DRASTICALLY need to improve their support for utf8 strings and files. (Glib is doing its part, but it needs to enter the language.) )

      --

      I think we've pushed this "anyone can grow up to be president" thing too far.
    13. Re:LISP a bad choice as a starter language. by Wolfbone · · Score: 1

      Good points, fair criticisms...

      However, I do think the situation is improving (a bit too slowly perhaps) and I don't think its importance is now past and nothing's being done about it. It's certainly not popular - never really has been and may never be - but it still is important to some (including in real-world, commercial settings of course) and I think it will continue to be. (At least I hope so).

      If you hadn't come across it last time you looked CFFI is the FFI of choice now and I think it does have fairly good documentation (at least it's a lot better than many Lisp libraries ;-)).

    14. Re:LISP a bad choice as a starter language. by eriqk · · Score: 1

      Emacs has both.

    15. Re:LISP a bad choice as a starter language. by gknoy · · Score: 1

      While I was first exposed to programming in Pascal, I never "got" many things. Scheme was my first course in college, and everything fell together. I had an awesome teacher, and the Schemer's Guide was great. I'm tremendously thankful that I learned to love a Lisp before I hit Java and Perl and the rest. Learning a Lisp helps prevent learning an irrational fear of recursion, for example.

    16. Re:LISP a bad choice as a starter language. by gknoy · · Score: 1

      Interestingly, Clojure constructs often have LESS parentheses than the Java ones that do the same thing, even when making calls to the exact same libraries and functions. It was pretty neat to see those examples.

    17. Re:LISP a bad choice as a starter language. by gknoy · · Score: 1

      I realize you're joking, but:

      Eliza in Emacs Lisp: http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/areas/classics/eliza/emacs/0.html

      To run Tetris in Emacs, use M-x tetris . (That is Emacs notation for alt-x, then type 'tetris', then enter.)

    18. Re:LISP a bad choice as a starter language. by shutdown+-p+now · · Score: 1

      You can also have a relatively clean-looking ML variant if you go with F# - it stole the idea of 2D code layout from Haskell almost verbatim, so no fugly ;; anymore...

      What I do like about Haskell and F# approach is that they still let you use {} and ; to mark things up if you want or need it.

    19. Re:LISP a bad choice as a starter language. by SpammersAreScum · · Score: 1

      Of course, you're free to write your C/C++/Java in a more compact, Lisp-ish way, say:


      void foo( int x )
          {if (true-expresion) {then-expression; }
            else {else-expression; }
      }

      (with the else-expression aligned under the then-expression, which I can't seem to force here)

      My co-workers never had to guess which code was written by the unreformed Lisp hacker...

    20. Re:LISP a bad choice as a starter language. by hotdog.sk · · Score: 1
      Are you aware that you made no syntax errors in C listing, compared to two in LISP one?

      I think general problem with LISP or functional languages in general is, that there are not enough teachers who have proper undeerstanding of them. As a result, students only remember them as languages with awkward syntax, and strange workarounds to do things essential in procedural ones.

  22. Re:"Alice" one of the best learning languages toda by Raffaello · · Score: 5, Informative

    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.

  23. Kindle or iBooks version??? by SuperKendall · · Score: 1

    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
    1. Re:Kindle or iBooks version??? by shutdown+-p+now · · Score: 1

      He has ebook version for sale for half the price, and that comes in Mobi (which Kindle will read) and ePub (which iBooks will read). And PDF for printing.

  24. Conrad Barski remembers... by chickenarise · · Score: 1

    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.
  25. Re:"Alice" one of the best learning languages toda by jgtg32a · · Score: 2, Informative
  26. Available at O'Reilly in Multiple Formats by eldavojohn · · Score: 2, Informative

    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.
  27. Python is the Lisp of the 21st century by mangu · · Score: 1, Informative

    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.

    1. Re:Python is the Lisp of the 21st century by Urkki · · Score: 4, Insightful

      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.

      Saying "Don't mix content with presentation" is pretty rich from a Python advocate, when Python does precisely that. It mixes presentation (what code looks like) with content (what code does).

      Besides, don't you know that in Lisp, parentheses are indentation symbols? They tell how the code should be indented, and changing indentation is just a matter of changing parentheses. If anything, adjusting indentation of Lisp code is easier than adjusting indentation of Python code.

    2. Re:Python is the Lisp of the 21st century by mangu · · Score: 2, Insightful

      Python does precisely that. It mixes presentation (what code looks like) with content (what code does).

      To some extent, every language does that. What I meant is that the TAB character introduces an arbitrary visual configuration that's not part of the language itself, which can confuse things when tabs and spaces are mixed in the same source file.

      However, this does not mean that the presentation of the code is unimportant. For instance, a reason why I once programmed in Pascal but switched to C was that I found braces easier to read than "begin ... end" pairs. Curly braces are clean and small symbols, looking at the source code at a glance they are easier to identify than multi-character keywords.

      When you are writing and reading code by the hundreds of thousands of lines, every detail becomes significant. That's something language theorists often fail to understand, but Dennis Ritchie and Guido van Rossum got perfectly right.

    3. Re:Python is the Lisp of the 21st century by ultranova · · Score: 1, Troll

      Different from parentheses, it's very easy to undo a bunch of indentations, just put the left margin where you want it.

      This is what I really, really, really hate about Python: indentation-based blocks. In other programming languages, I can easily restructure code when prototyping or exploring simply by adding or removing parentheses. In Python, I have to manually indent or unindent every single line .

      Who the Hell thought that was a good idea?

      --

      Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

    4. Re:Python is the Lisp of the 21st century by clone53421 · · Score: 1

      Why can’t the text editor do it automatically?

      --
      Alexander Peter Kristopeit bought his basement from his mommy for one dollar.
    5. Re:Python is the Lisp of the 21st century by monopole · · Score: 1

      Actually every good Python editor does that automatically. Particularly PyDev under eclipse

    6. Re:Python is the Lisp of the 21st century by monopole · · Score: 1

      Amen! Python is elegant, trivial to install, trivial to use, but insanely powerful. Even on a windows machine, installing a very comprehensive toolchain involves installing Python(x,y) and PyGame

      What freaks me out is the mystification of programming and hardware. Having grown up on Ahl's "Basic Games" I always thought computer literacy would increase. Instead we have bunches of fanbois who boast of how ignorant of the hardware and software they use. I mean, when did superuser become an honorific?

    7. Re:Python is the Lisp of the 21st century by MichaelSmith · · Score: 1

      Well yeah but out in the real world I might have to hack code on a test platform in vi or what ever editor is available. I might have to do it on a serial terminal in line by line mode. If you are developing small isolated apps on your home PC it is reasonable to say "just use an IDE" but the fact is you can't do that everywhere.

    8. Re:Python is the Lisp of the 21st century by BasilBrush · · Score: 1

      In Python, I have to manually indent or unindent every single line .

      Sounds like you should learn about text editors before you delve into programming.

      And if you're deleting/adding braces in C without also indenting lines appropriately, even at the prototyping stage, then that's pretty foolish way of working.

    9. Re:Python is the Lisp of the 21st century by Anonymous Coward · · Score: 0

      vim (not all other version of vi though) can easily change indentation by just selecting and hitting "<" or ">", respectively.

    10. Re:Python is the Lisp of the 21st century by fishbowl · · Score: 1

      Well, if you are in a situation where you have to use "whatever editor is available", I will suggest that you have put yourself in that situation, and you need to consider the reasons you've done so.

      I cannot envision a scenario where I would be required to edit Python that didn't include VIM, which happens to be the ideal tool for editing Python code in the first place.

      --
      -fb Everything not expressly forbidden is now mandatory.
    11. Re:Python is the Lisp of the 21st century by Urkki · · Score: 2, Informative

      Python does precisely that. It mixes presentation (what code looks like) with content (what code does).

      To some extent, every language does that. What I meant is that the TAB character introduces an arbitrary visual configuration that's not part of the language itself, which can confuse things when tabs and spaces are mixed in the same source file.

      I think better solution to not having tabs would have been if C would only have accepted tabs as indentation. And if python had "one tab is one level of nesting", I think that'd have been better too.

      Problems only arise when mixing tabs and spaces, and when not agreeing how many spaces indentation is, or how many spaces tab is. I'm sure most of us have encountered source files which have had all three of these, after being edited with many people with different editors and settings. "One TAB equals one level of indentation" would fix all that. Any programmer could use any amount of spaces for displaying tabs in editor, and it would not affect the source file.

      However, this does not mean that the presentation of the code is unimportant. For instance, a reason why I once programmed in Pascal but switched to C was that I found braces easier to read than "begin ... end" pairs. Curly braces are clean and small symbols, looking at the source code at a glance they are easier to identify than multi-character keywords.

      When you are writing and reading code by the hundreds of thousands of lines, every detail becomes significant. That's something language theorists often fail to understand, but Dennis Ritchie and Guido van Rossum got perfectly right.

      Indeed. However, these days code presentation, including automatic indentation, is largely taken care of by the editor (and if it isn't, maybe it's time to either learn to configure it, or switch to a more capable one). Except this is rather hard for Python, for the obvious reason. IMHO this is a serious and unique shortcoming of Python.

    12. Re:Python is the Lisp of the 21st century by A+Friendly+Troll · · Score: 2, Insightful

      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.

      I actually like tabs.

      I used to be in the "use spaces only" camp many years ago, but then I found out that I prefer proportional fonts to monospaced. When using those, you need more indentation; two or four spaces isn't going to be enough. So, I normally use tabs with the equivalent of six, and I switch to eight or ten when I'm dealing with highly-indented blocks of code.

      If I used spaces alone and inserted a whole bunch of spaces to accomodate for my font preference, whoever looks at that code later in a monospaced font would get a sudden urge to kill me.

      That's the whole beauty of it; in fact, tab characters *separate* content from presentation. A tab can be two spaces, or it can be ten. Meanwhile, spaces are just spaces. To put it differently, tabs are CSS, and spaces are inline style crud on HTML elements. So, to be honest, I really don't get your point.

    13. Re:Python is the Lisp of the 21st century by Mike+Buddha · · Score: 1

      it fucks up the excellent "Don't mix content with presentation" principle.

      And who's principle is that? Do we all have to adhere to it because someone declared it so? Computer languages are for humans to understand. I'll force my compilers and editors to deal with tabs if it makes the code easier to read and maintain, thank you very much.

      I'll adhere to the principle "code needs to be maintainable, and not just by the person who originally wrote it." A much more practical maxim.

      --
      by Mike Buddha -- Someday the mountain might get him, but the law never will.
    14. Re:Python is the Lisp of the 21st century by Anonymous Coward · · Score: 0

      I mean, when did superuser become an honorific?

      Around the time Slashdot UIDs hit 6 digits.

    15. Re:Python is the Lisp of the 21st century by MichaelSmith · · Score: 2, Insightful

      A lot of it is working on site, often with borrowed equipment, and under fairly strict security limitations. I might get given the code in a zip file and have to edit it on windows on notepad. Or I might be using the console port on an alpha server running Tru64 4.0

      These are just examples. They are created by circumstances. Python places to much reliance on the text editing environment.

    16. Re:Python is the Lisp of the 21st century by gnapster · · Score: 1

      Are you aware that on most typewriters, you can reposition the TAB stops?

    17. Re:Python is the Lisp of the 21st century by fishbowl · · Score: 1

      I guess I'm a lot more picky about the kind of work environment I will accept. I'm sure this means you have a lot more options than I do. I go to great lengths to avoid circumstances where architecture decisions were made in my absence.

      --
      -fb Everything not expressly forbidden is now mandatory.
    18. Re:Python is the Lisp of the 21st century by Anonymous Coward · · Score: 1

      C doesn't care at all about indentation. You can remove all the lefthand space from a C program without affecting it in any way. Pythons meaningful whitespace is a terrible idea, absolutely horrific really.

    19. Re:Python is the Lisp of the 21st century by aiht · · Score: 1

      I go to great lengths to avoid circumstances where architecture decisions were made in my absence.

      What, you mean "working for anybody else"?

    20. Re:Python is the Lisp of the 21st century by Anonymous Coward · · Score: 0

      Try vi's visual mode. noob.

            '>'

    21. Re:Python is the Lisp of the 21st century by Urkki · · Score: 2, Insightful

      C doesn't care at all about indentation. You can remove all the lefthand space from a C program without affecting it in any way. Pythons meaningful whitespace is a terrible idea, absolutely horrific really.

      Well, C cares about indentation in the way, that indentation has to be spaces or tabs, if there's any. Worst of all worlds, which is discovered by anybody who has worked with mixed up tab-space settings in files in version control. Worst case is having different amount of space per tab been used in different parts of the code, and tabs not used consistently. Result is, no matter how you configure the editor, some part of the code gets indented unevenly, and you can't fix it without messing up version control diffs.

    22. Re:Python is the Lisp of the 21st century by epine · · Score: 1

      Python places to much reliance on the text editing environment.

      Have you ever maintained unfamiliar APL code on an ASCII-only terminal where the overstrike symbols displayed with a ^H in the middle? I did for a couple of days I'll never forget. One can get used to anything.

      Warriors of yesteryear age and join standardization committees and then languages like C adopt horrible bodges such as trigraphs, whose short term application was government tick marks on warehouses of obsolete IBM terminal equipment (supports the C language, check), and whose only lasting utility was obfuscated code competitions.

      Python takes a more liberal view toward the Geneva convention on IBM legacy support. You can argue this both ways.

      I tend to think of APL as what Lisp would look like rendered in an ideographic character set. Too many characters all different, versus one main character and mirror fatigue. In any language, if you work artistically within what's given, you can make yourself heard.

      The problems arise from competence inversion. A business person trying to be clever hires an artless drudge, and the end result is unsatisfactory. Then someone more world-wise is brought in to clean up the mess, and the yowls from the dungeon curdle the blood.

      The upside of APL and Lisp is the -10 hit bonus to artless drudges. The downside is the +10 hit bonus to line noise virtuosos.

      Any code hand-off across an order of magnitude productivity gradient is going to hurt. And as we know, this is not uncommon in the programming profession.

    23. Re:Python is the Lisp of the 21st century by Mr.+Slippery · · Score: 1

      I'll force my compilers and editors to deal with tabs if it makes the code easier to read and maintain, thank you very much....I'll adhere to the principle "code needs to be maintainable, and not just by the person who originally wrote it." A much more practical maxim.

      But in fact, tabs make it harder for others to maintain your code. Some tools treat a tab as "insert n spaces here". Some treat a tab as "move to the next tab stop, 8 spaces over". Some treat a tab as "move to the next tab stop, a configurable number of spaces over."

      For code that's can be read and maintained by everyone, there is only one standard that works: code indented by spaces, wrapped to 80 characters in a fixed width font. No, I'm not shrinking my font to deal with your wider text -- using big fonts is why my eyesight is still decent at age 40. Yes, that ties us to a standard that goes back to the age of punched cards; consider it an homage to the Grand Old Days or yore and be proud.

      --
      Tom Swiss | the infamous tms | my blog
      You cannot wash away blood with blood
  28. Re:"Alice" one of the best learning languages toda by fusiongyro · · Score: 4, Informative

    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.

  29. Source Code Here & a Few Examples by eldavojohn · · Score: 2, Informative

    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.
    1. Re:Source Code Here & a Few Examples by Blakey+Rat · · Score: 1

      I think this year's lisp game expo competition had a few good Lisp web games.

      Where are they? The one you linked stinks.

    2. Re:Source Code Here & a Few Examples by Anonymous Coward · · Score: 0

      The classic 2 lisp web applications are Yahoo stores and orbitz

  30. I wish I had time to study Lisp, but... by Anonymous Coward · · Score: 1, Funny

    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?

    1. Re:I wish I had time to study Lisp, but... by vbraga · · Score: 2, Interesting

      However, is there a reason why all such couldn't be explained with something more modern, like Python?

      <humor>The sound you hear now is the sound of the old timers loading their shotguns.</humor>

      I'm only a few years older than you (25, soon to be 26) but learning Lisp was a very, very rewarding experience - at least to me. Even if I'm probably never going to code in Lisp (or Scheme, my personal favorite) it teach me to better think in the way I code. If you have some time in a free Tuesday evening (well, more than one, actually) try take a look at Structure and Interpretation of Computer Programs by Abelson, Sussman and Sussman. It's not in Lisp but in Scheme, a very close language. You probably saw most of the concepts in college but, for me at least once more, it was reading it that I felt a "gotcha" moment and finally understood it.

      --
      English is not my first language. Corrections and suggestions are welcome.
    2. Re:I wish I had time to study Lisp, but... by Anonymous Coward · · Score: 0

      First, a word of gentle advice. Your curriculum is most probably calculated to be the most homogenized pablum that the student body will pay for. It has been carefully selected to be as bland and minimum risk as possible, and for the privilege of being spoon fed warmed over Simula, you are paying far more than those Indian students you are envying and fearing. You should definitely consider finding additional resources that are not as easily handed down from a lecturer to broaden your skill set before you find yourself locked into the tedium of grinding out POJOs. (Okay, not so gentle.)

      I highly recommend a survey of the brief and violent history your chosen field, rooted in that navel gazing wonderland we call the 70's, where all the interesting decisions in the design of programming languages were made. This decade's innovations are generally rediscoveries of discarded techniques from this era that have either become viable due to exponential increase in processing power and necessary due to the inversely decreasing locality of reference. A command of these weird, wonderful and occasionally impractical ideas will serve you well as your fellow students rediscover the wheel, over and over.

      If you actually prove capable of learning independent of a steady drip feed of unthreatening curriculum, you will want to find better metrics of skill viability than keyword searches on Monster or LinkedIn. You want a job that isn't threatened by people willing to work longer hours with less need for stimulating problems? Take bigger risks with your education.

    3. Re:I wish I had time to study Lisp, but... by Creepy · · Score: 1

      Well I'm quite a bit older than you both and didn't care for Lisp or Scheme, but I admit, I'm biased - I had Scheme for introduction to data structures in my final year of college because I transferred schools and my data structures class was rolled into a series of programming classes in my first school and it didn't count as a data structures class in my new school. I'd previously had Lisp in an AI class (at school 1), so I audited out of the first class, but they wouldn't let me audit out of the second, so I sat through the most boring and easy class I ever took.

      I disliked lisp in my AI class for a different reason - WAY too many parenthesis. Yes, it is the easiest language to do recursion in, but when you're counting 40-80 parenthesis to find a balance error, you start to go nuts (it was worse before I discovered the % feature of vi, which was really the only viable text editor at the time because emacs took 20 minutes to start up on that school's ancient 1kHz 6 processor minicomputer that was shared by 300+ students, and pico wasn't robust enough).

      The other reason I disliked Lisp was that was the same year I discovered true object oriented programming - Smalltalk and objective-C on NeXT cubes. After the horror that is C++ which I had learned a couple of years prior, I couldn't believe how much cleaner they were (and that was before try-catch blocks and templates... C++ is a mess - a powerful mess, but still a mess).

    4. Re:I wish I had time to study Lisp, but... by vbraga · · Score: 1

      What environment do you suggest for learning Smalltalk? I tried Squeak but couldn't stand it...

      --
      English is not my first language. Corrections and suggestions are welcome.
    5. Re:I wish I had time to study Lisp, but... by the_brobdingnagian · · Score: 1

      I have spend an hour or two on lisp. It basically ruined Python for me. Almost all my Python code is filled with nested map(), reduce(), filter(), lambda's and list comprehensions. It's great when programming, but when reading it's terrible.

    6. Re:I wish I had time to study Lisp, but... by krzysz00 · · Score: 1

      gnu smalltalk

    7. Re:I wish I had time to study Lisp, but... by vbraga · · Score: 1

      Lambda syntax is what I dislike most in Python. And significant whitespace.

      I think I'm not really into Python :)

      --
      English is not my first language. Corrections and suggestions are welcome.
    8. Re:I wish I had time to study Lisp, but... by bbtom · · Score: 1

      +1 on GNU Smalltalk. I like the idea of Smalltalk, but the whole "visual VM" thing is such bullshit and is a case of the Smalltalk guys buying into their own hype too much. It may have been cool many years ago, but these days it just feels like this weird anachronism when you load it up, and it just sits there completely different from the rest of the OS...

      GNU Smalltalk, on the other hand, is billed as "Smalltalk for those who can type". And it is really very nice.

      (Alternatively, try Ruby. It's like Smalltalk + Perl + Lisp + lots of libraries.)

      --
      catch (HumourFailureException e) { e.user.send("You, sir, are a humourless idiot."); }
  31. How about a link to the book's website? by hgavin · · Score: 1
  32. Re:"Alice" one of the best learning languages toda by ocdscouter · · Score: 1

    I think she's a friend of Bob's.

  33. Thanks, was able to buy and read right now by SuperKendall · · Score: 1

    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
    1. Re:Thanks, was able to buy and read right now by smug_lisp_weenie · · Score: 4, Informative

      My understanding is you'll be able to download the mobi/epub versions for free when they become available if you buy the PDF now.

  34. Re:Oh Come On! This is a Book Review! by mcgrew · · Score: 2, Funny

    Thmileys make lithp talk thrange.

  35. Disagree, think it's a great choice by SuperKendall · · Score: 4, Insightful

    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
    1. Re:Disagree, think it's a great choice by Mike+Buddha · · Score: 1, Insightful

      I'm with Junta on this one. If you're going to learn a first language, make it one that will grow with your knowledge. When I started out, it was with LOGO and BASIC. The LOGO stuff was pretty much mental masturbation, as it were. Yes, some of the concepts were transferrable to more modern, practical languages, but so were the concepts in BASIC.

      For a beginner, I'd recommend Python. It's a powerful language, freely available on just about every platform imaginable, with tons of support and it will take a user all the way from "hello, world" to mobile phone apps, to web services, to World of Warcraft.

      --
      by Mike Buddha -- Someday the mountain might get him, but the law never will.
    2. Re:Disagree, think it's a great choice by degeneratemonkey · · Score: 1

      Lua. WoW is scripted in Lua, not Python. Should have been Python, but embedding Python is a nightmare and - to some - a deadly sin.

  36. Re:"Alice" one of the best learning languages toda by ChipMonk · · Score: 1

    It took you so much effort to type that, when you could have simply clicked on the provided link? No wonder you're AC.

  37. Lisp# by WED+Fan · · Score: 1

    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.
    1. Re:Lisp# by shutdown+-p+now · · Score: 1

      There have been a bunch of projects, though most dealt with Scheme rather than Common Lisp (but then you didn't specify which one you prefer...), but they never really took off.

      Of the current Lisp-alike offerings, the one that looks most promising is ClojureCLR.

  38. Re:"Alice" one of the best learning languages toda by GlassHeart · · Score: 1

    I wouldn't recommend BASIC or LISP for someone wanting to learn modern object-oriented programming today.

    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.

  39. Re:"Alice" one of the best learning languages toda by Anonymous Coward · · Score: 0

    Whoosh ... and since you probably didn't get the other joke either ...

  40. Re:"Alice" one of the best learning languages toda by dkleinsc · · Score: 1

    She runs Alice's Restaurant in Stockbridge, MA, of course.

    --
    I am officially gone from /. Long live http://www.soylentnews.com/
  41. Re:"Alice" one of the best learning languages toda by Bigjeff5 · · Score: 1

    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
  42. Re:Oh Come On! This is a Book Review! by Ksevio · · Score: 1

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

  43. You insensitive clod !!! by unity100 · · Score: 2, Informative

    i STILL eat lasers ....

  44. Re:"Alice" one of the best learning languages toda by Crackez · · Score: 3, Funny

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

  45. Re:"Alice" one of the best learning languages toda by Anonymous Coward · · Score: 0

    Sure it is. It stands for "list processor."

  46. Re:"Alice" one of the best learning languages toda by Anonymous Coward · · Score: 0

    No wonder you're a humorless dick.

  47. 21st Century started in 1958? by Baldrson · · Score: 3, Insightful
    I find it amazing that, contrary to popular belief, the 21st century started in 1958.

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

    1. Re:21st Century started in 1958? by int69h · · Score: 1

      "And you're right: we were not out to win over the Lisp programmers; we were after the C++ programmers. We managed to drag a lot of them about halfway to Lisp. Aren't you happy?" -- Guy Steele (One of the creators of the Java language)

      Implying that advances in Lisp stopped in 1958 is disingenuous. Many languages are just now popularizing what Lisp offered in the 1980s.

    2. Re:21st Century started in 1958? by npsimons · · Score: 4, Informative

      I find it amazing that, contrary to popular belief, the 21st century started in 1958.
      Seriously, guys, who in their right mind believes there have been no major advances in programming languages since Lisp?

      Some quite notable hackers believe that everything since LISP has simply reinvented the wheel. The more I study programming languages, the more I'm inclined to believe them.

    3. Re:21st Century started in 1958? by Baldrson · · Score: 1
      Hell, the Lambda calculus goes back to the '30s and, really, there haven't been any fundamental advances in LISP compared to that standard which, I'll admit, was beyond practical implementation until recently.

      But CLOS? Are you kidding me?

      Sure its an advance over Smalltalk but really...

    4. Re:21st Century started in 1958? by Baldrson · · Score: 1
      Graham is 99.9% correct (see the parent to your reply).

      Church's formalism is great and its hard to beat it but it is a functional formalism and functions are degenerate relations. The predicate calculus is a superior formalism.

      If as much effort had gone into fixing up Prolog as has gone into fixing up Lisp, we could have avoided the entire Date and Darwen mess, not to mention ridiculous "rules systems" like Jess.

    5. Re:21st Century started in 1958? by int69h · · Score: 1

      I was thinking more along the lines of garbage collection, closures, and REPL style programming, but now that you mention it there's some of the features of CLOS as well.

    6. Re:21st Century started in 1958? by vsedach · · Score: 1

      CLOS IMO has almost nothing to do with Smalltalk or object-oriented programming. It's a system for structuring code in large programs in a way more akin to aspect-oriented programming (I think that Kiczales' subsequent work on AOP in Java is far less usable than CLOS). When combined with dynamic binding, CLOS is really the only practical solution for building really large, maintainable systems today without resorting to "brute force and thousands of slaves" (as Alan Kay calls it) and re-writes every 10 years. The only alternatives that seem to work is to break everything up into untrusted components of a distributed system, but that's a lot of overhead and extra engineering if you can't use off-the-shelf stuff.

    7. Re:21st Century started in 1958? by Baldrson · · Score: 1

      That presupposes AOP is a fundamental advance, a presupposition I do not share. The separation of concerns is the root problem with specialization. In reality, you cannot, for example, separate optimization from the expense of doing optimization.

    8. Re:21st Century started in 1958? by vsedach · · Score: 1

      I am totally missing the point you're trying to make. I think the important parts of CLOS and AOP is the idea of "join points" - flexible ways of specifying when particular code needs to run. There's nothing fundamental or theoretical about it, but it's an extremely powerful way of making simpler systems (otherwise you're just copy-pasting patterns to program around the fact that everything in your system is being forced through message-passing).

    9. Re:21st Century started in 1958? by sribe · · Score: 1

      Seriously, guys, who in their right mind believes there have been no major advances in programming languages since Lisp?

      People who study programming languages and actually understand their semantics, that's who ;-)

    10. Re:21st Century started in 1958? by Baldrson · · Score: 1

      So what do people who study programming languages and actually understand their semantics say about relational paradigms, such as the predicate calculus, as opposed to functional paradigms, such as the lambda calculus? I mean do these sages seriously think there is not fundamental importance to the fact that functions are degenerate relations?

    11. Re:21st Century started in 1958? by Anonymous Coward · · Score: 0

      What do you mean "since" Lisp? Lisp has embraced every major advance in programming languages since its invention.

      Perhaps I'm not in my right mind but can you name a single feature of *any* other programming language that is *not* achievable in Lisp?

      Well, no, you can't, because Lisp's fundamentals underlie everything in computing, and its flexibility is at its core unlimited.

      I suggest you read Let over Lambda and cower.

  48. Re:"Alice" one of the best learning languages toda by ultranova · · Score: 1

    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.

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

    Alice teaches much more modern object-oriented principles that would be much more useful than BASIC or LISP to a modern programming student.

    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.

  49. Abbreviation, not acronym by Anonymous Coward · · Score: 0

    Sure it is. It stands for "list processor."

    No, that makes it an abbreviation, or a contraction, not an acronym.

    1. Re:Abbreviation, not acronym by Anonymous Coward · · Score: 0

      No, you are wrong. It is an acronym, the same as Fortran is an acronym for "formula translator." Your silly semantic arguments won't change that.

    2. Re:Abbreviation, not acronym by Anonymous Coward · · Score: 0

      Maybe you should look up the word acronym. For that matter look up abbreviation and contraction, because the only definition of the three that fits is acronym. Maybe you need a little more schooling before you run off at the mouth.

  50. Re:"Alice" one of the best learning languages toda by A+nonymous+Coward · · Score: 1

    Amen. It changes the way you think of computers. All other languages flail before the almighty Lisp.

  51. Re:"Alice" one of the best learning languages toda by A+nonymous+Coward · · Score: 1

    I heard Eve knows them both, but they don't know she even exists.

  52. Re:"Alice" one of the best learning languages toda by Anonymous Coward · · Score: 0

    generation y obviously lacks the higher order brain functions that are required to enjoy irony or true humour.

  53. Re:"Alice" one of the best learning languages toda by goose-incarnated · · Score: 1

    This is very interesting, I wish I had modpoints :-(

    --
    I'm a minority race. Save your vitriol for white people.
  54. Re:Oh Come On! This is a Book Review! by Anonymous Coward · · Score: 0

    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.

  55. Not just concepts, but deep concepts by SuperKendall · · Score: 1

    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
    1. Re:Not just concepts, but deep concepts by Mike+Buddha · · Score: 1

      I disagree that it fundamentally changes the way you approach programming any more than any other well defined, structured language like Python, with Python having the added benefit of relevance.

      --
      by Mike Buddha -- Someday the mountain might get him, but the law never will.
    2. Re:Not just concepts, but deep concepts by Darinbob · · Score: 2, Insightful

      Any decent programmer should know more than one language. If they can't adapt to a new language, they need to spend some more time learning how to think differently. Preferably, one of the languages they know should be lisp-like. Not because it's necessarily relevant to today's web-based micro-apps, but because it can teach you to THINK differently.

      I know some programmers who know several languages, but they write as if every one of them was Fortran. You can lead the horse to water...

  56. Already have ePub too!! Better choice than PDF. by SuperKendall · · Score: 1

    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
  57. Re:"Alice" one of the best learning languages toda by tom17 · · Score: 1

    Ahh that takes me back to my Oktoberfest days :)

  58. While we're at it: Lisp,wittle wabbits+yet another by D4C5CE · · Score: 1

    ...programming language in the end are covered at http://occupyfun.com/jokes/joke.php?title=Wittle-Wabbit ;-)

  59. Re:"Alice" one of the best learning languages toda by lennier · · Score: 1

    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
  60. lisp is 40 years old by Anonymous Coward · · Score: 0

    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 .

  61. Python is unusable because of whitespace issue by SuperKendall · · Score: 4, Insightful

    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
    1. Re:Python is unusable because of whitespace issue by uglyMood · · Score: 1

      I agree absolutely. A page of Python looks very pretty. As a tool meant to be used, however, it completely ignores the real world. What kind of twisted logic would lead someone to design a language that depends on an invisible character to designate code blocks? "Because it looks nice" isn't a valid argument when it renders the code unmaintainable.

      --
      "No matter where you go, there you probably are." -- Buckaroo Heisenberg
    2. Re:Python is unusable because of whitespace issue by Mike+Buddha · · Score: 1

      Why would anyone want to be able to glance at a page of code and see where it's unbalanced? Obviously, you've never worked on a large project with multiple contributors.

      --
      by Mike Buddha -- Someday the mountain might get him, but the law never will.
    3. Re:Python is unusable because of whitespace issue by Anonymous Coward · · Score: 0

      Although pasting code is usually not such a great idea.

    4. Re:Python is unusable because of whitespace issue by Woy · · Score: 1

      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.

      You guessed wrong. The indentation in python contains the same information as all your brackets and semicolons, and thus can be used the same way. Not too surprising, coming from someone who's main language choice consideration is how it supports copy and paste.

      --
      "If God created us in his own image we have more than reciprocated." - Voltaire
    5. Re:Python is unusable because of whitespace issue by uglyMood · · Score: 1

      Sorry, but I've got fifteen years doing exactly that. I am NOT saying that code should not be properly indented; I have a reputation as an indentation nazi. What I AM saying is that using an invisible character that is indistinguishable from three or four spaces to differentiate your code blocks renders the code unmaintainable. That's why God invented curly braces. I mean, honestly: can you look at a 4-space tab character and four space characters and tell me which is which without turning on "Show Whitespace Characters?" It's a nice idea, but in the real world, where I work very hard every day maintaining hundreds of thousands of lines of code that have been written by everyone from programming masters to farmed-out Indian hacks, it is utterly impractical.

      --
      "No matter where you go, there you probably are." -- Buckaroo Heisenberg
  62. Re:Oh Come On! This is a Book Review! by vsedach · · Score: 1

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

  63. Re:"Alice" one of the best learning languages toda by Anonymous Coward · · Score: 0

    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.

  64. Re:"Alice" one of the best learning languages toda by uglyMood · · Score: 1

    Nicely done.

    --
    "No matter where you go, there you probably are." -- Buckaroo Heisenberg
  65. Hi- I'm the Reviewer by vsedach · · Score: 2, Informative

    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.

    1. Re:Hi- I'm the Reviewer by wonkavader · · Score: 1

      Thanks, that's incredibly helpful.

  66. Available on Safari Library by harlows_monkeys · · Score: 1

    FYI for those with Safari Library subscriptions: this book is available there.

  67. Re:"Alice" one of the best learning languages toda by krzysz00 · · Score: 1

    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

  68. Re:"Alice" one of the best learning languages toda by fishbowl · · Score: 1

    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.
  69. Re:"Alice" one of the best learning languages toda by Vyse+of+Arcadia · · Score: 2, Funny

    "Lost In Stupid Parentheses."

  70. I never could get hang of those damn parens by NotSoHeavyD3 · · Score: 1

    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.
    1. Re:I never could get hang of those damn parens by Greyfox · · Score: 1

      It's really no harder to pretty print lisp than it is any other language. Any mismatched parans that doesn't uncover can be easily ferreted out with a editor capable of matching parans. That's % while in non-edit mode in vi and I have a handy emacs lisp function that implements the same functionality in emacs. I map it to the % key so that if I hit % while sitting on a paran it jumps the cursor to the matching paran, otherwise it self-inserts a %.

      --

      I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

    2. Re:I never could get hang of those damn parens by gknoy · · Score: 1

      Break your program across multiple lines, and mash the tab key in Emacs. It will indent properly for you. (Or, select a region and use ctrl-alt-backspace to do it on a region, usually.) If you're not using an Emacs-based editor, or one that will do similar automagical indentation (especially as a beginner), you're probably doing it the hard way. It's roughly as game-changing as having the autocomplete in Eclipse and Visual Studio be knowledgeable about the object model.

    3. Re:I never could get hang of those damn parens by ITBurnout · · Score: 1

      I know that Lisp is not an acronym, but we used to refer to it as Lots of Irritating Single Parens.

  71. Super Star Trek by fishbowl · · Score: 1

    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.
  72. So where's the car analogy? by Curmudgeonlyoldbloke · · Score: 1

    (sorry)

    1. Re:So where's the car analogy? by gknoy · · Score: 1

      Since Lisp is written with alien technology, clearly your car analogy is best served with a UFO analogy. Many people fear it, but a few love it with a passion ... and are viewed by much of the rest of the world as crackpots. :)

    2. Re:So where's the car analogy? by Moghedien · · Score: 1

      "My other car is a cdr" ?

      --
      I've come to... anesthetize you!
  73. python? by hitmark · · Score: 1

    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
    1. Re:python? by krzysz00 · · Score: 1

      And the python interpreter have a interactive mode.

      So do all the lisp ones.

  74. Re:"Alice" one of the best learning languages toda by Anonymous Coward · · Score: 0

    Yeah it is an acronym - Lost In Superfluous Parenthesis.

  75. Re:"Alice" one of the best learning languages toda by Darinbob · · Score: 1

    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.

  76. Re:"Alice" one of the best learning languages toda by brantondaveperson · · Score: 1

    That's the most bonkers thing I've ever read.

  77. Yes, yes, for loops! by Anonymous Coward · · Score: 1, Interesting

    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:

    result := initial_value
    for ( element in collection ) { result := function(element, result) }

    How many million times have you written a loop that follows this pattern? What about this one:

    result := new Collection(collection.size)
    for ( element in collection ) { result.add(function(element)) }

    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:

    • For loops specify how to iterate over a collection.
    • Functional combinators specify how the structure and values in the input are related from to the output.

    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.

    1. Re:Yes, yes, for loops! by gknoy · · Score: 1

      Wow, that was really well-written. I wish I still had mod points for you.

      As you (and the other AC) alluded to, macros and other syntactic sugar (which Lisp lets you define your own of) help you make the code clearer, less verbose, and less redundant in many cases (such as your map and reduce examples). It also can bite you in the butt if you forget what a macro expands to, or if you write a macro wrong, but most sorts of those errors in other languages bite as well.

    2. Re:Yes, yes, for loops! by Anonymous Coward · · Score: 0

      In Scala it's something like initialval /: collection {function} which as I understand can subsume all "catamorphisms". I'm not too fond of it though, I tend to stick with the foldLeft and foldRight methods for readability.

      Most people get maps pretty easily, but folds are something every programmer should learn. When you generalize them, they're ridiculously powerful. Flow control itself becomes a fold over computations, that sort of thing.

    3. Re:Yes, yes, for loops! by tibit · · Score: 1

      I don't know if you wished to imply that it's not possible in C++, but both reduce and map are fairly trivial to implement in C++. Off the bat:

      template R reduce(R (*fun)(const E&, const R&), const R& init, const C& coll)
      {
          R result = init;
          for (C::const_iterator it = coll.begin(); it != coll.end(); ++it) {
              result = fun(*it, result);
          }
          return result;
      }

      template C map(E (*fun)(const E&), const C& coll)
      {
          C result;
          for (C::const_iterator it = coll.begin(); it != coll.end(); ++it) {
              result.push_back(fun(*it));
          }
          return result;
      }

      or, simpler, for collections that support random access iterators:

      template C map(E (*fun)(const E&), const C& coll)
      {
          C result(coll.size());
          std::transform(coll.begin(), coll.end(), result.begin(), fun);
          return result;
      }

      --
      A successful API design takes a mixture of software design and pedagogy.
    4. Re:Yes, yes, for loops! by shutdown+-p+now · · Score: 1

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

      Hello, and welcome to 2010.

      Java has had anonymous inner classes (verbose as they are, they do work as closures) since version 1.1 - that's 13 years now - which can be used to implement map, filter, reduce and the rest of the bunch.

      C# has had anonymous delegates - which are true, full-featured closures (they can capture mutable variables and mutate them, unlike Java inner classes) - since 2005. In 2008, it got a shorter, more concise form for them with argument type inference.

      C++0x also has lambdas now. While it's not finalized yet, all major implementations (VC++, g++, Intel) already support this particular feature.

      And STL is the classic of reusable algorithm implementations, much more adaptable than the corresponding library of a typical functional language. All while preserving the same performance as the original hand-coded for-loop.

    5. Re:Yes, yes, for loops! by bbtom · · Score: 1

      You forgot filter. That's also important.

      Map -> filter -> fold is a pretty natural progression, and I've wasted countless hours (nay, weeks) of my life writing map/filter/fold code in dysfunctional langauges before discovering how much less I have to write in functional languages.

      Once you start using higher-order functions, you reach the point where you can't tolerate them not being there.

      --
      catch (HumourFailureException e) { e.user.send("You, sir, are a humourless idiot."); }
    6. Re:Yes, yes, for loops! by Just+Some+Guy · · Score: 1

      You totally missed the advantage that should excite most people these days: map and reduce are much easier to parallelize than a for loop. A Lisp implementation could easily fork off 10 child processes to chew through a large map, for instance, while a C compiler would have to be far more cautious about explicitly performing the steps in the order you wrote them.

      --
      Dewey, what part of this looks like authorities should be involved?
    7. Re:Yes, yes, for loops! by Estanislao+Mart�nez · · Score: 1

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

      Hello, and welcome to 2010.

      Java has had anonymous inner classes (verbose as they are, they do work as closures) since version 1.1 - that's 13 years now - which can be used to implement map, filter, reduce and the rest of the bunch.

      Yes, I know about inner classes, and I've used them before. As you point out, you have to write a freaking class to use them. That's two lines for the class declaration (first line + closing bracket), two lines for the method declaration, and then the code. I.e., map(function, collection) in Java becomes something this:

      Functional.map(new Function<ArgumentType, ResultType>() { public ResultType execute(ArgumentType val) { return function(val) } }, collection )

      .

      There's also the fact that hardly anybody writes Java programs like these. Oh, and, anonymous inner classes ain't real closures.

  78. Re:"Alice" one of the best learning languages toda by Anonymous Coward · · Score: 0

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

  79. Re:"Alice" one of the best learning languages toda by the+agent+man · · Score: 1

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

  80. Re:"Alice" one of the best learning languages toda by Anonymous Coward · · Score: 0

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

  81. Re:"Alice" one of the best learning languages toda by shutdown+-p+now · · Score: 2, Insightful

    Funny. To date, Common Lisp still has the most powerful and feature-complete OOP system ever designed in a programming language.

  82. Re:"Alice" one of the best learning languages toda by Anonymous Coward · · Score: 0

    Modern. You keep using that word. I don't think it means what you think it means...

  83. Got: LISP book Wants: Peg for publicity by dugeen · · Score: 1

    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.

  84. It wasn't about education by slim · · Score: 2, Insightful

    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.

    1. Re:It wasn't about education by Anonymous Coward · · Score: 0

      Good magazines, like the ones my dad bought(I actually followed them in the late nineties using an emulator as I was a newborn at the time of publication), had nice programming articles on the hot topics of the era. Assembly, game programming and "AI". Some great articles are worth reading even today.

      You most likely already knew that, but I don't want people to get the wrong idea. Sure, they were mostly gaming magazines with crappy freeware games, but the programming articles were really good.

    2. Re:It wasn't about education by multipartmixed · · Score: 1

      Those giant pages filled with hex characters taught me the technique of programming environment bootstrapping and the importance of programming checksums, you insensitive clod!

      --

      Do daemons dream of electric sleep()?
    3. Re:It wasn't about education by slim · · Score: 1

      Oh absolutely. My experience is with Acorn User. There were programming articles -- but those were orthogonal to the type-in games.

    4. Re:It wasn't about education by bbtom · · Score: 1

      Not to mention the various magic codes you had to enter for specific computers. You know, if you had an Acorn you had to put in these lines, and if you had a BBC or a VIC-20 you put in these lines. All just poking stuff into memory, of course.

      This taught me an important lesson in computing: the great thing about standards is there are so many to choose from. Good experience for eventually learning SQL.

      --
      catch (HumourFailureException e) { e.user.send("You, sir, are a humourless idiot."); }
  85. not everything is OO by luis_a_espinal · · Score: 1

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

  86. Re:"Alice" one of the best learning languages toda by AlterEager · · Score: 1

    If you can't do it in C and Lisp, it can't be done.

    Thanks for that helpful interjection Mr Turing.

    Want an apple?

  87. Re:"Alice" one of the best learning languages toda by luis_a_espinal · · Score: 1

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

  88. Re:Oh Come On! This is a Book Review! by multipartmixed · · Score: 1

    > *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()?
  89. Re:"Alice" one of the best learning languages toda by Anonymous Coward · · Score: 0

    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.

  90. Two... only _two_ languages? by jonaskoelker · · Score: 2, Interesting

    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)

  91. Re:"Alice" one of the best learning languages toda by Anonymous Coward · · Score: 0

    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.

  92. Re:"Alice" one of the best learning languages toda by brantondaveperson · · Score: 1

    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.

  93. Can Clojure be used instead of Common Lisp? by ninejaguar · · Score: 1

    Can someone who would prefer to learn the Clojure flavor of Lisp be able to adapt the book's explanations and code?

    = 9J =

  94. Re:"Alice" one of the best learning languages toda by badkarmadayaccount · · Score: 1

    Viper mode disagrees with you.

    --
    I know tobacco is bad for you, so I smoke weed with crack.
  95. Re:"Alice" one of the best learning languages toda by smalleyster · · Score: 0

    Lisp _is_ an acronym that I remember very well: Lost In Stupid Parentheses -- My work here is done 8^)

  96. Re:"Alice" one of the best learning languages toda by alexo · · Score: 1

    First, Lisp is not an acronym.

    Lots of Irritating Stupid Parentheses?