Warum es nĂŒtzlich ist, RĂ€der zu erfinden

Warum es nĂŒtzlich ist, RĂ€der zu erfinden

Vor kurzem hatte ich ein VorstellungsgesprĂ€ch mit einem JavaScript-Entwickler, der sich um eine Senior-Position beworben hat. Ein Kollege, der ebenfalls an dem GesprĂ€ch teilnahm, bat den Kandidaten, eine Funktion zu schreiben, die eine HTTP-Anfrage ausfĂŒhrt und im Falle eines Fehlers mehrere Versuche unternimmt.

Er schrieb den Code direkt an die Tafel, daher hĂ€tte es ausgereicht, etwas AnnĂ€herndes darzustellen. Wenn er lediglich gezeigt hĂ€tte, dass er gut versteht, worum es geht, wĂ€ren wir durchaus zufrieden gewesen. Aber leider gelang es ihm nicht, eine gute Lösung zu finden. Daher haben wir, nachdem wir es auf seine NervositĂ€t geschoben hatten, beschlossen, die Aufgabe ein wenig zu erleichtern und ihn zu bitten, die RĂŒckruf-Funktion in eine auf Promises basierende Funktion umzuwandeln.

Aber leider. Ja, es war offensichtlich, dass er mit solchem Code schon frĂŒher in BerĂŒhrung gekommen war. Er wusste ganz grob, wie das alles funktioniert. Ein Entwurf der Lösung, der das VerstĂ€ndnis des Konzepts demonstriert hĂ€tte, hĂ€tte uns genĂŒgt. Doch der Code, den der Kandidat an die Tafel schrieb, war völlig sinnlos. Er hatte ein Ă€ußerst vages VerstĂ€ndnis davon, was Promises in JavaScript sind, und konnte nicht richtig erklĂ€ren, wozu sie gut sind. FĂŒr einen Junior wĂ€re das vielleicht noch entschuldbar gewesen, aber fĂŒr eine Senior-Position reichte es nicht aus. Wie sollte dieser Entwickler in der Lage sein, Bugs in komplexen Promise-Ketten zu beheben und den anderen zu erklĂ€ren, was genau er getan hat?

Entwickler betrachten den bereitgestellten Code als selbstverstÀndlich.

Im Verlauf der Entwicklung stoßen wir stĂ€ndig auf reproduzierbare Materialien. Wir ĂŒbertragen Codeausschnitte, damit wir sie nicht jedes Mal neu schreiben mĂŒssen. Daher konzentrieren wir unser ganzes Augenmerk auf die SchlĂŒsselteile und sehen den fertigen Code, mit dem wir arbeiten, als etwas SelbstverstĂ€ndliches – wir gehen einfach davon aus, dass darin alles funktioniert wie es sollte.

Und normalerweise funktioniert er tatsÀchlich, aber wenn Schwierigkeiten auftreten, lohnt es sich mehr als genug, seine Mechanik zu verstehen.

So hielt unser Kandidat fĂŒr die Senior-Entwicklerposition Objekte vom Typ Promise fĂŒr selbstverstĂ€ndlich. Er stellte sich vermutlich vor, wie man mit ihnen umgeht, wenn sie irgendwo in fremdem Code auftauchen, aber das Gesamtkonzept verstand er nicht und konnte es im VorstellungsgesprĂ€ch selbst nicht wiederholen. Vielleicht hatte er einen Codeausschnitt auswendig gelernt – das ist nicht so schwer:

return new Promise((resolve, reject) => {
  functionWithCallback((err, result) => {
   return err ? reject(err) : resolve(result);
  });
});

Ich habe das auch gemacht – wahrscheinlich haben wir alle irgendwann so gehandelt. Wir haben einfach einen Teil des Codes auswendig gelernt, um ihn spĂ€ter in der Arbeit zu verwenden, wobei wir nur grob verstanden haben, wie alles funktioniert. Wenn der Entwickler das Konzept wirklich verstanden hĂ€tte, mĂŒsste er sich nichts merken – er wĂŒsste einfach, wie es geht, und wĂŒrde alles Notwendige mĂŒhelos im Code reproduzieren.

Gehe an die Wurzeln

Im Jahr 2012, als noch nicht die Vorherrschaft von Frontend-Frameworks etabliert war, regierte jQuery die Welt, und ich las das Buch Secrets of the JavaScript Ninja, das von John Resig, dem Schöpfer von jQuery, geschrieben wurde.

Das Buch lehrt den Leser, wie man seine eigene jQuery von Grund auf erstellt, und bietet eine einzigartige Möglichkeit, den Denkprozess nachzuvollziehen, der zur Schaffung der Bibliothek fĂŒhrte. In den letzten Jahren hat jQuery an Beliebtheit verloren, aber ich empfehle das Buch trotzdem sehr. Was mich am meisten beeindruckt hat, war das hartnĂ€ckige GefĂŒhl, dass ich mir all das selbst hĂ€tte ausdenken können. Die Schritte, die der Autor erklĂ€rte, erschienen so logisch und so verstĂ€ndlich, dass ich ernsthaft dachte, ich könnte problemlos jQuery erschaffen, wenn ich nur anfangen wĂŒrde.

NatĂŒrlich hĂ€tte ich in Wirklichkeit nichts dergleichen geschafft – ich hĂ€tte gedacht, das sei unĂŒberwindbar schwer. Eigene Lösungen wĂ€ren mir zu einfach und naiv erschienen, um zu funktionieren, und ich hĂ€tte aufgegeben. Ich hĂ€tte jQuery als eine SelbstverstĂ€ndlichkeit angesehen, deren korrekte Funktionsweise man einfach blind glauben muss. SpĂ€ter hĂ€tte ich wahrscheinlich keine Zeit damit verbracht, die Mechanik dieser Bibliothek zu verstehen, sondern hĂ€tte sie einfach als eine Art Blackbox genutzt.

Aber die Bekanntschaft mit diesem Buch hat mich zu einem anderen Menschen gemacht. Ich begann, den Quellcode zu studieren, und stellte fest, dass die Umsetzung vieler Lösungen in der Tat sehr transparent, sogar offensichtlich ist. Nein, natĂŒrlich ist es eine andere Sache, sich selbst etwas Derartiges auszudenken. Aber gerade das Studium fremden Codes und die Reproduktion existierender Lösungen helfen uns, etwas Eigenes zu entwickeln.

Die Inspiration, die Sie schöpfen werden, und die Muster, die Sie beginnen zu bemerken, werden Sie als Entwickler verÀndern. Sie werden feststellen, dass die wunderbare Bibliothek, die Sie stÀndig verwenden und von der Sie gewohnt sind, als magisches Artefakt zu denken, ganz und gar nicht auf Magie basiert, sondern einfach das Problem klar und einfallsreich löst.

Manchmal mĂŒssen Sie an dem Code tĂŒfteln und ihn Schritt fĂŒr Schritt zerlegen, aber genau so, in kleinen, aufeinander folgenden Schritten voranzukommen, können Sie den Weg des Autors zur Lösung nachverfolgen. Das wird Ihnen helfen, tiefer in den Programmierprozess einzutauchen und mehr Selbstvertrauen bei der Suche nach eigenen Lösungen zu gewinnen.

Als ich anfing, mit Promises zu arbeiten, kam es mir vor wie reine Magie. Dann erfuhr ich, dass sie auf denselben RĂŒckruf-Mechanismen basieren, und meine Programmierwelt hat sich gewandelt. Das bedeutet, dass das Muster, dessen Ziel es ist, uns von RĂŒckrufen zu befreien, selbst durch RĂŒckrufe realisiert wird?!

Das hat mir geholfen, die Dinge aus einer anderen Perspektive zu betrachten und zu erkennen, dass die Code-Schnipsel vor mir keine abgehobene KomplexitÀt darstellen, die ich nie begreifen werde. Es sind einfach Muster, die man mit der nötigen Neugier und tiefem Eintauchen problemlos verstehen kann. So lernen Menschen programmieren und wachsen als Entwickler.

Erfinden Sie das Rad neu

Also, zögern Sie nicht, RÀder neu zu erfinden: Schreiben Sie den Code zur Datenbindung selbst, erstellen Sie ein hausgemachtes Promise oder entwickeln Sie sogar Ihre eigene Lösung zur Zustandsverwaltung.
Es spielt keine Rolle, dass damit am Ende niemand jemals etwas anfangen wird – Sie wissen es jetzt. Und wenn Sie die Möglichkeit haben, solche Entwicklungen spĂ€ter in eigenen Projekten zu verwenden, ist das umso besser. Sie können sie weiterentwickeln und noch mehr lernen.

Es geht hier nicht darum, Ihren Code in die Produktion zu schicken, sondern darum, etwas Neues zu lernen. Die eigene Implementierung einer bereits bestehenden Lösung zu schreiben, ist eine hervorragende Möglichkeit, von den besten Programmierern zu lernen und so sein Handwerk zu verfeinern.

Quelle: habr.com

60GB SSD 8Gb DDR4