
KĂŒrzlich habe ich ein VorstellungsgesprĂ€ch mit einem JavaScript-Entwickler gefĂŒhrt, der sich fĂŒr eine Senior-Position beworben hat. Ein Kollege, der ebenfalls anwesend war, bat den Kandidaten, eine Funktion zu schreiben, die einen HTTP-Request durchfĂŒhrt und im Falle eines Fehlers mehrere Versuche unternimmt.
Er schrieb den Code direkt an die Tafel, daher hĂ€tte es gereicht, etwas AnnĂ€herndes darzustellen. Wenn er einfach gezeigt hĂ€tte, dass er das Wesentliche gut versteht, wĂ€ren wir durchaus zufrieden gewesen. Doch leider gelang es ihm nicht, eine brauchbare Lösung zu finden. Daraufhin beschlossen wir, das Ganze aufgrund der NervositĂ€t etwas zu erleichtern und baten ihn, die RĂŒckruffunktion in eine auf Promises basierende Funktion umzuwandeln.
Leider war es offensichtlich, dass dieser Code dem Kandidaten nicht unbekannt war. Er hatte eine allgemeine Vorstellung davon, wie alles funktionierte. Ein grober Entwurf einer Lösung, der das VerstĂ€ndnis des Konzepts demonstrierte, hĂ€tte gereicht. Der Code, den der Kandidat an die Tafel schrieb, war jedoch völlig sinnlos. Er hatte ein sehr vages VerstĂ€ndnis davon, was Promises in JavaScript sind und konnte nicht wirklich erklĂ€ren, wofĂŒr sie gut sind. FĂŒr einen Junior wĂ€re das vielleicht noch entschuldbar gewesen, fĂŒr eine Senior-Position jedoch nicht akzeptabel. Wie sollte dieser Entwickler in der Lage sein, Bugs in einer komplexen Promise-Kette zu beheben und den anderen zu erklĂ€ren, was genau er gemacht hat?
Entwickler betrachten fertigen Code als selbstverstÀndlich.
Im Entwicklungsprozess stoĂen wir stĂ€ndig auf wiederverwendbare Komponenten. Wir ĂŒbertragen Code-Schnipsel, um nicht jedes Mal alles neu schreiben zu mĂŒssen. Daher betrachten wir den fertigen Code, mit dem wir arbeiten, als etwas SelbstverstĂ€ndliches â wir gehen einfach davon aus, dass alles wie gewĂŒnscht funktioniert.
Und im Allgemeinen funktioniert er wirklich gut, aber wenn Schwierigkeiten auftreten, ist das VerstÀndnis seiner Mechanik mehr als lohnenswert.
Unser Kandidat fĂŒr die Stelle als Senior-Entwickler hielt Promises fĂŒr trivial. Er konnte sich wahrscheinlich vorstellen, wie man damit umgeht, wenn sie irgendwo im Code eines anderen auftauchen, verstand aber das zugrunde liegende Prinzip nicht und konnte es in dem VorstellungsgesprĂ€ch nicht selbst reproduzieren. Möglicherweise hatte er einen Ausschnitt auswendig gelernt â das ist nicht besonders schwer:
return new Promise((resolve, reject) => {
functionWithCallback((err, result) => {
return err ? reject(err) : resolve(result);
});
});Ich habe das auch so gemacht â das haben wir wahrscheinlich alle irgendwann getan. Wir haben einfach einen Codeabschnitt auswendig gelernt, um ihn spĂ€ter in der Arbeit zu verwenden, wĂ€hrend wir nur grob verstanden, wie alles funktionierte. Aber wenn der Entwickler das Konzept wirklich verstanden hĂ€tte, mĂŒsste er nichts auswendig lernen â er wĂŒsste einfach, wie es funktioniert, und könnte alles Notwendige mĂŒhelos im Code reproduzieren.
Gehen Sie zu den Wurzeln
Im Jahr 2012, als die Vorherrschaft von Frontend-Frameworks noch nicht etabliert war, regierte jQuery die Welt, und ich las das Buch , dessen Autor John Resig, der Schöpfer von jQuery, war.
Das Buch lehrt den Leser, wie man jQuery von Grund auf selbst erstellt und bietet die einzigartige Gelegenheit, den Denkprozess nachzuvollziehen, der zur Schaffung der Bibliothek gefĂŒhrt hat. In den letzten Jahren hat jQuery an PopularitĂ€t verloren, aber ich kann das Buch dennoch sehr empfehlen. Was mich am meisten beeindruckt hat, war das forte GefĂŒhl, dass ich das alles auch selbst hĂ€tte erdenken können. Die Schritte, die der Autor darstellt, erschienen mir so logisch und verstĂ€ndlich, dass ich ernsthaft den Eindruck hatte, ich könnte jQuery problemlos erstellen, wenn ich nur den Mut hĂ€tte, es zu versuchen.
NatĂŒrlich hĂ€tte ich in der RealitĂ€t nichts Derartiges geschafft â ich wĂ€re zu dem Schluss gekommen, dass es unĂŒberwindbar schwierig ist. Meine eigenen Lösungen wĂ€ren mir zu einfach und naiv erschienen, um zu funktionieren, und ich hĂ€tte die HĂ€nde in den SchoĂ gelegt. Ich hĂ€tte jQuery fĂŒr selbstverstĂ€ndlich gehalten, auf dessen korrekte Funktionsweise man einfach blind vertrauen muss. SpĂ€ter hĂ€tte ich wahrscheinlich keine Zeit damit verbracht, die Mechanik dieser Bibliothek zu verstehen, sondern sie einfach als eine Art Black Box genutzt.
Aber die Auseinandersetzung mit diesem Buch hat mich zu einem anderen Menschen gemacht. Ich begann, den Quellcode zu studieren und stellte fest, dass die Implementierung vieler Lösungen in Wirklichkeit sehr transparent, ja sogar offensichtlich ist. NatĂŒrlich ist es etwas anderes, selbst auf einen solchen Gedanken zu kommen. Doch genau das Studium des Codes anderer und das Reproduzieren bereits existierender Lösungen hilft uns, eigene Ideen zu entwickeln.
Die Inspiration, die Sie schöpfen, und die Muster, die Sie zu erkennen beginnen, werden Sie als Entwickler verĂ€ndern. Sie werden feststellen, dass die wunderbare Bibliothek, die Sie stĂ€ndig nutzen und ĂŒber die Sie denken, sie sei ein magisches Artefakt, in Wirklichkeit nicht auf Magie basiert, sondern einfach ein Problem auf elegante und einfallsreiche Weise löst.
Manchmal muss man am Code tĂŒfteln, ihn Schritt fĂŒr Schritt zerlegen, aber genau so, durch kleine, aufeinanderfolgende Schritte voranzuschreiten, kann man den Weg des Autors zur Lösung nachvollziehen. Dies ermöglicht Ihnen, tiefer in den Prozess des Codierens einzutauchen und gibt Ihnen mehr Selbstvertrauen bei der Suche nach eigenen Lösungen.
Als ich anfing, mit Promises zu arbeiten, schien es mir wie pure Magie. SpÀter erfuhr ich, dass sie auf den gleichen Callback-Mechanismen basieren, und meine Sicht auf Programmierung hat sich verÀndert. Das bedeutet, dass das Muster, das uns von Callbacks befreien soll, selbst mit Callbacks realisiert wird?!
Das half mir, die Dinge aus einer neuen Perspektive zu betrachten und zu erkennen, dass ich es hier nicht mit abstrakten Codefragmenten zu tun habe, deren KomplexitÀt ich niemals begreifen könnte. Es sind lediglich Muster, die man mit Neugier und einem tiefen VerstÀndnis problemlos meistern kann. So lernen Menschen das Programmieren und wachsen als Entwickler.
Erfinden Sie das Rad neu
Also scheuen Sie sich nicht, das Rad neu zu erfinden: Schreiben Sie den Code zur Datenbindung selbst, erstellen Sie ein selbstgemachtes Promise oder entwickeln Sie sogar Ihre eigene Lösung zur Zustandsverwaltung.
Es spielt keine Rolle, dass niemand jemals Gebrauch davon machen wird â aber jetzt haben Sie diese FĂ€higkeit. Wenn Sie spĂ€ter die Möglichkeit haben, diese Kenntnisse in Ihren eigenen Projekten anzuwenden, ist das groĂartig. 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 eigenstÀndige Implementierung einer bereits bestehenden Lösung ist eine hervorragende Möglichkeit, von den besten Programmierern zu lernen und Ihr Handwerk zu verfeinern.
Quelle: habr.com
