Ist das Überspringen der Stift- und Papierphase bei der Entwicklung von Algorithmen eine schlechte Angewohnheit? [geschlossen]

8

Ich hörte viele Leute sagen, dass Sie bei der Entwicklung von Algorithmen zuerst Stift und Papier, Flussdiagramme und was nicht verwenden sollten, damit Sie sich auf den Algorithmus selbst konzentrieren können, ohne sich um die Implementierung dieses Algorithmus kümmern zu müssen (dh Sie beschäftigen sich mit einem Problem bei einem Zeit).

Meistens fällt es mir jedoch leichter, meinen Algorithmus im laufenden Betrieb zu entwickeln. Das heißt, ich denke ein wenig über das Problem nach, bis ich die allgemeine Richtung kenne, und dann beginne ich, Code zu schreiben und Änderungen vorzunehmen, bis der Algorithmus auftaucht und funktioniert.

Ist das eine schlechte Angewohnheit, die ich ändern sollte?

Daniel Scocco
quelle

Antworten:

11

Einige algorithmische Entwicklungen können viele Versuche und Optimierungen durch Ausprobieren erfordern, da sich herausstellen kann, dass die Annahmen, die für ein striktes Papierdesign gelten würden, unter Berücksichtigung realer Daten und Leistungsbeschränkungen nicht genau genug sind.

Vielleicht Iteration (Think-Code-Test-Think-Code-Test ...), anstatt nur eine Entweder-Oder-Wahl für die optimale "Gewohnheit".

hotpaw2
quelle
3

Es gibt auch einen Mittelweg, den ich normalerweise benutze. Nicht zu viel im Voraus nachdenken und sich nicht in den Details meines Codes verlieren ...

Mit TDD (Test Driven Development) können Sie ein wenig nachdenken und es dann zum Laufen bringen. Denken Sie dann ein wenig mehr darüber nach, was Sie brauchen, und sorgen Sie dafür, dass es funktioniert. Sie haben das Sicherheitsnetz, das Ihr vorheriger Anwendungsfall jederzeit funktioniert ... Die Schritte sind:

  1. Schreiben Sie einen Test (dh einen Anwendungsfall).
  2. Beobachten Sie, wie es fehlschlägt, und machen Sie den Fehler verständlich.
  3. Schreiben Sie den Code.
  4. Refactor den Code und den Test.
KLE
quelle
2

Dies hängt von Ihren Denkgewohnheiten und der Komplexität des Algorithmus ab.

Stift und Papier bieten "Freiform" -Denken, ohne dass ein Compiler jedes von Ihnen eingegebene Zeichen anschreit.

Einige von uns, die Stift und Papier verwenden, nehmen sich Zeit, um die Schleifengrenzen anzupassen, verschiedene Werte auszuprobieren usw.

Ich denke also, dass das Schreiben des Codes den Test-First-Ansatz direkt fördert, während Stift und Papier den Think-First-Ansatz fördern. Es ist sicher, dass Sie die Aufgabe, wenn sie trivial ist, im laufenden Betrieb codieren können (wenn Sie genug Erfahrung haben), aber komplexe Algorithmen würden wahrscheinlich einen anderen Entwicklungsansatz erfordern.

Diagramme helfen in einigen Fällen, dies setzt jedoch voraus, dass Sie mit ihnen vertraut sind und sie bereits verwendet haben.

Keine Chance
quelle
Das ist mehr oder weniger der Grund, warum ich gefragt habe. Ich denke, dass der "Think-First" -Ansatz Sie langfristig zu einem besseren Programmierer machen wird. Danke für die Antwort.
Daniel Scocco
Ja, aber bist du so ein Typ? Einige Leute entwickeln Code iterativ durch Versuch und Misserfolg und lernen nicht anders.
NoChance
2

Ich denke, dein Ansatz ist der üblichere. Wenn der Algorithmus besonders kompliziert oder schwierig ist, kann es schwierig sein, den Algorithmus herauszufinden und gleichzeitig zu implementieren, aber im Allgemeinen bezweifle ich, dass er den meisten Menschen hilft.

Aber ich würde zum Beispiel keine Regeln für ein Grammatik erfinden und keinen Parser dafür implementieren, ohne die Regeln zuerst auf Papier zu schreiben (oder vielleicht mit einem speziellen Tool, das ich nicht habe), oder einen B-Baum ohne Pseudo- implementieren Code verfügbar.

Ich würde nicht sagen, dass Sie eine schlechte Angewohnheit haben, es sei denn, es schadet Ihnen etwas, und ich denke, Sie würden es bemerken, wenn es so wäre.

psr
quelle
Gotcha, und ja, ich denke, dass ich bei größeren / komplexeren Projekten tendenziell mehr Zeit auf dem Papier verbringe.
Daniel Scocco
2

Wer sind diese "vielen Leute"? Und programmieren sie ihren Lebensunterhalt? Was Sie tun, ist genau das, was die meisten Programmierer tun, zumindest die meisten, die ich gekannt habe. Es gibt wenig Verwendung für Papier, wenn es schneller zu tippen ist, und wenig Verwendung für Pseudocode, wenn in einer Hochsprache programmiert wird. Gelegentlich verwende ich Stift und Papier, um einen kniffligen Algorithmus zu visualisieren (z. B. das Drehen eines Baums), aber meistens beginne ich mit Code auf hoher Ebene und fülle nach und nach die Lücken aus.

Wie bei KLE funktioniert dies nach einer testgetriebenen Entwicklung meiner Meinung nach besser. Angenommen, Sie schreiben sowieso Tests, können Sie sie auch zuerst schreiben.

Kevin Cline
quelle
0

Sie können ein Design erstellen, während Sie die Stub-Klassen, Methoden und Tests erstellen, aber Sie können sich beim Erstellen der Details festsetzen

Für die wirklich komplexen Dinge (Compiler und dergleichen) hilft ein Stift- und Papierdesign (oder zumindest eine Art Design-Tool) dabei, Sie auf dem Laufenden zu halten und das ganze Bild im Auge zu behalten, schlechte Designentscheidungen zu vermeiden und sogar die Wahl zu lassen bestimmte Designmuster von Anfang an

Aber letztendlich kommt es darauf an, wie gut Sie das große Ganze sehen können

Ratschenfreak
quelle
0

Ich würde empfehlen, die allgemeinen Anweisungen (die "Stift & Papier" -Phase) zu skizzieren, bevor Sie zur Implementierung springen, um Zeit zu sparen, indem Sie die offensichtlichsten Anforderungen / Einschränkungen aus dem Weg räumen.

Dann können Sie es auf dem Weg optimieren, da Sie zu Beginn nie alles erraten können, da aus verschiedenen Gründen später in der Entwicklung weitere Einschränkungen auftreten können / werden.

Auf diese Weise wissen Sie, wohin Sie gehen, können sich aber dennoch an Änderungen anpassen.

Wildpeaks
quelle
0

1. Der Vorbereitungsaufwand ist in der Regel proportional zur Komplexität Ihrer Aktivitäten. Es macht keinen Sinn, 2 volle Tage für einen Algorithmus zu schreiben, der einmal im Quartal verwendet wird und eine Stunde Singlethread auf nur einem Computer ausführt. Es ist sinnvoll, drei Mannwochen (falls erforderlich) zu schreiben, um das neue Hochleistungs-Flusskompensatormodul zu entwickeln, das eine halbe Million Anfragen pro Stunde verarbeiten kann und ohne Ausfallzeiten rund um die Uhr und 365 Tage die Woche ausgeführt werden muss.

2. Sie können innerhalb von 30 Sekunden feststellen, ob es sich um eine schlechte Angewohnheit handelt, wenn Sie sich ansehen, welche Lösungen Sie codieren. Sie haben gefragt, ob es eine gute oder eine schlechte Angewohnheit ist. Nun, das hängt von dir ab. Wenn Sie zu Beginn Ihrer Programmierkarriere nur langsam lernen, ist es wahrscheinlich eine gute Idee, alles mit Stift und Papier zu beschreiben. Wenn Sie einige Jahre Erfahrung haben, reicht es aus, nur 5 Minuten durchzudenken und es dann einfach zu tun. Natürlich noch in Bezug auf 1. oben.

Endeffekt

Nur Ihr Code sagt der Wahrheit, ob Sie mehr oder weniger Stift und Papier benötigen. Lassen Sie sich das nicht von jemand anderem diktieren, sondern finden Sie es selbst heraus. Das hält dich am Lernen.

Haftungsausschluss: Dies ist möglicherweise nicht das, was als Mainstream-Denken und gesunder Menschenverstand bezeichnet wird. Das ist ok. Setzen Sie einfach ein Lesezeichen und lesen Sie es in etwa fünf Jahren erneut.

JensG
quelle