Der Name für diese Vorlage ist function.
Insbesondere handelt es sich um eine Schnittstelle, bei der es sich normalerweise um eine Sammlung von Funktionen handelt.
Welche Sprachen hast du gelernt?
Als einer der ersten, wenn wir Programmieren lernen, lernen wir das Prinzip der wiederverwendbaren Logik. Dies bringt uns immer zur Funktion - dem Baustein jedes Softwareprojekts. Die Funktionen selbst sind gar nicht so schlecht, aber gerade weil sie als wiederverwendbare Komponente verwendet werden, wird das Schreiben, Warten und Skalieren von Software so teuer.
Warum?
Das Schreiben von wiederverwendbarem Code ist schwierig.
Nein das ist nicht so. Das ist inakzeptabel.
Jeder Entwickler kann wiederverwendbaren Code schreiben, unabhängig von seiner Erfahrung. Sprachen wie JavaScript, Python, Ruby und Go bestehen aus Millionen kleiner gängiger Module, die zeigen, wie einfach es ist, einfachen, wiederverwendbaren Quellcode zu schreiben. Es ist einfach , wiederverwendbaren Code zu schreiben .
Lassen Sie uns diese Aussage umgestalten.
Dies ist aber auch nicht der Fall. Schauen Sie sich die Bibliothek node.js an
repeat-string
in npm. Es wird nichts anderes getan, als die Zeile zu wiederholen, und die Entwickler laden sie jede Woche siebzehn Millionen Mal herunter.
Anzahl der Downloads von Wiederholungsstrings in npm
Siebzehn Millionen sind nur die Anzahl der Downloads. Diese Nummer gibt uns keine Vorstellung davon, wie oft diese Funktion im Quellcode verwendet wird. Die Menge sollte astronomisch sein!
Also, was mache ich?
Wie finden Sie ein Modul wie
repeat-string
für Ihr node.js-Projekt? Suchen Sie in npm nach "string wiederholen" . Vielleicht geben Sie "string repeat" ein, aber die Ergebnisse sind ähnlich. Das Problem, über das ich spreche, ist im zweiten Suchergebnis zu sehen. Und im vierten und im neunten und im zehnten und im elften.
Schauen Sie sich diese Beispiele an. Jede Bibliothek bietet ein völlig identisches Verhalten.
Beispiele für npm-Zeilenwiederholungsbibliotheken
Sehen Sie, wo das Problem liegt?
Nein, nicht dass einer von ihnen aus einem unbekannten Grund asynchron ist. Ganz zu schweigen davon, dass die Wiederholung von Zeichenfolgen seit über sechs Jahren Teil der JavaScript (
"A".repeat(5)
) -Sprache ist . Das Problem ist, dass jede Bibliothek anders ist:
- In der Signatur der eingehenden Daten. Einige können empfangen
(string, int)
, andere können empfangen(int, string)
. Einer akzeptiert Gleitkommazahlen, der andere erfordert eine Rückruffunktion. - In der Signatur der Ausgabe. Jede Bibliothek druckt eine Zeichenfolge aus, mit Ausnahme einer, die nichts druckt und das Ergebnis an die Rückruffunktion übergibt. Und lassen Sie mich nicht einmal anfangen, ihre Fehler zu analysieren.
- Im Verhalten, wenn sie ausgeführt werden. Einer ist asynchron, die anderen sind synchron.
- Durch die Methode der Zugriffsgewährung. Einige bieten Zugriff auf eine einzelne exportierte Funktion, andere bieten eine Funktion als Methode eines Objekts.
Sie können JavaScript aus verschiedenen Gründen beschuldigen, aber dies ist kein Problem mit der Sprache. Aufgrund der Popularität von JavaScript und der Einschränkungen seiner Standardbibliotheken ist dieses Problem so häufig, dass ich es anhand eines Beispiels demonstrieren konnte, das so einfach wie die Wiederholung von Zeichenfolgen ist. Andererseits hindert mich nichts daran, all diese Unterschiede in einer anderen Sprache wiederherzustellen. Dies ist ein sehr einfaches Beispiel, aber wenn die Funktionalität komplexer wird, werden diese Unterschiede noch deutlicher.
Warum ist das ein Problem?
Das Problem ist, dass eine solche Fülle von Optionen keinen Wert schafft, sondern nur Probleme allein. Sie haben keinen Einfluss auf die "Geschäftslogik" (dh worauf es überhaupt ankommt). Dies sind die Implementierungsdetails. Manchmal ergeben sich diese Optionen aus einem Mangel an etwas in der Sprache oder im Rahmen, und manchmal sind sie nur spontane Entscheidungen. Wir versuchen, eine Option zu wählen, die die Arbeit des Entwicklers jetzt oder in Zukunft vereinfacht, aber es ist unmöglich, die Zukunft vorherzusagen. Solche Lösungen sind wirklich teuflisch - jede Option, die Sie wählen, scheint zunächst gut zu sein, während alles funktioniert. Wir erhalten einen Dopaminschub und fühlen uns an der Weltspitze. Herren aller Systeme! Wenn wir jedoch etwas hinzufügen, ersetzen oder ändern müssen, erkennen wir, dass wir nicht dieses Genie waren.
Wie oft müssen wir etwas ändern? Täglich. Das machen wir. Wie oft bricht Software aus diesem Grund? Buchstäblich jedes Mal. Manchmal ist die Panne geringfügig und wir beheben sie mit geringem Aufwand. Wir haben uns damit abgefunden, dass defekte Software normal ist. Selbst wenn wir automatisierte Tests schreiben, die nichts anderes tun, als zu überprüfen, ob etwas kaputt ist.
Das Problem mit Schnittstellen ergibt sich aus der Tatsache, dass ein Programmierer während des Entwicklungsprozesses viele Entscheidungen treffen kann. Entscheidungen wie die Wahl zwischen Positionsparametern, Konfigurationen und Linkern, asynchron gegenüber synchron, global gegenüber lokal, statusbehaftet gegenüber zustandslos, Konstruktoren gegenüber Fabriken, funktional gegenüber objektorientiertem Ansatz und einer unendlichen Anzahl anderer Optionen. Jede Wahl wird durch moderne Best Practices bestimmt und jede wird zu einem Sandkorn, das im Mechanismus eingeschlossen ist.
Dieses Problem ist nicht neuWir lassen uns jedoch damit abfinden und lehren diesen Ansatz jeder neuen Generation. Warum? Das Problem ist nicht, dass wir die falschen Entscheidungen treffen, sondern dass uns schlechte Optionen angeboten werden. Jede Option ist ein Kaleidoskop von Kompromissen, und die richtige Antwort hängt von der Sichtweise ab. Wenn alles ein Kompromiss ist, gibt es immer eine bessere Option . Sie können Ihren Code jederzeit neu schreiben, um ihn zu verbessern.
Lassen Sie uns unsere Aussage ein drittes Mal umgestalten.
Diese Aussage ist nicht so attraktiv, aber näher an der Wahrheit.
Ohne Code zum einfachen Einfügen müssen wir jede Falte der Schnittstelle bügeln, bevor wir sie verwenden können. Sie müssen jeden Code anpassen , der in die Anwendung eingeht. Jede Eingabe. Jede Schlussfolgerung. Jede API. Wir schieben Linker auf Adapter und verpacken sie in serviceorientierte Fabriken. Aber keine Menge Make-up lässt Ihr Designmuster hübsch aussehen .
Es ist, als würden wir im 18. Jahrhundert Software entwickeln. Wir haben die Bäume manuell zu Brettern jeder Größe gesägt. Wir machen Hämmer und Schlagnägel von Grund auf neu, um ein Haus zu bauen, das genau wie das nächste aussieht. Es kostet zu viel und dauert zu lange. Auch nach Abschluss des Projekts werden wir von der Last der Unterstützung immer noch zu Boden gezogen. Die Abmessungen sind nicht Standard, die Verkabelung erschüttert die Elektriker, und die Bauherren, die gerade die Berufsschule abgeschlossen haben, mögen die Art und Weise, wie wir die Nägel hergestellt haben, nicht. Es ist höchste Zeit, dass Leroy-Merlin und Digital 2x4 in der Software-Welt erscheinen.
„Hallo, ich heiße Tim. Ich arbeite als technischer Leiter bei Google, habe 30 Jahre Erfahrung im Codieren, muss aber herausfinden, wie man die Länge eines Strings in Python ermittelt. "
Wenn Sie Hilfe bei einer API benötigen, um ständig persönlich nach Ihnen zu suchen ?
Es ist keine Überraschung, wenn ich sage, dass wir Standards haben könnten, die für alle gut genug sind. Microsoft führte in den 90er Jahren die COM-Technologie ein, um Logik zwischen Anwendungen auszutauschen, die in einer beliebigen Sprache geschrieben sind. Die JVM-Technologie ist fast gleich alt und hat gezeigt, wie viele Sprachen denselben Bytecode verarbeiten und auch miteinander interagieren können. Die Welt entdeckt Flow seit Jahrzehnten immer wieder neu und Linda als eine Möglichkeit, verteilte Blackboxen miteinander zu verbinden, und Docker ist eine neue Sichtweise darauf, was eine moderne Blackbox sein kann.
Dieses Problem bietet viele Möglichkeiten, und viele versuchen, es zu lösen. Dapr und WasmCloud sehen nach vielversprechenden neuen Lösungen aus ... Sie lösen das Problem teilweise auf unterschiedliche Weise. So traurig der Stand der Softwareentwicklung heute ist, ich habe heute mehr Hoffnung als in den letzten 10 Jahren. Diese kurze Zeit des aufregenden Versprechens kam von JavaScript, das versprach, eine universelle Plattform zu schaffen, auf der sich amorphe Anwendungen auf der ganzen Welt verbreiten können. Infolgedessen wurde daraus eine Menge von Electron, React und verschwendetem RAM. Für mich ist Web Assembly eine neue Quelle des Optimismus geworden. Es ist alles andere als ideal, aber es ist auch wunderbar. Das Ideal gewinnt nie.
Werbung
Suchen Sie einen Server zur Miete für Debugging-Projekte, einen Server für Entwicklung und Hosting? Sie sind definitiv unser Kunde :) Tägliche Abrechnung von Servern, Erstellen Sie Ihre eigene Konfiguration mit wenigen Klicks, Anti-DDoS ist bereits im Preis enthalten.
Abonnieren Sie unseren Chat auf Telegramm .