Ich bin kein guter Programmierer (in der Logik), wie soll ich das beheben? [geschlossen]


50

Ok, also hier ist mein Problem:

Ich arbeite für eine große Firma, manche haben einen Job bekommen (ehrlich gesagt, weil das Interview einfach war). Es ist nicht so, dass ich meine Sachen nicht kenne, ich verstehe Java ziemlich gut, es sind Bibliotheken usw.

Aber wenn ich jemals versuche, ein logisches Problem zu lösen, fällt es mir wirklich schwer, eine Lösung zu finden.

conversion of decimal to romanAls ich zum Beispiel die Lösung sah, stellte ich fest, dass es ein einfaches Problem ist. Aber ich war nicht in der Lage, es nach 1-2 Stunden Ausprobieren zu implementieren!

Ich fühle mich dumm und nicht wert, ein Software-Ingenieur zu sein. Rätsellösungsfähigkeiten sollten für einen großartigen Programmierer von Haus aus von Vorteil sein. Aber wenn ich versuche, ein paar Rätsel zu lösen, kann ich keine Lösung finden und google es einfach! .... und ich hasse das!

Wenn ich bei der Arbeit ein Problem (wie das Implementieren einer xyz-Funktion) habe, bin ich ziemlich schnell dabei und respektiere dies an meinem Arbeitsplatz, aber ich bin überhaupt nicht stolz darauf. Denn wenn ich versuche, ein mathematisch oder logisch herausforderndes Problem zu lösen, fummle ich herum. Ich habe immer noch das Gefühl, dass ich meine Arbeit (als Ingenieur) liebe, aber ich bin wirklich traurig, dass ich einige schwierige Logikprobleme, die mir Freunde einfallen lassen, nicht lösen kann.

Ich fühle mich demoralisiert :(

TL; DR: Ich verstehe die Dinge aus praktischer Sicht (Implementierung von Funktionen in unserem Produkt), aber wenn ich versuche, ein Problem mit ProjectEuler zu lösen, habe ich ein schlechtes SUCK! Und ich muss mein Gehirn schärfen !

Meine Fragen lauten also:

  1. Wie soll ich vorgehen, um das Problem zu beheben? Soll ich anfangen, Projekt-Euler-Probleme zu lösen (und mich dazu zu zwingen)? Auch wenn ich Stunden brauche, um einige grundlegende Probleme zu lösen ?
  2. Oder sollte ich zurück zu den Grundlagen gehen und ein bisschen Mathematik lernen?
  3. Rätsellösungsspaß finde ich nicht wirklich. Aber ich möchte, dass es mir Spaß macht! Und ich denke, wenn ich sie besser verstehe, wird es mir gefallen!

PS: Ich habe noch nie CS gelernt (mein Grundstudium war Elektrotechnik). Aber das ist keine Entschuldigung, um ein blöder Entwickler zu sein.

Vielen Dank!


3
Wenn es dir keinen Spaß macht, Rätsel zu lösen, warum dann?
V4Vendetta

3
Es macht keinen Spaß, weil ich es schwer habe, es zu lösen. Wenn ich gut darin werde, werde ich es bestimmt mögen!
John

1
Sie können immer versuchen , diese (Warnung, ERNST süchtig , wenn Sie sind in dem Lösen von Rätseln)
Benjol

2
Nichts kommt ursprünglich. Selbst die grundlegendsten Fähigkeiten müssen gelernt werden. Ich würde Kalkül und klassische Mechanik als Spielplätze empfehlen, um die erforderlichen Fähigkeiten zu trainieren, aber viele andere Fächer (einschließlich nicht-mathematischer Fächer) könnten dasselbe tun.
SK-logic

3
@ John Bestätigt. Es war ein schwieriges Problem. Sie sollten sich nicht schlecht fühlen, wenn Sie es nicht in 5 Minuten lösen können. Eineinhalb Stunden, nachdem ich das Wiki über römische Ziffern gelesen und die Ergebnisse mit den Ergebnissen einer anderen Implementierung verglichen hatte, konnte ich einen Fehler korrigieren. Ich dachte (wie viele andere auch), dass IL eine gültige Nummer ist. Falsch. XXXIX ist die richtige Nummer. Außerdem musste ich mir andere Implementierungen ansehen, um es zu optimieren (ich habe II, III, XX, XXX vorab gecacht, aber es ist nutzlos). Fühle dich nicht schlecht!
Xanatos

Antworten:


24

Erstens ist es wunderbar, dass Sie dies als Schwäche in Ihren Fähigkeiten sehen. Sie wissen tatsächlich, wo Sie sich verbessern müssen, was die Arbeit erheblich vereinfacht und zeigt, dass Sie besser sind, als Sie denken.

Ich glaube, Ihr Hauptproblem, das ich schon oft gesehen habe, ist, dass Sie kein "Toolset zur Problemlösung" haben. Was machen Sie, wenn Sie mit einem Problem konfrontiert werden? Wie gehen Sie vor, um das Problem zu lösen? Ich bin langsam in Mathe, aber weil ich weiß, wie man die kleinen Hilfsmittel von Mathe zusammen benutzt, habe ich das Kalkül auf die Spitze getrieben.

Abgesehen davon, dass Sie nur an der Problemlösung arbeiten, müssen Sie sich ansehen, welche Tools und Fähigkeiten Sie dabei mitbringen. Wenn Sie bei der Arbeit an einer neuen Funktion arbeiten wollten, haben Sie dann keine IDE, keinen Debugger, keine Dokumentation, kein Internet und keinen Quellcode? Natürlich nicht!

Es gibt Tools, mit denen Sie Probleme lösen können. Sie kennen sie einfach nicht . Der Wikipedia-Artikel enthält einige Links zu Problemlösungstechniken. Das wichtigste Instrument ist jedoch die wissenschaftliche Methode . Der Wikipedia-Artikel enthält einen pragmatischen Ansatz:

  1. Definieren Sie eine Frage
  2. Informationen und Ressourcen sammeln (beachten)
  3. Bilden Sie eine erklärende Hypothese
  4. Testen Sie die Hypothese, indem Sie ein Experiment durchführen und Daten reproduzierbar sammeln
  5. Analysieren Sie die Daten
  6. Interpretieren Sie die Daten und ziehen Sie Schlussfolgerungen, die als Ausgangspunkt für neue Hypothesen dienen
  7. Ergebnisse veröffentlichen
  8. Wiederholungstest (häufig von anderen Wissenschaftlern durchgeführt)

Alle Probleme können auf diese Weise gelöst werden! Viele Menschen gehen diese Schritte jedoch nicht durch. Es ist wie bei einem Entwickler, der sich weigert, seinen Code zu testen. Überhaupt. Er wird Probleme haben herauszufinden, ob es überhaupt Fehler gibt.

Schließlich besteht das andere Hauptwerkzeug zur Problemlösung darin, es mit einfachen Schritten aufzuschlüsseln . Zum Beispiel das erste Problem in den Beispielen von Projekt Euler :

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

Wir haben zwei Tatsachen und hier ein Problem. Fakt eins zeigt uns, wie man ein Vielfaches von drei oder fünf unter 10 definiert. 3 * 1,3 * 2,3 * 3,5 * 1 sind alle gültig. 5 * 2 ist nicht, weil es gleich 10 ist. Dann sagt uns Tatsache zwei, dass wir sie addieren, um 23 zu erhalten.

Wir haben also bereits eine Methode, um Werte zu finden, und können diese addieren, um unsere Summe zu erhalten. Natürlich können wir uns die Fakten ansehen und eine einfache Umkehrung der Reihenfolge anwenden. 3, 5, 6 und 9 sind Vielfache von 3 oder 5. Das heißt 3% 3, 5% 5, 6% 3, 9% 3 ergeben alle eine Modifikation von Null. Ein anderer Ansatz wäre es, 999 zu 1 durchzugehen und jede Zahl mit 3 und 5 zu modulieren. Sammeln Sie die Liste der Werte und addieren Sie sie.

Ich würde die Kunst der Unix-Programmierung als ein hervorragendes Beispiel für die Verwendung kleiner Werkzeuge in der Programmierwelt vorschlagen . Wenn Sie sie miteinander verketten, können Sie sehr komplexe Probleme lösen, und ich kann nicht zählen, wie oft mir diese Konzepte geholfen haben.


19

Viele Programmierer sind auch natürliche "Puzzle-Löser", aber das Programmieren ist noch viel mehr. Wenn sich alle Programmierer auf die Lösung interessanter algorithmischer Probleme konzentrieren würden, hätten wir eine Menge Software, die coole Probleme lösen könnte, aber keine davon wäre verwendbar oder wartbar.

Ich finde, dass es in meiner Arbeit relativ wenige Herausforderungen gibt, mit denen man Rätsel lösen kann. Bei den meisten Herausforderungen geht es eher darum, alten Code zu studieren, eine neue API zu erlernen und die Architektur einer Komponente so zu gestalten, dass die Leute in drei Jahren nicht mehr darauf schwören. All dies ist eine Herausforderung, aber nicht so sehr wie bei logischen Rätseln. Andererseits beschäftigen mich Kollegen, die sich die meiste Zeit mit Algorithmen zur Compileroptimierung beschäftigen und die darin sehr gut sind.

Ich denke, es ist wichtig für Programmierer, ständig darüber nachzudenken, wie ich besser werden kann, was ich tue. Aber ein guter Programmierer zu sein, erfordert nicht unbedingt, dass Sie großartig im Lösen von Rätseln sind.

Persönlich löse ich meine Rätsel durch das Lösen von "Mystery Geocaches" .


Aber viele der heißen Startups sind NUR auf das Lösen von Rätseln angewiesen . Nehmen Sie Facebook. Wenn ich nicht gut im Lösen von Rätseln bin, kann ich mich dort nicht einmal bewerben!
John

6
Facebook hat den Rätselroboter als ersten Check, um nicht Tausende und Abertausende von Lebensläufen durchsehen zu müssen. Wenn Sie wirklich für FB arbeiten möchten, müssen Sie in der Lage sein, solche Probleme zu lösen, aber es gibt auch viele andere gute Stellen, an denen Sie arbeiten können.
JesperE

fantastische Antwort. Beruhigt mich auch ... =]
Hartley Brody

9

Lassen Sie mich Sie nur warnen, je mehr Sie wissen, desto mehr merken Sie, wie wenig Sie wissen.

Lass dich einfach nicht entmutigen. Lernen Sie weiter und versuchen Sie, an Bereichen zu arbeiten, die Ihnen fehlen.

Nun zu Ihrer Frage. Mein Vorschlag wäre, mit der Arbeit an den Problemen des Projekts eule r zu beginnen.

Meine Gründe hierfür sind einfach, beginnen Sie bei der am häufigsten gestellten Frage, dies sind normalerweise die leichter zu lösenden Probleme.

Wenn Sie mit einem Problem konfrontiert werden, versuchen Sie es zu lösen, arbeiten Sie selbst daran und probieren Sie verschiedene Ansätze aus. Mit der Funktionsweise von Project Euler können Sie Ihre Antwort überprüfen und testen.

Wenn Sie feststellen, dass Sie dieses Problem nicht lösen können, beginnen Sie mit der Untersuchung des Problems (ohne nach einer Antwort zu suchen). Nein, versuche es noch einmal.

Sobald Sie das Problem gelöst haben, verfügt Project Euler über einen Abschnitt, in dem die besten Antworten für jede Sprachimplementierung angezeigt werden. Sehen Sie sich ihre Antwort in Ihrer bevorzugten Sprache an, verstehen Sie deren Lösung und die darin enthaltenen Überlegungen.

Schließen Sie nun die von ihnen bereitgestellte Antwort und versuchen Sie es erneut, bis Sie sie erneut lösen.

Wenn Sie genug üben, werden Ihnen die Logik und das Denken, um diese Probleme zu lösen, immer leichter.


4

Die meisten Programmieraufgaben erfordern nicht viel Logik. Aber dies sind möglicherweise nicht die Jobs, die Sie mögen.

Versuchen Sie als allgemeine Richtlinie, Algorithmen und Strukturen zu erlernen. Ich kann Skiena's The Algorithm Design Manual empfehlen. Sobald Sie diese kennen, werden Sie beginnen, Probleme zu kategorisieren. Das sieht dem Problem der reisenden Verkäufer sehr ähnlich, hier kann ich einen Baum verwenden, hier kann ich eine binäre Suche verwenden ...

Project Euler bietet eine große Auswahl an Rätseln. Viele davon sind mit mathematischen Grundkenntnissen problemlos umsetzbar. Andere sind einfacher zu lösen, wenn Sie einige dieser Algorithmen kennen.


2

Ich bin der festen Überzeugung, dass Sie gerade erst mit Ihrer Reise in die Programmierung begonnen haben. Wenn Sie also einige Zeit brauchen, um alles richtig zu verstehen, scheint dies kein Problem zu sein. Der einzige Unterschied besteht darin, dass Sie bei jedem Versuch etwas wie WoW lernen ! ! Das letzte, was ich getan habe, ergibt überhaupt keinen Sinn, da ich eine Dezimalzahl und keine Doppelzahl brauchte

Wenn das Lösen von Rätseln Sie nicht interessiert, gehen Sie nicht auf die Jagd nach dem Kopf, sondern es gibt andere logische Probleme, die auftreten, sobald Sie Ihre Codebasis kennen. Sie können sich dafür entscheiden, daran zu arbeiten und Ihrem Mentor oder Lead die vorgeschlagenen Änderungen vorzulegen . (Machen Sie sich keine Sorgen, wenn Sie einen Fehler machen, der Ihnen hilft, herauszufinden, warum Ihre Methodik fehlerhaft ist. Seien Sie also ein aufmerksamer Beobachter und ein passender Zuhörer.)

Es wird einige Zeit dauern, bis Sie sich beruhigt haben, und dann kann es sein, dass Sie alle Zylinder weiter schießen. Vermeiden Sie natürlich den Drang, auf Google oder SO nach einer Lösung zu suchen, unternehmen Sie einige Anstrengungen und starten Sie Ihren Browser nur, wenn Sie Zweifel haben oder absolut ahnungslos sind


1

Alle wissen, dass Ihre Schwäche eine tatsächliche Stärke ist. Daher wissen Sie, was Sie lernen müssen, um ein besseres Spiel zu erzielen.

Mein Rat wäre, viel Code zu lesen, der logische Probleme löst. Jeder hat seinen eigenen Stil beim Lösen von Rätseln. Das Lesen von Code kann Ihnen Hinweise geben, wie Sie dies lernen können. Wenn Sie in der Lage sind, den Code zu verstehen, verweisen Sie wahrscheinlich auch auf die mathematische Theorie, die das Problem beschreibt. Auf diese Weise lernen Sie auch die zugrunde liegenden Probleme kennen.

Prost, Carlo


1

Ich finde, ich sollte das ergänzen.

Wie die gewählte Antwort bereits sagte, ist es ein großer Vorteil, Ihre Schwäche zu kennen, und es gibt einige grundlegende Tools zum Erlernen von Problemlösungstechniken. Was meiner Meinung nach in der Antwort fehlt, ist einfach, Wege zu finden, um schwierige Probleme zu üben - viel. Sei hartnäckig, wenn es darum geht, jedes Problem, das du versuchst, vollständig zu lösen. Das Lesen von Code, viel Code, ist gut, ebenso wie das Lesen von Büchern zum Thema Problemlösung, aber das Schreiben von Code ist fast wichtiger.

In mancher Hinsicht haben wir die gleiche Schwäche (obwohl es nicht so schlimm ist, wie Sie denken). Um meine Fähigkeiten zur Problemlösung zu üben, arbeite ich immer an einem Euler- oder HackerRank-Problem. Wenn es ein einfaches Problem ist, wähle ich 7 Programmiersprachen aus und versuche, es in allen zu lösen. Bei schwierigeren Problemen kann es sein, dass ich drei sehr unterschiedliche Sprachen auswähle, um die Zeit, die ich mit dem Problem verbringe, angemessen zu halten. Wenn ich eine Lösung gefunden habe, suche ich bei allen Problemen nach den Lösungen, die andere gefunden haben, und stelle sicher, dass ich sie verstehe. Wenn Sie eine Lösung nicht verstehen, können Sie immer auf StackOverflow oder wahrscheinlich sogar hier auf Programmers Stack Exchange oder so etwas posten, und ich bin sicher, dass jemand auf der Website Ihre Frage beantworten kann (es ist selten, dass es keine gibt).

Grundsätzlich sollten Sie jedoch darauf achten, dass Sie üben und nicht nur lesen und viel üben. Genau wie beim Sport erfordert klares Denken Zeit und Mühe.

Sie können auch dazu beitragen, Probleme besser zu beurteilen, indem Sie die Testsuite für die Probleme schreiben, die Sie zuerst lösen. Sie können keinen guten Test für ein Problem schreiben, ohne es zuerst vollständig zu verstehen. Wenn Sie dies für verschiedene Sprachen tun, hat dies den Vorteil, dass Sie gleichzeitig verschiedene Testtechniken lernen.

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.