• Zuhause
  • Artikel
  • Bewusstes Üben: Wie Musik und Malerei mir das Codieren beigebracht haben
Veröffentlicht am 28-09-2019
Eine Melodie aus Leonardo DaVincis Notizbüchern

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

Als ich das Programmieren zum ersten Mal lernte, wollte ich nicht mehr als üben und mich verbessern. Es gab nur ein Problem: Wie zum Teufel übst du das Programmieren?

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

Konzentrieren Sie sich auf die Grundlagen

Was lernen wir?

Wenn Sie Algorithmen lieben und wirklich morgens aufwachen und es kaum erwarten können, Ihre Hände in Segmentbäumen und Rekursionen zu graben, dann herzlichen Glückwunsch. Sie sind das Coding-Einhorn, nach dem wir alle streben. Der Rest von uns Menschen muss sich mit der Frage auseinandersetzen: Warum überhaupt mit Codierpuzzles? Ist es nur um 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 Codierungsherausforderungen 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 Eingabeaufforderungen für das Codieren von Puzzles so willkürlich erscheinen, liegt darin, dass sie es sind. Das wertvollste Wissen, das daraus gewonnen wird, ist nicht die Lösung des Problems, sondern die Lösung eines Problems. Es ist ein wichtiger Unterschied.

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

Alle oben gestellten Fragen testen grundlegende Fähigkeiten. Diese Fähigkeiten sind wie die Datenebene, auf der eine Anwendung basiert, von der 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öre mich an: Ein erfahrener Künstler weiß nicht, wie er im Herbst eine Landschaft im Central Park malen soll. 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 er in React, Vue, Ember oder einem anderen wichtigen Framework in einem Jahr navigiert. Ein erfahrener Programmierer versteht Vanille-JavaScript und wie der Browser funktioniert. Ein erfahrener Programmierer versteht 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ären Quelle

Die Maler, die ich kenne, die es mit ihrem Handwerk wirklich ernst meinen, malen immer aus dem Leben. Was bedeutet das? Aus dem Leben malen bedeutet, dass die Künstlerin das eigentliche Ding vor ihre Augen malt, sei es ein Modell, die bevorstehende Landschaft oder ein Stillleben.

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

Wenn Sie das Bild eines Sonnenuntergangs von jemand anderem absehen, anstatt selbst im Freien zu stehen, kopieren Sie eine Lösung, ohne eine zu erfinden. Dies entspricht dem Kopieren und Einfügen von Snippets aus dem Stapelüberlauf.

Das Kopieren und Einfügen von Code greift niemals auf grundlegende Kenntnisse zu. Wenn Sie die Lösung einer anderen Person auf ein Problem kopieren, erhalten Sie die Lösung, jedoch nicht die Erfahrung. Sie verpassen die harte Arbeit, eine bestimmte Lösung zu finden. Sie vermissen es, eine Fähigkeit zu erlernen.

Tragbares Wissen

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

Lösungen sind selten eine Größe für alle. Um Lösungen an ihren Kontext anzupassen, sind Fähigkeiten erforderlich - und diese Fähigkeiten können nur auf die harte Tour erlernt werden.

Wenn Sie nach der Hauptquelle suchen und aus dem Leben malen, ohne die Interpretation oder Meinung eines anderen zu hören, werden Sie immer die großzügigsten Lektionen erhalten.

Übe deine Waage

Gezielte Wiederholung

Wenn ein Pianist ein Musikstück lernt, spielt er es nicht einfach von Anfang bis Ende ab und wiederholt diesen Vorgang tausendmal. Schwachstellen müssen gezielt angegangen 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 regelrechten Fehlern und falschen Noten (Bugs).

Obwohl das blinde Wiederholen eine ineffiziente Lernmethode ist, kann das gezielte Wiederholen insbesondere für Anfänger enorme Vorteile bringen. Erfahrene Programmierer können davon ausgehen, wie flüssig sie mit Git oder einem Bash-Terminal navigieren.

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

Übergeordnete Conciertos

Wenn Sie mit einem bestimmten Framework noch nicht vertraut sind, nehmen Sie sich beispielsweise Express.js vor und üben Sie Ihre Skalen. Identifizieren Sie die Kernelemente, die dieses Framework bereitstellt. Bauen Sie mit ihnen etwas Grundlegendes.

Lass einen Server lauschen. Wählen Sie einen Port. Erstellen Sie eine Route. Erhalte eine Anfrage. Antworten Sie mit Daten. Dann ist hier endlich der Schlüssel: Zerreißen Sie es und wiederholen Sie es.

Wenn ein Musiker eine besonders harte Passage zu Ende spielt, staubt er sich nicht die Hände ab und sagt: "Nun, ich habe diese gelöst!" Die Lösung ist nicht der Punkt. Die Fähigkeit, das Wissen und die Möglichkeit ist.

Es klingt wie eine lästige Pflicht, aber es bettet tatsächlich das Muskelgedächtnis in Sie ein, das erforderlich ist, um zu übergeordnetem Denken überzugehen. Es ist unglaublich frustrierend, etwas auf hohem Niveau zu konstruieren, während man durch Syntaxfehler stolpert. Vermeiden Sie diese Syntaxfehler, indem Sie Ihre Skalen üben.

Auf diese Weise muss sich ein professioneller Geiger, nachdem er jede Tonleiter in Tausenden von Iterationen geübt hat, während des Konzerts nicht um einzelne Noten kümmern. Ausgestattet mit diesem Muskelgedächtnis kann sie sich stattdessen auf übergeordnete Herausforderungen konzentrieren. Der Satz. Die Melodie. Das Konzert.

Studien und Skizzen

DaVincis Hände

Wenn Sie sich die Zeitschriften von Leonardo DaVinci ansehen, finden Sie zahlreiche Studien und Handskizzen. 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 besuchen, finden Sie unzählige Gemälde von Stillleben. Obstschalen. Vasen mit Blumen. In der Tat besuchen Sie eine ernsthafte Kunstschule und die Schüler malen die gleichen Gegenstände. Versuchen Künstler, Mandarinen zu verstehen? Sind sie alle angehende Botaniker?

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

Ebenso hoffe ich, dass Programmierer (einschließlich meiner selbst!) Anfangen, dass unsere „Skizzenbücher“ Studien zum Verständnis eines bestimmten Programmierkonzepts oder -problems enthalten. Kleine Apps, Experimente, Katalogisierung unserer Untersuchungen zur Softwareentwicklung.

Ein Skizzenbuch für Programmierer

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, lohnt es sich dann nicht, ein wenig über ES6-Klassen zu lernen? Wenn Sie asynchrone HTTP-Anfragen schreiben, sollten Sie nicht verstehen, wie Versprechen funktionieren?

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 sich auf größere Herausforderungen vorzubereiten. Kleine Experimente zum Verständnis größerer Probleme.

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

Porträts und Abhängigkeitsbäume

Komposition

Ich glaube, die Hauptaufgabe aller Schöpfer (einschließlich Programmierer) ist die Komposition. Wörtlich: Wie fügen Sie verschiedene Elemente so zusammen, dass sie in einem zusammenhängenden Verhältnis zueinander stehen?

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

Beim Anpacken eines Porträts beginnt ein Maler nicht mit den Wimpern. Die Wimpern hängen von der Position des Augenlids ab, die von der Form der Augenhöhle abhängt, von der Knochenstruktur der Person, die vom Winkel des Halses und der Schultern abhängt, usw. usw.

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 Farben, die Sie beim Versuch aufgetragen haben, diese Wimpern zum Arbeiten zu zwingen. Jetzt muss alles noch einmal gemacht werden. Fehler werden in der Abhängigkeitskette multipliziert.

Schicht nach Schicht

Wenn Sie eine Full-Stack-Anwendung erstellen, ist Ihre Datenschicht absolut stabil. Schreibe Tests. Erst dann können Sie mit dem Routing fortfahren, das von dieser Datenschicht abhängt. Testen Sie Ihre Routen. Sie müssen noch nicht einmal einen Browser öffnen. Das Vertrauen in das Backend ermöglicht das Vertrauen in das Frontend.

Wenn Sie sich Gedanken über die Rahmenradien von Schaltflächen machen, werden Sie hoffentlich einen Stapel von Anwendungsebenen haben, die sicher aufeinander aufbauen und grüne Test-Häkchen aufweisen. Es lohnt sich, mit dem größeren Bild vor den Details zu beginnen.

Codierer-Code.

Letztendlich gibt es trotz all dieser Strategien keinen Ersatz für das Schreiben von Code, selbst wenn Sie das Gewicht eines Informatik-Abschlusses oder die Steigerung eines Codierungs-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 kann praktiziert werden. Ich hoffe, dass sich angehende Programmierer durch gezieltes Üben und Verständnis für die Künste auf die Grundlagen konzentrieren, ihr Handwerk verbessern und die Arbeit so großartig wie ihre Ambitionen machen können.

Siehe auch

Wird KI das Ende von Schauspielern sein?Erweitern Sie Funktionsweise: So generieren Sie mehrere Einnahmequellen aus einer einzigen IdeeBildung, Inklusion, DemokratisierungWie man ein Künstler istWas ist Kunst?Enumerable reduzieren - Teil 1: Die Reise beginnt