Eine Melodie aus Leonardo DaVincis Notizbüchern

Bewusstes Üben: Wie Musik und Malerei mir das Codieren beigebracht haben

Als ich das erste Mal programmieren lernte, erinnere ich mich, dass ich nichts anderes wollte, als zu üben und mich zu verbessern. Es gab nur ein Problem: Wie zum Teufel üben Sie das Programmieren?

Es stellt sich heraus, dass einige Antworten in den kreativen Künsten liegen. Insbesondere Musik und Malerei haben überraschende Lektionen zum Studium der Softwareentwicklung geboten. Ich hoffe, sie helfen dir genauso wie sie mir geholfen haben.

Grundlagen im Fokus

Was lernen wir?

Wenn Sie Algorithmen lieben und ich meine, wachen Sie morgens wirklich auf und können es kaum erwarten, Ihre Hände in Segmentbäume und Rekursionen zu graben - dann herzlichen Glückwunsch. Du bist das codierende Einhorn, das wir alle sein wollen. Der Rest von uns Menschen muss sich mit der Frage auseinandersetzen: Warum überhaupt Rätsel lösen? Ist es nur technische Interviews zu bestehen?

Wenn Sie etwas üben, ist es wichtig zu wissen, warum Sie lernen, was Sie lernen. Auf welche spezifischen Fähigkeiten zielt es ab? Welche Schwachstelle stärken Sie?

Ich würde argumentieren, dass Codierungsprobleme nicht nur eine bestimmte Lektion lehren (wie das Durchlaufen eines binären Suchbaums), sondern auch den zugrunde liegenden Prozess des Engineerings. Mit anderen Worten, sie zielen auf grundlegende Fähigkeiten ab.

Der Grund, warum Codierungsaufforderungen so willkürlich erscheinen, liegt darin, dass sie es sind. Das wertvollste Wissen, das sie daraus gewonnen haben, ist nicht die Lösung des Problems, sondern die Lösung eines Problems. Es ist eine wichtige Unterscheidung.

Wie zerlegt man ein großes Problem in kleinere Unternehmen? Welche Details können Sie abstrahieren, um übergeordnetes Denken zu ermöglichen? Welche Randfälle warten auf eine Lösung? Was sind die Kompromisse zwischen einer Datenstruktur und einer anderen?

Alle oben genannten Fragen testen grundlegende Fähigkeiten. Diese Fähigkeiten sind wie die Datenschicht an der Basis einer Anwendung das, wovon alle anderen Kenntnisse und Fähigkeiten abhängen. Dies sind nicht die Triller und Ornamente einer Klaviersonate. Sie sind die grundlegenden Harmonien, auf denen die gesamte Sonate beruht.

Was Fachleute wissen

Hören Sie mich an: Ein erfahrener Künstler weiß nicht, wie man im Herbst eine Landschaft im Central Park malt. Stattdessen weiß ein erfahrener Künstler, wie man Licht auf die Form malt.

Ein erfahrener Künstler weiß nicht, wie man Blätter auf Bäume malt. Ein erfahrener Künstler weiß, wie sich Farbe verhält.

Ebenso weiß ein erfahrener Programmierer nicht nur, wie man in React, Vue, Ember oder was auch immer das heiße Framework in einem Jahr sein wird, navigiert. Ein erfahrener Programmierer versteht Vanille-JavaScript und die Funktionsweise des Browsers. Ein erfahrener Programmierer kennt die Vorteile der funktionalen Programmierung, das Flussmuster und warum es sich überhaupt lohnt, React zu verwenden. Wissen hat seine eigenen Abhängigkeiten.

Lernen Sie die Grundlagen, und der Rest ist Soße.

Malen aus dem Leben

Kopieren und Einfügen im Vergleich zur Primärquelle

Die Maler, die ich kenne, die ihr Handwerk wirklich ernst nehmen, malen immer aus dem Leben. Was bedeutet das? Aus dem Leben zu malen bedeutet, dass die Künstlerin das eigentliche Ding vor ihren Augen malt, sei es ein Modell, die Landschaft vor sich oder ein Stillleben.

Kein Foto eines Modells. Nicht die Wiedergabe einer Landschaft durch einen anderen Künstler. Nicht das Gemälde eines Gemäldes einer anderen Person. Es bedeutet, direkt von der Quelle aus zu malen und das Problem selbst zu lösen.

Wenn Sie das Gemälde eines anderen von einem Sonnenuntergang abschauen, anstatt selbst im Freien zu stehen, kopieren Sie eine Lösung und erfinden keine. Dies entspricht dem Kopieren und Einfügen von Snippets aus dem Stapelüberlauf.

Durch das Kopieren und Einfügen von Code wird niemals auf grundlegendes Wissen zugegriffen. Wenn Sie die Lösung eines anderen auf ein Problem kopieren, erhalten Sie die Lösung, aber nicht die Erfahrung. Sie verpassen die harte Arbeit, zu einer bestimmten Lösung zu gelangen. Sie vermissen das Erlernen einer Fähigkeit.

Tragbares Wissen

Grundkenntnisse sind portabel. Wenn Sie ein Problem selbst versucht haben, es selbst nicht geschafft haben und es selbst gelöst haben, werden Sie mit Wissen belohnt, das nicht mehr fallspezifisch, sondern fallunabhängig ist. Sie haben Prinzipien gelernt, die Sie auf zukünftige Szenarien anwenden können.

Lösungen sind selten eine Einheitslösung. Um Lösungen an ihren Kontext anzupassen, sind Fähigkeiten erforderlich - und diese Fähigkeiten können nur auf die harte Tour erlernt werden.

Die Suche nach der Hauptquelle, das Malen aus dem Leben ohne den Lärm der Interpretation oder Meinung eines anderen, wird immer die großzügigsten Lektionen hervorrufen.

Übe deine Waage

Gezielte Wiederholung

Wenn ein Pianist ein Musikstück lernt, spielt er es nicht nur von Anfang bis Ende und wiederholt diesen Vorgang dann tausendmal. Schwachstellen müssen gezielt werden. Wissenslücken müssen identifiziert werden.

Andernfalls führen Teile des Stücks, die nicht gut verstanden werden, ausnahmslos zu glanzlosen, seelenlosen Darbietungen (nicht wartbarer / spröder Code) oder zu völligen Fehlern und falschen Noten (Bugs).

Obwohl blinde Wiederholung eine ineffiziente Methode zum Lernen ist, kann gezielte Wiederholung insbesondere für Anfänger enorme Vorteile bieten. Erfahrene Programmierer können die Fluidität, mit der sie in Git oder einem Bash-Terminal navigieren, als selbstverständlich betrachten.

Für die Anfängerin macht die Wiederholung dieser Grundfertigkeiten und das Erhalten einer Form des „Muskelgedächtnisses“ die kognitiven Fähigkeiten der Programmiererin frei, so dass sie sich auf übergeordnete technische Belange konzentrieren kann.

Höhere Conciertos

Wenn Sie mit einem bestimmten Framework noch nicht vertraut sind, sagen wir Express.js, verbringen Sie einige Zeit damit, Ihre Skalen zu üben. Identifizieren Sie die Kernelemente, die dieses Framework bereitstellt. Bauen Sie mit ihnen etwas Grundlegendes.

Lassen Sie einen Server zuhören. Wählen Sie einen Port. Erstellen Sie eine Route. Erhalten Sie eine Anfrage. Antworten Sie mit Daten. Dann, endlich, hier ist der Schlüssel: reißen Sie es ab und machen Sie es erneut.

Wenn ein Musiker mit dem Spielen eines besonders schwierigen Abschnitts fertig ist, staubt er sich nicht die Hände ab und sagt: „Nun, ich habe diesen gelöst!“. Die Lösung ist nicht der Punkt. Die Fähigkeit, das Wissen und die Einrichtung ist.

Es mag wie eine lästige Pflicht klingen, aber es bettet tatsächlich das Muskelgedächtnis in Sie ein, das erforderlich ist, um sich dem Denken auf höherer Ebene zuzuwenden. Es ist unglaublich frustrierend, etwas auf hohem Niveau zu entwickeln, während man über Syntaxfehler stolpert. Beseitigen Sie diese Syntaxfehler, indem Sie Ihre Skalen üben.

Auf diese Weise muss sich ein professioneller Geiger, nachdem er jede Tonleiter in jeder Tonart Tausende von Iterationen geübt hat, nicht um einzelne Noten kümmern, wenn es Konzertzeit ist. Mit diesem Muskelgedächtnis kann sie sich stattdessen auf übergeordnete Herausforderungen konzentrieren. Der Satz. Die Melodie. Das concierto.

Studien und Skizzen

DaVincis Hände

Wenn Sie sich die Zeitschriften von Leonardo DaVinci ansehen, finden Sie zahlreiche Studien und Skizzen von Händen. Einige Studien beschreiben sogar die Muskulatur und den Knochen. Man könnte sich fragen: Hat er nur eine seltsame Besessenheit mit der menschlichen Hand? Warum hat er sich die Mühe gemacht, all dies zu skizzieren?

Wenn Sie das Metropolitan Museum of Art in New York City besuchen, finden Sie unzählige Gemälde von Stillleben. Obstschalen. Blumenvasen. Besuchen Sie eine ernsthafte Kunstschule und die Schüler malen dieselben Gegenstände. Versuchen Künstler, Mandarinen zu verstehen? Sind sie alle angehende Botaniker?

Nein, dies sind gezielte Studien. Es ist nicht die Frucht, die sie zu verstehen versuchen. Künstler versuchen, etwas grundlegenderes zu verstehen: Licht und Farbe auf Form.

Ebenso hoffe ich für Anfänger (einschließlich mich selbst!), Dass unsere „Skizzenbücher“ mit Studien zum Verständnis eines bestimmten Programmierkonzepts oder -problems gefüllt werden. Kleine Apps, Experimente, Katalogisierung unserer Untersuchungen zum Software Engineering.

Ein Programmier-Skizzenbuch

Wie verhalten sich Versprechen? Wie wäre es im Vergleich zu Async-Warten? Ist alles in JavaScript wirklich ein Objekt, sogar null? Wie kann ich mir diese Funktion merken? An welchen Kontext sind Pfeilfunktionen gebunden? Wenn Sie eine Konstruktorfunktion schreiben und in jeder React-Komponente super () aufrufen, wäre es dann nicht eine kleine Studie wert, etwas über ES6-Klassen zu lernen? Sollten Sie nicht verstehen, wie Versprechen funktionieren, wenn Sie asynchrone HTTP-Anforderungen schreiben?

Jede dieser Kuriositäten kann durch Öffnen eines Repl oder JSBin erkundet werden. Durch kleine Codestudien kann das Verständnis für größere Projekte vertieft werden.

Wenn ein Künstler eine Hand oder eine Obstschale skizziert, liegt das nicht daran, dass diese Themen besonders interessant sind. Künstler skizzieren, um Verständnis für größere Herausforderungen zu erlangen. Kleine Experimente, um größere Probleme zu verstehen.

Schau dir die Hände der Mona Lisa an. Sie sind perfekt.

Porträts und Abhängigkeitsbäume

Komposition

Ich glaube, die Kernaufgabe für alle Schöpfer (einschließlich Programmierer) ist die Komposition. Wörtlich: Wie setzen Sie verschiedene Elemente so zusammen, dass sie zusammenhängend zusammenhängen?

Hierfür gibt es verschiedene Strategien (einschließlich der Einstellung eines Produktmanagers). Eine Strategie besteht darin, Ihr Stück aus der Basisschicht aufzubauen. Beginnen Sie mit der Ebene mit den geringsten Abhängigkeiten. Dies könnten Ihre Datenmodelle sein. Wenn TDD Ihre Stimmung ist, könnte dies mit Tests beginnen.

Wenn ein Maler ein Porträt in Angriff nimmt, beginnt er nicht mit den Wimpern. Die Wimpern hängen von der Platzierung des Augenlids ab, die von der Form der Augenhöhle abhängt, die von der Knochenstruktur des Patienten abhängt, die auf dem Winkel von Hals und Schultern usw. usw. beruht.

Wenn eines dieser Elemente falsch gezeichnet ist oder sogar ein wenig aus dem Gleichgewicht gerät, haben Ihre Wimpern kein Glück. Vergessen Sie all die Farbe, die Sie beim Versuch, diese Wimpern zum Arbeiten zu zwingen, geschichtet haben. Jetzt muss alles erneuert werden. Fehler werden entlang der Abhängigkeitskette multipliziert.

Schicht nach Schicht

Wenn Sie eine Full-Stack-Anwendung erstellen, erhalten Sie eine solide Datenebene. Schreiben Sie Tests. Nur dann können Sie zum Routing übergehen, das von dieser Datenschicht abhängt. Testen Sie Ihre Routen. Es ist noch nicht einmal nötig, einen Browser zu öffnen. Das Vertrauen in das Backend ermöglicht das Vertrauen in das Frontend.

Wenn Sie sich über Randradien auf Schaltflächen Gedanken machen, haben Sie hoffentlich einen Stapel von Anwendungsebenen, die sicher aufeinander aufgebaut sind, mit grünen Test-Häkchen ganz unten. Es lohnt sich, vor den Details mit dem Gesamtbild zu beginnen.

Codierer Code.

Selbst mit all diesen Strategien gibt es keinen Ersatz für das Schreiben von Code, selbst wenn Sie das Gewicht eines Informatik-Abschlusses oder den Schub eines Coding-Bootcamps haben. Komponisten komponieren. Maler malen. Codierer Code.

Wie sich herausstellt, ist das Codieren ein Geschwister der anderen Künste. Es ist ein Handwerk für sich und es kann geübt werden. Ich hoffe, dass Anfänger durch gezieltes Üben und Wertschätzung für die Künste in der Lage sein werden, sich auf die Grundlagen zu konzentrieren, ihr Handwerk zu verbessern und die Arbeit so großartig wie ihre Ambitionen zu machen.