Er Lisp bedre enn andre programmeringsspråk?
Skriv en kommentar
Hjernen min har eksplodert, og her er litt om hvorfor…
I have heard more than one LISP advocate state such subjective comments as, “LISP is the most powerful and elegant programming language in the world” and expect such comments to be taken as objective truth. I have never heard a Java, C++, C, Perl, or Python advocate make the same claim about their own language of choice. – A guy on Slashdot
Lisp er en familie med programmeringsspråk som stammer fra et språk John McCarthy oppfant (eller oppdaget) på slutten av 1950-tallet. De to hoveddialektene i dag er Common Lisp og Scheme, mens Clojure er en fersking som begynner å få fotfeste på JVM-plattformen (og kanskje snart også i .Net). Lisp blir ofte sett på som esoterisk språk, stort sett bare brukt av forskere, spesielt innenfor kunstig intelligens.
Selv hadde jeg tilnærmet lik null kunnskap om Lisp for en liten måned siden. Nå føler jeg Lisp er den viktigste oppdagelsen jeg har gjort på svært lenge – til tross for at jeg daglig i halvannet år har jobbet aktivt med å bli en bedre utvikler.
“New Lisp programmers often describe the language as an eye-opening experience and claim to be substantially more productive than in other languages.” (Wikipedia)
Som et av de tidligste programmeringsspråkene, og som det aller første høyere-nivå språket, har Lisp inspirert og påvirket utviklingen av mange av språkene som har kommet til siden. Alan Key sier f.eks. at Lisp var en viktig inspirasjonskilde til Smalltalk, og Matz innrømmer at Ruby er en (billig) ripoff av Lisp (og Smalltalk). Douglas Crockford kaller JavaScript en Lisp i C-forkledning.
“the greatest single programming language ever designed” – Alan Kay on Lisp
Paul Graham er co-founder av Viaweb, verdens første Application Service Provider (ASP), som senere ble Yahoo! Store. Han har skrevet mye om Lisp, og her er noen uttdrag fra artikkelen Beating the Average, hvor han bl.a. hevder Lisp er det kraftigste programmeringsspråket vi har. Han sier følgende om hvorfor ikke flere tar i bruk Lisp:
After a certain age, programmers rarely switch languages voluntarily. Whatever language people happen to be used to, they tend to consider just good enough.
As long as our hypothetical Blub programmer is looking down the power continuum, he knows he’s looking down. Languages less powerful than Blub are obviously less powerful, because they’re missing some feature he’s used to. But when our hypothetical Blub programmer looks in the other direction, up the power continuum, he doesn’t realize he’s looking up. What he sees are merely weird languages. He probably considers them about equivalent in power to Blub, but with all this other hairy stuff thrown in as well. Blub is good enough for him, because he thinks in Blub.
Computer hardware changes so much faster than personal habits that programming practice is usually ten to twenty years behind the processor. At places like MIT they were writing programs in high-level languages in the early 1960s, but many companies continued to write code in machine language well into the 1980s.
Ordinarily technology changes fast. But programming languages are different: programming languages are not just technology, but what programmers think in. They’re half technology and half religion. And so the median language, meaning whatever language the median programmer uses, moves as slow as an iceberg. Garbage collection, introduced by Lisp in about 1960, is now widely considered to be a good thing. Runtime typing, ditto, is growing in popularity. Lexical closures, introduced by Lisp in the early 1970s, are now, just barely, on the radar screen. Macros, introduced by Lisp in the mid 1960s, are still terra incognita.
Jeg har bare såvidt begynt å “nyte” Lisp, men jeg så nesten med en gang hvor elegant det var. For å fordype meg i hvordan det egentlig virker har jeg begynt å implementere min egen Lisp i Ruby, og det er svært lærerikt. Og alt det andre folk uttrykker om språket er veldig motiverende, som f.eks. hva Eric Raymond sier i esseyet How to Become a Hacker:
“Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot.”
Eller hva med Greenspun’s Tenth Rule of Programming:
“Any sufficiently complicated C or Fortran program contains an ad hoc informally-specified bug-ridden slow implementation of half of Common Lisp.”
(Det finnes forøvrig ikke 9 andre regler før denne, Greenspun forsøkte bare å gi regelen sin et minneverdig navn.)
Til slutt et gullkorn om Lisp fra O Store Guru Edsget Dijkstra, som også sa at “computer science is no more about computers than astronomy is about telescopes”:
Lisp has jokingly been called “the most intelligent way to misuse a computer”. I think that description is a great compliment because it transmits the full flavor of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts.
Jeg har tidligere kommet med påstander som at du må beherkse et dynamisk språk, og at man må studere ulike programmeringsparadigmer for å bli en dyktig utvikler. Jeg vil herved legge til: Om man søker å bli en dyktig utvikler må man lære seg Lisp!!!
2 (not (empty?
3 (some #{“Lisp”} (programmer :known-languages)))))
(Så gjenstår det å se – når rusen har lagt seg – om jeg er like frelst om en måned eller to, eller ti.)
Kategorier: LISP/Clojure, Polyglot.
RSS feed for kommentarene.
Tilbaketråkk.
Programmeringsbloggen
July 11th, 2010 at 1:40 am
(jeg (blir (svimmel (av (alle (paran(tesene)))))))July 11th, 2010 at 7:01 am
man{ kan(){ få(){ samme(); } følelse(){ av(C-baserte); } språk(av, og){ til(); } } }Men for å være seriøs, mye av styrken til Lisp ligger i nettopp parantesene - uten dem, eller noe tilsvarende, kunne man ikke fått til det som Lisp er unik på. Lisp-kode er nemlig data, et abstrakt syntaks-tre. Ved å spesifisere programmer på denne måten muliggjør man også programatisk endring av koden på en helt unik måte. Parantesene er verdt det.
Dessuten forsvinner svimmelheten etter et par paraset og litt mer tilvenning.
July 15th, 2010 at 4:04 am
Mine to absolutt favorittfag fra NTNU var mikrokontroller programmering, og funksjonell programmering. I funk prog. brukte vi MIT Scheme, og jeg satt med mye av samme “berusende” følelsen du beskriver. Selv om jeg ikke har brukt Scheme utenfor utdanning har jeg hatt stor nytte av de tingend vi lærte. F.eks til å forstå LINQ ogmye av C# 3.0 funk nyheter. Med Clojoure på JVM eller CLR håper jeg vi snart kan ta LISP i brukt pa ekte prosjekter.
Jeg fant en gammel SVN repro. fra studietiden med Scheme kode, kanskje jeg burde se om jeg får den til å kjore på Clojoure. Siste prosjektoppgaven var pokerspill med pluggbare strategier for hver spiller.
Som vanlig svært interessant å følge bloggen din, og flott med litt Norsk avbrekk fra all den engelske litteraturen vi til vanlig leser.
July 29th, 2010 at 10:13 am
Du sier “Om man søker å bli en dyktig utvikler må man lære seg Lisp”. Vil man oppnå det samme ved å lære seg Clojure? Eller bør man sette seg inn i Lisp før man lærer Clojure?
July 29th, 2010 at 1:18 pm
Bjørn: Clojure er Lisp! Scheme er en annen lisp, og Common Lisp en tredje. Det finnes sikkert hundrevis av implementasjoner og dialekter, men det finnes ingen fasit for å si det sånn. Dermed vil jeg svare et slags nei, det er ikke noen grunn til å ikke begynne med å lære seg Clojure.
Valget av hvilken Lisp man vil bruke bør baseres på andre ting. Fordeler med Clojure er bl.a. god interoperabilitet med Java, og at det kjører på JVM. Det er også et veldig ferskt språk, og har kastet bort noe av den bagasjen Scheme og Common Lisp drar på fra gamle dager (“first” og “rest” er enklere å forstå enn “car” og “cdr”).
July 30th, 2010 at 8:36 am
Fikk lyst til å dele den vakre konklusjonen fra en blogpost jeg nettopp leste kalt Lisp isn’t really a programming language:
So Lisp isn’t really a programming language. It’s a consistent system for defining programming languages in general. That is why learning it is difficult– you’re going up into a level abstraction that you never imagined could exist.
But if you can master it… you can code in the environment that all the other languages “hack” into when they need to get real work done. So in some sense, Lisp is the Platonic ideal that all other languages fall short of. It is the truth that most programmers glimpse only in brief moments of lucidity. All the other languages are shadows cast on the wall of the cave… but Lisp is is what lies behind the veneer of what we think of as “reality” in programming.