Moin Leute zu einfach komplex folge 87 ich hab dir das schon
mal gehört, dass ich das anfange.
Nee, heute geht es um nen Thema was große Leidenschaft von mir
ist, nämlich um Javascript und no JS ja die Programmiersprache
die ich am meisten benutze im Moment und da tatsächlich auch
am meisten Schätze und ich würde einfach mal euch heute nen
Rundumschlag geben von bis ja bisschen Historie, bisschen
Environment drumherum, bisschen wie sieht es aus von innen, was
kann man cool damit machen, darum geht es heute.
Hey Leute, bevor die Folge richtig losgeht, kommt hier
schon mal ne Korrektur. Wir haben die ganze Folge über
behauptet, No CHS sei eine Programmiersprache, aber
eigentlich ist NO CHS eine Laufzeitumgebung, mit der man
Java Script außerhalb des Browsers ausführen kann.
Tut uns leid, dass uns hier dieser Fauxpas unterlaufen ist,
aber jetzt wisst ihr Bescheid, no chs ist an sich keine
Programmiersprache, sondern diese Laufzeitumgebung, die
Funktionen und Module mitbringt, die eben benutzt werden, um Java
Script außerhalb des Browsers laufen zu lassen, das.
Jetzt aber viel Spaß mit der Folge und Sorry nochmal.
Und wie immer habe ich auch meinen Experten dabei, den
Gerrit. Hallo Gerrit.
Hi Burkhard und Hallo liebe zuhören, ich glaube damit ist
schon mal klar, welcher der Folge den Redeanteil haben wird.
Ich gucke mal, dass ich auf meine 5% komme oder so weiß ich
noch nicht bei dem Thema No Jazz, aber ich habe ein paar
Fakten ergoogelt, mal gucken ob du die dann weißt.
Ja genau, da kannst du mich mal n paar Sachen fragen.
Ich weiß bestimmt nicht alles, das ist also ein Riesenthema.
Ich hab hier auch links neben mir hab ich n Buch liegen, das
ist jetzt auch schon ziemlich alt geworden, das hab ich mir
damals gekauft als ich mit Note JS angefangen hab mach ich auch
noch nicht immer Note JS programmieren warte mal.
Das Buch ist von 2000 und lass mich gucken lädt da noch eine
Seite 2016 ja also späten Star hab ich angefangen aber ich
glaub schon n bisschen früher. Uralt?
Ja, für. Programmiersprache ist das ja
gar nicht so furchtbar alt, ja, oder wenn man manchmal so hört,
kam Modbus aus. Neulich hatten, was er gefühlt
irgendwie aus den Aus der Steinzeit noch kam.
Dafür ist ja no JS dann ziemlich modern 2016 oder 2009 wo es
glaub ich irgendwie eingeführt wurde.
Ja, genau, ja. Eingeführt wurde es glaub ich
noch n bisschen früher mit mit 2009 genau ja, entstanden ist es
wohl 1995. Also die Uhr der Uhrschleim
davon. Aber es ist also auf jeden Fall
ne moderne Programmiersprache, da sagst du was.
Ja, das ist so, ja und die macht richtig viel Spaß, also sie hat
sich extrem krass weiterentwickelt, das muss man
mal sagen, ja, also man muss als Entwickler musste mal n bisschen
was mitmachen, also die ganzen neuen Features die so reinkamen,
davon hab ich auch viele erlebt, also die Versionen quasi der
Programmiersprache selbst. Das ist ja auch so wenn man das
nicht weiß, ne Programmiersprache ist ja nicht
in Stein gemeißelt sondern entwickelt sich selbst weiter ne
so wie und wie auch. Die deutsche oder französische
englische Sprache dann auch neue Wörter kriegt und Begriffe, ist
aber eine Programmiersprache noch eine ganze Runde krasser.
Also da entsteht auch mal eine neue Grammatik.
Ja, sowas wie der Adhusativ oder Irgendsowas ja als Neuer, also
vielleicht ein ganz neuer Fall oder Irgendsowas, also nicht nur
einfach Wörter, sondern auch irgendwie, ja das passiert dann
bei bei Nocias auch zu zu vielen teilen, aber immer in eine gute
Richtung wie ich finde. Ja sollen wir mal ein bisschen
einsteigen, wollen wir ein bisschen was anfangen zur
Geschichte oder was kommt es her, wer hat es gemacht?
Ja, bitte. Gut, da bin ich immer nur.
Also da hab ich auch nur das Wissen nicht aus dem Alltag,
sondern aus den Büchern und so weiter das könnt ihr auch selber
noch mal, das kann. Man ja auch nachlesen, ne.
Ja, ganz genau. Aber ja, das ist richtig.
Die Idee war halt, also, es kommt noch aus der Zeit und das
ist vielleicht wichtig zu sagen, es kommt aus der Zeit und aus
dem Problem, dass ich HTML als statisch zu statisch empfunden
habe oder viele anderen um um um n bisschen mehr Flexibilität,
bisschen mehr Dynamik in diese Webseiten zu bringen, das war so
im Jahr 1995. Und das ist wichtig, weil jetzt
von vornherein war jemand auf der Suche nach einem neuen
Konzept, nach einer neuen Sprache, die das ein bisschen
ablöst. Und das hat sie halt schon immer
im Internet zu tun und schon immer irgendwie mit dem Web.
Ja, das ist die Idee, also diese, diese Sprache ist damit
verwoben, ja, und deswegen ist sie wahrscheinlich heute noch so
erfolgreich, ja, und das war Brandon Nike, der hat 1995 hat
der Mokka gemacht, das hat mir glaub ich auch schon mal
irgendwo gesagt. Das war das allererste von von
diesen Dingern und das und der hat bei Brandon Hike hat bei
Netscape gearbeitet, damals Netscape, weil die es nicht
wissen war n browserhersteller Firma die n Browser gemacht hat
selbigen Namen sehr erfolgreich damals und es geht das Gerücht
um, dass er diesen diesen Prototypen quasi der Initialen
Java Scriptsprache in 10 Tagen Gecodet hat ist immer krass.
Also es gibt ja auch dieses Gerücht von Linus Torvalds, also
das ist glaub ich nicht kein Gerücht, das ist auch so, ja
dass er auch git. In sehr schneller Zeit gemacht
hat. Das ist glaub ich manchmal so.
Ja so so ne so ne man dann so n Geistesblitz hat und dann
wahrscheinlich hält man dann die Jalousien unter und schließt
sich ein und dann ist man nach 10 Tagen aber völlig fertig
wieder raus und hat aber irgendwas geschaffen sag ich
mal. Die Frage ist ja, ob man also ob
in diesen 10 Tagen, die das, also die Zeit dabei ist, in der
man sich das ausgedacht hat, auch ne, oder ob das vielleicht
über Monate gereift ist, über Ideen und und Gedanken und
Brainstormings. Und dann?
Ist es im Kopf zu 80% fertig oder so?
Und dann wird es runtergerattert ja, in 10 Tagen vielleicht keine
Ahnung. Könnte ich mir vorstellen.
So funktioniert es bei mir meistens ja, ich brauch immer so
n bisschen, ich geh immer schwanger mit irgendwelchen
Sachen und dann wenn es dann fertig ist im Gehirn, dann
versucht man es runter zu schreiben, da kommt meistens
noch mal so n ah verdammt hab ich vergessen muss ich noch mal
kurz nachdenken aber ja das geht anscheinend so so angeblich ist
es entstanden und dann wurde es noch n paar Mal umgetauft glaub
innerhalb des Jahres 1995 bis ins Final Java Scriptis.
Dazu hab ich versucht rauszubekommen.
Warum haben die das Java Script genannt und was ich gelesen hab
ist, dass damals halt Java ziemlich bekannt war und man
dachte so Java setzt sich vielleicht durch als
Kleinsprache im Browser und so weiter und als Marketingaktion
hab ich es dann halt so genannt, dass da Java im Wort mit drin
ist, um dem ganzen Bedeutung zu verleihen hat hat es halt Java
Script genannt, das ist bis heute für die Leute die das
irgendwie noch nie gehört haben n bisschen n Fettnäpfchen
schnell mal weil Java Script tatsächlich mit Java nichts zu
tun hat. Ja das war ganz unterschiedliche
Sprachen. Marketing Er hat den Namen da
des Java Reingespielt, ja. Ja, ist mir auch schon häufiger
passiert. Inzwischen weiß ich es.
Java ist schon auch im Web vorgekommen, ne wo dann diese
Kaffeetasse war mit diesem Logo, mit dieser Kaffeetasse, diese
Dampf glaub ich oder? Ja, genau, genau das, das Java,
ja die die da, die sind ja auch im Web aktiv und so weiter aber
halt verschiedene komplett verschiedene Programmiersprachen
so und dann will ich gar nicht lange rumreden, aber dann ist
halt noch die Frage, warum setzt sich also wie kriegt man jetzt
sowas was ein Mann. Geschaffen hat.
Wieso setzt sich das dann irgendwie durch?
Das das liegt dann immer an vielen Sachen, es war halt auch
so, dass damals die Browser so aufkamen und dann gab es halt
quasi den den sogenannten Browserkrieg man, man nennt das
so, also es hat sich Microsoft gebettelt mit Netscape gebettelt
mit ich weiß nicht wer da noch alles aktiv war, da gab es der
Markt war noch nicht verteilt, die die Browserhersteller waren
alle dabei und die haben halt händeringend gesucht nach
Lösungen die Halt diese webauftritte dynamischer
aussehen lassen und dann kam dieses Javascript und das war
halt cool und dann gab es noch von Microsoft das Jay Script.
Was aber javascript kompatibel war und dann ging es los und
dann musste man halt bei javascript, da kommen wir
nachher noch zu ist ne interpretierte Sprache und das
heißt der Browser muss, der Browserhersteller muss was
machen damit javascript richtig ausgeführt wird und gut läuft
und dann haben sich halt quasi unternehmen alle darum gebettelt
wer jetzt hier noch schneller javascript ausführen kann weil
das für die Nutzer am Ende für die UX war das natürlich total
kritisch. Ja wer am schnellsten Javascript
ausführen konnte hatte das liquideste Erlebnis auf dem auf
dem Browser ja. Und so haben die sich glaub ich
gegenseitig da hochgeschaukelt und das Gleiche ist dann später
noch mal passiert und jetzt kommen wir nämlich rüber zu zu
no JS. Also das javascript ist quasi ne
sehr erfolgreiche Sprache im Hauser geworden und jetzt gab es
den den den Ryan Dahl so ich mich belesen habe, der war ein
Promovent der Mathematik, also auch wahrscheinlich ein ein
theoretisch denkender Mensch ist glaub ich immer schon mal ne
gute Voraussetzung für ne neue Sprache und was ich gelesen hab
ist ne kleine Anekdote, der wollte eigentlich.
Der wollte eigentlich so mit seinen, also der der, der fand
irgendwie Computing und so weiter auch cool und war von
diesen Webtechnologien ja angefixt und der wollte so was
einfaches Programmieren wie ne progress bar für n Pfeil upload,
so dass man sieht was so los ist.
Ja und hat er relativ lange für gebraucht weil er war mit nichts
zufrieden weil irgendwie war alles nur so ne Art Workaround
und nicht optimal. Ja und das hat der Mellart
damals nicht hergegeben, weil. Ach, mit den Long Pauls und das
weiß ich nicht alles so und jedenfalls ist der Rumgereist
also auch also tatsächlich selber gereist.
Aber auch in den Programmiersprachen hat Huscal
ausprobiert und c was ausprobiert und so weiter und
hat am Ende am Ende Java Script entdeckt und gesagt, OK, das
brauchen wir, aber das brauchen wir quasi als eigene
Programmiersprache für den Server und damit ist quasi der
Grundstein von Noja S gelegt worden.
Und da hat der Mann, der gar nicht so reich war und auch n
ziemlicher Einzelkämpfer, der hat dann losgelegt und dann ja
auf Maler Kante, sag ich mal Note JS gebaut und man hat noch
n Mitstreiter gefunden, der Isaac Schlüter, den muss man
auch noch mal nennen, also den Ryan Dahl als Note JS ja
Erfinder und der Isaac Schlüter, der hat quasi das den Note
Package Manager, das NPM, das kennt man wenn man wenn man da
mal so drinne war. Ja, mit vorangetrieben und dann,
das sag ich jetzt gleich was, das ist nämlich auch, also es
ist eigentlich immer so ne Programmiersprache, die ja die
definiert quasi die Grammatik und wie es funktioniert und so
weiter also wie funktioniert die Sprache und aber jede Sprache
ist eigentlich nur so mächtig wie es ja Abhängigkeiten,
dependency Pakete, externe Tools gibt, die die Sprache quasi
verstärken, ja weil wenn ich jetzt alles noch mal von vorne
machen muss, hab es auch ne tolle Sprache, muss aber
irgendwie PDF rendering und. Ach, was weiß ich, es gibt ja
alles Mögliche, was schon mal gelöst wurde, ja irgendwie
mathematische Formeln rennen dann late ich was weiß ich
alles, dieses ganze Grabens, ja alles was was man so braucht, ja
sockets und so ich das alles noch mal selber machen muss dann
nein da gewinne ich keinen keinen keinen Blumenstrauß ja
und aber dieser Isaak jüt hat sich von vornherein überlegt,
wie machen wir das gut, ja, also wie machen wir dieses Dependency
Management gut und das hat er auch gut gemacht, ich finde das
super cool das dazu sage ich nachher auch noch mal ein
bisschen was, aber das entstand quasi auch 2009 mit gleich mit
No GS. Das war, glaube ich auch gesund,
weil da nichts dran geflanscht war.
Das war von vornherein irgendwie ne ne ne Union, ja und die haben
beiden haben erkannt das das braucht, das braucht es beides
ja ist ne Dichte. Ne dichte Verzahnung.
Danke also ne dichte Verzahnung
von Raketmanagement und Programmiersprache benötigt das,
das haben die beiden sehr früh erkannt, das ist nicht bei
anderen Sprachen ist das nicht so und dann nervt das ziemlich
stark, ja. Das wollte ich dich gerade
fragen. Ja, also klingt jetzt logisch so
im Nachhinein ne. Ich muss gerade denken an
irgendwie das iphone, was auch so stark wurde oder so stark
Verbreitung gefunden hat wegen des Appstores wo Leute Software
quasi bereitstellen können für das Gerät an sich ist nicht
genau das gleiche, aber ist ja n ähnliches Prinzip im Grunde
genommen was auch um die Zeit passiert ist.
Ja mit neuen. Ja, es ist so, wenn das halt
alles aus einer Hand ist, ne, wenn du bei bei iphone kannst du
sagen, dass Hardware und Software aus einer Hand und dann
der App Store und die Apps passt halt gut zusammen und weil hier
ist es bei der bei der Java Script Sprache so, dass halt
package Manager und Sprache halt sehr stark aus einer Hand
kommen, das merkst du bei anderen Programmiersprachen, das
ist halt nicht so und da gibt es vielleicht auch mehrere Pakete
Manager und so weiter und dann dann gibt es die eine Community
entwickelt dagegen die andere dagegen und so und da fängt es
schon an, ja dann ist es halt immer schon ja geht alles ne
aber hier ist es halt besonders schön ne.
Ja, vielleicht hat man sich da inspirieren lassen.
Hab ich gerade so gedacht. Ja, vielleicht so und dann.
Und dann der letzte, der letzte, die letzte, was ich noch erzähle
ist, warum dann no JS so richtig ins Leben gekommen ist.
Ich hab ja gesagt, dass der eine Mann ist und der hat dann
tatsächlich sein letztes Geld zusammengenommen und alles auf
eine Karte gesetzt, dann hätte das No JS Projekt nicht weiter
treiben können, wenn er nicht dann irgendwann mal finanziert
worden wäre, dann ist er tatsächlich der Isa, dann ist er
auf die JS conf.eu, also die JS conf Messe gegangen, Messe
Entwicklerkonferenz gegangen. Und da haben ihn Kollegen von
Joint gesehen, und die haben dann das finanziert, das
Projekt. Dann wurde da auch eingestellt
und dann ging es los und der Isaak Schlüter auch bei Joint
und dann konnten die quasi dieses Nord GS Projekt
vorantreiben. Ne ja so ist es manchmal.
Ja das war so ne One Man Show gut gefunden Übergenommen und
los ja. Der Dahl ist auf die Konferenz
gegangen, ne. Der Dahl sagt der Dahl ja nicht.
Ich sag Schlüter ja, der war vielleicht auch da, aber der
Dahl hat das da vorgetragen, genau.
Genau. Und heute ist er auch wieder auf
der Konferenz unterwegs und macht Deno.
Ja, das ist auch ganz krass der der gleiche, der gleiche Autor,
der damals No GS gemacht hat, hat gesagt er hat n Vortrag
gehalten, was sind die 10 Fauxpas die ich mir geleistet
hatte, No GS und jetzt gibt es übrigens deno, was quasi noch
mal No GS ist in ja in besserer Version ja leicht
unterschiedlich, aber ja deno halt andere Sprache hab ich
selber noch nicht programmiert. Ja, hat der Autor von No JS hat
hat noch mal hingelangt, ja. Aber auch auf javascript
basierend quasi. Nee, das also, das ist quasi n
anderes javascript ne, also Dino gleich javascript basiert.
Es basiert auf gleichen Grundlagen, auf ähnlichen
Grundlagen, zum Beispiel auf der V 8 Engine.
Dazu sag ich auch gleich noch was, aber es ist doch noch mal
anders gemacht. Ja ich denke es ist schon sehr
ähnlich, aber vielleicht sind 10 Aspekten oder sowas mindestens
immer mal stark verbessert, jedenfalls was der Autor so
sagt. Ja ich glaube no JS ist sehr
nutzbar. Das ist wahrscheinlich n High
Level Veränderung. Ja mal mal gucken was in Zukunft
bringst. Du entstehen ja immer wieder
neue Programmiersprachen. Ja, so viel zur Geschichte, ich
glaub das reicht, da bin ich ja auch nicht so sattelfest.
Genau so, dann steigen wir mal kurz n bisschen hatte ich jetzt
mal gedacht von der Struktur her wenn wir jetzt die Geschichte
hatten jetzt steigen wir mal so n bisschen ein, das ist jetzt
natürlich sehr tief so quasi mal so gucken in die Wurzeln, wie
funktioniert überhaupt so ne Programmiersprache und was ist
besonders an No GS? Da gibt es nämlich tatsächlich
so n paar Sachen. Und, und wenn wir das verstanden
haben, dann gehen wir n bisschen höher und gucken uns an, wie
sieht No GS überhaupt aus und wie schreibe ich das hin.
Und das sind da coole Funktionen und so weiter und dann gehen wir
noch n Stück höher und so weiter ne aber einmal würde ich was
dazu sagen, weil das nämlich ich glaube das ist das musste ich
auch erstmal verstehen, da ist No GS sehr speziell in in der
Art wie es intern aufgebaut ist. Und zwar ist es ja so, dass wenn
wir jetzt mal bei javascript noch mal gucken, javascript
läuft ja im Browser, wenn man jetzt über den Browser
nachdenkt, dann habe ich n komplett anderes Konzept.
Wie Softwarearchitektur typischerweise arbeitet.
Also wenn ich jetzt irgendwie gucke, wie ein Skript läuft, was
ich irgendwie im Backend habe, was irgendwie eine Tabelle
ausliest oder wie umformatiert oder irgend sowas, der
Unterschied im Browser sind die Events im Prinzip.
Wenn ich eine Webseite habe und die Rendere, dann ist die da und
da passiert erstmal nichts, also irgendwas wartet darauf, dass
was als nächstes was passiert. Also ich bin schon mal nicht
mehr prozedural in meiner in meinem Ablauf.
Ich fang irgendwo an, ich hab irgendwo n Einstieg und dann
warte ich eigentlich darauf, dass ich von außen irgendwie
geschüttelt werde, ja. Aber es könnte auch sein, dass
irgendwas n Timer versehen ist oder so und anfängt nach 6
Sekunden oder so oder? Genau das stimmt aber sogar n
Timer Gerrit ist ja auch was dann?
Dann? Dann stellst du ne Uhr und dann
passiert n Event ja ich weck dich jetzt oder sowas ne also es
ist immer wieder n Event irgendwie es ist nicht so
vorgeplant ja und das regelt halt also das javascript macht
das im Prinzip als Sprache nicht selbst sondern.
Diese Events, die werden quasi vom Browser zur Verfügung
gestellt und weitergeleitet, aber javascript verarbeitet
diese Events ja und das ist der erste Knackpunkt und und das
finde ich so toll an Note JS dieser dieses dieser Event loop,
also die die Maschine die die Events verarbeitet ist ganz eng
in diese Sprache integriert. Ja also ich kann Note JS
anfangen hinzuschreiben und dann dann dann dann wird der Code
über Events getriggert und ausgeführt.
Ja und das ist auch wenn man. Und das erste Mal javascript
schreibt und so weiter und das noch nicht so gemacht hat, ist
das völlig verwirrend, weil weil der Code gar nicht von oben nach
unten irgendwie ausführt im Notfall, sondern irgendwo ist n
imit und irgendwo hatte ich vorher in einem ganz anderen
Pfeil an ganz anderen Stelle hat irgendjemand gesagt, wenn hier
so n Event kommt, dann reagiere ich darauf ja vielleicht
gleichzeitig in 23 anderen stellen im Code sind noch 2, die
darauf reagieren und so weiter also es ist von vornherein, wenn
man no GS programmiert, das kann man natürlich auch prozedural
prozedural programmieren, aber von vornherein ist das dafür.
Gemacht und aufgebaut, mit Events klarzukommen, ne.
Und jetzt ist es so, wenn es jetzt quasi wenn javascript
javascript ist ja keine kompilierte Sprache, das noch
mal zu sagen. Also wir haben jetzt zum
Beispiel C plus plus das Standardbeispiel für mich als
kompilierte Programmiersprache, da schreibe ich ja hin und dann
kommt es, gibt es einen eigenen Prozess noch zur Bauzeit, wie
man so sagt, ja das das der Anwendung, dann gibt es einen
Tool, nämlich den Compiler den GCC oder Irgendsowas und der
setzt quasi das geschriebene C plus Plus in Maschinencode um
und der wird dann ausgeführt. Und in bei No JS ist das die V 8
Engine. Die kann man sich gut merken.
V 8 das klingt ist auch ein toller Name, finde ich, also
wenn man so ein v 8 Motor gesehen hat, ist ja auch nett,
die V 8 Engine ist quasi der just in Time Javascript
Interpreter hier auch im Chromium Projekt verbaut ist und
halt im Chrome Browser zum Beispiel auch zum Einsatz kommt,
also die gleiche Engine die quasi im im Chrome Browser auch
das javascript umsetzt. Läuft tatsächlich auch im
Backend, also am Server mit und und setzt quasi das No TS um,
was syntaktisch auch ganz ähnlich wie ja was gibt es?
Immer zu dem Zeitpunkt dann jeweils, wenn es ausgeführt wird
oder aufgerufen wird, durch n Event zum Beispiel oder so ja.
Nee, tatsächlich geht das auch. Ja, das ist glaub ich relativ
komplex, wie das genau funktioniert, also das, das geht
schon auch von oben nach unten, frühstückt das ab, aber es ist
nen man nennt es just in Time Compilation, da passiert auch
Optimierung und Caching und so weiter.
Und das ist hab ich ja vorher gesagt, haben sich ja vorher
schon die, die im Browserkrieg die Hersteller irgendwie
gebettelt. Wer das am besten kann, ich
glaube, das ist ja, das ist schwere, große Kunst, die diese
diese javascript interpreter zu machen, aber Open Source Code
von Google zur Verfügung gestellt kann man lesen, ja da
steckt sehr viel Know How drin, ne also da steigt auch gerade
mein Horizont aber es ist ne Mischung aus Kompilieren just in
Time und so weiter ja es wird aber jedenfalls nicht vorher
komplett in Maschinencode umgesetzt, sondern zu Laufzeit
ja OK. Genau.
Und das das arbeitet zusammen und braucht nen sogenannten
Event Loop und das muss man auch noch mal dazu sagen.
Also die v 8 Engine macht im im Prinzip die Übersetzung vom
javascript in in das was wir CPU und so weiter dass sie das
können und dann brauchen wir noch den Event Loop, der
tatsächlich quasi die Events weiterleitet.
Das sind jetzt nicht nur Events so so Hallo hier bin ich und
dann ja hab ich dich gehört, sondern wenn ich jetzt event
loop sage mach ich jetzt auch noch mal was ganz Wichtiges in
No GS und das ist n. Ja, hier haben Sie was gelöst
von vornherein, was ganz viele andere Programmiersprachen von
vornherein im Design nicht haben, wo man dann ganz anders
programmieren und denken muss, das ist was mit den Schwads zu
tun. Ja, also immer wenn wir im Web
sind, dann haben wir im Notfall ja Gleichzeitigkeit am Start
sind diese Events, von denen ich spreche, wenn wir jetzt mal
darüber nachdenken, dass die Events zum Beispiel ausgelöst
werden von 1000 Usern, die gleichzeitig n Knopf drücken,
dann kommen ja sehr viele Events im Notfall ziemlich gleichzeitig
an, ja. So und Gleichzeitigkeit zu
verhandeln im im, im, in der Programmiersprache, das braucht
halt das, das ist nicht so einfach.
Ja und früher hat man das immer über Chats gemacht und man kann
tatsächlich gleichzeitig Sachen laufen lassen in einem Code und
dann muss ich aber Hölle aufpassen, dass ich nicht
gleichzeitig zum Beispiel file IO mache, also wenn ich zum
Beispiel jetzt Beispiel ganz larifari irgendwie kriegt, 1000
1000 knöpfklicks, aber die, die sollen quasi ein ein und
dasselbe File updaten oder in der gleichen Datenbank irgendwas
updaten. Und ich mach das tatsächlich
gleichzeitig. Dann hab ich n Riesenproblem,
dann hab ich korrupte Daten und so weiter und ich muss dann als
Entwickler, wenn ich dann das so mache mit Threads und so weiter
muss ich unglaublich aufpassen mit Locking und so und hab da
riesige Probleme, das ist in Note erst von vornherein
aussortiert, in der Sprache schon auf dem niedrigsten Level
weil und und das ist das, das ist da gibt es viele Artikel,
viele Leute haben das immer noch nicht verstanden wie es genau
funktioniert, ist eigentlich gar nicht so schwer alles.
Alles, was möglicherweise Zeit dauert, weswegen man quasi
parallel arbeiten wollte, nämlich zum Beispiel File
schreiben, file lesen, Netzwerkaktivität.
Ja, es gibt so blocking IO operations, sag ich mal.
Ja, die werden quasi alle Nebenläufig gemacht, aber das
macht schon den No TS selber in dem Event loop ja ich trigger
das nur an, ich sag quasi nur in no TS ich möchte jetzt ein File
schreiben, leg los, ja und jetzt wartet aber nicht die
Programmiersprache bis das file fertig ist und dann kann ich
überhaupt das nächste Verarbeiten.
Sondern ich sag leg los und dann sag ich, ruf mich quasi zurück,
gib mir callback. Das Wort Callback ist ganz
wichtig, ist Callback implementiert.
Wenn du damit fertig bist, ja und dann geh ich an dieser
Stelle weiter und übernehme den Programmfluss ja, während aber
das file geschrieben wird, kann ich wirklich alles mögliche
andere machen. Ja dann kann ich nämlich zum
Beispiel den nächsten, übernächsten und den dritten
Request schon entgegennehmen. Ja dann bleibt bleibt meine
Anwendung nicht stehen, die bleibt responsiv ja also das
Node GS arbeitet. Und aber gleichzeitig führt das
alles im Single Thread auf. Aus ja, aber du?
Kannst es nicht machen. Wenn jetzt dein deine erste.
Also wenn jetzt deine zweite Operation abhängig wäre von
einer ersten, dann musst du es halt einfach so programmieren,
dass es erst nach dem Callback Weiterginge.
Zum Beispiel ganz genau. Ja, da würdest du genau so macht
man das und dann würde man quasi ne Event chain, eine callback
Chain aufbauen. Es war auch am Anfang n Problem,
dann würdest du sagen wenn jetzt n zweites Event ist das warten
muss bis das erste fertig ist, dann würdest du quasi sagen wenn
du das zurückkommt. Ne, das baut man tatsächlich so
auf mit so einem Zen ja oder einem Callback on und so weiter
dann schreibst du quasi den nächsten Block in einen Händler
rein, ne ganz am Anfang sah es auch mal furchtbar aus, weil
dann kriegst du so ganz viele verschachtelte Klammern.
Ja du sagst halt, mach mal das und wenn das fertig ist mach mal
das und wenn das fertig ist mach mal das.
Also wenn du dann so 4567 aufeinander aufbauende aber
asynchrone Events hast, dann hast du so nen so ne man nennt
das auch callback hell ja das ist ja die die callback Hölle
ja. Weil das ist auch sehr schwer zu
lesen. Das macht es auch, das Macht es
auch nicht gerade einfach beim Programmieren und dann kannst du
auch schnell dir mal n paar Fehler ein einheimsen, ne?
OK, ja, die gibt es so nicht mehr.
Die Callback hell, weil das jetzt so n bisschen anders
dargestellt wird gustas. Richtig, wir nehmen, wir nehmen
das Mal vorweg an der Stelle, weil jetzt sind wir da gerade
tief drin. Das Schwierige ist das, das muss
man jetzt auch noch mal sagen, ganz grundsätzlich, das
Schwierige ist ja wenn ich jetzt nen wenn ich jetzt sage pass mal
auf schreib mal das file, lass mich jetzt in Ruhe, ich mach
jetzt was anderes, springe irgendwo andersrum im Code,
mache andere Sachen. Und dann irgendwann kommt
dieses, kommt diese Nachricht zurück, so hab das file fertig
geschrieben. Was willst denn jetzt?
Ja dann, dann hatten wir das früher halt in so einem Callback
gemacht und das Problem mit dem Callback ist du musst dann, du
musst ja quasi deine Variablen und so weiter wenn du
programmierst, dann hast du ja auch was um dich rum.
Ja du bist ja in einem Kontext, ja du musst den Kontext switchen
quasi ja eben Grad warst du noch und hast irgendwie nen hast du
Server irgendwie nen Aufruf vom Client entgegengenommen und
jetzt sagt dir auf einmal dein Programm Ah übrigens das File
ist fertig geschrieben so jetzt springst du in ne ganz andere
Welt. Jetzt musst du da aber die
ganzen Variablen und so weiter wieder haben, die du damals
brauchtest als du weggesprungen bist.
Ne bist du. Du kannst dir fast vorstellen
wie Räume irgendwie ne du bist in dem einen Raum sagst so Pass
auf, ich Feuer an so jetzt laufe ich irgendwie rüber, mach ganz
was anderes und dann drüben pfeift der Kessel ja Tee ist
fertig, jetzt musst du in den Raum zurück musst du überlegen,
was wolltest du eigentlich machen ja ah den Tee irgendwie
in in ins Glas schütten und so weiter dann brauchst du jetzt
wieder dein Glas und alles um dich rum das sind die das sind
die Variablen die du brauchst, ja.
Das war halt früher sehr aufwendig mit diesen Callbacks
zu machen. Und jetzt gibt es das Async
Away, was heißt jetzt, das gibt es auch schon ne ganze Weile,
ich hab es mir glaub ich auf meinen Spicker geschrieben, ich
muss gucken mit ES 6 ist es gekommen jetzt müsst ich fragen
wann ist ES 6 rausgekommen weiß ich nicht hab ich grad nicht auf
den Zettel, können wir vielleicht noch mal googeln aber
jetzt kannst du zum Beispiel sagen also du sagst zum Beispiel
Async an die Funktion dran, das heißt so viel wie.
Kann sein, dass ich hier mal wegspringe ja und komme wieder
das das das das passiert jetzt mal hier da da da weiß auch
schon jeder der das liest. OK hier sind hier sind Sachen,
hier sind irgendwelche asynchronen Sachen am Start.
Ja und jetzt sagst du nur noch away Right file und musst aber
nicht mehr irgendwie irgendwelche Klammern aufmachen
wenn dann und so weiter du schreibst einfach dann
untereinander und das Away das sieht so einfach du sagst
einfach nur away alles was halt irgendwie wartet da schreibst du
halt away vor. Und wenn das fertig ist, also
wenn da, wenn eigentlich das System sagt, ja hab ich
geschrieben das file dann springt.
Das ist echt krass, dann springt quasi der Code von alleine an
diese Stelle an dieses Away und macht in der nächsten Zeile
weiter, musst aber nicht irgendwelche komischen Punkt on
und irgendwelche Klammern machen und dir da selber dort es es
ist. Du bist einfach dann da, das
heißt wenn du während du programmierst bleibst du beim
Teekochen in dem Raum, du schreibst alles hin away macht
das, Away macht das. Und du hast alles um dich rum
und musst dich um nichts kümmern.
Note CS löst es für dich, dass alle Variablen und alles wieder
richtig da ist, obwohl in echt was passiert ist?
Du warst zwischendurch gar nicht in dem Code, es sieht so aus,
als würdest du das der Reihenfolge nachmachen, so
schreibst du es hin. Sieht so aus als würdest du die
ich Koch den Tee schüttchen ein und so weiter Aktion alles in
einem durchziehen tust du aber gar nicht, zwischendurch warst
du irgendwo weg ja aber es braucht dich nicht mehr
interessieren als Entwickler, das ist absolute Magic.
Du meinst denn zur Laufzeit warst du irgendwo weg?
Quasi ne ja genau ne OK, ja. Und und gleichzeitig ist es aber
auch so, dass die Sachen schon alle nacheinander passieren.
Das ist auch noch so querky ja, also wir haben eine Single
Thread, wenn wir ausführen, das ist wichtig, also es gibt nur
eine, es passiert tatsächlich nicht echt was gleichzeitig,
sondern es wird nur so hart ineinander geschachtelt, dass es
sich wie gleichzeitig anfühlt, das ist halt.
Das muss man einmal verstehen bei dieser Programmiersprache,
das ist, das habe ich vorher so auch noch nie gesehen.
Also Python hat das auch, war mit einer extra Bibliothek, da
muss ich das mal kurz vorstellen, dann kann ich
nämlich alles, was ein bisschen länger dauert, entkoppel ich
schmeiß ich weg mit einem Wait und alles was schnell ist, das
da springe ich einfach andauernd durch den Code hin und her, wie
ich es gerade brauche, das heißt ich kann den einen CPU den ich
hab der da auch drauf brennt voll auslasten wird ultraschnell
ja obwohl ich nur einen Thread hab in meinem Prozess ja.
Das ist richtig cool. Ja, das das habe ich so noch in
keiner anderen Sprache gesehen und deswegen sagt man auch, ist
noji er ist so super geeignet für so High Availability und und
für so massive Webapplikationen, weil ich halt, weil ich halt den
Code, den ich schreibe, einfach weil ich es so Hinschreibe ist,
der optimiert sich von alleine und macht dann alles mögliche
fast gleichzeitig schon hintereinander, aber so gut
verschachtelt, dass ich alles voll auslasten kann wollen.
Wir jetzt mehrere CPUS hätte. Braucht es denn einfach gar
nicht oder macht es nicht besser?
Macht es nicht besser, wenn du jetzt n eigenen wenn du nen Note
JS Prozess hast. Ja der läuft auf dem Singles
Fett, aber jetzt sag ich noch was neues und was Spannendes.
Das ist ja halt nen Liebespärchen, sind ja
Microservices Note GS ja hier kommt hier trifft sich hier
treffen sich 2 Konzepte die wie gemacht sind füreinander dann
ich also ganz viele meiner Docker Container sehen so aus,
ich starte da halt nen Note Index Punkt JS meistens das
Index JS ist quasi das Haupteintrittspfeil.
Und dann läuft und man und die Best Practice vom vom Docker
heißt Mach einen Prozess in einem Container.
Nicht viele, also ein Prozess, ein Noteprozess läuft im
Dockercontainer so, und wenn ich jetzt viele brauche, nehm ich
halt ganz viele Microservices hin, ne und das skaliert das
alles ganz wunderbar und ich hab endlich als Programmierer hab
ganz viel Scheiß von mir abgestriffen weil ich nicht mehr
mich mit diesem ganzen Threading und so weiter bemühen muss,
dadurch krieg ich ja nen nen nen unglaublich responsive
unglaublich schnelle App hin. Ohne ohne dass ich extrem krass
mit mit mit Logs und so, weil ich kenne beide Welten.
Ja, ich hab mal t plus plus programmiert, da gab es No GS
noch nicht und da haben wir auch Web und nicht, also nicht Web,
aber netzwerktechnologie mit mit vielen gleichzeitigen Sachen, da
muss man Threads nehmen und dann schreibst du quasi alles in
einem Ding das das hat dann was davon wenn du 8 CPUS hast weil
die laufen dann tatsächlich gleichzeitig, aber dann musst du
in deinem Code. Dann passiert das auch, dass das
springt, aber das kann tatsächlich gleichzeitig
gleichzeitig laufen, wirklich gleichzeitig ne das das springt
nicht hin und kommt wieder zurück, sondern die da donnern 2
Züge übers Gleis gleichzeitig ja und wenn du da nicht aufpassen
machst die Weichen nicht an die richtige Stelle dann und das
kriegst du vor allen Dingen nie raus, weil weil
gleichzeitigkeiten und so weiter auch gerade wenn wir über Fans
sprechen, Gerrit, du weißt ja nicht wann die klicken, ne.
Und du, und es passiert ja immer nur dann dann wirklich, was
gleichzeitig passiert. Das kannst du also ganz schlecht
nachstellen. Reproduzierbarkeit ist das
Problem, ja, das sind so Bugs das das Schlimmste ist ja wenn
du im Entwickler sagst ja da ist kaputt, es geht nicht, stürzt
manchmal ab, manchmal geht es n bisschen länger und manchmal
stürzt es ab, ja dann sitzt du da und du kannst ja überhaupt
erst mal was nur versuchen zu heilen wenn du es einmal selber
gesehen hast. Ja versuch mal sowas dann zu
sehen, ne? Das ist ganz furchtbar und da
sind große Systeme dran gescheitert, weil weil am Ende
dieses Matti Threading nicht mehr in den Griff bekommen
wurde. Das hat No JS mit der
Entstehung, mit der mit der Philosophie gleich mal
weggebügelt, aber das Problem gibt es nicht.
Das war wahrscheinlich auch n Hintergedanke davon nämlich.
Ganz genau. Das war nämlich die Phase, wo wo
genau, wo ich gesagt Hab, am Anfang ist der Ryan Dahl
rumgelaufen, dann alles Mögliche explodiert n huskill und so
weiter genau diese Sachen hat er sich angeguckt und ich glaube
das war sein. Ja, die Spitze von dem, was er
sich so als Mathematiker ausgedacht hat, was es früher
braucht, hat er nicht ganz schlecht gemacht, würde ich
sagen. Ich hab noch gesehen, weil du,
weil du es gerade gesagt hast, Anwendungsfälle, Microservices.
Also es wäre besonders gut für Themen wie ja
echtzeitanwendungen auch gedacht oder sowas wie websockets oder
so Apis damit zu programmieren und weniger gut für
rechenintensive Prozesse. Sowas wie Machine Learning oder
sowas, gerade wegen Ding Single Thread.
Ja, genau so. Ja, das kann man so sagen, das
ist so, ja, also es genau je nach.
Also wenn du jetzt zum Beispiel, ich sag mal was KI ja, und das
sind ja so matrixoperationen, die kann, da kann ich quasi so
ne durchrechnung, kann ich halt stark parallelisieren, da hab
ich ne riesige Matrizen, die teile ich auf in in in in Teile
und dann können die gleichzeitig rechnen und kommen zum Ergebnis
und dann hab ich ganz viel davon wenn ich das halt 25 mit 25 Kern
gleich deswegen mach ich das auf Grafikkarten, das wird meistens.
Mit 16017 1000 Threads gleichzeitig durchgezogen und
dann sind die fertig. Dann kommen die zum Ergebnis.
Ja das ist wäre genau der, das wäre genau die kontra
Eigenschaft von No GS macht das Macht no GS nicht, also es gibt
mittlerweile wenn du weißt was du tust, da kannst du auch
Threads aufmachen in No GS und dann Multi Thread arbeiten, das
heißt mittlerweile ist es sogar so, dass No GS genauso wie
Python auch für für Number Counching genommen werden kann
würde ich sagen, das ist aber aus der ich sag mal so aus der
aus der Denkweise der Sprache ist es eher optimiert für.
Für das, was du gesagt hast, Gerrit, also für für
Echtzeitanwendung, für reaktive Sachen und so weiter für fast IO
und so und nicht so stark wie Python.
Aber auch das würde ich sagen, die Sprache ist mächtig genug,
sogar um das alles abzufräsen. Gut und jetzt noch mal noch was
kurz unter den Deckel geguckt, das will ich auch noch mal
sagen, die den Note JS ist zwar eine Programmiersprache, aber
eigentlich basiert die auf C plus plus C Plus ist auch eine
Programmiersprache die eine der Ältesten.
Und im Prinzip ist, wenn man jetzt ganz krass ist, könnte man
sagen, Noja ist ein cooles Framework auf C plus plus, weil
sowohl die V 8 Engine ist in C plus plus geschrieben, und zwar
so richtig pures, krasses C plus Plus und deswegen läuft auch die
V 8 Engine auf Browsern auf allen Betriebssystemen im
Android und im und im Linux und dem Windows und so weiter und
auch der Event Loop der Lib UV ist auch in C plus plus
geschrieben und Noja selber die, die die ganzen Sachen sind auch
in C plus plus geschrieben, das heißt?
Also man hat, man kann, man kann viel einfacher was bedienen,
aber drunter ist es sehr schnelles C plus Plus und damit
wird es auch und weil C plus plus an sich die Eigenschaft
hat, dass es plattformunabhängig ist, weil Hardware nah läuft
halt Node js auf Windows auf Mac OS auf Linux und so weiter was
ist halt auch was glaube ich auch zu der Popularität
beiträgt, denn das ist auch nicht Standard, dass eine
Programmiersprache auf allen Betriebssystemen da ist.
Ja also wir haben jaunsere.net Kollegen von Windows.
C. Sharp und so weiter das geht
zwar langsam auch, aber das da brauchst du nicht so groß
anfangen mit Linux, ja. Aber ist das nicht sowieso
hinfällig, wenn du es im Microservice benutzt oder ist
das da auch noch relevant? Also im Docker jetzt oder so?
Na ja, im Ja. Der Docker, der, der ist ja
keine virtuelle Maschine, der kann dir kein Windows
simulieren, ne, das ist also hilft es dir, hilft dir nicht,
du kannst jetzt nicht einfach CC Sharp in den Docker packen und
dann den Linux ausführen, das geht schon nicht, ja.
Ah OK, ist es OK. Du brauchst also schon.
Bei C Sharp bräuchtest du n Windows unterm Docker, um es im
Docker auszuführen, während es beim No JS eigentlich egal ist,
was dann quasi wo der Docker was drauf läuft, dann ja.
Also C Sharp will halt, er will halt Windows um sich rum sehen,
sag ich mal und und kennt die Windows registrieren solche
Eigenschaften die es gar nicht gibt, den anderen.
Aber da muss man auch aufpassen das.net Core und so weiter die
entwickeln sich auch weg davon das das das dürfen wir gar nicht
ist nicht richtig wenn wir jetzt sagen das funktioniert nicht
unter Linux mittlerweile. Sind die haben, die sind ja auch
angekommen und du kannst es in großen Teilen unter Linux
verwenden. Ja, aber das war erstmal nicht
die erste Priorität sag ich mal. Windows hat halt das.net
Framework gemacht für Windows und Microsoft Hemisphäre.
Ja und das jetzt wird der Druck so groß, dass man das halt sich
sich hinbewegt sag ich mal während Note GS von vornherein
drauf angelegt war halt überall cool zu laufen ne ja das ist
alles nicht so riesig, ja das ist diese lib UV ich hab also
ich hab sowohl die v 8 Engine in teilen gelesen in den Source
Code und auch auch die Lib UV das ist gar nicht.
Das ist gar nicht so viel. Krass ist also, das ist gar
nicht so viel Code, ja, ist einfach nur sehr gut
geschrieben, ne. Das heißt, alle, die jetzt noch
no JS vorantreiben und entwickeln und und Main Tain und
so weiter sind einfach auch sehr gute C plus plus Entwickler.
Ja, die, die die Sprache weiterbringen, die müssen C plus
plus können. Ja genau ja jeden Fall, das würd
ich schon sagen, jedenfalls wenn du, wenn du wenn du tief unten
noch was machen willst, ja und in so browserentwickler und so
Google, da gibt es Leute, die wissen ganz genau was man C plus
machen muss. Ja, das ist.
Sonst kriegt man den Speed nicht hin.
Also es ist immer noch so heutzutage, das ist auch wahr
für alles andere und auch ist. In Python ist das so, ja in
Python die Komponenten die schnell sein müssen, das ist in
C oder C plus plus geschrieben, es ist einfach so, dass
heutzutage die schnellsten, also wenn ich wenn ich richtig
hochperformante Algorithmen machen will, dann schreib ich es
halt in C oder C plus plus hin, was anderes gibt es eigentlich
nicht, ja und dann da drüber werden halt Sprachen entwickelt,
die es halt den Entwicklern zugänglicher machen, weil in C
und C plus Plus zu schreiben ist halt NN harter Tobak, ja.
Aber das coole ist auch, und das hab ich mal länglich gemacht,
ich mich mal bestimmt n Jahr damit beschäftigt und da Note JS
im Prinzip in C plus plus geschrieben ist, kannst du auch
wunderbar Note JS und C plus Plus zusammenbringen.
Ja, also existierenden C plus plus Code über Note JS
aufzurufen da einzubinden und so weiter wenn man da mal tief
reingeguckt hat ist gar nicht so kompliziert, ja dann muss man
kurz mit diesen Threads und dem Event Loop einmal kurz
klarkommen im Kopf wie man das Zusammenkabelt und dann geht das
ja das mal für alle gesagt die. Die und wir hatten neulich mal n
Podcast, da hatten wir Legacy C plus plus Anwendung und so.
Wenn ich meinen ganz alten Kram der Millionenzahlen C plus Plus
hat, irgendwie porten will, da kann man mal drüber nachdenken,
da no GS dran zu flanschen und dann einfach den Kram zugänglich
machen über ne neue Sprache. Ja und den ganzen alten Kram
dazulassen, das ist gar nicht so kompliziert, ja das geht schon.
Ja, das kommt mir auch bekannt vor, als hätten wir da schon mal
drüber. Gesprochen haben wir glaub ich
schon mal. OK, das sind also.
Die Besonderheiten Single Thread und geschrieben in C plus plus
ja, unter der Haube hast du gesagt.
Ja, Single Thread ist die Besonderheit und das Eventing
mit von vornherein eingedacht ja die V 8 Engine, die ist
interpretiert just in Time, die die gleiche Engine ist wie im
Browser, was es auch cool macht, wenn ich nicht hier Webanwendung
aus einer Hand machen will, dann weiß ich schon genau das
funktioniert alles gut zusammen, als Entwickler ist das super
cool wenn ich full Stack bin, also wenn ich frontend also im
Browsercode schreibe und im Backend.
Fühlt sich ja alles gleich an. Ja, super cool.
Jetzt sag noch mal ganz kurz, vielleicht hab ich es verpasst.
Aber was ist denn jetzt eigentlich der große Unterschied
zwischen Java Script und No JS? Also außer das eine ist für n
Browser, das andere für n Server oder für für das Back End
versteh ich schon, aber inwiefern sich das denn jetzt
anders aus also gibt es ne andere Funktion, neue Funktion,
weitere weniger oder es ist ne ganz andere Sprache.
Nee, überhaupt nicht. Es ist die gleiche Sprache, also
es ist im Prinzip, also wenn du Java Script kannst, dann kannst
du no JS programmieren. Das heißt eigentlich nur no JS,
weil du, weil du javascript pur funktioniert einfach nicht.
Du brauchst irgendwas was das ausführt, die
Ausführungsumgebung ja, also der Unterschied zwischen javascript
ist, dass die Ausführungsumgebung der Browser
ist und im Prinzip ist No JS auch javascript mit
ausführungsumgebung, lokale V 8 Engine und Lip UV Loop, der
sowas so ne Art Browser simuliert, wenn du so möchtest.
Ja wir brauchen den ganzen Browser nicht weil wir nichts
rendern wollen, wir wollen ja nur rechnen auf dem Backend so
ja und im Prinzip ist aber die. Wie soll ich sagen, die also
wenn du jetzt sagst Englisch, französisch oder oder Deutsch
oder irgend so was, dann ist halt und wir sagen jetzt von
javascript ist Englisch, dann sprichst du Englisch im Browser
und du sprichst auch Englisch im Backend.
Du hast halt nur du hast halt nur jemand anders um dich rum
sag ich mal der dich aufnimmt ja da gibt es nur da gibt es nur
feine Unterschiede, das gibt ein paar kleine Unterschiede auch in
der Sprache, aber die sind minimal, dass du sofort klar.
Größter Unterschied ist, da können wir auch weitermachen.
Ist ist wie die Module, also wie die Abhängigkeiten geladen
werden, und das ist auch gerade n großes Ärgernis, muss ich
sagen. Also für mich jedenfalls, denn
wenn du im im im, wenn du also entweder eigene Module die du
schreibst, ne du kannst, du schreibst ja nicht den Code in
einem riesigen File runter, das machen wir ja nicht mehr, wir
schreiben wir, wir separieren ja unsere Codes Stücke in Files.
Und auch andere, wenn die irgendwie was geschrieben haben,
was du dann reinlädst, das holst du dann über so ein Pakete
Manager rein, aber das sind auch ein Files und dann sagst du halt
quasi ganz am Anfang von deinem File, wenn du Code schreibst,
dann sagst du und das sagst du im Browser Import irgendwas ja
import this from that zum Beispiel ja also importier mir
mal die klasse irgendwas von und dann sagst du welches file das
ist ja so und das ist das Moduloading wenn man so schön
sagt ja also das einladen von existierenden anderen Modulen
die irgendwo rumkleben ja. Es funktioniert über dieses
Import from und kann asynchron auch sein.
Hatte ich ganz am Anfang hatte ich gesagt, schon wir können ja
asynchron File lesen und schreiben und im Java Script das
standardisiert ist über dieses Ecma, über diesen ecma Standard
im Browser ist es so, dass halt auch das Laden sogar innerhalb
der Sprache, also das weiter Reinladen von weiteren Source
Code für den Java Script Code selbst ist halt auch asynchron,
ja kannst du auch awaten so. Das hat halt jetzt im Detail
viele Vorteile und aber leider jetzt muss man gucken, war no JS
das damals nicht so angelegt und das nennt man CJS Common Java
Script CJS und da hat man hingeschrieben von der Syntax
her constant this ist gleich require that ganz oben und das
ist n kleiner feiner Unterschied.
Ja, aber das am Ende tut es am am Ende das gleiche, ich will
halt einfach dieses blöde Pfeil da haben und dann arbeiten mit
dem Krams der da drinne ist. Ja in meinem Modul.
Aber entweder schreibe ich halt this la gleich require that oder
ich schreibe halt import la from irgendwas.
Ja, das Require ist leider synchron und das Import ist
leider asynchron, das Import ist irgendwie egma Standard und das
Require kam irgendwie von LTS Altlast und das ist aber ein
Riesenproblem, weil die mögen sich beide nicht, du kannst es
nicht mischen in einem Projekt und jetzt gibt es so eine
Umbruchphase, dass immer mehr Abhängigkeiten dependencies, die
du mit dem npm Pakete Manager runterladen kannst.
Das funktionierte, bis soll ich mal sagen, vor 2 Jahren musst du
das alles mit Require laden im Node js safe und cool und alles
das gleiche und jetzt gibt es die ersten Pakete die modernen
jetzt hier auch gerade hier KI und so da geht es einfach nicht
mehr, da musst du mit dem Import umhühnern aber wenn du jetzt
meinst du könntest eine Node Anwendung schreiben wo du das
einfach Bild durch die Gegend mischst, da kannst du dir in die
Haare schmieren funktioniert nicht ja also das ist natürlich
ein großes Problem ne? Und es wird vom jeweiligen Paket
vorgegeben, wie es zu importieren ist.
Oder? Ja, und die ganzen, also cool
die coolen Pakete, da kannst du, da kannst du, da geht dann
beides, ist beides unterstützt, aber dann gibt es halt so Leute
die sagen, OK, hab ich keine Lust drauf, ich unterstütze halt
nur noch das modernere und das ist das Eckma Script Style, also
das ESM mit dem Import, das ist aber für No JR schon mal
ziemlich modern. Ja und es gibt natürlich, Oh, es
gibt halt einfach so viel Abhängigkeiten, Gerrit, Du hast
ja gerne mal irgendwie. Nicht immer so 600 800 Dinger da
drinne, ist ja keine Wenigkeit, gerade wenn du im Web bist.
Ja und die sind halt nicht alle schon alle ob das ist halt, das
ist halt so am langsam am Rüberschwimmen ja ist auch noch
gar nicht in der Community so klar, ob das wirklich sich dahin
durchsetzt oder nicht, also das ist so ne ganz furchtbare
Zwischenphase, die wir da gerade erleiden, ne und das macht es ja
wenn wenn du n sehr großes Softwareprojekt hast, so wie wir
das jetzt haben, ist das unglaublich schwierig, ja da
damit klarzukommen, ja da muss man muss man sagen, ja die
können wir dann nicht oder wir nehmen nur die oder irgendsowas
ja. Ich wollt Grad sagen, ist ja n
Ausschlusskriterium für manche erstmal.
Ja, oder es gibt dann wieder doch coole Sachen, das sag ich
jetzt mal hier auf der Tonspur, damit arbeiten wir auch, das
muss man, da muss ja jeder mal experimentieren, es gibt die
Firma Worstel oder werstel, ich weiß immer nicht, wie es
ausgesprochen wird, ich wollt es mir vorher noch mal angucken,
aber VERCEL die find ich sowieso cool, was die irgendwie mal.
Also ich, ich kenn ja die Firma also von innen nicht, aber ich
ich seh nur mal was da für Produkte rauskommen als Open
Source kram und so das ist der Wahnsinn, davon gibt es das Tool
NCC und PKG. Und der NCC, das ist ne Art nimm
hin den ganzen Javascript frei den ich hab und der baut dir das
in ein großes File, also das das Ganze brauchen wenn du irgendwie
weiter das weiterverarbeiten willst.
Ja und was du damit machen kannst Krasserweise ist das
machen wir auch, da kannst du quasi beliebig große javascript
Dinger die tatsächlich aber auch diese CJSISM Sachen mischen, das
räumt das quasi alles ab, baut dir ein riesiges.
Funktionierendes, standardisiertes Java Script
file was du dann mit PKG kompilieren kannst.
Krasserweise in der Punkt exe oder in der Linux Executable
alle Abhängigkeiten reingebandelt da drin.
Du brauchst also nicht gar keine No GS Sprache mehr auf
installieren, es funktioniert einfach in sich selbst.
Das ist eine in sich selbst lauffähige Executable dann und
du hast Zugriff auf Java Script und auf die ganzen Pakete im mpm
Manager, da kannst du, da kannst du ganz mächtige Sachen machen
und der Footprint ist 50 bis 60 Megabyte wird zunächst secutable
groß, ja weil weil du weil da alles reingepackt ist, Lip UVVA
und so weiter das ist alles Thin Capculated da das sind jetzt so
entwicklertools, würde man wahrscheinlich sagen ne das sind
keine Abhängigkeiten so Pakete die reingehen sondern die dir
helfen. Tatsächlich kommt das auch als
Paket rein, du würdest auch sagen NPM in Stall versell, NNCC
und so weiter genau, aber dann dann baut das natürlich mit
deinem Code noch mal andere Sachen ne es genau es hat n
bisschen andere Qualität, aber es wird auch so geladen ja genau
OK. Hast du viele Pakete?
Es gibt im Mpm nee. Aber bestimmt ziemlich.
Viele. Ich hab zweieinhalb Millionen
gefunden und jeden Monat 50 Milliarden Downloads.
Ja, 50 Milliarden Downloads lass mal reinziehen.
Ja, es gibt ja auch einzelne Pakete, die haben jede Woche, es
gibt ja meistens wird das wöchentlich angezeigt, wie sind
deine Download Dinger, das ist unglaublich, ja dazu muss man
aber auch sagen das das wird ja nicht behandelt also klar wenn
du jetzt anfängst zu programmieren und sagst du halt.
Erstmal machst du dann dein Ding fertig und sagst NPM install was
weiß ich irgendein Paket ja react ja so, das machst du
natürlich einmal. Aber jetzt ist jetzt so muss man
auch mal, muss man auch mal wissen, dass wenn du jetzt so ne
CICD hast, das ist ne Pipeline, du hast ja in deinem Repository
wo du den Code aufhebst, da hebst du ja nicht die
Dependencies von den anderen mit auf, sonst würden wir ja die
Daten kopieren wie für die Wahnsinnigen, also dieses Ganze,
die ganzen Pakete werden quasi nur.
Tatsächlich mit dem NPM Install ja werden die quasi dann erstmal
reingeladen und dann wird das Ganze ausgeführt, dann klappt
das auch. Ja, aber das was du aufheben
musst ist eigentlich nur dein ist nur dein Quellcode und das
heißt die ganzen CICD Pipelines, die holen sich dann dann die
neue Version deines Quellcodes ab und machen dann das NPM
install ja und möglicherweise auf ganz vielen Servern
gleichzeitig und andauernd ja und bei jedem Commit und so
deswegen. Also da sind das sind nicht nur
human Beatings, die da runterladen, sondern auch ganz
viele Bots und so weiter. Das ist schon klar, sonst kannst
du ja gar nicht auf 50 Milliarden kommen im Monat.
So, das ist ja schon krass. Ja, genau deswegen kommen da
auch so krasse Zahlen, aber man sieht ziemlich gut an den auch
an der Downloadfrequenz bestimmter Pakete wie, na ja,
wie stark die Halt eingesetzt werden.
Ja, manchmal gibt es so ganz kleine Dinger, die überall
drinne sind, ja als als als Dependency, ja das ist ja auch
ganz Spaß. Ist transparent dann an der
Stelle, ja. Ja.
Dazu auch mal was gesagt, da kann ich ja mal ne Angst vor
wegnehmen. Das sind ganz viele, also wenn
man so ich kam ja auch mal aus C plus plus, da ist das nicht
typisch, dass man mit so vielen Abhängigkeiten arbeitet, da hast
du mal 1234 ausgewählte Dinger, die hast du genau angeguckt, so
in wenn du C oder C plus plus bist oder vielleicht auch Java,
da machst du noch viel mehr, selbst die Philosophie noja ist
ne ganz andere, du machst möglichst fast nichts mehr
selbst, sondern du also das erste wenn du n Problem hast,
dann guckst du. Hat das jemand schon gemacht?
Ja NBM. So und wenn, dann wenn da
ordentliche Downloadzahlen sind und dann kannst du ja in den
Code reingucken, wenn du meinst, das ist cool, da sagst halt NBM
in Store das Dingel daher und fertig, ja dann dann nutzt du
das einfach mit, weil das hab ich ja ganz am Anfang gesagt von
der Folge das passt. Das funktioniert auch, du musst
nicht lange überlegen, ja das ist dokumentiert, das
funktioniert immer gleich, das ist cool und dann, und das muss
ich auch sagen, es funktioniert hervorragend in dem ganzen
Ökosystem und haben natürlich die Leute, die für dich ne
Abhängigkeit entwickelt haben, die machen natürlich auch weiter
an ihrem Code. Jetzt kriegst du ja dieses ganze
Problem mit Version Management. Jetzt hast du 2000
Abhängigkeiten wo im Schnitt jeden Tag irgendwo gibt es
irgendwo n Update und wenn du jetzt aber selber n stabiles
Produkt rausbringen willst und wenn ich dir jetzt sage wenn ich
hab ich ja gerade gesagt, wenn das beim Bauen irgendwie holt er
quasi dann immer zu dem Zeitpunkt die Pakete ab und die
sind dann dauernd in einer anderen Version, da kannst du ja
nie verlässlich irgendwie mal sagen, das hat funktioniert ja
weil im Notfall, die können ja auch mal n Fehler machen ja in
ihrer Abhängigkeit und dann geht dein Ding auf flöten ja.
Und auch da hat No js sich ganz viel überlegt, wie man das alles
Manager, das kann ich hier nur anhauchen.
Aber alle alle diese Pakete sind semantisch versioniert, das
heißt ich habe sowas wie ein Major Miner und Patch release,
ich kann ein pro Paket pro Abhängigkeit, ich hab gar nicht
fest pin was ich will und der der Standard ist normalerweise
so ein so ein carrot Symbol das ist wieso ein kleines Dach wenn
ich so ein Dach voll die Version mache dann heißt es No js der
Paketmanager der darf mir und ich neu quasi aufbaue.
Den Quellcode, dann darf er mir auch neue Pakete ziehen, aber
nur mit meiner Upgrades und meiner ist unter den
semantischen Versionierungen festgelegt.
Meiner Upgrades sind quasi keine, die die API verletzen,
die machen nur Bugfixes, aber die sind, sie brechen nichts.
Ja und alles das kann ich da sehr gut festlegen und dann gibt
es auch noch so n Package Lock Pfeil, da kann ich dann sogar
auch einloggen wenn ich das tatsächlich exakt gleich haben
will. Also ich hab das zum Beispiel
sehr stark getestet. Dann gibt es dieses Package Log
file, dann kann ich auch zwingen, dass exakt genau diese
Pakete zu dieser Version, die werden ja quasi auch alle
gehalten und nbm kann ich auch mit Absicht ältere Version eines
Paketes runterladen, dann ziehe ich mir exakt diese Pakete und
dann habe ich tatsächlich von Byte von den Bytes her exakt das
gleiche Krams wieder da in Production, wie ich es jetzt zum
Beispiel unter Development hatte.
Alles das ist vorbereitet, mitgedacht, man muss also nicht
so viel Angst haben vor den vor diesen ganzen Abhängigkeiten,
das geht schon, das kriegt man gut gemanagt.
Wie ist es mit den Lizenzen, die dort im Einsatz sind?
Ist es ne Standardlizenz für alle Packages oder verschieden?
Nö, Jedes Paket hat seine eigene Lizenz.
Da muss man halt drauf achten, was man, was man so nimmt, aber
die mal tatsächlich ist, ich will, ich weiß es nicht, keine
Statistik, aber die meisten Pakete haben wir ne Open Source
Lizenz die du die sehr frei ist die meisten MIT wenn du die MIT
die Lizenz siehst, dann kannst du es nehmen, kannst es
verkaufen, kannst mal was du willst da also ist eigentlich es
ist ne es es gibt sehr sehr viel.
Sehr hochqualitativen Open Source Code in NBM, den du
mitnutzen kannst. Ne ganz so starke tolle
Webauftritte machen ne, das ist richtig cool, ja.
OK, gut. Jetzt waren wir immer noch gar
nicht bei der Syntax. Wir haben schon ordentlich was
auf dem auf auf der Uhr ja Zeit, was kommt da noch, was kommt
noch nach der Syntax ist das letzte oder noch was?
Nee nach der Syntax kommt eigentlich nicht mehr so viel,
weil wir tatsächlich hab ich so n paar Sachen vorgezogen die ich
später auf dem Zettel hatte, deswegen lass uns einfach noch
mal n bisschen Syntax angucken, ja gerne dann können wir es.
Dabei belassen würde ich sagen, so, wenn man sich jetzt ne
Programmiersprache von innen anguckt, ja gut die das noch nie
gemacht hat, dann dann, dann ist man sowieso jetzt verloren, aber
ich versuch es mal so ganz bisschen auf der Tonspur zu
machen. Also wir haben was wichtig ist,
man muss einmal die Datentypen sehen die so ne
Programmiersprache hat und dann muss man einmal kurz gucken was
mit Klassen und Funktionen so los.
Ja und ich würd einmal kurz zu den Datentypen was sagen, ist
auch ganz cool weil Javascript und das json ja javas und das
hat mir auch mal ne Folge über json.
Jason hat ja mal so ne Idee von Datentypen und die hat
javascript halt auch als Grundlagendatentypen und das
sind gar nicht so viele und das Macht das schön.
Ja, es gibt halt den Wahrheitswert, es gibt ne
Nummer, es gibt n String, es gibt n Array n Objekt, das sind
die wichtigsten ja und zum Array muss ich auch noch mal was
sagen, ganz wichtiger Datentyp in javascript ist halt einfach
ne Abfolge von Daten, bin eher hintereinander ja.
Die können aber verschieden sein.
Ich kann ne Nummer haben und dann in Bulin und so weiter und
sofort ja was bei Mary wichtig ist.
Ich hab sage das hat einen Anfang und das hat ne Länge und
die Sachen kommen hintereinander.
Kannst du mit dem Index zählen 01234567 da steht halt irgendwas
drin ja so und zum Objekt sag ich auch noch was, das Objekt
ist halt quasi ein Key Value Container, da hab ich also nicht
nur irgendwas hintereinander mit dem Index sondern ich hab halt
einen Key der hat einen Namen ja Name Sir Name oder ABCD diesen
Strings und dann hat der Key halt einen Value ja.
Du kannst halt könntest sagen Objekt ist a 1, B 2, C 3 und so
weiter oder du machst es kompliziert, dann kannst du die
Sachen ineinander schachteln. Ja der Wert der Wert unter dem
Key kann halt auch wieder ein Array sein oder noch mal ein
Objekt und so weiter und sofort und damit hast du ein Nesting
damit erschlägst du Daten also mit alleine diesen Dingern
erschlägst du alle Datenstrukturen die du brauchst
für irgendwas, damit kannst du alles abbilden, das kann nicht
mal einfach so sein, es ist so, keiner braucht mehr, es reicht
so. Und dann gibt es auch so
spezielle Datentypen. Date für ein Datum, das ist auch
ganz cool gemacht, es gibt in in in No JS direkt ziemlich gute
Datumsverarbeitung und alles was man so braucht zum ISO string
und und und. Timestims la Lada gibt es
natürlich auch mal wieder extra Paket, die es noch cooler
machen, aber von sich aus kommt da auch schon was ganz cool mit,
dann gibt es noch einen Datentyp den ich mal nenne, das Set das
Set ist, das muss man eigentlich auch sowieso kennen, das haben
fast alle Programmiersprachen, das Set ist quasi ein ein Array
in dem es keine Duplikate geben darf.
Sieht die Datenstruktur so vor, während ich in einem Array
sauber hinschreiben kann, a komma a komma, a komma 1 Komma
c. Ähnlich im Set.
Ja, da kannst du halt nur sagen a Komma 1 Komma c ist jetzt
gerade richtig gespeichert, also keine Duplikate und das ist halt
super cool, da kann man, man kann auch mal mit
Datenstrukturen dann n kleinen Algorithmus machen, hab ich ganz
oft zum Beispiel, da hab ich irgendwie n Array und weiß, Oh
da sind vielleicht Sachen doppelt, die darf ich aber nicht
haben, dann kannst du das Array in den Set klatschen.
Das Set macht dann halt flupp mit allen Duplikaten und dann
machst du das Set wieder ins Array und dann hast du dann n
Array ohne Duplikate. Ja, also man kann im No JS auch
ganz easy eine Datenstruktur in die andere verwandeln und wieder
zurück, ja und dann nimmt halt die Daten werden halt quasi so
manipuliert, dass sie halt den Datenstrukturen genügen und
damit kann ich halt auch schon coole Sachen machen, ne?
Also das Set würde jetzt die Duplikate eliminieren,
automatisch. Genau ja, kannst nämlich sagen,
du könntest sagen ich mach n news Set und dann sag ich und
dann klatsch ich das Array da rein und dann dann hat das Set
halt einfach die Duplikate rausgeschmissen, ist n guter
cooler Weg um Duplikate zu killen ne sonst müsste ich halt
dann wieder durchs Array etablieren und mir ist nämlich
kein einfaches Problem Duplikate zu killen, die können ja
irgendwo vorkommen. Ja ganz am Ende oder und so
weiter ja ist gar nicht so easy. Ja und mit mit so Datenstruktur
wenn man die kennt geht es cool, ja.
Da gibt es noch die Datenstruktur Buffer, die will
ich noch mal sagen. Also das ist auch cool in Note
TS, die haben sich tatsächlich, obwohl es so ne webnahe Sprache
ist gibt es n sehr cooles System für für n Buffer Buffer ist
einfach Bytes ja, also in dem Buffer kann ich alles speichern,
was zum Beispiel so Medien sind. Ja da kann ich n ganzes J Peg
rein donnern und NPLG oder Irgendsowas und dann kann ich
kann ich von außen sagen Buffer mach das mal irgendwie so, dass
ich das transportieren kann in Basics defour und so, ja da kann
ich das zwischen zwischen Browser und Server hin und
Herschicken, ohne dass das passiert, ja.
Das alles, das alles schon Teil von der Sprache ist, unglaublich
mächtig also. Und das Schöne ist, es ist aber
auch nicht so viel. Ja in C plus Plus und in C oder
in anderen Sprachen gibt es halt noch viel mehr Datentypen so und
das Schlimme ist ja, wenn du zu viele Optionen hast irgendwas zu
machen, dann ist als Entwickler auch schon wieder schwierig, ja
und dann hast du auch schon wieder Kompatibilitätsprobleme,
weil du halt einfach mehr posibilities hast.
Ja ich glaube es ist halt nicht zu viel und nicht zu wenig und
deswegen ist der Code gut austauschbar.
Und harmoniert auch gut miteinander.
Bei t plus Plus musst du überlegen, der eine macht
irgendwie n Array aus 8 bit integer und der nächste hat
irgendwie 16 bit integer und wenn du die 16 bits jetzt in die
8 Bits knallen willst, dann dann werden die irgendwie
abgeschnitten und so und dann ist das irgendwie nicht mehr
ganz die Auflösung und das ist alles Wahnsinn.
Ja da willst du aber nicht drüber nachdenken müssen, also
gibt es dann Java Script einfach nur ne Number Schluss aus Ende
ja ob das jetzt ne 1 ist oder 1 mit den 12 stellen hinten dran
ist Wurst, das funktioniert halt einfach ja das was man haben
will ja. Genau.
Und jetzt gibt es das und jetzt das Wichtige ist, und dann macht
es doppelt mächtig. Jetzt habe ich ja gesagt, es
gibt dieses Array und das Objekt und so weiter und das sind jetzt
einfach nicht nur Container, sondern die haben halt
Funktionen an sich dran und das ist der Killer ja bei
javascript, weil du hast total mächtige Funktionen dran, du
kannst dir zum Beispiel einfach ein Array aufbauen, das kannst
du sogar so einfach hinschreiben tatsächlich, du kannst ne eckige
Klammer aufmachen und schreibst da 123 rein.
Und dann macht die eckige Klammer zu.
Das ist dann quasi schon RE implizit definiert und jetzt
kannst du schon dransetzen, Punkt und jetzt kannst du
Funktionen drauf aufrufen, ja die agieren dann quasi auf
diesem Arreetyp. Ja und davon gibt es zum
Beispiel was man kennen muss und ich fang auch mit Arre an, weil
die anderen sind so ähnlich, Filter zum Beispiel, da kann
ich, da kann ich also und und da jetzt, das ist auch schick und
das ist auch was, was man am Anfang nicht so versteht, also
wenn ich jetzt was filtere. Dann setze ich da aber quasi
eine Funktion rein. Ich kann quasi mit einer
Funktion beschreiben, was für jedes, wie jedes einzelne Item,
in dem RE gefiltert wird. Ja, also ich sage Punkt Filter
und dann schreibe ich eine ganze Routine hin, das macht man
meistens mit so einer Lambda Funktion, nennt man das so eine
anonyme kleine Funktion, dann sage ich zum Beispiel X, dann
mache ich so einen Pfeil gleich größer, quasi jetzt kann ich
sagen was soll, was muss denn x, was muss mit x sein?
Ja da könnte ich zum Beispiel hinschreiben x größer 2.
Als als Buddy von dieser kleinen Funktion.
Ja, und jetzt wird quasi diese kleine Funktion, die ich
geschrieben hab ausgeführt für jedes Element ja von dem Array,
ja, und damit kann ich super geile Sachen machen.
Ja und so funktionieren die alle ja und dann hab ich also n
Filter, filtert mir Sachen raus, kommt wieder n Array raus was
potenziell kleiner ist oder gleich groß, je nachdem ob ich
gefiltert hab oder nicht dann hab ich zum Beispiel n find
damit finde ich finde ich einen bestimmten Item in meinem Array
nach einer bestimmten Bedingung find dann hab ich einfach for
each da kann ich dann einfach. Da kriege ich einfach nur den
Wert hin, das x quasi das Item an der Stelle und kann dann
irgendwas machen. Dann habe ich eine Funktion, zum
Beispiel include, da kann ich einfach fragen array included du
den Namen so oder so? Ja das gibt es dann einfach nur
wahr oder falsch zurück dann eine ganz wichtige Funktion was
man kennt auf dem Array ich hab die Funktion Map, das ist auch
ganz cool, die Funktion Map sagt quasi zurück kommt wieder ein
Array der gleichen Länge aber an jeder Stelle kann anderer Inhalt
sein, ich mappe quasi. Den Inhalt an jeder Stelle in
Arre der gleichen Länge mit einem neuen Inhalt.
Ja, wenn ich aber hinschreibe zum Beispiel, ich habe irgendein
Arre und sage Punkt Map X und dann dieses File und dann wieder
x, dann habe ich quasi das einfach nur dupliziert, das Arre
ja, da würde nichts passieren ne aber ich könnte zum Beispiel ich
weiß im Arre sind nur sind zahlen und ich will die
irgendwie potenzieren oder irgendsowas dann kann ich sagen
x und dann file x hoch 2 dann kommt ein Arre raus wo ich
überall die Quadrate drin habe. Und das sind jetzt alles
Funktionen, die insbesondere auf Arrays beziehungsweise die
kannst du einfach an Array dranhängen.
N beliebiges Array mit Punkt und dann die silberne Funktion.
Ja ja. Ganz genau, ganz genau, ja, und
die bleiben, die geben dann an dieser Stelle wieder n Array
zurück, aber das Schöne ist, ich kann halt diese Punkte, ich kann
die Funktion auch chainen wie man sagt ja also ich könnte zum
Beispiel sagen, es passiert ganz oft wenn man programmiert, ich
hab irgendwie n großes Array, das können ja zum Beispiel meine
Daten dann aus einer Datenbank oder Irgendsowas, dann Filter
ich die und das was da rauskommt map ich noch mal ja.
Ich, ich kann also das Punkt, Filter, Punkt, Map und so weiter
beliebig aneinander hängen und dann noch n for each dran
machen. Und selbst wenn ich die
Datentypen Wechsel zwischendurch, dann hab ich auf
anderen Objekten, zum Beispiel auf dem String hab ich sehr
ähnliche Funktionen ne auch n paar andere so dann da hab ich
sowas wie wie Start Swiss und n Swiss und so aber da nen String
im Prinzip ne Abfolge von Charakteren ist weil zum
Beispiel Saba Hello könnte ich sagen ja gut Hello sind halt ist
auch NRA und da steht halt HELL und o drin.
Und so sieht das javascript. Deswegen funktionieren die
ganzen Array Funktionen halt auch auf den Strings.
Ja sowas wie zum Beispiel Splice auch sowas Splice sagt zum
Beispiel schneidet raus irgendwo an einer Stelle in einem Array
an einem Index, schneidet das Element raus und ersetzt das mit
was anderem oder mit nichts und so weiter das sind alles so
Funktionen die als Webentwickler braucht man die ständig, weil
man ständig irgendwo was splicen, slicen und so weiter
ich muss. Das ist ja überhaupt, warum wir
programmieren. Ich hab halt Daten und ich muss
die manipulieren, ne und da ist halt noch der ist unglaublich
mächtig. Ja die Manipulation von Daten ne
genau oder das ist eigentlich so, das ist so was man so sagen
kann und dann gibt es halt total viele über diese ganzen
Entwicklung der Programmiersprache gibt es immer
mehr so Features die es halt einem total angenehm machen
damit zu programmieren ne ich kann so Objekte.
Ich kann so Objekte quasi Spread.
Es gibt n Spread Operator, die haben so schöne Namen Spread wie
die wie die Butter ne Schmier aus so ja du kannst also quasi
die ganzen Key values, zum Beispiel Spread in n anderes
Objekt, dann schmierst du die quasi hin und legst die flach
wieder zusammen und so weiter hast als Snicer also es also es
gibt schon viel Luxus an der den ganzen Programmiererei da jetzt.
Wie geht man das jetzt an? Also wenn man jetzt diese ganzen
Funktionen alle gar nicht so kennt, die die gibt die Idee
einem da Hinweise oder gibt man in ne Dokumentation rein und
liest oder? Chattet man nur noch mit
chachi.pt und Germany und so oder wo wo findet man das
eigentlich alles raus? Ja oder lernt man das in einem
dicken Buch wie du jetzt? Also ich bin ja Old School, wenn
ich ne neue Programmiersprache mir angucke, dann weiß ich
nicht, ob ich mir jetzt noch n dickes Buch holen würde, aber
das mach ich tatsächlich manchmal, weil ich das ganz
gemütlich finde, das auch irgendwie nicht vom Bildschirm
zu machen, sondern. Ja, ist irgendwie noch ne andere
Atmosphäre. Ich finde ich finde immer
wichtig, man muss einmal von so einer Programmiersprache die
Grundlagen verstehen, wo kommt es her, bisschen was also das
was wir jetzt heute versucht haben, ja das muss ich schon
verstehen, ja und aber ich mach es heute noch und dann natürlich
hilft dir die Idee, die sagt ja schon auch was da los ist.
Kann man machen finde ich manchmal aber auch ein bisschen
hm, ich gucke tatsächlich immer, ich tippe immer MDN ein ja das
ist Mozilla Development Network ist ne super top organisierte
Java Script Dokumentation wenn du wenn du eintippst in den
Chrome MDN Array. Da kommst du sofort auf eine
Seite, wo wo das Array definiert ist.
Alle Methoden kannst du klicken und siehst sofort Beispiele noch
und nöcher und so das das hast du sofort gerafft.
Also wer zum Beispiel einfach mal alles können will was ein
Java Script Array ist, der tippt Halt MDN Array ein und liest
einmal von oben bis unten die Funktion durch.
Ja da wird man mal da wird man, das muss man auch mal machen,
weil wenn du mich kaino redest die sagt dir das ja auch nicht
alles ja man muss sich wirklich mal die Mühe machen die alle zu
lesen. Weil mit Umständen kannst du
immer auch was erreichen, was noch nicht da ist.
Ja, die sind ja auch, die sind ja nicht alle orthogonal, sag
ich mal. Ja, aber manchmal denkt man so
scheiße, was hab ich das, ach was gibt es da noch für ne
Funktion ja every oder reduce was hab ich denn da mal?
Das hab ich, du kannst das immer per Hand programmieren mit dem
for each Loop oder irgendsowas dann fehlt das so per Hand und
so was kannst du schon machen ja kannst aber auch lassen weil es
alles schon fertig ist. Ja das ist alles unglaublich
wird n unglaublich langer Code ja.
Du kannst halt mit no JS, wenn du das gut kannst.
Wenn du das voll auf dem Zettel hast, schreibst du unglaublich
consize Code da da. Da sind wenige Zeilen und da
passiert ne ganze Menge drin, weil halt diese Sprache
aufgepeppt ist mit mit diesen ganzen coolen Funktionen.
Ne also das empfehle ich, dass man das wenn man jetzt ich
empfehle erstens no JS kann ich auch mal so sagen, wenn man mal
programmieren will finde ich no JS ist ne coole Sprache, kann
man ruhig nehmen, vielleicht guckt ihr euch den nur an weiß
ich nicht. Und dann auf jeden Fall einmal.
Dadurch muss man gehen, ja einmal diese Funktion alle mal
angucken und das richtig lernen. Ja und nicht nur, nicht nur
online wie. Wird man to Date mit neuen
Funktionen sagst du raus kommt was dazu.
Also immer mal wieder reingucken ja ja.
Aber das kommt ja jetzt. Es ist ja nicht jede Woche der
neue, also ich meine, klar kommt ja, kommt die Version der
Programmiersprache, aber das ist ja, ich weiß gar nicht den Cycle
halbes Jahr oder Irgendsowas und dann liest man, wie man das so
macht, dann liest man die Release Notes und dann sagt man
jetzt gibt es irgendwie den. Nullish coalesting Operator dann
denken sich, ach du scheiße, was ist denn nullish coalesting
Operator, dann zeigt man sich mal n Beispiel und denkt man
Scheiße, den hätt ich schon immer gebrauchen können ne so
und dann und dann bleibt das auch eigentlich schon hängen.
Ja so so mach ich das und und beim RE die Funktion die sind
stabil seit seitdem es no GS gibt oder ja da kommt mal eine
dazu oder sowas aber dann das ist nicht so, dass man das
ständig neu lernen muss. Ja das wär ja furchtbar, es geht
schon. Gibt es noch was ist Syntax, was
wir wissen müssen oder beziehungsweise die Hörer und
Hörerinnen? Na ja, klar, da gibt es, da
kannst du ja natürlich Bücher von lesen und schreiben.
So Java ist natürlich nicht javascript Entschuldigung, ist
ja nicht gestricktely Getyped, das heißt das ist n bisschen
Schwierigkeit, du weißt immer nicht ganz genau, was hab ich
jetzt eigentlich für n Typen da unter mir, da musst du n
bisschen aufpassen, da gibt es ja das type Script noch, wenn
man das halt möchte, das kann man ja auf das javascript mit
Aufsetzen, bei Deno ist es gleich integriert, type Script
Compiler, dann kann man noch mal wissen, dass wenn man das nicht
weiß, wenn man mit das ist. Da steht vielleicht nicht gleich
irgendwo mal so als Tipp von mir das Jason Stringify und Jason
Pass also das Jason Objekt ist ja quasi in einem First Citizen
sag ich mal in der OJS Sprache. Du kannst sogar n Jason Objekt
wenn du 1 hast direkt reinladen in den Source Code und das
verwandelt sich in n javascript Objekt so wie ich es gerade
besprochen hab. Das wird alles aber man manchmal
muss man manchmal will man das Rausschreiben und dann kann man
das quasi das das Objekt mit diesem Key values was ja so n
verschachteltes etwas ist ja. Da kann man einfach sagen json
und da muss man aber das J, das S und das U und das n alle groß
schreiben. Sieht aber n bisschen komisch
aus, die Stellen sich das sofort im Code wo du es machst.
Json, weil sonst wird da eigentlich alles gecamble
casted, aber json ist so das einzige Ding wo alle 4 Letter
All Caps sind, Punkt stringify und dann wird dann auch riesen
Objekt wird einfach in String verwandelt den du dann einfach n
Pfeil schreiben kannst. Zum Beispiel easy Ja und das
Gegenteil von Stringify ist Parse, dann kannst du es parsen.
Und hier jetzt ne mein letzter Trick den das mach ich.
Manchmal hat man das Problem, dass man was austauschen muss in
einem sehr verschachtelten Jason Objekt mit so 34567 Etagen wo da
irgendwas ist. Ja und ich muss irgendwie
irgendwelche Sachen austauschen, dann kann es manchmal einfacher
sein zu sagen Jason Stringefy das ganze Ding, dann hab ich das
quasi als Stringen jetzt hab ich mächtiges stringen regax
perfections sag einfach im Stringen Tausch aus das und das
und das und dem Stringen ist völlig egal auf welchem Level
das ist. Wo ich damit aus nicht
ausgetauscht hab, sag ich wieder Jason Pass und dann hab ich mein
Objekt wieder zurück, sonst müsste ich nämlich als Coda
irgendwie der Reihe nach durchgehen durch jedes Level.
Ja for each da und den Key und noch mal gucken und so weiter
wenn man n bisschen wenn man n bisschen um die Ecke denkt, da
kann man mit diesen Konversionen von einem Typ in den anderen
kann man auch sehr schnell mal irgendwie n Algorithmus
abfrühstücken. Ja OK, also n String ist unter
Umständen einfacher zu überarbeiten als eben das
eigentliche Objekt. Ja, auf jeden Fall.
Wenn das vor allen Dingen, wenn das tief genästet ist, Gerrit,
dann kommst du da nicht so einfach dran.
Ne, du musst dann, du musst das adressieren, dann müsstest du
sagen a Punkt b Punkt C Punkt e ne wenn das jetzt wenn immer
wieder Objekte in Objekten liegen, dann musst du erstmal
durch die durch die ganzen Keys durch die musst du erstmal
vernästen und dann will ich den Value da austauschen das ist
dann muss man mal mit Rekursionen programmieren
irgendsowas das wird wirklich das kriegst du richtig
Kopfschmerzen. Und manchmal musst du einfach
bei javasript denkst du so OK, also NC plus Plus geht sowas
auch nicht. Ja, du kannst nicht einfach aus
dem C plus Objekt n String machen, aber n javasript schon
ja sagst du Jason Stringy frei bumm machst n String, dann
machst du regeler Expression auf n String und danach packst du es
Faust du es wieder als als Objekt zurück ja dann wird es
noch mal. Also wenn du so aus der harten
Schule kommst du sagen ist das völlig irre, kannst du nicht
machen ich würde sagen kannst du auf jeden Fall machen ist
richtig cool ja spart Programmierzeit und ist auch
alles performant ja das sind alles schon schnelle Funktionen
ne? Cool.
Also ich merk du bist richtig begeistert, kannst
wahrscheinlich noch ne halbe Stunde oder Stunde drüber.
Sprechen ich jetzt also wir haben ja schon die, aber ich
glaub ne Stunde haben wir schon hier auf dem Zettel das das
reicht für dich in. Ja ich bin begeistert
tatsächlich ich find die Sprache sehr schön also ich ja also ich
hab auch schon paar gesehen in meinem Leben, ich bin immer noch
dabei also ich ja das kann man schon machen ne würd ich sagen
kannst auch also kannst du safe große Projekte mitmachen würd
ich sagen. Ja, es gibt auch viele große,
sehr, sehr, sehr große Projekte, die einfach mit no JS umgesetzt
sind, ne? Ja, also alle Netflix und Co.
Ja in der Größe gut. Dann würd ich sagen machen wir
Deckel drauf. Ja, sorry, hast du deine 5%
geschafft? Gerrit Ja, vielleicht ja
vielleicht. Einstellig ist es bestimmt, aber
aber dürfte hoch einstellig sein.
Ja, Papa ist alles gut, Mama ist ja n bisschen was technischeres
heute aber ist ja auch mal schön, ne, wir haben ja auch n
Technik Podcast nein ist doch, ist ja n Tech Podcast so ne also
das tut dir ja war nicht war nicht negativ gemeint, ich kann
mich ja dann auch n bisschen zurücklehnen beziehungsweise
aufmerksam zuhören, ich versuch es wär natürlich noch cooler
wenn ich es auch anwenden würde, aber das dauert noch n bisschen
bis ich das lieber dich so entwickeln mal schauen OK gut.
Dann wollen wir nicht ins Labern geraten.
Leute, wenn ihr uns noch nicht folgt, dann folgt mir dir,
diesem Podcast aus Spotify AP Podcast Das hilft uns am
meisten, dann kriegen wir große Reichweite, da können wir coole
Gäste auch mit Einändern und dann freuen wir uns.
Also Dankeschön für die, die dran geblieben sind und alle,
die zugehört haben und wir hören uns in 2 Wochen war einfach
komplex tschau tschau. Bis dahin.
Tschüss aus Hamburg.