Wie man wie ein Programmierer denkt - Lektionen zur Problemlösung

Wenn Sie an Programmierung interessiert sind, haben Sie dieses Zitat möglicherweise schon einmal gesehen:

"Jeder in diesem Land sollte lernen, einen Computer zu programmieren, weil er Ihnen das Denken beibringt." - Steve Jobs

Sie haben sich wahrscheinlich auch gefragt, was es genau bedeutet, wie ein Programmierer zu denken? Und wie machst du das?

Im Wesentlichen,Es geht um einen effektiveren Weg zur Problemlösung .

In diesem Beitrag ist es mein Ziel, Sie auf diese Weise zu unterrichten.

Am Ende wissen Sie genau, welche Schritte Sie unternehmen müssen, um ein besserer Problemlöser zu werden.

Warum ist das wichtig?

Problemlösung ist die Meta-Fähigkeit.

Wir haben alle Probleme. Groß und Klein. Wie wir mit ihnen umgehen, ist manchmal ziemlich zufällig.

Wenn Sie kein System haben, können Sie auf diese Weise wahrscheinlich Probleme „lösen“ (was ich getan habe, als ich mit dem Codieren begonnen habe):

  1. Versuchen Sie eine Lösung.
  2. Wenn das nicht funktioniert, versuchen Sie es mit einem anderen.
  3. Wenn das nicht funktioniert, wiederholen Sie Schritt 2, bis Sie Glück haben.

Schau, manchmal hast du Glück. Aber das ist der schlechteste Weg, um Probleme zu lösen! Und es ist eine riesige Zeitverschwendung.

Der beste Weg besteht darin, a) einen Rahmen zu haben und b) ihn zu üben.

„Fast alle Arbeitgeber priorisieren zuerst die Fähigkeiten zur Problemlösung. Die Fähigkeiten zur Problemlösung sind fast einstimmig die wichtigste Qualifikation, nach der Arbeitgeber suchen. Mehr als Programmiersprachenkenntnisse, Debugging und Systemdesign. Demonstration des rechnerischen Denkens oder der Fähigkeit, große Probleme zu lösen Komplexe Probleme sind genauso wertvoll (wenn nicht sogar wertvoller) als die grundlegenden technischen Fähigkeiten, die für einen Job erforderlich sind. “ - Hacker-Rang (2018 Developer Skills Report)

Habe einen Rahmen

Um den richtigen Rahmen zu finden, folgte ich den Ratschlägen in Tim Ferriss 'Buch über das Lernen „Der 4-Stunden-Koch“.

Es führte mich dazu, zwei wirklich beeindruckende Personen zu interviewen: C. Jordan Ball (1. oder 2. von über 65.000 Nutzern auf Coderbyte) und V. Anton Spraul (Autor des Buches „Think Like a Programmer: Eine Einführung in die kreative Problemlösung“) ”).

Ich habe ihnen die gleichen Fragen gestellt und weißt du was? Ihre Antworten waren ziemlich ähnlich!

Bald werden auch Sie sie kennen.

Nebenbemerkung: Das bedeutet nicht, dass sie alles auf die gleiche Weise gemacht haben. Jeder ist anders. Du wirst anders sein. Aber wenn Sie mit Prinzipien beginnen, von denen wir uns alle einig sind, dass sie gut sind, werden Sie viel schneller viel weiter kommen.

"Der größte Fehler, den neue Programmierer machen, besteht darin, sich auf das Erlernen der Syntax zu konzentrieren, anstatt zu lernen, wie man Probleme löst." - V. Anton Spraul

Was sollten Sie also tun, wenn Sie auf ein neues Problem stoßen?

Hier sind die Schritte:

1. Verstehe

Wissen Sie genau, was gefragt wird. Die meisten schwierigen Probleme sind schwierig, weil Sie sie nicht verstehen (daher ist dies der erste Schritt).

Woher wissen Sie, wann Sie ein Problem verstehen? Wenn Sie es in einfachem Englisch erklären können.

Erinnern Sie sich, dass Sie an einem Problem hängen geblieben sind, es zu erklären beginnen und sofort Lücken in der Logik sehen, die Sie vorher nicht gesehen haben?

Die meisten Programmierer kennen dieses Gefühl.

Aus diesem Grund sollten Sie Ihr Problem aufschreiben, ein Diagramm kritzeln oder jemand anderem davon erzählen (oder etwas… manche Leute benutzen eine Gummiente).

"Wenn Sie etwas nicht in einfachen Worten erklären können, verstehen Sie es nicht." - Richard Feynman

2. Planen

Tauchen Sie nicht direkt in das Lösen ohne Plan ein (und hoffen Sie irgendwie, dass Sie sich durchschlagen können). Planen Sie Ihre Lösung!

Nichts kann Ihnen helfen, wenn Sie die genauen Schritte nicht aufschreiben können.

Bei der Programmierung bedeutet dies, dass Sie nicht sofort mit dem Hacken beginnen. Geben Sie Ihrem Gehirn Zeit, um das Problem zu analysieren und die Informationen zu verarbeiten.

Beantworten Sie diese Frage, um einen guten Plan zu erhalten:

"Welche Schritte sind bei Eingang X erforderlich, um Ausgang Y zurückzugeben?"

Nebenbemerkung: Programmierer haben ein großartiges Werkzeug, um ihnen dabei zu helfen ... Kommentare!

3. Teilen

Passt auf. Dies ist der wichtigste Schritt von allen.

Versuchen Sie nicht, ein großes Problem zu lösen. Du wirst weinen.

Teilen Sie es stattdessen in Unterprobleme auf. Diese Unterprobleme sind viel einfacher zu lösen.

Lösen Sie dann jedes Unterproblem einzeln. Beginnen Sie mit dem Einfachsten. Am einfachsten bedeutet, dass Sie die Antwort kennen (oder näher an dieser Antwort sind).

Danach bedeutet am einfachsten, dass dieses Teilproblem, das gelöst wird, nicht davon abhängt, dass andere gelöst werden.

Wenn Sie jedes Unterproblem gelöst haben, verbinden Sie die Punkte.

Wenn Sie alle Ihre „Unterlösungen“ verbinden , erhalten Sie die Lösung für das ursprüngliche Problem. Herzliche Glückwünsche!

Diese Technik ist ein Eckpfeiler der Problemlösung. Denken Sie daran (lesen Sie diesen Schritt noch einmal, wenn Sie müssen).

„Wenn ich jedem beginnenden Programmierer eine Fähigkeit zur Problemlösung beibringen könnte, wäre dies die Technik zur Reduzierung des Problems. Angenommen, Sie sind ein neuer Programmierer und werden gebeten, ein Programm zu schreiben, das zehn Zahlen und Ziffern liest heraus, welche Zahl die dritthöchste ist. Für einen brandneuen Programmierer kann dies eine schwierige Aufgabe sein, obwohl nur die grundlegende Programmiersyntax erforderlich ist. Wenn Sie nicht weiterkommen, sollten Sie das Problem auf etwas Einfacheres reduzieren. Wie wäre es, anstelle der dritthöchsten Zahl die höchste insgesamt zu finden? Immer noch zu hart? Was ist mit der größten von nur drei Zahlen? Oder das größere von zwei? Reduzieren Sie das Problem auf den Punkt, an dem Sie wissen, wie man es löst, und schreiben Sie die Lösung. Erweitern Sie dann das Problem leicht und schreiben Sie die passende Lösung neu. Fahren Sie fort, bis Sie wieder da sind, wo Sie begonnen haben. “ - V. Anton Spraul

4. Festgefahren?

Inzwischen sitzen Sie wahrscheinlich da und denken: "Hey Richard ... Das ist cool und alles, aber was ist, wenn ich feststecke und nicht einmal ein Unterproblem lösen kann?"

Atmen Sie zuerst tief ein. Zweitens ist das fair.

Mach dir aber keine Sorgen, Freund. Das passiert jedem!

Der Unterschied besteht darin, dass die besten Programmierer / Problemlöser eher neugierig auf Fehler sind als irritiert.

In der Tat sind hier drei Dinge zu versuchen, wenn Sie einem Whammy gegenüberstehen:

  • Debug: Gehen Sie Schritt für Schritt Ihre Lösung durch und versuchen Sie herauszufinden, wo Sie einen Fehler gemacht haben. Programmierer nennen dies Debugging (tatsächlich ist dies alles, was ein Debugger tut).
"Die Kunst des Debuggens besteht darin, herauszufinden, was Sie Ihrem Programm wirklich gesagt haben, anstatt was Sie dachten, dass Sie es gesagt haben." - Andrew Singer
  • Neubewertung:Geh einen Schritt zurück. Betrachten Sie das Problem aus einer anderen Perspektive. Gibt es etwas, das zu einem allgemeineren Ansatz abstrahiert werden kann?
„Manchmal verlieren wir uns so in den Details eines Problems, dass wir allgemeine Prinzipien übersehen, die das Problem auf einer allgemeineren Ebene lösen würden. […] Das klassische Beispiel hierfür ist natürlich die Summe einer langen Liste aufeinanderfolgender Ganzzahlen, 1 + 2 + 3 +… + n, die ein sehr junger Gauß schnell erkannte, war einfach n (n + 1) / 2 Dadurch wird der Aufwand vermieden, die Hinzufügung vornehmen zu müssen. “ - C. Jordan Ball

Nebenbemerkung: Eine andere Art der Neubewertung beginnt von neuem. Alles löschen und mit neuen Augen beginnen. Ich meine es ernst. Sie werden verblüfft sein, wie effektiv dies ist.

  • Forschung:Ahh, guter alter Google. Du hast das richtig gelesen. Egal welches Problem Sie haben, wahrscheinlich hat es jemand gelöst. Finde diese Person / Lösung. Tun Sie dies auch dann, wenn Sie das Problem gelöst haben! (Sie können viel aus den Lösungen anderer Leute lernen).

Vorsichtsmaßnahme: Suchen Sie nicht nach einer Lösung für das große Problem. Suchen Sie nur nach Lösungen für Unterprobleme. Warum? Denn wenn Sie nicht kämpfen (auch nur ein bisschen), werden Sie nichts lernen. Wenn Sie nichts lernen, haben Sie Ihre Zeit verschwendet.

Trainieren

Erwarten Sie nicht, nach nur einer Woche großartig zu sein. Wenn Sie ein guter Problemlöser sein wollen, lösen Sie viele Probleme!

Trainieren. Trainieren. Trainieren. Es wird nur eine Frage der Zeit sein, bis Sie erkennen, dass „dieses Problem leicht gelöst werden kann“.

Wie übe ich? Es gibt Optionen aus dem Wazoo!

Schachrätsel, mathematische Probleme, Sudoku, Go, Monopoly, Videospiele, Kryptokätzchen, bla… bla… bla….

Tatsächlich ist ein häufiges Muster bei erfolgreichen Menschen ihre Gewohnheit, „Mikro-Problemlösungen“ zu praktizieren. Zum Beispiel spielt Peter Thiel Schach und Elon Musk Videospiele.

"Byron Reeves sagte:" Wenn Sie sehen möchten, wie Unternehmensführung in drei bis fünf Jahren aussehen könnte, schauen Sie sich an, was in Online-Spielen passiert. " Elon [Musk], Reid [Hoffman], Mark Zuckerberg und viele andere sagen, dass Spiele für ihren Erfolg beim Aufbau ihrer Unternehmen von grundlegender Bedeutung waren. “ - Mary Meeker (Internet-Trendbericht 2017)

Heißt das, du solltest nur Videospiele spielen? Überhaupt nicht.

Aber worum geht es bei Videospielen? Das ist richtig, Problemlösung!

Was Sie also tun sollten, ist eine Möglichkeit zum Üben zu finden. Etwas, mit dem Sie viele Mikroprobleme lösen können (idealerweise etwas, das Ihnen Spaß macht).

Zum Beispiel genieße ich Codierungsherausforderungen. Jeden Tag versuche ich, mindestens eine Herausforderung zu lösen (normalerweise auf Coderbyte).

Wie gesagt, alle Probleme haben ähnliche Muster.

Fazit

Das war's Leute!

Jetzt wissen Sie besser, was es bedeutet, „wie ein Programmierer zu denken“.

Sie wissen auch, dass das Lösen von Problemen eine unglaubliche Fähigkeit ist, die es zu kultivieren gilt (die Meta-Fähigkeit).

Beachten Sie, dass Sie auch wissen, was Sie tun müssen, um Ihre Fähigkeiten zur Problemlösung zu üben.

Puh ... Ziemlich cool, oder?

Schließlich wünsche ich Ihnen viele Probleme.

Du hast das richtig gelesen. Zumindest wissen Sie jetzt, wie Sie sie lösen können! (Außerdem werden Sie lernen, dass Sie sich mit jeder Lösung verbessern).

„Gerade wenn Sie glauben, ein Hindernis erfolgreich überwunden zu haben, taucht ein anderes auf. Aber das ist es, was das Leben interessant macht. […] Das Leben ist ein Prozess, bei dem diese Hindernisse durchbrochen werden - eine Reihe von befestigten Linien, die wir durchbrechen müssen. Jedes Mal wirst du etwas lernen. Jedes Mal wirst du Kraft und Weisheit entwickeln und Perspektive. Jedes Mal fällt etwas mehr von der Konkurrenz weg. Bis alles, was übrig bleibt, du bist: die beste Version von dir. “ - Ryan Holiday (Das Hindernis ist der Weg)

Lösen Sie jetzt einige Probleme!

Und viel Glück?

Besonderer Dank geht an C. Jordan Ball und V. Anton Spraul. Alle guten Ratschläge hier kamen von ihnen.

Danke fürs Lesen! Wenn es Ihnen gefallen hat, testen Sie, wie oft Sie in 5 Sekunden treffen können. Es ist ein großartiges Cardio für Ihre Finger UND hilft anderen Menschen, die Geschichte zu sehen.