NetzfundstückeNerdkrams
Nope.js

(Vorbe­merkung: Meine per­sön­lichen Erfahrun­gen mit Node.js beschränken sich außer der test­weisen Instal­la­tion von Ether­pad Lite auf den zumin­d­est erfol­gre­ichen Ver­such, eine Desk­topan­wen­dung mit Elec­tron zu schreiben. Diese Anwen­dung wird allerd­ings zunächst in ein­er anständi­gen Sprache neu imple­men­tiert, bevor ich sie für hier veröf­fentlichungstauglich halte; auch, weil Node.js eine schlicht unbrauch­bare Pro­gram­mierumge­bung ist.)

Dieser Tage geht das NPM-Debakel durch deutsche Tech­nikme­di­en, das sich etwa fol­gen­der­maßen zusam­men­fassen lässt: Der Entwick­ler ein­er bekan­nten und viel genutzten JavaScript-Bib­lio­thek, die aus einem Zufall her­aus genau so heißt wie ein­er der zahlre­ichen ICQ-Klone, wird von den Mach­ern dieses ICQ-Klons darum gebeten, den Namen zur eige­nen Ver­wen­dung freizugeben; er bietet ihnen kulant an, dass sie ihm den Namen abkaufen kön­nen, sie lehnen ab und dro­hen stattdessen den Mach­ern von “npm”, einem großen Verze­ich­nis von JavaScript-Bib­lio­theken, mit rechtlichen Schrit­ten, wenn sie den Namen für ihre geplante Bib­lio­thek nicht freigegeben bekom­men. Der Entwick­ler der ein­gangs erwäh­n­ten Bib­lio­thek bekommt also “seinen” Namen von Drit­ten ent­zo­gen und zieht daraufhin ver­ständlicher­weise erbost all seine Pro­jek­te aus dem Verze­ich­nis zurück, woraufhin offen­sichtlich ein bedeut­samer Teil der dort aufge­führten Pro­jek­te, darunter große Frame­works wie React.js, plöt­zlich nicht mehr funk­tion­ierte, weil sie ihrer­seits für triv­iale Auf­gaben (dazu komme ich gle­ich) auf seinen Code zurück­ge­grif­f­en haben.

Nun kön­nte man darüber spekulieren, wer hier eigentlich “die Schuld” trägt und ob der Kap­i­tal­is­mus nicht drin­gend abgeschafft wer­den sollte, um solche Stre­it­igkeit­en um Marken­rechte kün­ftig nicht mehr zu lukra­tiv­en Nebenein­nah­men machen zu kön­nen. Dabei liegt das Prob­lem viel näher — das Prob­lem heißt Node.js.

Dass man JavaScript bess­er nicht für ern­sthafte Pro­gram­mierung nutzen sollte, ist längst kalter Kaf­fee (macht also, wie der Volksmund behauptet, fast so schön wie ein Dön­er), und das nicht nur, weil JavaScript im Jahr 2016 das Haupte­in­fall­stor für Schad­soft­ware im Brows­er ist. Nun ist es bedauer­licher­weise immer noch Kon­sens, dass dynamis­che Inhalte im Brows­er in JavaScript geschrieben sein soll­ten, sieht man von Paren­script, Emscripten und vie­len weit­eren Pro­jek­ten ab, die das Schreiben von JavaScript in ein­er richti­gen Pro­gram­mier­sprache ermöglichen und dem Entwick­ler bis zur Fer­tig­stel­lung wenig­stens die Syn­tax vom Hals hal­ten. Daran lässt sich nichts so ein­fach ändern, das ist eine Entschei­dung der­er, die irgendwelche wüsten “Stan­dards” fes­tle­gen.

Node.js ver­fol­gt einen anderen Ansatz: Im Kern aus V8, der JavaScript-Kom­po­nente von aus­gerech­net Googles Chrome-Brows­er, beste­hend zielt es auf die Ver­wen­dung in Net­zw­erkan­wen­dun­gen, sozusagen als Ersatz für Perl, PHP, Python und der­gle­ichen, völ­lig los­gelöst vom Brows­er. Nicht, dass das bess­er wäre, denn die wesentlichen Schwierigkeit­en der Sprache JavaScript hat Node.js natür­lich auch, dort üblich ist es aber, sie zu kaschieren, indem man die vorhan­dene Sprach­struk­tur bis zur Unken­ntlichkeit mit Code fremder Leute auf­bläht: Hier noch ein Frame­work, da noch eine Bib­lio­thek, zusam­mengek­lebt mit aller­lei Hokus­pokus mit Funk­tio­nen, die niemals dafür gedacht waren. Dabei sind die Auf­gaben oft triv­ial: Welch­es Frame­work soll ich nutzen, um zwei Zahlen zu addieren? — Nein, das ist natür­lich nur ein Scherz, diese Frage hat nie­mand tat­säch­lich gestellt. Anscheinend wäre aber in der Welt von Node.js keine Frage zu blöd, um sie mit einem neuen “Paket” zu beant­worten; nen­nen wir hier zum Beispiel doch nur ein­mal diejeni­gen, die sich Pakete wie noop4 (“no oper­a­tion 4”) aus­denken, das nach der Instal­la­tion dafür genutzt wer­den kann, über­haupt nichts zu tun. Weil’s der Neugi­er dient: Natür­lich gibt es auch “noop” 1 bis 3.

Fefe hat der­weil her­aus­ge­fun­den, dass es sog­ar ein Paket (in Ver­sion 3.1.0, ich wieder­hole: 3.1.0) gibt, das prüft, ob eine Zahl pos­i­tiv ist, was ja in anderen Sprachen (oder heißt das heute alles “Ökosys­tem”?) ein ver­dammtes Sprach­fea­ture ist, was einiges erk­lärt: Eine typ­is­che Node.js-Anwendung beste­ht über­wiegend aus dem Code fremder Leute. Wenn da irgend­wo ein tief­greifend­er Fehler passiert, stelle ich mir die Fehler­suche zumin­d­est als angemessene Strafe vor. Die in seinem Blog­a­r­tikel erwäh­n­ten PHP-Entwick­ler — zu denen ich vor ein­er Weile auch beru­flich noch zählte — als ähn­lich niedrigstu­fig anzuse­hen halte ich übri­gens für etwas zu kurz gedacht, weil es anders als in Python, Perl und so weit­er in PHP schlicht nicht nötig ist, die Stan­dard­bib­lio­theken um ein Vielfach­es zu “erweit­ern”. Während ich übri­gens diesen Text hier konzip­ierte, kam ich mit einem typ­is­chen Node.js-Entwickler ins Gespräch, dessen Ergeb­nis zusam­menge­fasst lautete, dass ich zweifels­frei ein “PEGIDA” unter­stützen­der Neon­azi sei, weil ich wahrheits­gemäß behauptete, in meinen bish­er fün­fzehn Jahren mit PHP kein einziges “PHP-Frame­work” wie das “Zend Frame­work” oder “Sym­fony” benutzt haben zu müssen, weil ich dort zumin­d­est ser­ver­seit­ig mein Zeug gern mal selb­st schreibe, damit ich weiß, wo alles ste­ht. So weit ist es schon gekom­men, dass man sich von Hip­stern anpö­beln lassen muss, weil man sich nicht grund­sät­zlich auf frem­den Code ver­lassen möchte.

Ich schweife (schon wieder) ab. Was ich eigentlich fest­gestellt haben wollte: Node.js richtet sich wie Java offen­sichtlich an Leute, die nicht pro­gram­mieren, son­dern nur frem­den Code zusam­men­kleben wollen. Egal, wie ein­fach eine Meth­ode selb­st zu imple­men­tieren ist, es hat schon wer gemacht und deswe­gen hängt man lieber eine zusät­zliche Abhängigkeit in sein Pro­gramm. Ein Paket, das mit einem Einzeil­er (!) über­prüft, ob eine Vari­able ein Array ist, hat 880.000 Down­loads pro Tag.

Und dann stellen sich die gle­ichen BWL-Schlip­sträger, die schon mit dem sturzfreien Adressieren ein­er E‑Mail über­fordert sind, aber von Fir­men viel zu hoch dafür bezahlt wer­den, dass sie ihnen rat­en, gefäl­ligst immer auf das neueste Frame­work zu set­zen, egal, wie ger­ing der Mehrw­ert auch sein mag, was unver­mei­dlich dazu führt, dass solche Tech­niken, die immer­hin wertvolle Minuten beim allse­mes­tri­gen Umstieg sparen, zusät­zlichen Auftrieb erhal­ten, vor das erst­beste Mikro­fon und bekla­gen sich, dass heute kein­er mehr anständig pro­gram­mieren kann.

So viele Mit­telfin­ger kann ich mir gar nicht wach­sen lassen.

Senfecke:

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

    Gut, dass man Com­mon Lisp in JavaScript über­set­zt kriegt – falls ich doch mal wieder muss.

    • Naja, im Ver­gle­ich zu Lisp Code ist das Beispiel doch les­bar.
      Ich habe mal n x‑beliebigen Lisp Code gesucht und das gefun­den https://github.com/vydd/sketch/blob/master/src/color.lisp — der Javascript Code ist egal wie kom­plex er eigentlich ist, rel­a­tiv (also auch für Nicht JS Pro­gram­mier­er) les­bar. Was man von Lisp­code nicht unbe­d­ingt behaupten kann.

      • Auweia, der Ver­gle­ich ist ja schon schlimm. Javascript-Code, der Zahlen ver­gle­icht, und eine Grafik­bib­lio­thek. Die würde in JS auch nicht bess­er ver­ständlich sein.

        Und stell dir das erst mal in Perl vor.

        • Les­barkeit hat ja erst­mal nichts mit der Sprache zu tun, das ist sich­er auch so umset­zbar das es für Aussen­ste­hende les­bar ist — auch in und ger­ade in Perl.

          Ist das z.b. les­bar­er?
          https://github.com/fukamachi/woo/blob/master/src/woo.lisp
          Für mich nicht. Da ist jedes Perlmod­ul ein­fach­er.

          Aber der Code den Elias (auf Twit­ter) gezeigt hat ver­gle­icht keine Zahlen, son­dern ist ver­mut­lich eine kom­plette Anwen­dung, für die in anderen Sprachen ver­mut­lich 200KB Code notwendig wären, aber das kann man dann auch nicht ver­gle­ichen?

          • Ja, das ist sog­ar sehr les­bar. Selb­st, wenn man den Code zum ersten Mal sähe, wüsste man sofort, was jede Zeile tut.

            Ich habe unlängst einem Arbeit­skol­le­gen, der noch nie eine Zeile Lisp pro­gram­miert hat, eine Meth­ode aus meinem neuen Pro­gramm (dazu schreibe ich dem­nächst was, wenn es fer­tig ist) gezeigt. Das Einzige, was er nicht sofort ver­standen hat, war, was “num­berp” macht. Ver­such das mal mit einem beliebi­gen Perlmod­ul. Die sind ja oft recht, äh, schlecht for­matiert.

            • Da siehste mal wie unter­schiedlich der Blick­linkel ist, für mich ist das unles­bares Kaud­er­welsch. Mir fehlen Hin­weise darauf was Vari­abeln, Schlüs­sel­wörter sind oder welche Struk­turen zusam­men gehören. Das ist in meinen Augen eine Buch­staben­suppe.
              Da ich über­wiegend mit Perl und Javascript arbeite sind für mich die hier “bemeck­erten” Codes ver­ständlich und nachvol­lziehbar. Und ja, wenn ich ver­suche ein Perl Mod­ul zu ver­ste­hen ist das für mich ein­fach­er, da diese i.d.R. gut doku­men­tiert sind oder der Code ein­deutiger. Jed­er kann halt das was er kann.

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

              Wobei ich aber davon aus­ge­he, dass es auch kle­in­ste Stan­dard­mod­ule in C,Lisp oder in der Sprache XYZ gibt, die, wenn sie jemand löschen würde, viele tausend Pro­gramme betr­e­f­fen würde.

              Was aber z.b. auch ein Prob­lem von PHP ist, da es kaum Stan­dard­mod­ule gibt, muss alles über Jahrzehnte mit­geschleppt wer­den und wenn die mysql erweiterung irgend­wann mal ent­fer­nt wird, wer­den wohl auch einige dumm aus der Röhre schauen, der­weil hat man dann drei mySQL Abstrak­tion­ss­chicht­en gle­ichzeit­ig. Und was die Vielzahl der Meth­o­d­en und die Inkon­sis­ten­zen der Aufrufe ange­ht ist PHP ja leg­endär.

              Let­ztlich ist das was Node.js da macht der Ver­such das zu ver­mei­den. Ob es gelun­gen ist, darüber läßt sich wohl stre­it­en. Aber das ganze hat nun wenig mit dem eigentlichen Urhe­ber­stre­it an sich zu tun.

              • Mir fehlen Hin­weise darauf was Vari­abeln, Schlüs­sel­wörter sind oder welche Struk­turen zusam­men gehören.

                In (Com­mon) Lisp gibt es keine “syn­tak­tisch getren­nten” Vari­ablen und Schlüs­sel­wörter im eigentlichen Sinne. Alles ist eine Liste, wobei es zwei Arten von Lis­ten gibt; entwed­er so was wie “1 2 3 4 5” oder so was wie “funk­tion param1 param2 param3”, was auch für das Set­zen ein­er Vari­able (set­ze-vari­able name wert) gilt. So was wie “Schlüs­sel­wörter” find­est du da primär, wenn du mit Schleifen arbeit­en möcht­est. Das lässt dir aber auch gewisse Frei­heit­en: Du kannst deine Vari­able “list” nen­nen, ohne dass der Com­pil­er sich (wie etwa in Scheme) beschw­ert, weil die “Funk­tion” list schon definiert ist. — Was Struk­turen bet­rifft: Klam­mer auf = Struk­turbe­ginn, Klam­mer zu = Struk­turende. Hast du in Perl auch, sind nur mehr Klam­mer­arten.

                Ver­steh’ mich nicht falsch: Ich mag Perl auch deshalb, weil es so lustig aussieht. Ich nutze es nur nicht für alles, was ich schreiben möchte. Die Doku­men­ta­tion von Perlmod­ulen ist aber oft schlichtweg grauen­haft. Eine “nack­te” Para­me­terliste ist keine brauch­bare Doku­men­ta­tion.

                ad PHP:

                wenn die mysql erweiterung irgend­wann mal ent­fer­nt wird, wer­den wohl auch einige dumm aus der Röhre schauen

                PHP 7 hat nach eini­gen Jahren, in denen die mysql_-Erweiterung “dep­re­cat­ed” (und auch als solche gekennze­ich­net) war, die Unter­stützung dafür ganz ent­fer­nt. Es gibt immer noch zwei ver­schiedene Daten­bankan­bindun­gen für MySQL im “Kern”, näm­lich PDO und mysqli_, aber zumin­d­est nicht mehr drei.

    • Zu deinem Kom­men­tar paßt aber auch die erste Antwort auf diesen Tweet :-)

      Niki­ta Dud­nik ‏@dudnik 17 Std.vor 17 Stun­den

      @yogthos feels like Lisp

  2. Wo wir ger­ade bei Sprache sind: Dein let­zter Satz hat vier Zeilen bei rund 140 Zeichen pro Zeile. Und das, um einen Sachver­halt zu beschreiben. Das geht aber auch bess­er. :aufsmaul:

    Guten Mor­gen.

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  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_seb_zunge.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_blushnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_frown.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_twistedevil1.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_twistedevil2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/icon_mad.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_rolleyesnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_wink2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_idea2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_arrow2.gif 
mehr …
 

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

Datenschutzhinweis: Deine IP-Adresse wird nicht gespeichert. Details findest du hier.