Jeder sagt dasselbe: "Ein echter Programmierer weiß, wie man mit echten Problemen umgeht." Aber sie vergessen, wie sie diese Fähigkeit erlernt haben oder wo: Sie wird nicht in Schulen unterrichtet.
Was kann ich tun, um meine Fähigkeit zur Lösung komplexer Programmierprobleme zu verbessern? Welche Strategien haben für Sie gearbeitet? Gibt es bestimmte Bereiche, auf die ich mich konzentrieren sollte, wie Algorithmen oder Entwurfsmuster?
Antworten:
Einige Techniken, die funktionieren könnten oder nicht:
quelle
Verwenden Sie nach Bedarf den R- oder L-Modus
R-Mode ist der kreative, nonverbale Ansatz, den wir üblicherweise mit dem Unterbewusstsein verbinden. Der L-Modus ist der lineare, logische, verbale Ansatz, der mit Ihrer "inneren Stimme" verbunden ist.
Wenn ein Problem unlösbar zu sein scheint, liegt es wahrscheinlich daran, dass Sie versuchen, es mit dem falschen Denkmodus zu lösen. Für Programmierer ist der Standard-Thinking-Modus in der Regel der L-Modus, sodass Sie ihn möglicherweise vorübergehend ausschalten und auf den R-Modus zugreifen können.
So greifen Sie auf das R-Mode-Denken zu
Es gibt viele Möglichkeiten, aber vielleicht versuchen Sie es mit der Poincare-Methode (benannt nach dem berühmten Mathematiker).
Schreiben Sie alles auf, was Sie über das Problem wissen. Lösen Sie sofort alle einfachen Aspekte (falls vorhanden). Wählen Sie ein einzelnes Objekt aus der Liste der verbleibenden "schwierigen Probleme" aus und gehen Sie dann spazieren, ohne gestört oder abgelenkt zu werden.
Versuchen Sie nicht, das Problem während des Spaziergangs zu analysieren, sondern lassen Sie Ihre Gedanken schweifen und beobachten Sie alle interessanten Bilder oder Empfindungen, die im Zusammenhang mit dem Problem auftreten könnten. Lass sie zusammenwachsen. Wenn Inspirationen auftauchen, stoppen Sie sofort die Wanderung und kehren Sie zurück, um die gewonnenen Erkenntnisse aufzuschreiben.
Spülen und wiederholen, bis alle Probleme Einsichten haben. Dann erkunden Sie die Einsichten.
Buchempfehlung
Auch das Lesen von Pragmatischem Denken und Lernen kann Ihnen helfen, ein besserer Problemlöser zu werden. (Ich scheine in letzter Zeit viel auf dieses Buch zu verweisen ...)
quelle
Jemanden fragen ...
Nein im Ernst. Ihre größte Ressource kann die Person sein, die neben Ihnen sitzt. Fragen Sie sie nicht einmal nach der Antwort auf das Problem, sondern bitten Sie sie, sich neben Sie zu setzen und das Problem zu erklären.
Oft wirst du es herausfinden, während du es verbalisierst.
Manchmal stellt die andere Person eine Frage oder weist auf ein Detail hin, das das geistige Schleusentor öffnet.
Schließlich werden Sie lernen, Dinge in Ihrem Kopf ohne die Verwendung einer Marionette zu verbalisieren und die wichtigsten Details des Problems schneller zu erkennen.
Und wenn alles andere fehlschlägt, können sie Ihnen vielleicht eine Technik zeigen, an die Sie nicht gedacht hätten.
quelle
Eigentlich lautet meine kurze Antwort "Weitere Probleme lösen". Aber der Punkt ist: Konzentriere dich wirklich auf die Probleme und gib nicht auf. Fragen Sie nicht nach StackOverflow oder was auch immer. (StackOverflow zu lesen ist natürlich in Ordnung!) Versuchen Sie alles, bis Sie eine nahezu funktionierende Lösung erhalten, und dann haben Sie Ihr Ziel fast erreicht. Fahren Sie fort, bis Sie eine zufriedenstellende Lösung gefunden haben.
Für mich sind Problemlösungen zwei Dinge:
Punkt 2 ist meiner Meinung nach sehr wichtig, da er Sie dazu zwingt, Ihr Denken zu ändern, je länger Sie an einem Problem festhalten. Außerdem können Sie mehr Zeit mit der Problemlösung verbringen und so Ihre Fähigkeiten noch weiter verbessern. ;-)
Ich empfehle Ihnen übrigens, Edward de Bono zu lesen. Obwohl ich meine Fähigkeiten zur Problemlösung hauptsächlich durch ein Physikstudium erworben habe, ist sein Schreiben wirklich interessant.
Nun, und mein Problemlösungs-Toolkit lautet wie folgt:
Bitte beachten Sie, dass die meisten dieser Tools rekursiv angewendet werden können.
Und mein Algorithmus lautet wie folgt:
Schritt 1. ist eine schwierige Entscheidung, aber Sie treffen bessere Entscheidungen, je mehr Sie üben.
Oh und ich vergesse fast die wichtigste Zutat:
Denken Sie positiv über den gesamten Prozess nach. Denken Sie nicht "Ich hoffe, XYZ wird das Problem jetzt lösen." Denke eher: "Wenn XYZ nicht funktioniert, dann weiß ich, dass YZX nicht die Problemquelle sein kann und ich werde prüfen, ob ZYX funktioniert." Das Lösen von Problemen kann manchmal Spaß machen, insbesondere dann, wenn der Prozess des Findens eines Problems elegant und informativ ist.
quelle
Arbeiten Sie auch an der Fähigkeit, Probleme zu identifizieren. Manchmal muss man erkennen, dass es ein Problem gibt, bevor man es lösen kann. In der Schule benötigen sie zu viele Antworten und zu wenig Fragen von den Schülern.
Finden Sie Menschen in Ihrer Nähe, die Probleme lösen, und fragen Sie sie, wie sie vorgehen.
Seien Sie bereit, falsch zu liegen. Sie werden sich nicht verbessern, wenn Sie sie alle für sich behalten und Sie werden nicht von Nutzen sein.
quelle
Der Hauptvorteil einer Informatikausbildung für Softwareingenieure ist die Fähigkeit, Abstraktionen zu erstellen und zu verstehen. Abstraktionen werden verwendet, um allgemeine Funktionen wie String-Klassenmethoden in engen, wiederverwendbaren Paketen zusammenzufassen, mit denen wir uns auf das größere Problem konzentrieren können.
Lernen Sie, Abstraktionen zu erkennen und zu erstellen :
Vor allem aber lehren uns Abstraktionen, wie man ein Problem in kleinere, handlichere Teile aufteilt . In Kombination mit einem naturwissenschaftlichen Hintergrund kann die Kombination dieser Fähigkeiten einen Ingenieur hervorbringen, der in der Lage ist, Lärm zu vermeiden und das Problem auf den Punkt zu bringen.
Lernen Sie, Probleme mit der wissenschaftlichen Methode zu lösen :
Bei der Fehlerbehebung bei einer Produktionsanwendung, bei der ein schwer zu findendes Problem vorliegt, ist es manchmal hilfreich, die Anwendung tatsächlich weiter zu unterbrechen (in einer Nicht-Produktionsumgebung), um mehrere Variablen zu entfernen, um eine zu isolieren und zu beseitigen.
Zusammenfassend lässt sich sagen, dass die wissenschaftliche Methode, die aus allen für ein Informatikstudium erforderlichen Wahlfächern in Physik und anderen Naturwissenschaften gelernt wurde, zur Lösung dieser Probleme beiträgt, als würden wir ein Placebo und eine neue Arzneimittelstudie an einer Reihe von Freiwilligen ausprobieren. Wie Wissenschaftler, die manchmal etwas verschlechtern müssen, um es zu verbessern, müssen wir als Ingenieure manchmal dasselbe tun.
Ein solches wissenschaftliches Denken kann im Allgemeinen nur aus der Erfahrung mit einem naturwissenschaftlichen Hintergrund entstehen. Manchmal kann das Lösen eines Problems nicht als linearer Pfad von A nach B angesehen werden.
Kurz gesagt, studieren Sie Informatik, studieren Sie andere wissenschaftliche Gebiete, lernen Sie funktionale Programmierung. Dies wird Ihnen helfen, wie ein Wissenschaftler zu denken und über den Tellerrand hinaus zu denken.
quelle
Es hängt alles davon ab, welche Art von Problemen Sie lösen möchten. Es ist jedoch eine gute Sache, zu lernen, logisch zu denken, wenn Sie dies nicht bereits tun.
Alles in allem, und du wirst mich dafür hassen, dass ich es sage, aber Übung macht den Meister. Ich wurde nicht aus dem Mutterleib gezogen, weil ich wusste, wie man ein guter Problemlöser ist, und niemand anderes tat es. Sie müssen üben und lernen, wie man Dinge selbst macht. Wenn Sie noch in der Schule sind und keinen Programmier- / Informatikunterricht haben, eignen sich Mathematik und Naturwissenschaften auch gut, um die Entwicklung dieser Fähigkeiten zu fördern.
quelle
Ich denke, was Sie suchen, ist Heuristik in der Informatik.
Wenn es darum geht, was 99% von uns in den Gräben tun, gibt es unter der Sonne wirklich nichts Neues. Vielleicht sehen Sie ein Problem und erkennen es als ein DP-Problem oder ein anderes als ein Problem, das von Memoization usw. profitieren könnte.
Wie erlangst du dieses Wissen? Ein richtiger CS-Abschluss ist ein guter Anfang ... Nicht Software-Engineering oder Informationssysteme, aber das Zeug, das die meisten Studenten beklagen, dass sie "nicht praktisch" sind.
Sie können dies auf eigene Faust tun, aber es wird wahrscheinlich schwieriger sein. Ich würde mit diesen beiden Kursen beginnen:
Einführung in Algorithmen
Tolle Ideen in der theoretischen CS
quelle
Meine Antworten beziehen sich speziell auf das Codieren, können aber auf alles angewendet werden.
quelle
In Bezug auf die Praxis kann ich Ihnen sagen, was ich tue. Ich interessiere mich mehr für angewandte Mathematik als für Programmierung, aber angewandte Mathematik, wie sie auf das Rechnen angewendet wird, ist eine Art Programmierung. Ich sehe Probleme und Lösungen. Vorher (oder manchmal nachher, wenn mein Job eine rechtzeitige Lösung erfordert), verlinke ich zu einer bekannten Lösung - oder einer vorhandenen Codebibliothek - und frage mich gerne: "Wenn dies ein jungfräuliches Problem wäre - Sie werden es nicht finden können eine Dosenlösung, wie würden Sie vorgehen? " Wenn die Antwort etwas unkompliziert ist, sollten Sie eine Lösung schreiben (Analyse oder ein Computerprogramm, um sie zu lösen). Wenn Sie komplizierte Endfälle ignorieren, sind Sie daran interessiert, Ansätze und Algorithmen zu untersuchen, ohne eine vorhandene Bibliothek neu zu erfinden. Wenn die Lösung zu viel Aufwand erfordert, programmieren Sie nicht die vollständige Lösung. aber denken Sie zumindest an die Art von Datenstrukturen und Methoden, die Sie verwenden möchten. Denken Sie auch über alternative Methoden nach.
quelle
Es gibt eine großartige SO-Frage dazu.
Meine Antwort war:
quelle
Schach spielen
Schach spielen ist ein ausgezeichneter Trainer zur Lösung von Programmierproblemen. Die Schichten der Probleme und die Logikbäume sind sehr gut miteinander verbunden. Es hilft Ihnen auch, vorausschauend zu denken und zu planen, bevor Sie einen suboptimalen Weg beschreiten und Zeit verschwenden.
Schach erfordert auch ein Gleichgewicht zwischen dem linken und dem rechten „Denkmodus“. Wenn Sie zu analytisch werden, können Sie in dem Versuch, alles zu berechnen, ins Stocken geraten, was unmöglich ist. Jede kreative Inspiration muss jedoch mit einer Berechnung überprüft werden, um sicherzustellen, dass sie mit der konkreten Realität der Situation übereinstimmt. Harte Probleme sind genau so.
Schach zeigt auf sehr lineare Weise, wie Lernen und Üben zu einer soliden Verbesserung führen. Dies gilt auch für das Lösen von Programmproblemen.
Schachspielen kann Ihnen auch helfen, einen guten Überblick darüber zu bekommen, wie viel es zu lernen gibt. Obwohl Sie seit 10 Jahren programmieren (oder Schach spielen), sind Sie noch kein Großmeister.
quelle
Ich habe kürzlich die Probleme bei Project Euler gelöst . Die Probleme sind unterschiedlich schwer. Die Lösungen erfordern normalerweise keine große Menge an Code, aber Sie müssen viele Faktoren wie die Laufzeit Ihres Algorithmus berücksichtigen. Sie können eine beliebige Sprache verwenden, indem Sie einfach eine Antwort eingeben. Es gibt eine gute Zusammenfassung einer optimalen Lösung für viele Probleme und viele Diskussionen über jedes Problem. Versuchen Sie, jeden Tag ein Problem zu lösen, und Sie werden erstaunt sein, um wie viel sich Ihre Problemlösung und -analyse verbessert. Versuchen Sie, dasselbe Problem in vielen Sprachen zu lösen, z. B. in einer prozeduralen Sprache (möglicherweise C ++), einer Skriptsprache (wie Python) und einer funktionalen Sprache (wie F #).
quelle
Ich habe einen naturwissenschaftlichen Hintergrund. Wenn ich mir ein Problem anschaue, tendiere ich dazu, Taktiken aus der wissenschaftlichen Methode zu verwenden . Ich mag es besonders, "Experimente" basierend auf Hypothesen zu erstellen und "Kontrollen" zu verwenden, also werde ich etwas bauen und dann nur eine Sache ändern / hinzufügen und sehen, was das Ergebnis dieser einen Änderung / Hinzufügung ist und ob ich Wenn ich nicht das benötigte Ergebnis erhalte, schalte ich es zurück und ändere etwas anderes. Dies funktioniert gut für die Fehlerbehebung / das Debuggen von Code. Manchmal bekommst du die Antwort, die du suchst, aber dabei lernst du immer etwas Neues, auch wenn du versagst. Ich lerne auch gerne durch Reduktionismus- etwas zu nehmen, das bereits existiert (immer gut, um mit etwas anzufangen, das Sie vielleicht nicht verstehen, aber das funktioniert) und das für mich komplex aussieht, und zu prüfen, ob ich es in seine Bestandteile zerlegen und lernen kann, wie sie zuerst funktionieren. Manchmal ist es für mein Gehirn einfacher, mit Lernen wie diesem umzugehen, anstatt sich einem Problem ganzheitlich zu nähern, und ich kann dieses Wissen verwenden, um andere ähnlich komplexe Dinge selbst aufzubauen. Ich empfehle auch, Bücher über Logik und Argumentation zu lesen und Werke sowohl von klassischen als auch von modernen Denkern auszuwählen (beginne mit Aristoteles und arbeite dich nach oben). Sie können Ihnen einige der Grundlagen der grundlegenden Logik vermitteln, die Sie zur Problemlösung in Computern verwenden können. Und wenn Sie ein Problem nicht lösen können und schon eine Weile daran arbeiten, machen Sie eine Gehirnpause. Das Nachdenken über einen bestimmten Aspekt eines Themas ist manchmal nachteilig. Jeder braucht Pausen :)
quelle
Der schwierigste Teil der Problemlösung ist "Perceptual Narrowing".
Sie suchen sich etwas aus, das das Problem zu sein scheint, und versuchen es hartnäckig, bis Sie erschöpft sind und keine Fortschritte mehr machen.
Der Weg, dies zu tun, besteht darin, sicher zu sein - absolut sicher -, dass Sie das Problem wirklich verstehen. "Das richtige Problem lösen" ist der wichtigste Teil der Problemlösung.
Manchmal nennen sie das "Denken über den Tellerrand". "The Box" ist eine enge Sichtweise, die das eigentliche, grundlegende Problem möglicherweise nicht enthält. Über den Tellerrand hinausdenken heißt, nach dem richtigen Problem zu suchen, das es zu lösen gilt.
Es gibt zahlreiche Bücher über Strategien zur Vermeidung der Einengung, die mit einer vorzeitigen Konzentration auf das falsche Problem einhergehen.
Meistens besteht der Trick darin, das tatsächliche Ergebnis zu ermitteln. Finden Sie dann heraus, was dieses wünschenswerte Ergebnis blockiert.
quelle
Ehrlich gesagt denke ich, dass jeder anders ist, also ist jeder andere Weg, um ein besserer Problemlöser zu werden. Sie können aus den Erfahrungen anderer Menschen lernen, aber am Ende müssen Sie Ihren eigenen Weg gehen. Dies ist im Wesentlichen etwas auf die "harte Tour" zu lernen, aber es ist in diesem Fall effektiv.
Hier ist, wie ich anfing, meine Problemlösung zu verbessern, obwohl ich noch kein großartiger Problemlöser bin, nur ein besserer als im letzten Jahr. Ich erhielt ein neues Projekt bei der Arbeit, das die Erweiterung einer Open-Source-Zeiterfassungssoftware umfasste, indem drei neue Berichte für das Management hinzugefügt wurden. Diese Software wurde in einer Sprache geschrieben, die ich noch nie verwendet hatte, und sie war schlecht dokumentiert und stark verschleiert. Ich habe viel recherchiert und dann habe ich einfach in kleinen Schritten an den Berichten gearbeitet. Sobald ich grundlegende Funktionen hatte, habe ich sie verbessert und schließlich weitere Funktionen hinzugefügt.
Mit anderen Worten, ich empfehle Ihnen, ein reales Waschbecken- oder Schwimmprojekt zu finden, an dem Sie arbeiten können. Wenn Sie derzeit als Programmierer beschäftigt sind, suchen Sie sich ein Projekt oder fragen Sie Ihren Chef nach einem. Wenn dieses Szenario nicht möglich ist, finden Sie einen außerhalb der Arbeit, möglicherweise Vertrag / freiberufliche Arbeit oder etwas. Ich löse Probleme sehr gut und sehr schnell, wenn ich muss und ich behalte dieses Wissen aufgrund der Intensität des Projekts. Wenn dies für Sie nicht funktioniert, tun Sie einfach das, was alle anderen in diesem Thread vorschlagen :).
quelle
Die Antwort liegt in der Frage selbst, indem sie unterschiedliche Lösungen hervorbringt. Es gibt immer mehr als eine Lösung (z. B. Sortieren kann auf verschiedene Arten erfolgen, z. B. Blasensortierung, Auswahlsortierung usw.). Sie müssen nur eine Möglichkeit auswählen, wie Sie dies effizient ausführen können (Sortieren). Versuchen Sie es das nächste Mal mit anderen und so weiter ..... Und Bücher zum Lösen von Problemen ..... Keine Sie können die Fähigkeiten zum Lösen von Problemen nicht aus Büchern lernen. Je mehr Code Sie ausführen, desto mehr Wissen erhalten Sie. Viel Glück
quelle
Es ist für einen Programmierer einfach, ein Problem mental anzugreifen, indem er visualisiert, wie das Problem mit seiner bevorzugten Programmiersprache gelöst werden kann. Genau wie der klassische Schreiner, der alle Probleme als Nägel ansieht, wenn sein Lieblingswerkzeug der Hammer ist.
Ich denke, die beste Problemlösungsübung kommt, wenn man über das praktische Niveau hinausgeht und man denkt, "das ist es, was ich brauchen würde, um es optimal zu lösen". In einigen Fällen müssen Sie möglicherweise (viel) Neues lernen, um die Lösung überhaupt anwenden zu können, aber der entscheidende Punkt ist, dass Ihre Fähigkeit, eine Lösung zu erarbeiten, nicht auf Ihre historischen und vorhandenen Techniken beschränkt sein sollte.
Ein altes praktisches Beispiel für mich ist, dass ich gelernt habe, wie man effizientes kooperatives Multitasking umsetzt, als ich feststellte, dass mein Problem keine präventiven Threads benötigt, obwohl ich normalerweise direkt in meine Komfortzone gegangen wäre, in der all diese Mutexe aufgeschlagen wurden (das scheinen sich irgendwann immer nicht mehr wohl zu fühlen ..).
quelle
Bei der Anwendungsentwicklung sind viele der Probleme, denen wir gegenüberstehen, entweder unsere eigene Erfindung oder die Erfindung des Idioten, den wir geerbt haben und von dem die Codebasis durcheinander gebracht wurde. Bei der Lösung eines Problems kommt es häufig darauf an , die Quelle zu finden . Wenn wir erst einmal herausgefunden haben, wo es passiert, ist oft nur Kompetenz gefragt, um es zu lösen .
Zu diesem Zweck:
Das gesamte Gehirntraining auf der Welt ist nutzlos, ohne dass das Gehirn Informationen verwenden kann. Um ein Problem zu lösen, müssen Sie zuerst die Möglichkeiten kennen ! Selbst dann ist es viel schneller, mit guten Informationen zu arbeiten, als nur das Problem zu beschreiben.
Ich könnte spekulieren, bis die Kühe nach Hause kommen, warum etwas zu lange dauert, um ausgeführt zu werden. Wenn ich jedoch "Lassen Sie uns zuerst einige Daten abrufen" sage, wird möglicherweise eine ganze Reihe von Ausnahmen ausgelöst, und mir wird klar, dass ich dies stattdessen in eine if-Anweisung ändern könnte. Ohne zu wissen, wie man die Informationen sammelt, zu wissen, dass Ausnahmen auf meiner Plattform einen erheblichen Aufwand bedeuten und dass es eine schnellere Möglichkeit gibt, dies zu überprüfen, bevor man es versucht, würde ich das Problem nie lösen.
quelle
Ihre Antwort besteht aus zwei Teilen:
a) Techniken für die eigentliche Problemlösung
b) Machen Sie Ihr Gehirn von Natur aus "besser" im Denken und Lösen von Problemen
Es gab immer ein paar großartige Antworten zur Technik (vorausgesetzt, Sie kennen das Problem usw.), deshalb werde ich das nicht so sehr behandeln. Was das Training Ihres Gehirns angeht, gibt es ein paar Dinge, die Sie tun können, um diese Synapsen zu überqueren und mehr Verbindungen herzustellen
1) Lerne eine neue Sprache, eine echte Sprache (wie Französisch oder Chinesisch könnte heutzutage eine gute Wette sein)
2) Lernen Sie ein neues Instrument zu spielen
3) Mach etwas Künstlerisches wie malen, zeichnen oder skulptieren
4) Scrabble spielen oder Kreuzworträtsel lösen
5) Tanze so, wie du es meinst. Nein, ich mache keine Witze. Es hat sich gezeigt, dass Tanzen einen Einfluss auf Ihr Gehirn und Ihr Denken hat
6) Erweitern Sie Ihre Erfahrungen. Innovative Lösungen ergaben sich aus der Anwendung einer Theorie in einem Bereich in einem anderen. Studieren Sie also verschiedene Bereiche und Bereiche, die Sie interessant finden
7) Übung, Übung ist von entscheidender Bedeutung für die Verbesserung des Denkprozesses
Abschließend möchte ich Ihnen meinen besten Tipp zur Lösung schwerer Probleme geben: Machen Sie einen langen Spaziergang. Ich habe herausgefunden, dass es Wunder wirkt, wenn man den Kopf frei macht und über Probleme nachdenkt
quelle
Mein Rat wäre , das Buch wegzuwerfen!
Natürlich nicht wörtlich. Was ich meine, ist, einen Themenbereich zu betreten, in dem Sie wenig Erfahrung haben, und dort schwierige Probleme zu lösen, ohne etwas über vorhandene Lösungen zu lernen. Verlassen Sie sich nur auf Ihre Kreativität und Ihr kritisches Denken und vielleicht auf ein Referenzhandbuch.
Sie können ein Bildformat entwerfen. Oder einen Webserver. Oder ein Komprimierungsschema. Dateisystem. Kernel. Künstliche Intelligenz. Programmiersprache. Computer Vision System.
Etwas, das Sie interessant finden, das ziemlich komplex ist und von dem Sie nie erfahren haben. Lesen Sie nicht darüber: springen Sie einfach direkt hinein. Experimentieren Sie. Fehler machen. Das Rad neu erfinden.
Bitte nicht um Hilfe. Halte dich von Tutorials fern. Halte dich von der Theorie fern. Ziehen Sie keine Lösung aus dem Regal.
Warum?
Versuchen Sie es ein paar Mal und lassen Sie es ein paar Monate, wenn Sie mit dem Erreichten zufrieden sind. Dann komm frisch zurück und schau, ob du eine neue Perspektive finden kannst. Danach ist es Zeit, über das Problem zu lesen und darüber, wie andere es gelöst haben (oder mit Menschen zu sprechen). An dieser Stelle sagst du dir nicht "Ja, das macht Sinn", während du liest, sondern "Ja, genau " oder "bis zu einem gewissen Grad" oder "Wow, das ist klug".
Mit anderen Worten, Sie denken viel kritischer über das, was Sie lesen, und es fällt Ihnen leichter, es zu verstehen und sich zu merken, da Sie bereits einen großen "mentalen Rahmen" haben, an den Sie es anhängen können. Sie werden sich bei den Dingen wohlfühlen, die Sie selbst entdeckt haben, und Sie werden einen Haufen neuen Wissens mitnehmen.
Versuchen Sie nicht, Ihre Lösung perfekt zu machen. Beweisen Sie einfach selbst, dass Sie das Problem lösen können . Nehmen Sie eine "Can-Do" -Haltung ein und denken Sie daran, dass die Person, die das Problem zuerst gelöst hat, wahrscheinlich genau so viel wusste wie Sie (tatsächlich wusste sie nicht, dass es eine Lösung gibt!).
quelle
Das Lösen von Problemen kann man nicht durch Lesen lehren oder sogar lernen. Die einzige Möglichkeit, Probleme besser zu lösen, besteht darin, Probleme zu lösen.
Es gibt verschiedene Techniken und Methoden zur Problemlösung, die Sie lesen können, und Sie können Tools und Technologien lesen, mit denen Sie Probleme in einer bestimmten Domäne lösen können. Wenn Sie nicht ständig über Probleme nachdenken, versuchen Sie, Lösungen zu finden (für jedes Problem mehrere Lösungen zu finden und diese gegeneinander zu bewerten), und bewerten Sie dann Ihre Lösungen anhand der von anderen entwickelten Lösungen, um das Problem nicht besser zu lösen lösen.
Ich empfehle, eine Ausgabe von Pragmatic Thinking and Learning: Refactor Your Wetware von Andy Hunt zu erwerben . Es ist ein Buch über das Verstehen, wie Sie denken, reagieren und lernen. Es bringt relevante Theorien aus der Verhaltenstheorie und anderen kognitiven Wissenschaften ein. Es richtet sich speziell an Softwareentwickler, ist jedoch für alle Wissensarbeiter geeignet.
quelle
Für Programmieranfänger wie mich empfehle ich das Buch "Think Like a Programmer". Im ersten Kapitel werden Problemlösungstechniken behandelt, z. B. das Wiederherstellen und Teilen des Problems, beginnend mit dem, was Sie wissen, Reduzieren, Analogien und Experimentieren.
Dann gibt es fortgeschrittenere Techniken mit Beispielen in C ++: Lösen von Problemen mit Arrays, Zeigern und dynamischem Speicher, Klassen, Rekursion, Wiederverwendung von Code. Ich kann diesen Teil nicht kommentieren, weil es mir noch zu schwer fällt.
quelle
Ich löse so viele Probleme wie möglich. Ich mag auch einige Rätselbücher wie dieses . Ich bastele auch an Problemlösungsspielen, wie Mathe-Spielen mit Primzahlen oder ähnlichem, Sudoku, dem Turm von Hanoi usw. Finde einfach Dinge, die du lösen kannst. Codiere es auch aus, wenn es möglich ist.
quelle
Tschüss, viele Probleme zu lösen!
Du beginnst mit einfachen Problemen und steigst zu schwierigeren Problemen auf, sobald die einfachen zu einer Routine statt zu Problemen werden.
quelle
Halten Sie sich nicht an die Theorie, sondern üben Sie mehr. Mit der Übung kommt die Erfahrung.
quelle