I, Thomas M. Hermann, do solemnly offer these my responses to The Road to Lisp Survey:
This is from the perspective of an aerospace engineer who passed through fortran, c, perl, python and java on the way to lisp. Futhermore, this is a 2 glass of wine response.
Nota Bene: All references to lisp in this response imply common lisp.
In aerospace engineering, they teach fortran, or at least they used to. The performance of fortran is hard to beat and the body of code for solving engineering problems is huge. But all that computation generates data and fortran is not the best at processing data. No regex and very limited set of data structures. So, way back, my initial motivation for learning another language was the desire for something to post-process data files and if it could also perform number crunching, even better. First I learned C, which was an improvement for processing data, but not much. Next I learned perl, but when I had trouble reading my own code, I knew it was time for something new. Something with a cleaner syntax. Python seemed to be a good fit. Despite having taken a C++ course in college, it wasn't until I started using python that I grokked concepts of object orientation. Python also held the promise of being able to rapidly prototype things, then migrate them to C for performance. Long term, that was going to be the value of python, rapid prototype->C for performance.
After writing a C interface for python to an engineering analysis code, I realized that there was nothing rapid about prototyping in python then migrating to C. This was also a period of time where there was some schizophrenia concerning numpy versus numeric python. I know this has been hashed out now, but at the time it was a distraction from the development of the library and I lost patience.
So, I began searching for alternatives, again. Spent a couple years with a language that requires everything to be an object. Can someone hand me a hammer, I have a round peg here and a square hole there. Didn't have good numeric support, but based on other perceived advantages, I had hashed out an object system that would have provided numeric support. As I'm implementing the numeric stuff, I'm getting very annoyed with changes in the language that are requiring redesign of my objects. Plus, performance, while not bad, is not the best. The work required starts to outway the benefits, so here I go again, searching for the one language to rule them all. That's when I seriously consider lisp. At this point, if lisp doesn't work out, I'm giving up and going back to fortran, never to look at another language again. Ever.
So, six months ago, I start digging into lisp. Hmm, lisp promotes functional programming, but you can do imperative if you really want to, or objective, or aspect, or your own.
What about types? Well, to quote Yogi Berra, "In lisp, types are not required until they are required." This is great, I can quickly thrash out some code, profile, correct the algorithm, profile, add types, bam! Good performance. Looking over CMUCL/SBCL, really good numeric performance.
Playing with code that is 30 years old, still runs, nice.
Forced to learn emacs, why was I using vi again? In the correct settings, slime can be fun. Emacs+SBCL is one setting, I'll let you think of others.
What the hell are closures? Oh, yeah, now I get it, functions with state, I can use that in simulations with state vectors, very intuitive.
And macros? Well, I don't need a domain specific language, yet, but using macros to build closures with multiple functions and shoving as much computation into the compilation stage as possible makes for very fast iteration over ODE's. Now I'm simultaneously iterating over 3 variations of an ODE in less time than iterating over 1 ODE in the previous one size fits all language.
Code is data is code. I know, a tired old cliche. But for an engineer who wastes too much time data processing and not enough time analyzing/understanding said data, this is very powerful and provides a warm fuzzy feeling. Yet again, that could be the wine.
CLOS blew away my notions of object orientation. It is object orientation the lisp way, that is with no boundaries.
I've been writing code for engineering solutions for 15 years in various languages. I've gained more insight into coding in the last 6 months then in the previous 15 years. Since lisp allows you to employ any and every programming technique, it actually requires you to understand the techniques well enough to apply them where appropriate. Lisp places few if any constraints on how you organize your solution, enabling you to solve your problem using the most suitable approach.
You should study lisp for at least a year, use it for some decent size projects. At the end of the day, even if you decide not to continue using it, you will be a much better coder. My bet, though, is that if you use it for a year, you won't want to use anything else. Don't be deterred by the parens or the prefix notation. You will have to rewire your brain a little to read lisp code, but the effort is worth it. The parens disappear and there is an elegance and simplicity to prefix notation that can't be matched by infix.
Time for some more wine.
Cheers,
Tom
RtL comp-lang-lisp | Seek and Ye Shall Find | RtL Greenspun's Tenth | RtL Paul Graham | RtL Language Curiosity | RtL Word of Mouth | RtL Emacs Elisp | RtL SICP | RtL Formal Education | RtL Kent Pitman | RtL comp-lang-python? | RtL Douglas Hofstadter | RtL AI | RtL Work | RtL Peter Norvig | RtL Erik Naggum | RtL AutoCad AutoLisp | RtL Richard Gabriel | RtL 3D Community | RtL Stephen Slade | RtL Bjarne Stroustrup | RtL TUNES | RtL Eric Raymond
This page is linked from: The Road To Lisp Survey Other pages sharing this page's categories: Abhijit Rao AlexPeake AlexTibbles Andrew Philpot's Road to Lisp Artie Gold's Road to LISP August Sigov's Road to Lisp Ben Holm's Road to Lisp Bill Birch's Road to Lisp Bob Bane's Road to Lisp Bob Bechtel BobHutchison Brad Beveridge - Road to Lisp Bradford W Miller BradMight Brandon Corfman Brendan Van Horn Brian Mastenbrook - Road to Lisp Brian T. Rice Bruce Durling's Road to Lisp Bruce Woodward's Road to Lisp Bulent Murtezaoglu C E C Artime Charlie McMackin Chris Laux's Road to Lisp Chris Sonnack's Road to Lisp Chris Van Dusen Chris-Perkins Christian Lynbechs Road to Lisp Christian Nybø Coby Beck Conrad Barski Constantine Vetoshev Damien Sullivan's Road to Lisp Dan Muller Daniel Barlow's Road to Lisp Daniel Pezely's Road to Lisp DARose Dave Fayram's Road to Lisp Dave Pearson Dave Roberts David Douthitt David Golden's Road to Lisp David Mercer David Rush Dirk Gerrits's Road to Lisp Donald Fisk's Road to Lisp Doug Tolton's Road to LIsp Drew Crampsie Drew McDermott Duane Rettig's Road To Lisp Edi Weitz' Road to Lisp Eduardo Muñoz Emre Sevinc Erann Gat's Road to Lisp Eric Hanchrow Erik Enge's Road to Lisp Erik Winkels's Road to Lisp Espen Vestre's Road to Lisp Gabor Melis's Road to Lisp Gareth McCaughan's Road to Lisp Gary King's Road to Lisp Gary Klimowicz's Road to Lisp GeoffCant GeoffKnauth George Rogers Road to Lisp Glenn Ehrlich Glenn Ehrlich Road to Lisp Gordon Weakliem Heow's Road to Lisp Hoan Ton-That's Road to Lisp Ivan Toshkov's Road To Lisp Jacek Generowicz Jeff Shrager's Road to Lisp Jochen Schmidt's Road to Lisp Jock Cooper Joel Ray Holveck John Pallister's road to Lisp John Sturdy John Williams JP Massar Justin Dubs Justin Heyes-Jones's Road To Lisp Kamen Tomov Karl K.'s Road to Lisp Kenny Tilton's Road to Lisp KevinZzz Klaus Weidner's Road to Lisp Kristian Sørensen - Road to Lisp Larry Clapp's Road to Lisp Lars Brinkhoff's Road to Lisp Lars Wirzenius Lasse Rasinen Lennart Staflin Louis Theran Marc Mertens's Road to Lisp Marco Baringer's Road to Lisp Mark Hurd Mark Triggs Mark Wilson MarkBrady Marko Kocic Martin Mikelsons Matthias Benkard's Road to Lisp MattKnox Michael J Forster Michael Naunton's Road to Lisp Mike Travers Mikel Evins' Road to Lisp Myron Wu's Road to LISP Naveen Garg Nick Levine Nicolas Sceaux's Road to Lisp Nikodemus Siivola'a Road to Lisp Nonya B's Road to Lisp Ola Rinta-Koski Pascal Costanza's Road To Lisp Patrick Logan Paul Clevett Paul Foleys Road To Lisp Paul Graham's Road to Lisp Paul Potts Paul Snively PaulKhuong's Road To Lisp Pekka P Pirinen Pete Kirkham Peter Housel's Road to Lisp Peter Lewerin's Road to Lisp Peter Santoro Peter Seibel's Road to Lisp Peter Van Eynde's Road to Lisp Pierre Thierry's Road to Lisp Rainer Joswig's Road to Lisp Ralph Richard Cook Randall Randall's Road to Lisp Reini Urban Robbie Sedgewick's Road to Lisp Robert Marlow RtL Brian Cully RtL Russell Snow RtLMartinGinkel Sanjay Pande Scott McIntire Sean Champ Sebastian Stern's Road to Lisp SimonHeath Sivaram N Slobodan Steven Harris' Road to Lisp Tage Stabell-Kulø Tayssir John Gabbour's Road to Lisp The Road Jeff Caldwell Took Thomas F Burdick's Road to Lisp Thomas Müller Thomas Stenhaug's Road to Lisp Tim Kerchmar TimHaynes Tomer Altman tony yelacic VikasGP Vladimir Sedach William Maddox Yuri Niyazov Zach Beane's Road to Lisp Zachery Bir ALU Logo Last Modified 2006-11-20 20:26:56 PST | Edit this page Home | Recent Changes | Special Pages | Report a bug | Donate | About