
Wenn Sie an Programmierung interessiert sind, haben Sie vielleicht den Satz gehört:
"Jeder muss Programmieren lernen, weil es Ihnen das Denken lehrt."
- Steve Jobs
Vielleicht haben Sie sich auch gefragt, was es bedeutet, als Programmierer zu denken?
In der Tat sprechen wir über einen effizienteren Weg, um Probleme zu lösen.
Dieser Beitrag soll Ihnen dies beibringen.
Nachdem Sie es gelesen haben, werden Sie genauer verstehen, was zu tun ist, um die besten Lösungen zu finden.
Warum ist das wichtig?
Problemlösung ist eine grundlegende Fähigkeit.
Wir lösen ständig Probleme. Groß und klein. Wie machen wir das? Manchmal ist es gut ... wenn du Glück hast.
Wenn Sie keinen systematischen Ansatz haben, lösen Sie die Probleme wahrscheinlich wie folgt (ich habe dies getan, als ich gerade mit dem Codieren begonnen habe):
- eine Lösung versuchen
- Wenn es nicht passt, versuchen Sie es mit einem anderen.
- Wenn es nicht funktioniert, wiederholen Sie Schritt 2 bis zum Sieg.
Sie können Glück haben, aber das ist der schlimmste Weg! Und es kann viel Zeit in Anspruch nehmen.
Der beste Weg:
- einen systematischen Ansatz haben
- setzen Sie es in die Praxis um.
„Die meisten Arbeitgeber halten die Fähigkeit zur Lösung von Problemen für wichtiger.
Die Fähigkeit, Probleme fast einstimmig zu lösen, ist die wichtigste Fähigkeit, nach der Arbeitgeber suchen ... Wichtiger als Kenntnisse in Programmiersprachen, Debugging und Systemdesign.
Eine Demonstration des integrierten Denkens und die Fähigkeit, große komplexe Probleme zu lösen, sind genauso wertvoll (wenn nicht sogar mehr) als die grundlegenden technischen Fähigkeiten, die für die Arbeit erforderlich sind. “
- Hacker-Rang ( 2018 Developer Skills Report )
Systematischer Ansatz
Um den richtigen Ansatz zu finden, folgte ich den Ratschlägen von Tim Ferriss 'Buch über das Unterrichten
des 4-Stunden-Kochs .
Dies führte mich zu einem Interview mit zwei wirklich beeindruckenden Personen:
C. Jordan Ball (1. oder 2. von 65.000
Coderbyte- Benutzern) und
V. Anton Spraul (Autor von
Think of it as a Programmer. Kreativer Ansatz zum Erstellen von Code. ").
Ich habe ihnen die gleichen Fragen gestellt und weißt du was? Ihre Antworten waren sehr ähnlich!
Bald wirst du sie auch erkennen.
Hinweis: Dies bedeutet nicht, dass alle dasselbe tun. Sie sind verschiedene Menschen, und Sie sind anders als sie. Wenn Sie jedoch mit den richtigen Grundprinzipien beginnen, ist das Ergebnis viel besser und viel schneller."Der schwerwiegendste Fehler, den ich bei jungen Programmierern sehe, besteht darin, sich auf das Erlernen der Syntax zu konzentrieren, anstatt zu lernen, wie man Probleme löst."
- V. Anton Spraul
Was tun, wenn Sie vor einer neuen Herausforderung stehen?
Gehen wir die Schritte durch:
1. Verständnis
Verstehe, was genau getan werden muss. Die meisten Aufgaben sind schwierig, weil Sie sie nicht verstehen (weshalb dies der erste Schritt ist).
Woher wissen Sie, dass Sie die Essenz des Problems verstehen? Versuchen Sie es im Klartext zu erklären.
Erinnern Sie sich an den Fall, als Sie auf eine Aufgabe fixiert waren und anfingen, sie sich selbst zu erklären. Zu diesem Zeitpunkt werden logische Fehler angezeigt, die Sie zuvor noch nicht gesehen haben.
Die meisten Programmierer kennen dieses Gefühl.
Aus diesem Grund sollten Sie Ihre Aufgabe beschreiben, ein Diagramm zeichnen oder jemandem davon erzählen (einige verwenden eine
Gummiente ).
"Wenn Sie etwas nicht in einfacher Sprache erklären können, verstehen Sie es nicht."
- Richard Feynman
2. Planung
Beginnen Sie nicht, ein Problem ohne Plan zu lösen, in der Hoffnung, nicht verwirrt zu werden. Planen Sie Ihre Entscheidung!
Bei der Programmierung müssen Sie nicht fortfahren. Geben Sie Ihrem Gehirn Zeit, Informationen zu analysieren und zu verarbeiten.
Um einen guten Plan zu erhalten, beantworten Sie sich eine einfache Frage:
"Welche Schritte müssen bei Anwendung auf Eingang X unternommen werden, um Y am Ausgang zu erhalten?"
Hinweis: Programmierer haben hierfür ein großartiges Werkzeug. Kommentare!3. Zersetzung
Dies ist der wichtigste Schritt. Seien Sie aufmerksam!
Versuchen Sie nicht, ein großes Problem zu lösen.
Teilen Sie es stattdessen in Unteraufgaben. Ihre Lösung wird viel einfacher sein.
Lösen Sie dann die Unteraufgaben, beginnend mit der einfachsten. Wenn die Aufgabe einfach erscheint, bedeutet dies, dass Sie die Antwort kennen (oder in der Nähe sind).
Lösen Sie jede Teilaufgabe unabhängig von den anderen und kombinieren Sie die Ergebnisse nach der Lösung.
Wenn Sie all die kleinen Aufgaben kombinieren, erhalten Sie die Lösung für das Original.
Glückwunsch!
Diese Methode ist der Eckpfeiler der Problemlösung. Denken Sie daran (lesen Sie diesen Schritt gegebenenfalls erneut).
Wenn ich jedem jungen Programmierer beibringen könnte, wie man Probleme löst, würde dies die technische Verschuldung verringern.
Angenommen, Sie möchten ein Programm schreiben, das 10 Ziffern benötigt und das drittgrößte zurückgibt. Für einen Anfänger kann dies eine entmutigende Aufgabe sein, obwohl nur Kenntnisse der grundlegenden Syntax erforderlich sind.
Wenn Sie nicht weiterkommen, müssen Sie vereinfachen. Wie wäre es, anstelle der drittgrößten Zahl die größte zu finden? Immer noch zu kompliziert? Wie finde ich die größte der drei Zahlen? Oder mehr von beiden?
Reduzieren Sie das Problem, bis Sie verstehen, wie es gelöst werden kann. Notieren Sie die Entscheidung. Erweitern Sie dann die Aufgabe, bis Sie zur ursprünglichen Frage zurückkehren.
- V. Anton Spraul
4. Festgefahren?
Jetzt sitzen Sie wahrscheinlich und denken: "Hey, das ist alles cool, aber was ist, wenn ich dieses Problem nicht lösen kann?"
Atme zuerst tief ein. Keine Sorge. Es passiert jedem!
Der einzige Unterschied besteht darin, dass die besten Programmierer Fehler behoben und Probleme mit Interesse gelöst haben, nicht mit Ärger.
In der Tat sind hier drei Dinge, die Sie versuchen sollten, wenn Sie mit Schwierigkeiten konfrontiert sind:
- Debuggen Überprüfen Sie Schritt für Schritt, wo Sie bei Ihrer Entscheidung falsch liegen könnten. Programmierer nennen dies Debugging.
"Die Kunst des Debuggens besteht darin, den Unterschied zwischen dem, was Sie im Programm geschrieben haben, und dem, was Sie schreiben wollten, herauszufinden."
- Andrew Singer
- Änderung des Ansatzes. Geh einen Schritt zurück. Betrachten Sie die Aufgabe aus einem anderen Blickwinkel. Ist es möglich, die Implementierung zu ignorieren und einen allgemeineren Ansatz anzuwenden?
„Manchmal gehen wir so detailliert vor, dass wir die allgemeinen Prinzipien, mit denen wir das Problem auf einer höheren Ebene lösen können, nicht berücksichtigen. [...]
Ein klassisches Beispiel hierfür ist natürlich die Summe einer langen Liste aufeinanderfolgender Ganzzahlen 1 + 2 + 3 + ... + n, die der junge Gauß leicht mit der Formel n (n + 1) / 2 berechnen kann, um die Probleme zu vermeiden, die mit der Erhöhung der Anzahl der Elemente verbunden sind. “
- C. Jordan Ball
Hinweis: Manchmal ist es besser, alles zu löschen und mit neuen Kräften von vorne zu beginnen. Ich meine es ernst. Sie werden überrascht sein, wie effektiv dies sein kann. - Forschung. Oh, guter alter Google . Egal was Ihre Aufgabe ist, höchstwahrscheinlich hat sie bereits jemand vor Ihnen gelöst. Finden Sie diese Person oder Lösung. Mach es auch, wenn du es selbst herausfindest. Sie können viel von anderen Menschen lernen.
Achtung: Suchen Sie nicht nach einer Lösung für ein großes Problem. Suchen Sie nach Lösungen nur für kleine Unteraufgaben. Warum? Wenn Sie sich nicht (zumindest ein wenig) anstrengen, werden Sie nichts Neues lernen. Wenn Sie nichts gelernt haben, haben Sie Ihre Zeit verschwendet.
Übe
Erwarten Sie nicht, in einer Woche Profi zu werden. Um Probleme gut zu lösen, müssen Sie viele Probleme lösen!
Übe. Übe. Und wieder üben. Nur mit der Zeit können Sie sagen: „Dieses Problem kann leicht mit Hilfe von <hier Ihre Lösung ersetzen> gelöst werden.“
Wie trainiere ich? Es gibt interessante Möglichkeiten!
Schachpuzzles, mathematische Probleme, Sudoku, Go, Monopol, Videospiele usw.
In der Tat ist die übliche Praxis unter erfolgreichen Menschen ihre Gewohnheit, „Mikrotasks zu lösen“. Zum Beispiel spielt Peter Thiel Schach und Elon Musk Videospiele.
Byron Reeves sagte: "Wenn Sie sehen möchten, wie Führungskräfte in drei bis fünf Jahren aussehen können, schauen Sie sich Online-Spiele an."
Schneller Vorlauf. 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 )
Bedeutet das, dass Sie nur Spiele spielen sollten? Natürlich nicht.
Aber was ist die Essenz der meisten Spiele? Das ist richtig, um Probleme zu lösen!
Also, was sollte in praktischen Übungen sein. Etwas, mit dem Sie viele Mikroaufgaben lösen können (und das Ihnen im Idealfall gefällt).
Zum Beispiel mag ich Programmieraufgaben. Und jeden Tag versuche ich mindestens eine zu lösen (hauptsächlich auf
Coderbyte ).
Wie gesagt, alle Aufgaben haben ähnliche Lösungsmodelle.
Fazit
Das ist alles!
Jetzt wissen Sie, was es bedeutet, wie ein Programmierer zu denken.
Sie wissen auch, dass das Lösen von Problemen eine unglaubliche (grundlegende) Fähigkeit ist, die entwickelt werden muss.
Achten Sie darauf, jetzt wissen Sie auch, wie Sie Ihre Fähigkeiten zur Problemlösung üben können!
Schließlich möchte ich, dass Sie sich vielen Herausforderungen stellen.
„Wenn Sie glauben, ein Hindernis erfolgreich überwunden zu haben, erscheint ein anderes. Aber das macht das Leben interessant. [...]
Das Leben ist der Prozess der Überwindung von Hindernissen - Befestigungen, durch die wir durchbrechen müssen.
Jedes Mal, wenn Sie etwas Neues lernen.
Jedes Mal entwickeln Sie Kraft, Weisheit und Perspektiven.
Jedes Mal wird es weniger Wettbewerb geben. Und am Ende bleibt nur Ihre verbesserte Version übrig. “
- Ryan Holiday ( Das Hindernis ist der Weg )
Löse jetzt die Probleme!
Und möge das Glück mit dir sein!
Besonderer Dank geht an C. Jordan Ball und V. Anton Spraul. Für den hilfreichen Rat, den sie gaben.
Außerdem hätte ich ohne
Lambda School meine Programmierkenntnisse nicht so schnell erlangen können. Ich kann ihnen nicht danken oder empfehlen.