NerdkramsNetzfundstücke
Nope.js

(Vor­be­mer­kung: Mei­ne per­sön­li­chen Erfah­run­gen mit Node.js beschrän­ken sich außer der test­wei­sen Instal­la­ti­on von Ether­pad Lite auf den zumin­dest erfolg­rei­chen Ver­such, eine Desk­top­an­wen­dung mit Elec­tron zu schrei­ben. Die­se Anwen­dung wird aller­dings zunächst in einer anstän­di­gen Spra­che 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 Pro­gram­mier­um­ge­bung ist.)

Die­ser Tage geht das NPM-Deba­kel durch deut­sche Tech­nik­me­di­en, das sich etwa fol­gen­der­ma­ßen zusam­men­fas­sen lässt: Der Ent­wick­ler einer bekann­ten und viel genutz­ten Java­Script-Biblio­thek, die aus einem Zufall her­aus genau so heißt wie einer der zahl­rei­chen ICQ-Klo­ne, wird von den Machern die­ses ICQ-Klons dar­um gebe­ten, den Namen zur eige­nen Ver­wen­dung 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 Ver­zeich­nis von Java­Script-Biblio­the­ken, mit recht­li­chen Schrit­ten, wenn sie den Namen für ihre geplan­te Biblio­thek nicht frei­ge­ge­ben bekom­men. Der Ent­wick­ler der ein­gangs erwähn­ten Biblio­thek bekommt also „sei­nen“ Namen von Drit­ten ent­zo­gen und zieht dar­auf­hin ver­ständ­li­cher­wei­se erbost all sei­ne Pro­jek­te aus dem Ver­zeich­nis zurück, wor­auf­hin offen­sicht­lich ein bedeut­sa­mer Teil der dort auf­ge­führ­ten Pro­jek­te, dar­un­ter gro­ße Frame­works wie React.js, plötz­lich nicht mehr funk­tio­nier­te, weil sie ihrer­seits für tri­via­le Auf­ga­ben (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 Kapi­ta­lis­mus nicht drin­gend abge­schafft wer­den soll­te, um sol­che Strei­tig­kei­ten um Mar­ken­rech­te künf­tig nicht mehr zu lukra­ti­ven Neben­ein­nah­men machen zu kön­nen. Dabei liegt das Pro­blem viel näher – das Pro­blem heißt Node.js.

Dass man Java­Script bes­ser nicht für ernst­haf­te Pro­gram­mie­rung nut­zen soll­te, ist längst kal­ter Kaf­fee (macht also, wie der Volks­mund behaup­tet, fast so schön wie ein Döner), und das nicht nur, weil Java­Script im Jahr 2016 das Haupt­ein­falls­tor für Schad­soft­ware im Brow­ser ist. Nun ist es bedau­er­li­cher­wei­se immer noch Kon­sens, dass dyna­mi­sche Inhal­te im Brow­ser in Java­Script geschrie­ben sein soll­ten, sieht man von Paren­script, Emscrip­ten und vie­len wei­te­ren Pro­jek­ten ab, die das Schrei­ben von Java­Script in einer rich­ti­gen Pro­gram­mier­spra­che ermög­li­chen und dem Ent­wick­ler bis zur Fer­tig­stel­lung wenig­stens die Syn­tax vom Hals hal­ten. Dar­an lässt sich nichts so ein­fach ändern, das ist eine Ent­schei­dung derer, die irgend­wel­che wüsten „Stan­dards“ festlegen.

Node.js ver­folgt einen ande­ren Ansatz: Im Kern aus V8, der Java­Script-Kom­po­nen­te von aus­ge­rech­net Goo­gles Chro­me-Brow­ser, bestehend zielt es auf die Ver­wen­dung in Netz­werk­an­wen­dun­gen, sozu­sa­gen als Ersatz für Perl, PHP, Python und der­glei­chen, völ­lig los­ge­löst vom Brow­ser. Nicht, dass das bes­ser wäre, denn die wesent­li­chen Schwie­rig­kei­ten der Spra­che Java­Script hat Node.js natür­lich auch, dort üblich ist es aber, sie zu kaschie­ren, indem man die vor­han­de­ne Sprach­struk­tur bis zur Unkennt­lich­keit mit Code frem­der Leu­te auf­bläht: Hier noch ein Frame­work, da noch eine Biblio­thek, zusam­men­ge­klebt mit aller­lei Hokus­po­kus mit Funk­tio­nen, die nie­mals dafür gedacht waren. Dabei sind die Auf­ga­ben oft tri­vi­al: Wel­ches Frame­work soll ich nut­zen, um zwei Zah­len zu addie­ren? – Nein, das ist natür­lich nur ein Scherz, die­se Fra­ge hat nie­mand tat­säch­lich gestellt. Anschei­nend wäre aber in der Welt von Node.js kei­ne Fra­ge zu blöd, um sie mit einem neu­en „Paket“ zu beant­wor­ten; nen­nen wir hier zum Bei­spiel doch nur ein­mal die­je­ni­gen, die sich Pake­te wie noop4 („no ope­ra­ti­on 4“) aus­den­ken, das nach der Instal­la­ti­on dafür genutzt wer­den kann, über­haupt nichts zu tun. Weil’s der Neu­gier dient: Natür­lich gibt es auch „noop“ 1 bis 3.

Fefe hat der­weil her­aus­ge­fun­den, dass es sogar ein Paket (in Ver­si­on 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 Spra­chen (oder heißt das heu­te alles „Öko­sy­stem“?) ein ver­damm­tes Sprach­fea­ture ist, was eini­ges erklärt: Eine typi­sche Node.js-Anwendung besteht über­wie­gend aus dem Code frem­der Leu­te. Wenn da irgend­wo ein tief­grei­fen­der Feh­ler pas­siert, stel­le ich mir die Feh­ler­su­che zumin­dest als ange­mes­se­ne Stra­fe vor. Die in sei­nem Blog­ar­ti­kel erwähn­ten PHP-Ent­wick­ler – zu denen ich vor einer Wei­le 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 Stan­dard­bi­blio­the­ken um ein Viel­fa­ches zu „erwei­tern“. Wäh­rend 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 Ergeb­nis zusam­men­ge­fasst lau­te­te, dass ich zwei­fels­frei ein „PEGIDA“ unter­stüt­zen­der Neo­na­zi sei, weil ich wahr­heits­ge­mäß behaup­te­te, in mei­nen bis­her fünf­zehn Jah­ren mit PHP kein ein­zi­ges „PHP-Frame­work“ wie das „Zend Frame­work“ oder „Sym­fo­ny“ 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 Hip­stern 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 Leu­te, die nicht pro­gram­mie­ren, son­dern nur frem­den Code zusam­men­kle­ben wol­len. Egal, wie ein­fach eine Metho­de 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än­gig­keit in sein Pro­gramm. Ein Paket, das mit einem Ein­zei­ler (!) über­prüft, ob eine Varia­ble ein Array ist, hat 880.000 Down­loads pro Tag.

Und dann stel­len sich die glei­chen BWL-Schlips­trä­ger, die schon mit dem sturz­frei­en Adres­sie­ren einer E‑Mail über­for­dert sind, aber von Fir­men viel zu hoch dafür bezahlt wer­den, dass sie ihnen raten, gefäl­ligst immer auf das neue­ste Frame­work zu set­zen, egal, wie gering der Mehr­wert auch sein mag, was unver­meid­lich dazu führt, dass sol­che Tech­ni­ken, die immer­hin wert­vol­le Minu­ten beim all­se­me­stri­gen Umstieg spa­ren, zusätz­li­chen Auf­trieb erhal­ten, vor das erst­be­ste Mikro­fon und bekla­gen sich, dass heu­te kei­ner mehr anstän­dig pro­gram­mie­ren kann.

So vie­le Mit­tel­fin­ger kann ich mir gar nicht wach­sen lassen.

Senfecke:

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

    Gut, dass man Com­mon Lisp in Java­Script über­setzt kriegt – falls ich doch mal wie­der muss.

    • Naja, im Ver­gleich zu Lisp Code ist das Bei­spiel doch lesbar.
      Ich habe mal n x‑beliebigen Lisp Code gesucht und das gefun­den https://github.com/vydd/sketch/blob/master/src/color.lisp – der Java­script Code ist egal wie kom­plex er eigent­lich ist, rela­tiv (also auch für Nicht JS Pro­gram­mie­rer) les­bar. Was man von Lispcode nicht unbe­dingt behaup­ten kann.

      • Auweia, der Ver­gleich ist ja schon schlimm. Java­script-Code, der Zah­len ver­gleicht, und eine Gra­fik­bi­blio­thek. Die wür­de in JS auch nicht bes­ser ver­ständ­lich sein.

        Und stell dir das erst mal in Perl vor.

        • Les­bar­keit hat ja erst­mal nichts mit der Spra­che zu tun, das ist sicher auch so umsetz­bar das es für Aussen­ste­hen­de 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 Perl­mo­dul einfacher.

          Aber der Code den Eli­as (auf Twit­ter) gezeigt hat ver­gleicht kei­ne Zah­len, son­dern ist ver­mut­lich eine kom­plet­te Anwen­dung, für die in ande­ren Spra­chen 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 Zei­le tut.

            Ich habe unlängst einem Arbeits­kol­le­gen, der noch nie eine Zei­le Lisp pro­gram­miert hat, eine Metho­de aus mei­nem neu­en Pro­gramm (dazu schrei­be ich dem­nächst was, wenn es fer­tig ist) gezeigt. Das Ein­zi­ge, was er nicht sofort ver­stan­den hat, war, was „num­berp“ macht. Ver­such das mal mit einem belie­bi­gen Perl­mo­dul. Die sind ja oft recht, äh, schlecht formatiert.

            • Da sieh­ste mal wie unter­schied­lich der Blick­lin­kel ist, für mich ist das unles­ba­res Kau­der­welsch. Mir feh­len Hin­wei­se dar­auf was Varia­beln, Schlüs­sel­wör­ter sind oder wel­che Struk­tu­ren zusam­men gehö­ren. Das ist in mei­nen Augen eine Buchstabensuppe.
              Da ich über­wie­gend mit Perl und Java­script 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 „Java­sie­rung“, die lei­der auch bei Perl immer mehr Ein­zug hält und ver­mut­lich auch die Ursa­che für sol­che Code­aus­wüch­se sind. Alles muss bis in jede Ebe­ne auf’s Detail geprüft wer­den, anstatt ein­fach mal eine Aus­nah­me zu werfen. 

              Wobei ich aber davon aus­ge­he, dass es auch klein­ste Stan­dard­mo­du­le in C,Lisp oder in der Spra­che XYZ gibt, die, wenn sie jemand löschen wür­de, vie­le tau­send Pro­gram­me betref­fen würde. 

              Was aber z.b. auch ein Pro­blem von PHP ist, da es kaum Stan­dard­mo­du­le gibt, muss alles über Jahr­zehn­te mit­ge­schleppt wer­den und wenn die mysql erwei­te­rung irgend­wann mal ent­fernt wird, wer­den wohl auch eini­ge dumm aus der Röh­re schau­en, der­weil hat man dann drei mySQL Abstrak­ti­ons­schich­ten gleich­zei­tig. Und was die Viel­zahl der Metho­den und die Inkon­si­sten­zen der Auf­ru­fe angeht ist PHP ja legendär. 

              Letzt­lich 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 strei­ten. Aber das gan­ze hat nun wenig mit dem eigent­li­chen Urhe­ber­streit an sich zu tun.

              • Mir feh­len Hin­wei­se dar­auf was Varia­beln, Schlüs­sel­wör­ter sind oder wel­che Struk­tu­ren zusam­men gehören.

                In (Com­mon) Lisp gibt es kei­ne „syn­tak­tisch getrenn­ten“ Varia­blen und Schlüs­sel­wör­ter im eigent­li­chen Sin­ne. 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 Set­zen einer Varia­ble (set­ze-varia­ble name wert) gilt. So was wie „Schlüs­sel­wör­ter“ fin­dest du da pri­mär, wenn du mit Schlei­fen arbei­ten möch­test. Das lässt dir aber auch gewis­se Frei­hei­ten: Du kannst dei­ne Varia­ble „list“ nen­nen, ohne dass der Com­pi­ler sich (wie etwa in Sche­me) beschwert, weil die „Funk­ti­on“ list schon defi­niert ist. – Was Struk­tu­ren betrifft: Klam­mer auf = Struk­tur­be­ginn, Klam­mer zu = Struk­tu­ren­de. Hast du in Perl auch, sind nur mehr Klammerarten.

                Ver­steh‘ 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 Doku­men­ta­ti­on von Perl­mo­du­len ist aber oft schlicht­weg grau­en­haft. Eine „nack­te“ Para­me­ter­li­ste ist kei­ne brauch­ba­re Dokumentation.

                ad PHP:

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

                PHP 7 hat nach eini­gen Jah­ren, in denen die mysql_-Erwei­te­rung „depre­ca­ted“ (und auch als sol­che gekenn­zeich­net) war, die Unter­stüt­zung dafür ganz ent­fernt. Es gibt immer noch zwei ver­schie­de­ne Daten­bank­an­bin­dun­gen für MySQL im „Kern“, näm­lich PDO und mysqli_, aber zumin­dest nicht mehr drei.

    • Zu dei­nem Kom­men­tar paßt aber auch die erste Ant­wort auf die­sen Tweet :-)

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

      @yogthos feels like Lisp 

  2. Wo wir gera­de bei Spra­che sind: Dein letz­ter Satz hat vier Zei­len bei rund 140 Zei­chen pro Zei­le. Und das, um einen Sach­ver­halt zu beschrei­ben. Das geht aber auch bes­ser. :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> <span style=""> <strike>

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