Warum ist Kodierung so schwer? | Teil 1

Dies ist ein Beitrag über ein technisches Thema: Programmieren. Aber um das klarzustellen, ich habe keinen technischen Hintergrund.

Ich bin der stolze Sohn eines Künstlers, der mir beigebracht hat, meine Emotionen als Kompass zu benutzen, um das Leben zu navigieren, statt der Logik. Ton, Graphit, Tinte, Farbe, Leinwand, Papier und Klebstoff fließen durch meine Adern.

Ich hatte aus vielen Gründen Schwierigkeiten in der Schule – darunter zwei Lernbehinderungen: eine Hirnnervenschädigung aufgrund von Komplikationen bei der Geburt und Legasthenie, die bis in meine späten 20er Jahre nicht diagnostiziert wurde. Meine besten Testergebnisse waren so schlecht, dass ich fast nicht aufs College gekommen wäre.

Ich habe in der Schule Politikwissenschaften studiert, und meine ersten gescheiterten Berufsversuche waren in den Bereichen Film und Grafikdesign.

Ich habe mir selbst beigebracht, wie man programmiert – das ist eines der schwierigsten Dinge, die ich je gemacht habe. Seit etwa 5 Jahren unterrichte ich auch Code in einem Bootcamp hier in D.C. und berate immer wieder Freunde.

Es ist zwar schwer, aber nicht unmöglich. Wenn man Autodidakt ist, lernt man Stück für Stück. Manchmal ergibt etwas sofort einen Sinn, während andere erst in Jahren einleuchten. Der Weg der Erklärung ist ausgetreten, aber ich habe festgestellt, dass Ihre Lebenserfahrungen, Ihre Veranlagungen und Ihre Ausbildung bedeuten, dass die Hälfte Ihres Kampfes darin besteht, die richtigen Lernmittel zu finden.

Zwei Dinge, bevor wir beginnen:

  1. Wenn ich es kann, können Sie es auch.
  2. Du bist nicht allein.

Neues Vokabular, neue Konzepte, neues… alles

Eine der kniffligen Hürden beim Programmierenlernen ist, dass die Begriffe, die in der „Code-Sprache“ verwendet werden, um etwas zu beschreiben, im normalen Englisch oft etwas ganz anderes bedeuten. Mein Lieblingsbeispiel ist das Wort „Class“

Im Gegensatz zu den akademischen oder soziologischen Konnotationen, an die wir gewöhnt sind, bedeutet „Class“ in der Programmiersprache etwas anderes, je nachdem, welche Programmiersprache Sie verwenden. Noch verwirrender in diesen verschiedenen Programmiersprachen ist, dass eine Klasse sowohl konzeptionell genug verwandt ist, um Parallelen zu ziehen, warum ihre ursprünglichen Autoren sie als Klasse bezeichnet haben, aber die tatsächliche Verwendung ist so unterschiedlich, dass sie wirklich etwas ganz anderes ist. (Speziell CSS-Klassen vs. objektorientierte Klassen)

Das Sprechen von Code ähnelt fast einem Slang, was, wie alle Eltern wissen, frustrierend ist. Es kann anfangs schwierig sein, zu erkennen, was ein normales englisches Wort und was ein „Code“-Begriff ist.

Darüber hinaus hört man sie oft in schneller Folge, so dass ein kompletter Code-Speak-Satz grammatikalisch korrekt ist und man jedes der Wörter einzeln kennt, aber nicht, wenn sie auf diese Weise angeordnet sind.

„Nachdem ich sowohl den Browser-Cache auf dem lokalen Rechner geleert als auch John gebeten hatte, die Server-Caches auf dem Staging-Server zu leeren, weil ich dachte, dass es sich um eine Art von dauerhaftem Speicher- oder Statusproblem handeln müsste, stellte sich heraus, dass eine Namenskollision die zuvor im Stammverzeichnis definierten Aufrufe überschrieb. Ich werde ein Ticket erstellen, um Source-Maps hinzuzufügen, damit wir Instanziierungen leichter aufspüren können, anstatt das Repo zu durchsuchen.“

Nicht nur bei Null anfangen, sondern definieren, was Null ist

Darüber hinaus gibt es Konzepte, mit denen man noch nie in Berührung gekommen ist, geschweige denn zu kämpfen hatte.

Ein Beispiel, das ich gerne mit meinen Studenten verwende, ist:
Sagen wir, Sie wollen Ihren Computer so programmieren, dass er Ihnen eine Tasse Kaffee macht. Einfach, oder?

Du: Hey Computer: mach mir eine Tasse Kaffee.

Computer: PIEP BOOP: KLAR PAT. WAS IST KAFFEE UND WAS IST MACHEN?

Stellen Sie sich all die Möglichkeiten vor, wie man Kaffee machen kann… dann stellen Sie sich den Prozess vor, wie man die Kaffeebohne vom Baum, auf dem sie gewachsen ist, in eine Form bringt, die man in diesem Prozess verwenden kann… igitt.

Wir fangen oft bei Null an, und selbst kleine, einfache Dinge sind für uns oft erstaunlich komplex, wenn man sie mit Code erreichen will.

Man muss die Dinge nicht einfach nur programmieren, man muss zunächst definieren, was sie sind. Dann muss man den Code so verstärken, dass er mit allen möglichen Fehlern fertig wird, die auftreten können. Einfache Aufgaben werden zu atemberaubenden Kathedralen, die den Göttern des Expliziten huldigen.

„Einfach googeln“

Der Ratschlag, der mich am meisten verärgert, ist der, dass neue Entwickler „googeln“ sollen.

Jeder, der schon einmal mit der Brust im Schlamm gesteckt hat, weiß, wie wenig hilfreich das ist.

A. Sie wissen nicht, wie man diagnostiziert, was falsch ist, also wissen Sie nicht einmal, wo Sie anfangen sollen. (Wenn du es wüsstest, würdest du nicht fragen).
B. Selbst wenn Sie es wüssten, wüssten Sie nicht, welche Begriffe mit dem Problem verbunden sind.
C. Und selbst wenn Sie es wüssten, sind die Ergebnisse oft so verwirrend, dass Sie sie nicht einmal erkennen würden, wenn sie Ihnen direkt vor die Nase gesetzt werden. (Oder wie mein Großvater sagte, man könnte kein Wasser aus einem Stiefel gießen, wenn auf dem Boden eine Anleitung stünde.)

Codieren ist wie eine Fremdsprache

Es gibt auffallende Parallelen zwischen dem Erlernen von Code und dem Erlernen einer Fremdsprache. Ich habe die Erfahrung gemacht, dass Sprachschüler, egal ob Englisch oder andere Sprachen, dazu neigen, die Syntax schneller zu erfassen.

Ja, es gibt Muster und Logik in den Systemen.

Ja, manche Dinge sind eigenwillig und können nicht kurz und bündig in ihrem englischen Äquivalent wiedergegeben werden.

Ja, es gibt Ausnahmen zu den obigen zwei Punkten, die im Widerspruch zueinander stehen oder keinen Sinn ergeben, aber so ist es nun mal, also muss man es auswendig lernen.

Halb Pastor / Halb Wissenschaftler

Der vielleicht verrückteste Widerspruch, den ein Programmierer erfüllen muss, besteht darin, dass man einerseits wissen soll, wie alles funktioniert, und andererseits eine gesunde Mehrheit dem Glauben ankreiden muss.

Um zu programmieren, muss man Logik, Vernunft und Schlussfolgerungen anwenden. Fehlersuche ist ein deduktiver Prozess. Guter Code ist gut strukturiert, bewusst logisch und gut organisiert.

Andererseits benutzen wir Steine, die wir zum Denken gebracht haben (Computer). Wir verlassen uns auf Frameworks, Bibliotheken und Schnipsel, die von anderen Leuten geschrieben wurden und die wir entweder aus Zeitgründen nicht verstehen oder aus reinem Glauben übernehmen. In jeder Codezeile passiert so viel, dass wir die Funktion nie fertigstellen könnten, wenn wir innehalten und darüber nachdenken müssten, was sie alles tut.

Um Programmierer zu sein, muss man sowohl ein Teil des Glaubens eines Priesters/einer Priesterin als auch ein eiskalter Spock-Logiker sein.

Bild via Paramount Pictures.

Fazit

Wie ihr sehen könnt, haben wir viel Arbeit vor uns. Aber so wie wir nicht auf die Welt gekommen sind, ohne zu wissen, wie man spricht oder schreibt oder irgendeine der Aufgaben erledigt, die wir heute als Routine empfinden, mit denen wir aber einst zu kämpfen hatten: wir können es schaffen.

Die tiefe Wahrheit hinter dem Programmieren ist, dass es das Produkt ist, die besten Bemühungen – die guten Absichten – das ehrliche Geschenk einiger sehr kluger Menschen, um das Leben einfacher zu machen. Irgendein kluger Mensch, irgendwo, sagte: „Das nervt. Es muss einen besseren Weg als diesen geben.“

Und der Code nahm seinen ersten Atemzug.

Im nächsten Abschnitt gebe ich Ihnen einige Strategien an die Hand, die Ihnen diesen Prozess erleichtern und Sie auf dem Weg zu Ihren Zielen voranbringen. Code ist hier, um zu bleiben, er ist hier, um zu helfen, und wenn nichts anderes, werden Sie vielleicht sogar ein wenig Spaß haben.

Leave a Reply

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.