Wie kann ich meine Fähigkeiten zur Problemlösung verbessern?


50

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?


3
Zwei nützliche Bücher, die in Code Complete erwähnt werden, sind: Conceptual Blockbusting von James Adams und Lateral Thinking von Edward De Bono.
Mctylr

1
AH! Ich habe vergessen, hier zu posten, als es nur ein paar Antworten gab.
Mark C

Antworten:


25

Einige Techniken, die funktionieren könnten oder nicht:

  • Sehen Sie sich vorhandene Lösungen für häufig auftretende Probleme an, z. B. Entwurfsmuster. Vielleicht finden Sie etwas Ähnliches, das Ihrem Problem zumindest teilweise ähnelt. Durchsuche das Web.
  • Handeln Sie so, als wäre das Problem bereits gelöst, und verfolgen Sie das, was sich daraus ergibt, bis Sie die Lösung gefunden haben. Anstatt beispielsweise die API für eine Klasse zu entwerfen, schreiben Sie einfach den Code, der die Klasse verwendet, mit Methodenaufrufen, wie Sie sie möchten, und implementieren Sie diese API.
  • Tun Sie etwas anderes, z. B. im Internet surfen oder Solitaire spielen, und warten Sie, bis Inspiration eintritt.
  • Denken Sie an die Person, die Ihnen am besten gefällt, und tun Sie so, als wollten Sie sie mit Ihren Fähigkeiten zur Problemlösung beeindrucken. Was wäre eine äußerst eindrucksvolle Lösung?
  • Überprüfen Sie das Problem auf inhärente Widersprüche oder widersprüchliche Anforderungen und geben Sie genau an, um welche es sich handelt und welche Kompromisse möglich sind. Wenn solche Konflikte bestehen, aber Sie sich dessen nicht bewusst sind, neigen Sie häufig dazu, eine mögliche Lösung nach der anderen zu verwerfen, da Sie nicht alle Anforderungen perfekt erfüllen können.
  • Wenn Sie bereits eine mögliche Lösung haben, die sich jedoch "schmutzig" anfühlt (Kopieren-Einfügen, globale Variablen, Spaghetti-Code usw.), verwenden Sie sie trotzdem und verbessern Sie sie anschließend

Der letzte Punkt ist ausgezeichnet. Manchmal besteht die Lösung des Problems darin, es für die meisten Fälle zum Laufen zu bringen und dann zu sehen, wo es verbessert werden muss.
JeffO

4
Beachten Sie jedoch, dass die Anzahl der Fälle, in denen "Ich werde es später beheben" in "Ich habe es behoben" geändert wird, (zumindest nach meiner Erfahrung) geringfügig ist.
Gareth

3
Gareth: Stimmt, aber die Idee ist nicht, es nächste Woche, nächsten Monat oder wann immer besser zu machen, sondern sofort, nachdem es funktioniert hat. Es ist als Methode gedacht, um harte Nüsse zu knacken.
user281377

3
Ich surfe nicht im Internet, um auf die Inspiration zu warten. Sie brauchen leere Gehirnzyklen, um Inspiration zu erhalten, und das Surfen im Internet ist eine Möglichkeit, diese leeren Gehirnzyklen zu verschwenden. Gehen Sie stattdessen einkaufen, machen Sie einen Spaziergang oder eine Radtour, reinigen Sie Ihre Wohnung - tun Sie etwas, das nicht viel Gehirnleistung erfordert. Unter diesen Umständen wird die Inspiration schneller kommen.
Ken Bloom

1
Geek: Ich weiß, dass # 4 ein bisschen paradox klingt, aber manchmal funktioniert es wirklich für mich; insbesondere in Situationen, in denen mehr als ein Ansatz möglich erscheint und das Problem in der Auswahl eines dieser Ansätze besteht. # 6 bedeutet, sich nicht durch die üblichen Verbote in unserem Beruf einschränken zu lassen. Manchmal haben wir Regeln wie "Vermeiden globaler Variablen" so weit verinnerlicht, dass wir unbewusst jede Lösung ablehnen, die von einer solchen veralteten Technik Gebrauch macht.
user281377

20

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 ...)


4
Pragmatisches Denken und Lernen war ausgezeichnet
Brad Cupit

Ref: drawright.com/theory.htm (was R-Mode und L-Mode ist)
Mctylr

17

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.


Fragen Sie andere oder bilden Sie Lerngruppen.
Gary Rowe

Ich mache das gleiche, nur um eine Idee von mir zu bekommen und dies ist einer der besten Wege.
Viswa

Diese Technik wird als Gummi Ducken, ausgezeichneten Artikel über sie bekannt Horror in Codierung codinghorror.com/blog/2012/03/rubber-duck-problem-solving.html & Wiki ist auch hilfreich en.wikipedia.org/wiki/Rubber_duck_debugging
spats

9

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:

  • Problemlösungsstrategie
  • Ausdauer und Frustrationstoleranz

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:

  • versuche zufällig etwas
  • Lies zufällige Artikel / Blogs / Posts über das Thema, mit dem ich mich befasse (oder ein eng verbundenes Thema)
  • eine schöne Zeichnung machen
  • Teilen Sie das Problem in mehrere, aber einfachere Probleme auf
  • mach etwas anderes
  • Google etwas, das in irgendeiner Weise mit dem Problem zusammenhängt
  • Sprechen Sie mit anderen über das Problem
  • Machen Sie eine TODO-Liste
  • Schreiben Sie alles auf, was Sie über die Auswirkungen des Problems wissen, damit Sie leichter Muster finden können

Bitte beachten Sie, dass die meisten dieser Tools rekursiv angewendet werden können.

Und mein Algorithmus lautet wie folgt:

  1. Welches Tool meines Problemlösungs-Toolkits ist momentan am sinnvollsten?
  2. Problem nicht gelöst? Weiter mit 1. ;-)

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.


Ich habe diese Seite nach dem Wort "Physik" durchsucht, um zu sehen, ob bereits jemand darüber geschrieben hat. Die Mathematik ist die andere.
Mark C

Der Wert des Studiums der Physik im Hinblick auf Ihre Fähigkeit zur Problemlösung ist meiner Meinung nach schwer zu übertreiben.
Mark C

+1 für positives Denken. Wenn Sie sich aufregen, ist Ihre Fähigkeit zur Problemlösung beeinträchtigt. Schauen Sie sich das Problem an, da es Ihnen Wissen vermittelt.
Gary Rowe

7

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.


+1 für "In der Schule brauchen die Schüler zu viele Antworten und zu wenig Fragen." das ist soo wahr und nehmen Sie sich Zeit zu lernen, die richtigen Fragen zu stellen ... Überprüfen Sie überall, es gibt so viele Beispiele für schlechte Fragen
Rémi

4

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.


Genau. Teilen Sie große Probleme in kleinere Probleme auf.
Bill Michell

3

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.


3

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


2

Meine Antworten beziehen sich speziell auf das Codieren, können aber auf alles angewendet werden.

  1. Gehen Sie von der Tastatur weg. Spazieren gehen, joggen, mit einem Kollegen bei einem Kaffee darüber reden
  2. Werde 10 Jahre älter! Meine Erfahrung hat mir enorm geholfen.
  3. Verwenden Sie Binary Chop. Teilen Sie das Problem in zwei Teile und grenzen Sie es ein: Wiederholen Sie den Vorgang.
  4. Denken Sie daran, Sherlock Holmes: Wenn Sie das Mögliche beseitigt haben, ist alles, was noch übrig ist (egal wie seltsam), die Antwort
  5. Überprüfen Sie Ihre Testdaten. Weit über die Hälfte meiner wirklich kniffligen Probleme wurde durch fehlerhafte Daten und nicht durch fehlerhaften Code oder Algorithmen verursacht.

1

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.


1

Es gibt eine großartige SO-Frage dazu.

Meine Antwort war:

Der beste Weg, sich zu verbessern, ist zu üben!

Abonnieren Sie den RSS-Feed unter: http://www.mensa.org.uk/puzzles/ und nehmen Sie sich die Zeit, um sie zu vervollständigen, sobald sie herauskommen.

Ein Puzzle-a-Day-Tischkalender (z. B. http://www.calendars.com/product.asp?PID=1&MGID=-1&IID=46387&cm_mmc=Affiliate_Program--performics--k137666-_-DDI%20Link ) ist eine gute Lösung Dies ist auch eine gute Idee, da es Ihnen regelmäßige, mundgerechte und abwechslungsreiche Probleme gibt, die Sie lösen können.

Während diese Probleme von den Problemen, mit denen Sie konfrontiert sind, unberührt bleiben, ist die Vielfalt wichtig, da sie Sie dazu zwingen, auf eine Weise zu denken, die Sie zuvor noch nicht gesehen haben. Genau darum geht es beim Lösen von Problemen.

Bearbeiten: Überprüfen Sie auch: http://www.mindtools.com/pages/main/newMN_TMC.htm für gute Tipps zur Problemlösung.


1

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.


Ich habe festgestellt, dass meine Gedanken durch regelmäßiges Schachspielen geschärft wurden.
Paul Nathan

1

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 #).


1

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 :)


0

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.


0

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 :).


0

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


0

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 ..).


0

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:

  1. Lerne deine Plattform.
  2. Lerne deine Werkzeuge.
  3. Erfahren Sie, welche Tools für Ihre Plattform verfügbar sind, auf die Sie noch nicht gestoßen sind.

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.


0

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



0

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?

  • Wir lernen am besten aus Fehlern.
  • Es gibt Ihnen die Möglichkeit, das kreative Erarbeiten von Lösungen zu üben, anstatt alte Lösungen neu aufzuspüren und anzupassen.
  • Sie sind gezwungen, Ihre Ideen zu bewerten. Sie können sie nicht bewerten, ohne ein gutes Verständnis für Ihre Tools, das Problem, das Sie lösen, und die Idee, die Sie bewerten möchten, zu entwickeln. Dies führt zu einem tieferen Verständnis des Themas, als Sie es sonst entwickeln würden. (Informieren Sie sich über die von Ihnen verwendeten Tools. Informieren Sie sich nur nicht über das Problem, das Sie lösen möchten.)

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!).


0

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.


0

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.


-1

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.


-1

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.


-4

Halten Sie sich nicht an die Theorie, sondern üben Sie mehr. Mit der Übung kommt die Erfahrung.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.