Vier professionelle Deformationen von Programmierern in Perl, demonstriert an einem lebenden Beispiel

    Edsger Vibe Dijkstra war insbesondere als Autor mehrerer ausführlicher und aussagekräftiger Aussagen bekannt, die den Abgrund der professionellen Deformation von Programmierern darstellen und die eine oder andere unangenehme Programmiersprache bevorzugen. Insbesondere die folgenden Schätzungen von Dijkstra sind berüchtigt (ich zitiere sie aus Wikiquote ):

    • "Das Programmieren mit COBOL lähmt das Gehirn, so dass das Lernen als Verbrechen behandelt werden sollte." ("Die Verwendung von COBOL lähmt den Verstand; seine Unterweisung sollte daher als Straftat angesehen werden.")
       
    • „Studenten, die zuvor Basic studiert haben, können kaum gutes Programmieren unterrichten. Als potenzielle Programmierer haben sie eine irreversible geistige Degradierung erfahren. “ ("Es ist praktisch unmöglich, Schülern, die zuvor mit BASIC vertraut waren, gutes Programmieren beizubringen: Als potenzielle Programmierer sind sie mental verstümmelt, ohne auf eine Regeneration zu hoffen.")

    Dijkstra starb am 6. August 2002. Heute, mehr als zehn Jahre nach seinem Tod, haben wir das Recht, uns umzusehen und uns zu fragen: Wie haben sich die Umstände verändert? Mit anderen Worten: Gibt es (heutzutage) unter den weit verbreiteten Programmiersprachen Sprachen, deren Verwendung für Programmierer, die dazu neigen, ein fast unvermeidliches Risiko einer merklichen professionellen Verformung birgt?

    Es scheint mir, dass sie sind; und dies sind in erster Linie diejenigen Sprachen, die unter die Definition der Nur-Schreib- Sprache fallen , das heißt, sie fördern das Schreiben eines solchen Quellcodes, dessen Lesen und Verstehen zu schwierig ist, unangemessen schwierig (in der Regel sogar schwieriger als das Schreiben durch den Autor des Codes), obwohl es normal ist sprachen sollten umgekehrt sein.

    Die häufigste dieser Sprachen ist Perl .

    Sei ruhig: Ich habe nicht die Absicht, nur mit dem Finger auf Perl zu zeigen und zu erklären, dass es schlecht ist. Ohne Beweise und Details wäre es zu wenig überzeugend ausgefallen. Aus diesem Grund zeige ich Ihnen im Moment anhand eines Beispiels aus dem Leben vier Mechanismen, mit denen Perl auf den Verstand des Programmierers einwirkt und ihn ermutigt , Code zu schreiben , der sich als unansehnlich herausstellt, nur zu schreiben.

    Dieses Beispiel wird FIDOS sein.

    Vor drei Tagen wurde auf der Fidonet-Echo-Konferenz der Sysops der fünfzigsten Region die Absicht besprochen, auf ein solches neues Format der Fidonet-Knotenliste ( englische Knotenliste ) umzusteigen , in der die Zeit feststeht(im Txy- Format ) würde im Hauptteil (und nicht im Benutzer) der Knotenbeschreibungszeile liegen. Einer der Sysops schlug vor, im Voraus eine Knotenliste in einem neuen Format zu erstellen, damit jeder das Verhalten seines Systems überprüfen kann:

    ╔═════════════════════════════════════════════════════────────────────────────
    ║ Письмо из эхи:  R50.SysOp (Сисопская глобалка пятидесятого региона)
    ║ URL сообщения:  area://R50.SysOp?msgid=2:5000/111+503b7f4b
    ║ Автор и время:  Oleg Redut, 2:5000/111 (27 Aug 12 21:06)
    ║ Кому написано:  Vladimir Donskoy
    ║ Заглавие темы:  Флаги Txy
    ╚════════════════════════════════════════════════════════════════════─────────
    @REPLY: 2:5020/5480 503a828c
    @MSGID: 2:5000/111 503b7f4b
    @CHRS: CP866 2
    @TZUTC: 0700
    @TID: hpt/w32-mvcdll 1.9.0-cur 12-03-11
        Доброе (current) время суток, Vladimir!
     VD>> Вот и интересно найти софт, который такого не поймёт - сразу
     VD>> дискуссия и кончится.
     AB> Выйдет - узнаем. А сейчас лениво проверять. :)
        Кстати, да. Кто-нть бы обработал ноделист по предполагаемому формату и
    выложил, чтобы можно было подсунуть мейлеру. А то каждому ноделист править для
    себя лень. :)
        Что я могу еще сказать?..
                     Oleg
    ... AKA oleg(&)redut.info AKA ICQ 28852595
    ■■■ GoldED+/W32-MINGW 1.1.5-b20120515 (пока работает)
     √ Origin: --- ...И все на наш редут... --- (2:5000/111)
    @PATH: 5000/111 5020/1042 830
    ────────────────────────════════╪══╬═╣()╠═╬══╪════════────────────────────────
    

    Ich habe diesen Brief bewusst mit allen technischen Informationen zitiert. Am Anfang des Briefes steht die Erwähnung von "hpt / w32" und am Ende die Erwähnung von "GoldED + / W32": Es wird klar, dass diese Fidoshnik Software verwendet, die für Win32 entwickelt wurde, das heißt, sie funktioniert unter Windows.

    Und hier ist die Antwort des Perl-Programmierers auf diesen Brief:

    ╔═════════════════════════════════════════════════════────────────────────────
    ║ Письмо из эхи:  R50.SysOp (Сисопская глобалка пятидесятого региона)
    ║ URL сообщения:  area://R50.SysOp?msgid=2:463/68+503b854d
    ║ Автор и время:  Pavel Gulchouck, 2:463/68 (27 Aug 12 17:32)
    ║ Кому написано:  Oleg Redut
    ║ Заглавие темы:  Re: Флаги Txy
    ╚════════════════════════════════════════════════════════════════════─────────
    27 Aug 12, Oleg Redut ==> Vladimir Donskoy:
     VD>>> Вот и интересно найти софт, который такого не поймёт - сразу
     VD>>> дискуссия и кончится.
     AB>> Выйдет - узнаем. А сейчас лениво проверять. :)
     OR>     Кстати, да. Кто-нть бы обработал ноделист по предполагаемому формату
     OR> и выложил, чтобы можно было подсунуть мейлеру. А то каждому ноделист
     OR> править для себя лень. :)
    Вот преобразование пользовательских флагов U,Txy в обычные:
    perl -pe 'next unless /(([^,]*,){6,})U(.*)/; ($l,$u)=($1,$3); while ($u =~
    /^(.*,)?(T[A-Xa-x]{2}),?(.*)/) { $l.="$2,"; $u="$1$3" }; $_="${l}U$u\n";
    s/,U?,?\s*$/\n/'
    ────────────────────────════════╪══╬═╣()╠═╬══╪════════────────────────────────
    

    Zwei und ein paar Codezeilen in Perl; und dieser Code fällt, wie Sie leicht sehen können, weitgehend unter die Definition von Nur-Schreiben.

    Aber was genau macht Perl mit diesem Code?

    Erstens die maßlose Fülle regulärer Ausdrücke. Die Perl-Sprache ist so konzipiert, dass die Verwendung regulärer Ausdrücke etwas praktischer ist als der Aufruf einer Funktion. Dies führt dazu, dass der Perl-Programmierer natürlich versucht ist, stattdessen reguläre Ausdrücke in sein eigenes (möglicherweise auf eine bestimmte Aufgabe zugeschnittenes) Analogon einer einfachen Funktion (z. B. der Split- Funktion , die durch Kommas oder andere Zeichen getrennte Fragmente aus einem String extrahiert ) zu werfen um diese Funktion aufzurufen. Der Quellcode ist schreibgeschützt.Da der Leser sofort unter dem Namen der Funktion weiß, was sie hier tut, aber durch das Auftreten eines regulären Ausdrucks, ist dies fast eine Größenordnung schwerer zu verstehen und man muss außerdem vorsichtig sein.

    Zweitens die Verwendung von nicht semantischen ( was etwas bedeutet), sondern kurzen (in diesem Fall sogar aus einem Zeichen bestehenden) Variablennamen. Da die Variablen von Perle geschaffen, mit einem Zeichen Namen haben (wie $ 1 , $ 3 , $ 6 , $ _ ), mit ihnen die Gewohnheit der täglichen Arbeit schafft allmählich ein Programmierer Gefühl , dass die Ablehnung des semantischen Wert der Variablen zugunsten der Kürze, der Name ist etwas ganz natürlich und gerechtfertigt -und dann hat er die eigenen Variablen im Laufe der Zeit beginnen , die einen Buchstaben zu nennen (wie ein $ l , $ f , $ u ), wie es in der Dunkelheit und der Anbruch der Ära eines Fortran oder den ersten Versionen von BASIC. Die Quellcodes sind schreib nur, weil der Leser Code verbringt zehnmal mehr Anstrengungen unternehmen, um zu verstehen , was die Variable $ u Benutzer - Flags enthält (wie sie unmittelbar im Fall offensichtlich sein würden , wo es den Namen haben würde $ Userflags ), variable $ f enthält das nächste Flag ( $ flag ), die Variable $ lEnthält den Anfang einer Zeile ( $ line ) oder eines Listenelements ( $ list_item ).

    Drittens ermöglicht Perl das Schreiben von Steuerstrukturen in der unnatürlichen Reihenfolge "Code-Operator-Bedingung" (z. B. "Code, außer Bedingung" oder "Code, wenn Bedingung"). Der Quellcode ist schreibgeschützt.weil der Codeleser den Code zuerst so bedingungslos ausführbar wie alle vorhergehenden Zeilen liest, dann aber eine Bedingung in derselben Zeile bemerkt - was bedeutet, dass er gezwungen ist, den Code, den er gerade gelesen hat, nur unter dieser Bedingung als ausführbar wiederzuerkennen. Diese Technik verlangsamt das Lesen des Codes erneut. Dies ist jedoch keine Größenordnung, sondern nur alle zwei Male. wenn er sich nur auf kurze Konstruktionen wie " next without ..." beschränken würde, könnte er sich versöhnen.

    Viertens kontinuierliche unmenschliche Anstrengungen (zunächst schmerzhaft und dann von freudigem Erfolg gekrönt) beim täglichen Lesen von Nur-Schreib-Codes,allmählich entwickelt sich im Programmierer eine eher unangenehme Qualität der Verachtung für die umliegenden Nicht-Programmierer, die im Sinne des orthodoxen Christentums als Stolz und im Sinne des Lurkmore-Liquidationismus als ChSV (Self-Greatness) bezeichnet werden kann. Die Programmierer, die diese Deformation durchgemacht haben, vergessen entweder aufrichtig, dass nicht jeder in der Nähe Perl für Linux programmiert, oder sie kümmern sich wirklich nicht um das Schicksal derer, die nicht in Perl für Linux programmieren, oder sie zeigen den aktiven Wunsch , diejenigen, die nicht in Perl programmieren , irgendwie zu bestrafen unter Linux.

    Denken Sie und denken Sie: Wie viel Nutzen wird das Rezept aus nur diesen zwei mit ein paar Zeilen in Perl bestehen, die für die Befehlszeile bestimmt sind?

    perl -pe 'next unless /(([^,]*,){6,})U(.*)/; ($l,$u)=($1,$3); while ($u =~
    /^(.*,)?(T[A-Xa-x]{2}),?(.*)/) { $l.="$2,"; $u="$1$3" }; $_="${l}U$u\n";
    s/,U?,?\s*$/\n/'
    

    Es ist leicht zu erkennen, dass das Rezept von der Tatsache abhängt, dass Perl bereits in PATH installiert und registriert ist. Dies geschieht genau unter Linux, ist aber in der Regel weit davon entfernt, unter Windows zu arbeiten (ich habe Sie alle absichtlich etwas darüber informiert, dass der Empfänger Windows verwendet). Der Perl-Programmierer sagte jedoch kein Wort darüber, wo man perl.exe erhält .

    Es ist leicht zu erraten, dass das Skript die Quelldaten (Knotenliste) an die Standardeingabe senden und die Ergebnisse der Arbeit von der Standardausgabe (modifizierte Knotenliste) übernehmen muss. Der Perl-Programmierer ging jedoch nicht auf dieses relativ einfache Wissen ein, das sich jedoch für den Endbenutzer leicht als unbekannt oder vergessen herausstellen kann.

    Darüber hinaus funktioniert die oben beschriebene Gestaltung des Quellcodes mit Apostrophen unter Windows nicht. Mit anderen Worten, selbst wenn der Empfänger des Rezepts perl.exe erhält und die Datei " <Eingabe " und " > Ausgabe " korrekt auswählt , wird es schmerzlich enttäuscht sein - ungefähr so, als hätten Sie den Befehl cd 'Documents auf dem Laufwerk "C:" ausgegeben und Einstellungen ' anstelle von CD "Dokumente und Einstellungen" .

    Infolgedessen zeigt der Code die Art des Nur-Schreibensnicht nur beim Versuch, es zu lesen, sondern auch beim Versuch, es zur Ausführung auszuführen. Dieser Effekt verrät ein wenig Masochismus: Erstens fickt und leidet der Programmierer, und am Ende muss der Benutzer ficken und leiden - nicht im wahrsten Sinne des Wortes, zum Glück, aber technisch.

    (Denken Sie übrigens darüber nach, warum die Lehre von Sacher-Masoch als Masochismus und nicht als Sherism bezeichnet wird. Ist es nicht offensichtlich, dass der Begriff "Sherryismus" besser dem ersten - und nicht dem zweiten - Teil des Autornamens dieser sexuellen Perversion entspricht? die russische Phrase "für Schwanz", die in direktem, direktem Zusammenhang mit dieser Sexualpraxis steht?)

    Ende der neunziger Jahre verbreitete sich in Fidonet eine düstere Prophezeiung: "Fidonet wurde von Schwulen erschaffen, und Schwule werden es zerstören . “ Es wurde einerseits die berühmte unkonventionelle sexuelle Orientierung von Jennings (Schöpfer von Fidonet) verstanden, und andererseits die wachsende Anzahl von organisierten Netzwerk-Abschaum, die sich missbräuchlich verhielten. Aber in den letzten Jahren habe ich meine eigene Version dieses Satzes verwendet: "Das Fidonet wurde von Mistkerlen erschaffen, und Masochisten werden es zerstören ." Es zeigt eine politisch inkorrekte Haltung gegenüber Homosexuellen, aber die Hauptsache ist die tiefe Überzeugung, dass das Hauptproblem des modernen Fidonet die tief verwurzelte Angewohnheit ist, solch extrem unbequeme Software zu verwenden, mit der man manchmal Sex haben und darunter leiden muss.

    Nur für den Fall, es ist angebracht zu betonen: Im obigen Beispiel ist es für mich offensichtlich, dass es nicht Pavel Gulchuks Fehler ist (ein ausgezeichneter Programmierer, führender Binkd-Entwickler, der die Domain binkp.net unterstützt usw.), sondern der Perl-Sprachfehler, der Programmierer allmählich dazu ermutigt Schreiben und Verteilen von schreibgeschütztem Quellcode . Auch wenn der Programmierer nicht schlecht ist.

    Dies erinnert ein wenig an eine fantastische Sprache (Mensch, nicht Computer) aus George Orwells Roman "1984" - eine künstliche Sprache, die die Denkweise des Muttersprachlers allmählich verzerrte und ihn zu einer parteiischen Denkweise führte.

    Und noch mehr wie eine fantastische Sprache (Mensch, nicht Computer) "Babylon-17" aus dem gleichnamigen RomanSamuel Dilany ist eine künstliche Sprache, die aufgrund ihrer Kompaktheit und Nachdenklichkeit das Gedankentempo eines Muttersprachlers und die Fähigkeit zu Rückschlüssen stark steigerte, die Denkweise des Muttersprachlers jedoch allmählich verzerrte und ihn zu einem Terroristen und Verräter machte, der unter dem Einfluss der Selbsthypnose und der Zerstörung des Gedächtnisses handelte.

    (Zu beachten ist, dass Dylaney auch homosexuell war, außerdem schwarz.)

    Jetzt auch beliebt: