DIE DURCHSCHNITTSWERTE SCHLAGEN
OriginalApril 2001, rev. April 2003
(Dieser Artikel basiert auf einem Vortrag, der beim Franz Developer Symposium 2001 gehalten wurde.)
Im Sommer 1995 gründeten mein Freund Robert Morris und ich ein Startup namens Viaweb. Unser Plan war es, Software zu schreiben, die es Endbenutzern ermöglicht, Online-Shops zu erstellen. Was an dieser Software zu der Zeit neu war, war, dass sie auf unserem Server lief und gewöhnliche Webseiten als Schnittstelle verwendete.
Natürlich hätten viele Menschen zur gleichen Zeit diese Idee haben können, aber soweit ich weiß, war Viaweb die erste webbasierte Anwendung. Es schien uns eine so neuartige Idee zu sein, dass wir das Unternehmen danach benannten: Viaweb, weil unsere Software über das Web funktionierte, anstatt auf deinem Desktop-Computer zu laufen.
Eine weitere ungewöhnliche Sache an dieser Software war, dass sie hauptsächlich in einer Programmiersprache namens Lisp geschrieben wurde. Es war eine der ersten großen Endbenutzeranwendungen, die in Lisp geschrieben wurden, die bis dahin hauptsächlich in Universitäten und Forschungslabors verwendet worden war. [1]
Die Geheimwaffe
Eric Raymond hat einen Aufsatz mit dem Titel "Wie man ein Hacker wird" geschrieben, und darin sagt er unter anderem, welche Sprachen angehende Hacker lernen sollten. Er schlägt vor, mit Python und Java zu beginnen, weil sie leicht zu lernen sind. Der ernsthafte Hacker wird auch C lernen wollen, um Unix zu hacken, und Perl für Systemadministration und CGI-Skripte. Schließlich sollte der wirklich ernsthafte Hacker in Betracht ziehen, Lisp zu lernen:
Lisp ist es wert, gelernt zu werden, wegen der tiefgreifenden Erleuchtungserfahrung, die du haben wirst, wenn du es endlich verstehst; diese Erfahrung wird dich für den Rest deiner Tage zu einem besseren Programmierer machen, auch wenn du Lisp selbst nie viel verwendest.
Das ist dasselbe Argument, das man oft für das Lernen von Latein hört. Es wird dir keinen Job verschaffen, außer vielleicht als Professor für klassische Literatur, aber es wird deinen Verstand verbessern und dich zu einem besseren Schriftsteller in den Sprachen machen, die du tatsächlich verwenden möchtest, wie Englisch.
Aber warte mal. Diese Metapher reicht nicht so weit. Der Grund, warum Latein dir keinen Job verschafft, ist, dass es niemand spricht. Wenn du auf Latein schreibst, kann dich niemand verstehen. Aber Lisp ist eine Programmiersprache, und Computer sprechen die Sprache, die du, der Programmierer, ihnen sagst.
Wenn Lisp dich also zu einem besseren Programmierer macht, wie er sagt, warum solltest du es dann nicht verwenden wollen? Wenn einem Maler ein Pinsel angeboten würde, der ihn zu einem besseren Maler machen würde, scheint es mir, dass er ihn in all seinen Gemälden verwenden würde, oder? Ich versuche hier nicht, Eric Raymond lächerlich zu machen. Insgesamt ist sein Rat gut. Was er über Lisp sagt, entspricht ziemlich dem allgemeinen Konsens. Aber es gibt einen Widerspruch im allgemeinen Konsens: Lisp wird dich zu einem besseren Programmierer machen, und doch wirst du es nicht verwenden.
Warum nicht? Programmiersprachen sind schließlich nur Werkzeuge. Wenn Lisp wirklich bessere Programme liefert, solltest du es verwenden. Und wenn nicht, wer braucht es dann?
Das ist nicht nur eine theoretische Frage. Software ist ein sehr wettbewerbsintensives Geschäft, das zu natürlichen Monopolen neigt. Ein Unternehmen, das Software schneller und besser schreibt, wird, alles andere gleich, seine Wettbewerber aus dem Geschäft drängen. Und wenn du ein Startup gründest, spürst du das sehr stark. Startups sind oft ein Alles-oder-Nichts-Vorhaben. Du wirst entweder reich, oder du bekommst nichts. In einem Startup, wenn du auf die falsche Technologie setzt, werden dich deine Wettbewerber vernichten.
Robert und ich kannten beide Lisp gut und konnten keinen Grund sehen, unseren Instinkten nicht zu vertrauen und mit Lisp zu gehen. Wir wussten, dass alle anderen ihre Software in C++ oder Perl schrieben. Aber wir wussten auch, dass das nichts bedeutete. Wenn du Technologie auf diese Weise wählst, würdest du Windows verwenden. Wenn du Technologie wählst, musst du ignorieren, was andere Leute tun, und nur das berücksichtigen, was am besten funktioniert.
Das gilt besonders in einem Startup. In einem großen Unternehmen kannst du das tun, was alle anderen großen Unternehmen tun. Aber ein Startup kann nicht das tun, was alle anderen Startups tun. Ich glaube nicht, dass viele Menschen das erkennen, selbst in Startups.
Das durchschnittliche große Unternehmen wächst etwa zehn Prozent pro Jahr. Wenn du also ein großes Unternehmen leitest und alles so machst, wie es das durchschnittliche große Unternehmen tut, kannst du erwarten, so gut abzuschneiden wie das durchschnittliche große Unternehmen – das heißt, etwa zehn Prozent pro Jahr zu wachsen.
Das Gleiche wird natürlich passieren, wenn du ein Startup leitest. Wenn du alles so machst, wie es das durchschnittliche Startup tut, solltest du mit durchschnittlicher Leistung rechnen. Das Problem hier ist, dass durchschnittliche Leistung bedeutet, dass du aus dem Geschäft gehst. Die Überlebensrate für Startups liegt weit unter fünfzig Prozent. Wenn du also ein Startup leitest, solltest du besser etwas Ungewöhnliches tun. Andernfalls bist du in Schwierigkeiten.
1995 wussten wir etwas, das ich nicht glaube, dass unsere Wettbewerber verstanden, und wenige verstehen es sogar jetzt: Wenn du Software schreibst, die nur auf deinen eigenen Servern laufen muss, kannst du jede Sprache verwenden, die du möchtest. Wenn du Desktop-Software schreibst, gibt es eine starke Tendenz, Anwendungen in derselben Sprache wie das Betriebssystem zu schreiben. Vor zehn Jahren bedeutete das, Anwendungen in C zu schreiben. Aber mit webbasierter Software, insbesondere wenn du den Quellcode sowohl der Sprache als auch des Betriebssystems hast, kannst du jede Sprache verwenden, die du möchtest.
Diese neue Freiheit ist jedoch ein zweischneidiges Schwert. Jetzt, wo du jede Sprache verwenden kannst, musst du darüber nachdenken, welche du verwenden möchtest. Unternehmen, die versuchen, so zu tun, als hätte sich nichts geändert, riskieren zu entdecken, dass ihre Wettbewerber das nicht tun.
Wenn du jede Sprache verwenden kannst, welche verwendest du? Wir wählten Lisp. Zum einen war es offensichtlich, dass schnelle Entwicklung in diesem Markt wichtig sein würde. Wir fingen alle bei Null an, sodass ein Unternehmen, das neue Funktionen schneller als seine Wettbewerber umsetzen konnte, einen großen Vorteil hätte. Wir wussten, dass Lisp eine wirklich gute Sprache war, um Software schnell zu schreiben, und serverbasierte Anwendungen verstärken den Effekt der schnellen Entwicklung, weil du Software sofort veröffentlichen kannst, sobald sie fertig ist.
Wenn andere Unternehmen Lisp nicht verwenden wollten, umso besser. Es könnte uns einen technologischen Vorteil verschaffen, und wir benötigten jede Hilfe, die wir bekommen konnten. Als wir Viaweb gründeten, hatten wir keine Erfahrung im Geschäft. Wir wussten nichts über Marketing, oder das Einstellen von Leuten, oder das Beschaffen von Geld, oder das Gewinnen von Kunden. Keiner von uns hatte jemals einen Job gehabt, den man als echten Job bezeichnen würde. Das einzige, worin wir gut waren, war das Schreiben von Software. Wir hofften, dass uns das retten würde. Jedes Vorteil, den wir im Softwarebereich bekommen konnten, würden wir nutzen.
Man könnte also sagen, dass die Verwendung von Lisp ein Experiment war. Unsere Hypothese war, dass wir, wenn wir unsere Software in Lisp schrieben, Funktionen schneller umsetzen könnten als unsere Wettbewerber und auch Dinge in unserer Software tun könnten, die sie nicht tun konnten. Und weil Lisp so hochgradig ist, würden wir kein großes Entwicklungsteam benötigen, sodass unsere Kosten niedriger wären. Wenn das so wäre, könnten wir ein besseres Produkt für weniger Geld anbieten und trotzdem einen Gewinn erzielen. Wir würden am Ende alle Benutzer gewinnen, und unsere Wettbewerber würden keine bekommen und schließlich aus dem Geschäft gehen. Das war jedenfalls, was wir hofften.
Was waren die Ergebnisse dieses Experiments? Überraschenderweise funktionierte es. Wir hatten schließlich viele Wettbewerber, etwa zwanzig bis dreißig, aber keine ihrer Software konnte mit unserer konkurrieren. Wir hatten einen WYSIWYG-Online-Shop-Baukasten, der auf dem Server lief und sich dennoch wie eine Desktop-Anwendung anfühlte. Unsere Wettbewerber hatten CGI-Skripte. Und wir waren immer weit voraus in Bezug auf Funktionen. Manchmal versuchten Wettbewerber verzweifelt, Funktionen einzuführen, die wir nicht hatten. Aber mit Lisp war unser Entwicklungszyklus so schnell, dass wir manchmal eine neue Funktion innerhalb eines oder zwei Tage nach der Ankündigung eines Wettbewerbers in einer Pressemitteilung duplizieren konnten. Bis die Journalisten, die die Pressemitteilung abdeckten, uns anriefen, hatten wir die neue Funktion ebenfalls.
Es muss unseren Wettbewerbern so erschienen sein, als hätten wir eine Art Geheimwaffe – dass wir ihren Enigma-Verkehr entschlüsselten oder so etwas. Tatsächlich hatten wir eine Geheimwaffe, aber sie war einfacher, als sie dachten. Niemand gab uns Informationen über ihre Funktionen. Wir konnten einfach Software schneller entwickeln, als irgendjemand für möglich hielt.
Als ich etwa neun Jahre alt war, kam ich zufällig in den Besitz eines Exemplars von Der Tag des Schakal, von Frederick Forsyth. Die Hauptfigur ist ein Auftragsmörder, der beauftragt wird, den Präsidenten von Frankreich zu töten. Der Auftragsmörder muss an der Polizei vorbeikommen, um in eine Wohnung zu gelangen, die die Route des Präsidenten überblickt. Er geht direkt an ihnen vorbei, verkleidet als alter Mann mit Krücken, und sie verdächtigen ihn nie.
Unsere Geheimwaffe war ähnlich. Wir schrieben unsere Software in einer seltsamen KI-Sprache mit einer bizarren Syntax voller Klammern. Es hatte mich jahrelang genervt, Lisp so beschrieben zu hören. Aber jetzt arbeitete es zu unserem Vorteil. In der Geschäftswelt gibt es nichts Wertvolleres als einen technischen Vorteil, den deine Wettbewerber nicht verstehen. In der Geschäftswelt, wie im Krieg, ist Überraschung ebenso viel wert wie Kraft.
Und so bin ich ein wenig verlegen zu sagen, dass ich während unserer Arbeit an Viaweb nie öffentlich etwas über Lisp gesagt habe. Wir haben es der Presse nie erwähnt, und wenn du nach Lisp auf unserer Website suchst, findest du nur die Titel von zwei Büchern in meinem Lebenslauf. Das war kein Zufall. Ein Startup sollte seinen Wettbewerbern so wenig Informationen wie möglich geben. Wenn sie nicht wussten, in welcher Sprache unsere Software geschrieben war, oder es ihnen egal war, wollte ich, dass es so bleibt. [2]
Die Menschen, die unsere Technologie am besten verstanden, waren die Kunden. Sie interessierten sich auch nicht dafür, in welcher Sprache Viaweb geschrieben war, aber sie bemerkten, dass es wirklich gut funktionierte. Es ermöglichte ihnen, großartig aussehende Online-Shops buchstäblich in Minuten zu erstellen. Und so bekamen wir durch Mundpropaganda immer mehr Benutzer. Ende 1996 hatten wir etwa 70 Shops online. Ende 1997 hatten wir 500. Sechs Monate später, als Yahoo uns kaufte, hatten wir 1070 Benutzer. Heute, als Yahoo Store, dominiert diese Software weiterhin ihren Markt. Es ist eines der profitabelsten Teile von Yahoo, und die mit ihr erstellten Shops sind das Fundament von Yahoo Shopping. Ich verließ Yahoo 1999, also weiß ich nicht genau, wie viele Benutzer sie jetzt haben, aber das letzte Mal, als ich hörte, waren es etwa 20.000.
Das Blub-Paradoxon
Was ist so großartig an Lisp? Und wenn Lisp so großartig ist, warum verwendet es dann nicht jeder? Diese Fragen klingen nach rhetorischen Fragen, aber tatsächlich haben sie einfache Antworten. Lisp ist so großartig, nicht wegen einer magischen Qualität, die nur für Anhänger sichtbar ist, sondern weil es einfach die mächtigste verfügbare Sprache ist. Und der Grund, warum es nicht jeder verwendet, ist, dass Programmiersprachen nicht nur Technologien sind, sondern auch Denkgewohnheiten, und nichts ändert sich langsamer. Natürlich benötigen beide Antworten eine Erklärung.
Ich beginne mit einer schockierend kontroversen Aussage: Programmiersprachen variieren in ihrer Macht.
Wenige würden bestreiten, dass Hochsprachen mächtiger sind als Maschinensprache. Die meisten Programmierer heute würden zustimmen, dass man normalerweise nicht in Maschinensprache programmieren möchte. Stattdessen sollte man in einer Hochsprache programmieren und einen Compiler verwenden, der es für einen in Maschinensprache übersetzt. Diese Idee ist sogar in die Hardware eingebaut: Seit den 1980er Jahren wurden Befehlssätze für Compiler und nicht für menschliche Programmierer entworfen.
Jeder weiß, dass es ein Fehler ist, sein ganzes Programm von Hand in Maschinensprache zu schreiben. Was weniger oft verstanden wird, ist, dass es hier ein allgemeineres Prinzip gibt: Wenn du die Wahl zwischen mehreren Sprachen hast, ist es, alles andere gleich, ein Fehler, in etwas anderem als der mächtigsten zu programmieren. [3]
Es gibt viele Ausnahmen von dieser Regel. Wenn du ein Programm schreibst, das sehr eng mit einem Programm in einer bestimmten Sprache zusammenarbeiten muss, könnte es eine gute Idee sein, das neue Programm in derselben Sprache zu schreiben. Wenn du ein Programm schreibst, das nur etwas sehr Einfaches tun muss, wie Zahlenverarbeitung oder Bitmanipulation, kannst du auch eine weniger abstrakte Sprache verwenden, insbesondere da sie möglicherweise etwas schneller ist. Und wenn du ein kurzes, wegwerfbares Programm schreibst, bist du vielleicht besser dran, einfach die Sprache zu verwenden, die die besten Bibliotheksfunktionen für die Aufgabe hat. Aber im Allgemeinen, für Anwendungssoftware, möchtest du die mächtigste (angemessen effiziente) Sprache verwenden, die du bekommen kannst, und alles andere zu verwenden, ist ein Fehler, genau derselbe Fehler, wenn auch möglicherweise in geringerem Maße, wie in Maschinensprache zu programmieren.
Du kannst sehen, dass Maschinensprache sehr niedrig ist. Aber zumindest als eine Art soziale Konvention werden Hochsprachen oft als gleichwertig behandelt. Das sind sie nicht. Technisch bedeutet der Begriff "Hochsprache" nichts sehr Bestimmtes. Es gibt keine Trennlinie mit Maschinensprachen auf der einen Seite und allen Hochsprachen auf der anderen. Sprachen fallen entlang eines Kontinuums [4] der Abstraktheit, von der mächtigsten bis hin zu Maschinensprachen, die selbst in ihrer Macht variieren.
Betrachten wir Cobol. Cobol ist eine Hochsprache, im Sinne, dass sie in Maschinensprache kompiliert wird. Würde jemand ernsthaft argumentieren, dass Cobol in der Macht gleichwertig ist mit, sagen wir, Python? Es ist wahrscheinlich näher an Maschinensprache als an Python.
Oder wie wäre es mit Perl 4? Zwischen Perl 4 und Perl 5 wurden lexikalische Closures zur Sprache hinzugefügt. Die meisten Perl-Hacker würden zustimmen, dass Perl 5 mächtiger ist als Perl 4. Aber sobald du das zugegeben hast, hast du zugegeben, dass eine Hochsprache mächtiger sein kann als eine andere. Und es folgt zwangsläufig, dass du, außer in besonderen Fällen, die mächtigste verwenden solltest, die du bekommen kannst.
Diese Idee wird jedoch selten bis zu ihrem Ende verfolgt. Nach einem bestimmten Alter wechseln Programmierer selten freiwillig die Sprache. Welche Sprache auch immer die Leute gewohnt sind, sie neigen dazu, sie als gerade gut genug zu betrachten.
Programmierer sind sehr an ihre Lieblingssprachen gebunden, und ich möchte niemandes Gefühle verletzen, also werde ich zur Erklärung dieses Punktes eine hypothetische Sprache namens Blub verwenden. Blub liegt genau in der Mitte des Abstraktionskontinuums. Es ist nicht die mächtigste Sprache, aber es ist mächtiger als Cobol oder Maschinensprache.
Und tatsächlich würde unser hypothetischer Blub-Programmierer keine von beiden verwenden. Natürlich würde er nicht in Maschinensprache programmieren. Dafür sind Compiler da. Und was Cobol betrifft, weiß er nicht, wie irgendjemand damit etwas erledigen kann. Es hat nicht einmal x (Blub-Funktion deiner Wahl).
Solange unser hypothetischer Blub-Programmierer nach unten auf das Machtkontinuum schaut, weiß er, dass er nach unten schaut. Sprachen, die weniger mächtig sind als Blub, sind offensichtlich weniger mächtig, weil sie eine Funktion vermissen, an die er gewöhnt ist. Aber wenn unser hypothetischer Blub-Programmierer in die andere Richtung schaut, nach oben auf das Machtkontinuum, erkennt er nicht, dass er nach oben schaut. Was er sieht, sind lediglich seltsame Sprachen. Er betrachtet sie wahrscheinlich als etwa gleichwertig in der Macht zu Blub, aber mit all diesem anderen haarigen Zeug. Blub ist gut genug für ihn, weil er in Blub denkt.
Wenn wir jedoch den Standpunkt eines Programmierers einnehmen, der eine der Sprachen höher auf dem Machtkontinuum verwendet, stellen wir fest, dass er wiederum auf Blub herabblickt. Wie kannst du in Blub irgendetwas erledigen? Es hat nicht einmal y.
Durch Induktion sind die einzigen Programmierer, die in der Lage sind, alle Unterschiede in der Macht zwischen den verschiedenen Sprachen zu erkennen, diejenigen, die die mächtigste verstehen. (Das ist wahrscheinlich, was Eric Raymond meinte, als er sagte, dass Lisp dich zu einem besseren Programmierer macht.) Du kannst den Meinungen der anderen nicht trauen, wegen des Blub-Paradoxons: Sie sind mit welcher Sprache auch immer sie gerade verwenden, zufrieden, weil sie die Art und Weise diktiert, wie sie über Programme denken.
Ich weiß das aus eigener Erfahrung, als ich in der High School Programme in Basic schrieb. Diese Sprache unterstützte nicht einmal Rekursion. Es ist schwer vorstellbar, Programme ohne Rekursion zu schreiben, aber ich vermisste es damals nicht. Ich dachte in Basic. Und ich war ein Ass darin. Meister von allem, was ich sah.
Die fünf Sprachen, die Eric Raymond Hackern empfiehlt, liegen an verschiedenen Punkten auf dem Machtkontinuum. Wo sie relativ zueinander liegen, ist ein sensibles Thema. Was ich sagen werde, ist, dass ich denke, dass Lisp an der Spitze steht. Und um diese Behauptung zu unterstützen, werde ich dir von einer der Dinge erzählen, die mir fehlen, wenn ich mir die anderen vier Sprachen ansehe. Wie kannst du in ihnen irgendetwas erledigen, denke ich, ohne Makros? [5]
Viele Sprachen haben etwas, das man Makro nennt. Aber Lisp-Makros sind einzigartig. Und glaub es oder nicht, was sie tun, hängt mit den Klammern zusammen. Die Designer von Lisp haben all diese Klammern nicht nur aus dem Grund in die Sprache eingefügt, um anders zu sein. Für den Blub-Programmierer sieht Lisp-Code seltsam aus. Aber diese Klammern sind aus einem bestimmten Grund da. Sie sind der äußere Beweis für einen grundlegenden Unterschied zwischen Lisp und anderen Sprachen.
Lisp-Code besteht aus Lisp-Datenobjekten. Und nicht im trivialen Sinne, dass die Quellcodedateien Zeichen enthalten und Strings einer der von der Sprache unterstützten Datentypen sind. Lisp-Code, nachdem er vom Parser gelesen wurde, besteht aus Datenstrukturen, die du durchlaufen kannst.
Wenn du verstehst, wie Compiler funktionieren, geschieht nicht so sehr, dass Lisp eine seltsame Syntax hat, sondern dass Lisp keine Syntax hat. Du schreibst Programme in den Parse-Bäumen, die innerhalb des Compilers generiert werden, wenn andere Sprachen geparst werden. Aber diese Parse-Bäume sind vollständig zugänglich für deine Programme. Du kannst Programme schreiben, die sie manipulieren. In Lisp werden diese Programme Makros genannt. Es sind Programme, die Programme schreiben.
Programme, die Programme schreiben? Wann würdest du das jemals wollen? Nicht sehr oft, wenn du in Cobol denkst. Immer, wenn du in Lisp denkst. Es wäre hier praktisch, wenn ich ein Beispiel für ein mächtiges Makro geben könnte und sagen könnte, da! Wie wäre es damit? Aber wenn ich das täte, würde es für jemanden, der Lisp nicht kennt, nur wie Kauderwelsch aussehen; hier ist kein Platz, um alles zu erklären, was du wissen müsstest, um zu verstehen, was es bedeutet. In Ansi Common Lisp habe ich versucht, die Dinge so schnell wie möglich voranzutreiben, und selbst so kam ich erst auf Seite 160 zu den Makros.
Aber ich denke, ich kann eine Art Argument geben, das überzeugend sein könnte. Der Quellcode des Viaweb-Editors bestand wahrscheinlich zu etwa 20-25 % aus Makros. Makros sind schwieriger zu schreiben als gewöhnliche Lisp-Funktionen, und es gilt als schlechter Stil, sie zu verwenden, wenn sie nicht notwendig sind. Daher ist jedes Makro in diesem Code dort, weil es sein muss. Was das bedeutet, ist, dass mindestens 20-25 % des Codes in diesem Programm Dinge tun, die du in keiner anderen Sprache leicht tun kannst. So skeptisch der Blub-Programmierer auch gegenüber meinen Ansprüchen an die geheimnisvollen Kräfte von Lisp sein mag, das sollte ihn neugierig machen. Wir schrieben diesen Code nicht zu unserem eigenen Vergnügen. Wir waren ein winziges Startup, das so hart wie möglich programmierte, um technische Barrieren zwischen uns und unseren Wettbewerbern zu schaffen.
Eine misstrauische Person könnte anfangen zu fragen, ob es hier eine Korrelation gibt. Ein großer Teil unseres Codes machte Dinge, die in anderen Sprachen sehr schwer zu tun sind. Die resultierende Software tat Dinge, die die Software unserer Wettbewerber nicht tun konnte. Vielleicht gab es eine Art Verbindung. Ich ermutige dich, diesem Faden zu folgen. Es könnte mehr an diesem alten Mann geben, der mit seinen Krücken humpelt, als es auf den ersten Blick scheint.
Aikido für Startups
Aber ich erwarte nicht, dass ich jemanden (über 25) überzeuge, Lisp zu lernen. Der Zweck dieses Artikels ist nicht, die Meinung von jemandem zu ändern, sondern Menschen, die bereits daran interessiert sind, Lisp zu verwenden, zu beruhigen – Menschen, die wissen, dass Lisp eine mächtige Sprache ist, sich aber Sorgen machen, weil sie nicht weit verbreitet ist. In einer wettbewerbsintensiven Situation ist das ein Vorteil. Die Macht von Lisp wird durch die Tatsache multipliziert, dass deine Wettbewerber es nicht verstehen.
Wenn du daran denkst, Lisp in einem Startup zu verwenden, solltest du dir keine Sorgen machen, dass es nicht weit verbreitet ist. Du solltest hoffen, dass es so bleibt. Und es ist wahrscheinlich, dass es so bleibt. Es ist in der Natur von Programmiersprachen, dass die meisten Menschen mit dem zufrieden sind, was sie gerade verwenden. Computerhardware ändert sich viel schneller als persönliche Gewohnheiten, sodass die Programmierpraxis normalerweise zehn bis zwanzig Jahre hinter dem Prozessor zurückbleibt. An Orten wie dem MIT schrieben sie in den frühen 1960er Jahren Programme in Hochsprachen, aber viele Unternehmen schrieben bis weit in die 1980er Jahre Code in Maschinensprache. Ich wette, viele Menschen schrieben weiterhin in Maschinensprache, bis der Prozessor, wie ein Barkeeper, der eifrig schließen und nach Hause gehen möchte, sie schließlich hinauswarf, indem er auf einen RISC-Befehlssatz umschaltete.
Normalerweise ändert sich die Technologie schnell. Aber Programmiersprachen sind anders: Programmiersprachen sind nicht nur Technologie, sondern auch das, worin Programmierer denken. Sie sind halb Technologie und halb Religion. [6] Und so bewegt sich die Median-Sprache, was auch immer die Sprache ist, die der Median-Programmierer verwendet, so langsam wie ein Eisberg. Die Garbage Collection, die Lisp etwa 1960 einführte, wird jetzt allgemein als etwas Gutes angesehen. Die Laufzeit-Typisierung, ebenso, gewinnt an Popularität. Lexikalische Closures, die Lisp in den frühen 1970er Jahren einführte, sind jetzt, gerade so, auf dem Radar. Makros, die Lisp in den 1960er Jahren einführte, sind immer noch terra incognita.
Offensichtlich hat die Median-Sprache eine enorme Dynamik. Ich schlage nicht vor, dass du gegen diese mächtige Kraft kämpfen kannst. Was ich vorschlage, ist genau das Gegenteil: dass du, wie ein Praktizierender von Aikido, sie gegen deine Gegner verwenden kannst.
Wenn du für ein großes Unternehmen arbeitest, mag das nicht einfach sein. Du wirst es schwer haben, den Chef mit dem spitzen Haar zu überzeugen, dir zu erlauben, Dinge in Lisp zu bauen, wenn er gerade in der Zeitung gelesen hat, dass eine andere Sprache, wie Ada vor zwanzig Jahren, bereit ist, die Welt zu übernehmen. Aber wenn du für ein Startup arbeitest, das noch keine Chefs mit spitzen Haaren hat, kannst du, wie wir es taten, das Blub-Paradoxon zu deinem Vorteil nutzen: Du kannst Technologie verwenden, die deine Wettbewerber, die unbeweglich an der Median-Sprache festkleben, niemals erreichen können.
Wenn du jemals in einem Startup arbeitest, hier ist ein praktischer Tipp zur Bewertung von Wettbewerbern. Lies ihre Stellenanzeigen. Alles andere auf ihrer Website mag Stockfotos oder das Prosa-Äquivalent sein, aber die Stellenanzeigen müssen spezifisch sein, was sie wollen, oder sie bekommen die falschen Kandidaten.
Während der Jahre, in denen wir an Viaweb arbeiteten, las ich viele Stellenbeschreibungen. Jeden Monat schien ein neuer Wettbewerber aus dem Nichts aufzutauchen. Das Erste, was ich tat, nachdem ich überprüft hatte, ob sie eine live Online-Demo hatten, war, ihre Stellenanzeigen anzusehen. Nach ein paar Jahren konnte ich sagen, bei welchen Unternehmen ich mir Sorgen machen sollte und bei welchen nicht. Je mehr IT-Geschmack die Stellenbeschreibungen hatten, desto weniger gefährlich war das Unternehmen. Die sicherste Art waren die, die Oracle-Erfahrung verlangten. Um die musstest du dir keine Sorgen machen. Du warst auch sicher, wenn sie sagten, sie wollten C++- oder Java-Entwickler. Wenn sie Perl- oder Python-Programmierer wollten, wäre das etwas beängstigend – das fängt an, wie ein Unternehmen zu klingen, in dem die technische Seite zumindest von echten Hackern geleitet wird. Wenn ich jemals eine Stellenanzeige gesehen hätte, die nach Lisp-Hackern suchte, wäre ich wirklich besorgt gewesen.
Anmerkungen
[1] Viaweb hatte zunächst zwei Teile: den Editor, der in Lisp geschrieben wurde und den die Leute verwendeten, um ihre Seiten zu erstellen, und das Bestellsystem, das in C geschrieben wurde und die Bestellungen bearbeitete. Die erste Version war hauptsächlich Lisp, weil das Bestellsystem klein war. Später fügten wir zwei weitere Module hinzu, einen Bildgenerator, der in C geschrieben wurde, und einen Backoffice-Manager, der hauptsächlich in Perl geschrieben wurde.
Im Januar 2003 veröffentlichte Yahoo eine neue Version des Editors, die in C++ und Perl geschrieben wurde. Es ist schwer zu sagen, ob das Programm nicht mehr in Lisp geschrieben ist, denn um dieses Programm in C++ zu übersetzen, mussten sie buchstäblich einen Lisp-Interpreter schreiben: Die Quellcodedateien aller seiten-generierenden Vorlagen sind immer noch, soweit ich weiß, Lisp-Code. (Siehe Greenspun's Zehntes Gesetz.)
[2] Robert Morris sagt, dass ich nicht geheimnisvoll sein musste, denn selbst wenn unsere Wettbewerber gewusst hätten, dass wir Lisp verwendeten, hätten sie nicht verstanden, warum: "Wenn sie so schlau wären, würden sie bereits in Lisp programmieren."
[3] Alle Sprachen sind gleich mächtig im Sinne der Turing-Äquivalenz, aber das ist nicht der Sinn des Wortes, der Programmierer interessiert. (Niemand möchte eine Turing-Maschine programmieren.) Die Art von Macht, die Programmierer interessiert, mag nicht formal definierbar sein, aber eine Möglichkeit, es zu erklären, wäre zu sagen, dass es sich auf Funktionen bezieht, die du in der weniger mächtigen Sprache nur erhalten könntest, indem du einen Interpreter für die mächtigere Sprache darin schreibst. Wenn Sprache A einen Operator zum Entfernen von Leerzeichen aus Strings hat und Sprache B nicht, macht das A wahrscheinlich nicht mächtiger, denn du kannst wahrscheinlich eine Unterroutine schreiben, um es in B zu tun. Aber wenn A beispielsweise Rekursion unterstützt und B nicht, ist das wahrscheinlich nichts, was du beheben kannst, indem du Bibliotheksfunktionen schreibst.
[4] Hinweis für Nerds: oder möglicherweise ein Gitter, das sich nach oben verengt; es ist nicht die Form, die hier zählt, sondern die Idee, dass es zumindest eine partielle Ordnung gibt.
[5] Es ist ein wenig irreführend, Makros als eine separate Funktion zu behandeln. In der Praxis wird ihre Nützlichkeit durch andere Lisp-Funktionen wie lexikalische Closures und Restparameter erheblich erhöht.
[6] Infolgedessen nehmen Vergleiche von Programmiersprachen entweder die Form von Religionskriegen oder von untergraduierten Lehrbüchern an, die so entschlossen neutral sind, dass sie wirklich anthropologische Werke sind. Menschen, die ihren Frieden schätzen oder eine Tenure wollen, vermeiden das Thema. Aber die Frage ist nur zur Hälfte eine religiöse; es gibt etwas, das es wert ist, studiert zu werden, insbesondere wenn du neue Sprachen entwerfen möchtest.