NerdkramsNetzfundstücke
Nope.js

(Vorbemerkung: Meine per­sön­li­chen Erfahrungen mit Node.js beschrän­ken sich außer der test­wei­sen Installation von Etherpad Lite auf den zumin­dest erfolg­rei­chen Versuch, eine Desktopanwendung mit Electron zu schrei­ben. Diese Anwendung wird aller­dings zunächst in einer anstän­di­gen Sprache neu imple­men­tiert, bevor ich sie für hier ver­öf­fent­li­chungs­taug­lich hal­te; auch, weil Node.js eine schlicht unbrauch­ba­re Programmierumgebung ist.)

Dieser Tage geht das NPM-Debakel durch deut­sche Technikmedien, das sich etwa fol­gen­der­ma­ßen zusam­men­fas­sen lässt: Der Entwickler einer bekann­ten und viel genutz­ten JavaScript-Bibliothek, die aus einem Zufall her­aus genau so heißt wie einer der zahl­rei­chen ICQ-Klone, wird von den Machern die­ses ICQ-Klons dar­um gebe­ten, den Namen zur eige­nen Verwendung frei­zu­ge­ben; er bie­tet ihnen kulant an, dass sie ihm den Namen abkau­fen kön­nen, sie leh­nen ab und dro­hen statt­des­sen den Machern von „npm“, einem gro­ßen Verzeichnis von JavaScript-Bibliotheken, mit recht­li­chen Schritten, wenn sie den Namen für ihre geplan­te Bibliothek nicht frei­ge­ge­ben bekom­men. Der Entwickler der ein­gangs erwähn­ten Bibliothek bekommt also „sei­nen“ Namen von Dritten ent­zo­gen und zieht dar­auf­hin ver­ständ­li­cher­wei­se erbost all sei­ne Projekte aus dem Verzeichnis zurück, wor­auf­hin offen­sicht­lich ein bedeut­sa­mer Teil der dort auf­ge­führ­ten Projekte, dar­un­ter gro­ße Frameworks wie React.js, plötz­lich nicht mehr funk­tio­nier­te, weil sie ihrer­seits für tri­via­le Aufgaben (dazu kom­me ich gleich) auf sei­nen Code zurück­ge­grif­fen haben.

Nun könn­te man dar­über spe­ku­lie­ren, wer hier eigent­lich „die Schuld“ trägt und ob der Kapitalismus nicht drin­gend abge­schafft wer­den soll­te, um sol­che Streitigkeiten um Markenrechte künf­tig nicht mehr zu lukra­ti­ven Nebeneinnahmen machen zu kön­nen. Dabei liegt das Problem viel näher - das Problem heißt Node.js.

Dass man JavaScript bes­ser nicht für ernst­haf­te Programmierung nut­zen soll­te, ist längst kal­ter Kaffee (macht also, wie der Volksmund behaup­tet, fast so schön wie ein Döner), und das nicht nur, weil JavaScript im Jahr 2016 das Haupteinfallstor für Schadsoftware im Browser ist. Nun ist es bedau­er­li­cher­wei­se immer noch Konsens, dass dyna­mi­sche Inhalte im Browser in JavaScript geschrie­ben sein soll­ten, sieht man von Parenscript, Emscripten und vie­len wei­te­ren Projekten ab, die das Schreiben von JavaScript in einer rich­ti­gen Programmiersprache ermög­li­chen und dem Entwickler bis zur Fertigstellung wenig­stens die Syntax vom Hals hal­ten. Daran lässt sich nichts so ein­fach ändern, das ist eine Entscheidung derer, die irgend­wel­che wüsten „Standards“ festlegen.

Node.js ver­folgt einen ande­ren Ansatz: Im Kern aus V8, der JavaScript-Komponente von aus­ge­rech­net Googles Chrome-Browser, bestehend zielt es auf die Verwendung in Netzwerkanwendungen, sozu­sa­gen als Ersatz für Perl, PHP, Python und der­glei­chen, völ­lig los­ge­löst vom Browser. Nicht, dass das bes­ser wäre, denn die wesent­li­chen Schwierigkeiten der Sprache JavaScript hat Node.js natür­lich auch, dort üblich ist es aber, sie zu kaschie­ren, indem man die vor­han­de­ne Sprachstruktur bis zur Unkenntlichkeit mit Code frem­der Leute auf­bläht: Hier noch ein Framework, da noch eine Bibliothek, zusam­men­ge­klebt mit aller­lei Hokuspokus mit Funktionen, die nie­mals dafür gedacht waren. Dabei sind die Aufgaben oft tri­vi­al: Welches Framework soll ich nut­zen, um zwei Zahlen zu addie­ren? - Nein, das ist natür­lich nur ein Scherz, die­se Frage hat nie­mand tat­säch­lich gestellt. Anscheinend wäre aber in der Welt von Node.js kei­ne Frage zu blöd, um sie mit einem neu­en „Paket“ zu beant­wor­ten; nen­nen wir hier zum Beispiel doch nur ein­mal die­je­ni­gen, die sich Pakete wie noop4 („no ope­ra­ti­on 4“) aus­den­ken, das nach der Installation dafür genutzt wer­den kann, über­haupt nichts zu tun. Weil’s der Neugier dient: Natürlich gibt es auch „noop“ 1 bis 3.

Fefe hat der­weil her­aus­ge­fun­den, dass es sogar ein Paket (in Version 3.1.0, ich wie­der­ho­le: 3.1.0) gibt, das prüft, ob eine Zahl posi­tiv ist, was ja in ande­ren Sprachen (oder heißt das heu­te alles „Ökosystem“?) ein ver­damm­tes Sprachfeature ist, was eini­ges erklärt: Eine typi­sche Node.js-Anwendung besteht über­wie­gend aus dem Code frem­der Leute. Wenn da irgend­wo ein tief­grei­fen­der Fehler pas­siert, stel­le ich mir die Fehlersuche zumin­dest als ange­mes­se­ne Strafe vor. Die in sei­nem Blogartikel erwähn­ten PHP-Entwickler - zu denen ich vor einer Weile auch beruf­lich noch zähl­te - als ähn­lich nied­rig­stu­fig anzu­se­hen hal­te ich übri­gens für etwas zu kurz gedacht, weil es anders als in Python, Perl und so wei­ter in PHP schlicht nicht nötig ist, die Standardbibliotheken um ein Vielfaches zu „erwei­tern“. Während ich übri­gens die­sen Text hier kon­zi­pier­te, kam ich mit einem typi­schen Node.js-Entwickler ins Gespräch, des­sen Ergebnis zusam­men­ge­fasst lau­te­te, dass ich zwei­fels­frei ein „PEGIDA“ unter­stüt­zen­der Neonazi sei, weil ich wahr­heits­ge­mäß behaup­te­te, in mei­nen bis­her fünf­zehn Jahren mit PHP kein ein­zi­ges „PHP-Framework“ wie das „Zend Framework“ oder „Symfony“ benutzt haben zu müs­sen, weil ich dort zumin­dest ser­ver­sei­tig mein Zeug gern mal selbst schrei­be, damit ich weiß, wo alles steht. So weit ist es schon gekom­men, dass man sich von Hipstern anpö­beln las­sen muss, weil man sich nicht grund­sätz­lich auf frem­den Code ver­las­sen möchte.

Ich schwei­fe (schon wie­der) ab. Was ich eigent­lich fest­ge­stellt haben woll­te: Node.js rich­tet sich wie Java offen­sicht­lich an Leute, die nicht pro­gram­mie­ren, son­dern nur frem­den Code zusam­men­kle­ben wol­len. Egal, wie ein­fach eine Methode selbst zu imple­men­tie­ren ist, es hat schon wer gemacht und des­we­gen hängt man lie­ber eine zusätz­li­che Abhängigkeit in sein Programm. Ein Paket, das mit einem Einzeiler (!) über­prüft, ob eine Variable ein Array ist, hat 880.000 Downloads pro Tag.

Und dann stel­len sich die glei­chen BWL-Schlipsträger, die schon mit dem sturz­frei­en Adressieren einer E-Mail über­for­dert sind, aber von Firmen viel zu hoch dafür bezahlt wer­den, dass sie ihnen raten, gefäl­ligst immer auf das neue­ste Framework zu set­zen, egal, wie gering der Mehrwert auch sein mag, was unver­meid­lich dazu führt, dass sol­che Techniken, die immer­hin wert­vol­le Minuten beim all­se­mest­ri­gen Umstieg spa­ren, zusätz­li­chen Auftrieb erhal­ten, vor das erst­be­ste Mikrofon und bekla­gen sich, dass heu­te kei­ner mehr anstän­dig pro­gram­mie­ren kann.

So vie­le Mittelfinger kann ich mir gar nicht wach­sen lassen.

Senfecke:

  1. Ich als jemand, der JavaScript so weit wie mög­lich mei­det, habe das hier ja eher für eine Satire gehalten… 

    Gut, dass man Common Lisp in JavaScript über­setzt kriegt – falls ich doch mal wie­der muss.

      • Auweia, der Vergleich ist ja schon schlimm. Javascript-Code, der Zahlen ver­gleicht, und eine Grafikbibliothek. Die wür­de in JS auch nicht bes­ser ver­ständ­lich sein.

        Und stell dir das erst mal in Perl vor.

        • Lesbarkeit hat ja erst­mal nichts mit der Sprache zu tun, das ist sicher auch so umsetz­bar das es für Aussenstehende les­bar ist - auch in und gera­de in Perl. 

          Ist das z.b. lesbarer?
          https://github.com/fukamachi/woo/blob/master/src/woo.lisp
          Für mich nicht. Da ist jedes Perlmodul einfacher.

          Aber der Code den Elias (auf Twitter) gezeigt hat ver­gleicht kei­ne Zahlen, son­dern ist ver­mut­lich eine kom­plet­te Anwendung, für die in ande­ren Sprachen ver­mut­lich 200KB Code not­wen­dig wären, aber das kann man dann auch nicht vergleichen?

          • Ja, das ist sogar sehr les­bar. Selbst, wenn man den Code zum ersten Mal sähe, wüss­te man sofort, was jede Zeile tut.

            Ich habe unlängst einem Arbeitskollegen, der noch nie eine Zeile Lisp pro­gram­miert hat, eine Methode aus mei­nem neu­en Programm (dazu schrei­be ich dem­nächst was, wenn es fer­tig ist) gezeigt. Das Einzige, was er nicht sofort ver­stan­den hat, war, was „num­berp“ macht. Versuch das mal mit einem belie­bi­gen Perlmodul. Die sind ja oft recht, äh, schlecht formatiert.

            • Da sieh­ste mal wie unter­schied­lich der Blicklinkel ist, für mich ist das unles­ba­res Kauderwelsch. Mir feh­len Hinweise dar­auf was Variabeln, Schlüsselwörter sind oder wel­che Strukturen zusam­men gehö­ren. Das ist in mei­nen Augen eine Buchstabensuppe.
              Da ich über­wie­gend mit Perl und Javascript arbei­te sind für mich die hier „bemecker­ten“ Codes ver­ständ­lich und nach­voll­zieh­bar. Und ja, wenn ich ver­su­che ein Perl Modul zu ver­ste­hen ist das für mich ein­fa­cher, da die­se i.d.R. gut doku­men­tiert sind oder der Code ein­deu­ti­ger. Jeder kann halt das was er kann.

              Was mich bei Node.js mehr nervt ist (wobei ich es nicht nut­ze) ist die „Javasierung“, die lei­der auch bei Perl immer mehr Einzug hält und ver­mut­lich auch die Ursache für sol­che Codeauswüchse sind. Alles muss bis in jede Ebene auf’s Detail geprüft wer­den, anstatt ein­fach mal eine Ausnahme zu werfen. 

              Wobei ich aber davon aus­ge­he, dass es auch klein­ste Standardmodule in C,Lisp oder in der Sprache XYZ gibt, die, wenn sie jemand löschen wür­de, vie­le tau­send Programme betref­fen würde. 

              Was aber z.b. auch ein Problem von PHP ist, da es kaum Standardmodule gibt, muss alles über Jahrzehnte mit­ge­schleppt wer­den und wenn die mys­ql erwei­te­rung irgend­wann mal ent­fernt wird, wer­den wohl auch eini­ge dumm aus der Röhre schau­en, der­weil hat man dann drei mySQL Abstraktionsschichten gleich­zei­tig. Und was die Vielzahl der Methoden und die Inkonsistenzen der Aufrufe angeht ist PHP ja legendär. 

              Letztlich ist das was Node.js da macht der Versuch das zu ver­mei­den. Ob es gelun­gen ist, dar­über läßt sich wohl strei­ten. Aber das gan­ze hat nun wenig mit dem eigent­li­chen Urheberstreit an sich zu tun.

              • Mir feh­len Hinweise dar­auf was Variabeln, Schlüsselwörter sind oder wel­che Strukturen zusam­men gehören.

                In (Common) Lisp gibt es kei­ne „syn­tak­tisch getrenn­ten“ Variablen und Schlüsselwörter im eigent­li­chen Sinne. Alles ist eine Liste, wobei es zwei Arten von Listen gibt; ent­we­der so was wie „1 2 3 4 5“ oder so was wie „funk­ti­on param1 param2 param3“, was auch für das Setzen einer Variable (set­ze-varia­ble name wert) gilt. So was wie „Schlüsselwörter“ fin­dest du da pri­mär, wenn du mit Schleifen arbei­ten möch­test. Das lässt dir aber auch gewis­se Freiheiten: Du kannst dei­ne Variable „list“ nen­nen, ohne dass der Compiler sich (wie etwa in Scheme) beschwert, weil die „Funktion“ list schon defi­niert ist. - Was Strukturen betrifft: Klammer auf = Strukturbeginn, Klammer zu = Strukturende. Hast du in Perl auch, sind nur mehr Klammerarten.

                Versteh‘ mich nicht falsch: Ich mag Perl auch des­halb, weil es so lustig aus­sieht. Ich nut­ze es nur nicht für alles, was ich schrei­ben möch­te. Die Dokumentation von Perlmodulen ist aber oft schlicht­weg grau­en­haft. Eine „nack­te“ Parameterliste ist kei­ne brauch­ba­re Dokumentation.

                ad PHP:

                wenn die mys­ql erwei­te­rung irgend­wann mal ent­fernt wird, wer­den wohl auch eini­ge dumm aus der Röhre schauen

                PHP 7 hat nach eini­gen Jahren, in denen die mysql_-Erweiterung „depre­ca­ted“ (und auch als sol­che gekenn­zeich­net) war, die Unterstützung dafür ganz ent­fernt. Es gibt immer noch zwei ver­schie­de­ne Datenbankanbindungen für MySQL im „Kern“, näm­lich PDO und mysqli_, aber zumin­dest nicht mehr drei.

    • Zu dei­nem Kommentar paßt aber auch die erste Antwort auf die­sen Tweet :-)

      Nikita Dudnik ‏@dudnik 17 Std.vor 17 Stunden

      @yogthos feels like Lisp 

  2. Wo wir gera­de bei Sprache sind: Dein letz­ter Satz hat vier Zeilen bei rund 140 Zeichen pro Zeile. Und das, um einen Sachverhalt zu beschrei­ben. Das geht aber auch bes­ser. :aufsmaul:

    Guten Morgen.

Comments are closed.

https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_smilenew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_biggrin2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_sadnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_eek.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_shocked.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_confusednew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_coolnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_lol.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_madnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_aufsmaul.gif 
mehr...
 

Erlaubte Tags:
<strong> <em> <pre> <code> <a href="" title=""> <img src="" title="" alt=""> <blockquote> <q> <b> <i> <del> <span style=""> <strike>

Datenschutzhinweis: Ihre IP-Adresse wird nicht gespeichert. Details finden Sie hier.