Wie man ein großartiger Programmierer ist

Was zeichnet die wirklich großartigen Programmierer aus?

Wie wir alle wissen, erstellen großartige Programmierer erstaunliche Funktionen, Websites, Apps und dergleichen. Aber was haben sie gemeinsam?

In meiner Forschung geht es nicht nur darum, eine Sprache wirklich gut zu kennen oder einen bestimmten Bildungshintergrund zu haben. Es ist so, dass die wirklich talentierten Programmierer die Grundlagen beherrschen. Diese Grundlage ermöglicht es ihnen, großartige Dinge zu bauen und bahnbrechende Ideen zu entwickeln.

Denken Sie an eine Pyramide. Es hat eine große Basis, wird aber nach oben hin allmählich kleiner und dünner. Erlernen der Grundlagen der Programmierung bildet diese Grundlage. Von dort hebt alles ab.

Was sind diese Grundlagen? Aufgrund meiner Erfahrung und der Programmierer, deren Hintergründe ich erforscht habe, sehe ich Programmiergrundlagen als zweiteiligen Ansatz.

Problemlöser Extraordinaire

Zunächst müssen Sie ein effektiver Problemlöser sein. Dies ist ein wichtiger Ort zu starten , da die Programmierung ist Problemlösung.

Obwohl es viele Möglichkeiten gibt, ein Problem zu lösen, fallen mir einige Teile des Prozesses auf. Programmierer, die auch große Problemlöser sind, destillieren ein Problem auf den Punkt, um ihr Gesamtziel zu identifizieren und ein Problem mit Absicht zu beginnen. Dann teilen sie jedes Problem in kleine, überschaubare Teile auf - greifen jeden Teil nacheinander und manchmal visuell an, indem sie ein Bild zeichnen, um es zur „realen Welt“ zu machen.

Der Prozess ist schwieriger als es sich anhört. Als ich anfing zu programmieren, stieß ich an eine Wand: Wie viele andere habe ich in der Schule nie gelernt, wie man Probleme löst; Es ist eine Fähigkeit, die nicht ohne weiteres gelehrt wird. Ich bekam ein Problem im Matheunterricht und tauchte einfach ein, was ich tat, als ich anfing zu programmieren. Es war nicht überraschend, dass ich unnötig meine Räder drehte und bei einfachsten Problemen Straßensperren traf.

Die Dinge begannen sich zu ändern, als ich anfing, etwas über den Problemlösungsprozess und das effektive Lösen von Problemen zu lernen. Ich beginne jetzt ein Problem mit Absicht. Ich habe George Polyas Buch How to Solve It , um mich für diesen Rat zu bedanken.

Ich habe einige von Polyas Ideen an die Programmierung angepasst, wie das Verständnis des Problems. "Das Problem muss verstanden werden", schreibt Polya. Dies beinhaltet die Möglichkeit, „auf die Hauptteile des Problems, das Unbekannte, die Daten und den Zustand hinzuweisen“. Für jedes Problem ziehe ich ein Blatt Papier heraus und schreibe Antworten auf die folgenden Fragen: Was löse ich oder versuche ich zu finden? (Unbekannt); Was werde ich gegeben? (Daten); und welche Einschränkungen oder Details muss ich beachten? (Bedingung).

Das Verständnis des Problems mag offensichtlich erscheinen, aber das Offensichtliche wird leicht übersehen. Bei mehr als einer Gelegenheit habe ich Stunden in ein Problem gesteckt, nur um viel später festzustellen, dass ich ein kleines, aber kritisches Detail in der Problemstellung übersehen habe. Das Aufschreiben von Problemdetails verlangsamt mich mental und hilft mir, genau zu überlegen, was ich tun muss, was die halbe Miete ist.

Von dort aus mache ich einen Plan, der ein weiterer Vorschlag von Polya ist. Es ergibt Sinn. Ich schreibe eine Gliederung, bevor ich einen Artikel schreibe. Ein Künstler macht eine Skizze des Gemäldes, bevor er an dem Gemälde selbst arbeitet. Ein Bauunternehmer verwendet Zeichnungen und Blaupausen, um ein Haus zu bauen. Bei der Programmierung ist das nicht anders. Anstatt mich zu beeilen , muss ich zunächst darüber nachdenken, was ich vorhabe , und einen Angriffsplan erstellen.

Es gibt viele Möglichkeiten, dies zu tun. Manchmal skizziere ich die Schritte, die ich ausführen muss, in numerischer Reihenfolge: erstens, dann. Ein anderes Mal mache ich das Problem visuell. Als ich etwas über Schleifen lernte, zog ich eine Handvoll Mandeln heraus und iterierte physisch durch den Stapel. Es ist ein dummes Beispiel, aber es hat mir geholfen, das Problem zu durchdenken.

Ich werde auch Bilder oder Diagramme zeichnen. Für ein rekursives Problem zeichne ich ein Diagramm darüber, was bei jedem rekursiven Aufruf passiert, bis ich den Basisfall erreicht habe. Fast immer finde ich jedoch einen Weg, das Problem zu vereinfachen, es leichter handhabbar zu machen und mir zu helfen, ein Muster zu erkennen. Vor allem ist es mein Ziel, ein Problem mit dem Zweck zu lösen und diesen Sinn für den Zweck aufrechtzuerhalten.

Trotz der besten Pläne sind die Probleme immer noch schwer und ich stecke immer noch fest. Ein großer Problemlöser zu werden, braucht Zeit. Es ist eine Fähigkeit, an der ich noch arbeite und die Mühe definitiv wert ist. Es ist ein Unterschied, den Sie sehen können.

Wenn ich Code lese, der von einem großartigen Problemlöser geschrieben wurde, ist er sauber und leicht zu verstehen. Variablen sind gut benannt. Funktionen sind kurz und knackig. Jede Codezeile hat einen bestimmten Zweck. Der Flaum wird entfernt. Die Klarheit des Codes spiegelt den Denkprozess des Programmierers wider: Ich kann das Programm von oben nach unten lesen und genau wissen, was los ist. Das ist eine großartige Problemlösung, und das ist es, wonach ich strebe.

Was ist mit deinem Computer?

Das Erlernen der Informatik ist die zweite Programmiergrundlage. Ich habe vor kurzem angefangen, Informatik zu lernen und liebe es, weil ich mich über die Oberfläche hinaus bewege. Ich gehe „hinter die Kulissen“, um zu erfahren, was passiert, wenn ich beispielsweise eine integrierte Funktion verwende. Ich lerne unter anderem auch Speicher und Laufzeit. Kurz gesagt, ich lerne, warum ein Computer die Dinge tut, die er tut.

Das „Warum“ zu kennen, erweitert mein Kontextwissen und macht mich zu einem informierten Programmierer. Infolgedessen bin ich mit dem Code, den ich schreibe, nachdenklicher. Jetzt, da ich zum Beispiel etwas über die Laufzeit weiß, werde ich eine binäre Suche verwenden, anstatt jedes Element in einer Liste zu durchlaufen.

Es bereichert auch mein Verständnis der Funktionsweise zentraler Programmierkonzepte. Ich habe zum Beispiel an einem rekursiven Problem gearbeitet und nicht die erwartete Lösung erhalten. Nach eingehender Prüfung erfuhr ich warum: Es hatte mit der Ausführung des Aufrufstapels zu tun, eine Idee, die mir erst vor wenigen Monaten entgangen wäre.

Oder Unterricht nehmen. Ich hatte die längste Zeit große Probleme mit dem Unterricht und hatte Angst, einen zu benutzen. Ich wusste, wie man eine Klasse schreibt, war mir aber nicht sicher, wann und warum ich eine verwenden würde. Das änderte sich, als ich erfuhr, was beim Erstellen von Instanzen und Aufrufmethoden tatsächlich auf meinem Computer passiert. Es klickte schließlich, sobald ich einen Kontext hatte. Sowohl für die Rekursion als auch für den Unterricht hat die Informatik Wissenslücken geschlossen.

Allzu oft werden die Grundlagen beiseite geschoben. Der Fortschritt kann langsam sein, und die Leute neigen dazu, mehr „lustige“ Dinge auszuwählen, an denen sie arbeiten können, wenn ihnen die Option gegeben wird. Das ist eine Schande. Programmierer, die die Grundlagen beherrschen, scheinen mit Zuversicht zu programmieren: Sie kennen das „Wie“ und das „Warum“ ihrer Programmierentscheidungen, was ihre Arbeit verbessert und ihre Glaubwürdigkeit gegenüber anderen stärkt.

Ein solides Verständnis der Grundlagen erleichtert das Erlernen neuer Sprachen und Technologien. Wenn Sie sich beispielsweise die Zeit nehmen, um Kernkonzepte wie Iteration, Rekursion und Abstraktion mit einer Sprache wirklich zu verstehen, können Sie eine andere Sprache lernen. Einfach ausgedrückt, es gibt viel zu gewinnen und wenig zu verlieren, wenn man die Grundlagen beherrscht.

Ich bin Schriftsteller (amymhaddad.com) und Programmierer für Anfänger.