Prototyping vs. Clean Code in den frühen Stadien


43

Ich plane, an einigen persönlichen Projekten zu arbeiten / zu beginnen, die als meine tägliche Arbeit enden könnten. Ich überlegte, wie ich anfangen sollte.

  • Nur ein Prototyp - schreiben Sie nur funktionierenden Basiscode, der mir eine Menge Zeit kosten könnte, um die Erweiterung zu vereinfachen und sie zu optimieren und umzugestalten.

  • Schreiben Sie von Anfang an sauberen, optimierten und dokumentierten Code, und denken Sie daran, dass er gelöscht wird, wenn er nach einiger Zeit nicht mehr wirtschaftlich ist.

Update: Die Kombination von YAGNI mit Sunpech- und M.Sameer-Antworten macht für mich vollkommen Sinn :) Vielen Dank an alle für die Hilfe.


1
siehe auch: Wann refactor
Mücke

Antworten:


39

Es gibt eine dritte Option: Schreiben Sie sauberen Code über eine testgetriebene Entwicklung, um die Anforderungen zu implementieren, die heute von YAGNI benötigt werden.

Die Versuchung, Code schreiben , die nicht notwendig ist im Moment aber vielleicht in der Zukunft weist mehrere Nachteile auf seine ... von Ihnen nicht erlaubt ist es Gonna brauchen :

  • Die aufgewendete Zeit wird für das Hinzufügen, Testen oder Verbessern der erforderlichen Funktionen benötigt.
  • Die neuen Funktionen müssen getestet, dokumentiert und unterstützt werden.
  • Jede neue Funktion unterliegt zukünftigen Einschränkungen, sodass eine unnötige Funktion jetzt möglicherweise die spätere Implementierung einer erforderlichen Funktion verhindert.
  • Bis die Funktion tatsächlich benötigt wird, ist es schwierig, ihre Funktion vollständig zu definieren und zu testen. Wenn die neue Funktion nicht ordnungsgemäß definiert und getestet wurde, funktioniert sie möglicherweise nicht ordnungsgemäß, auch wenn sie eventuell benötigt wird.
  • Das führt dazu, dass der Code aufgebläht wird. Die Software wird größer und komplizierter. Wenn es keine Spezifikationen und Revisionskontrollen gibt, ist die Funktion Programmierern möglicherweise nicht bekannt, die davon Gebrauch machen könnten.
  • Das Hinzufügen der neuen Funktion kann andere neue Funktionen vorschlagen. Wenn diese neuen Funktionen ebenfalls implementiert werden, kann dies zu einem Schneeballeffekt in Richtung schleichenden Featurismus führen.

Aus diesem Grund sollten Sie nicht nur Prototypen erstellen, sondern auch von Anfang an sauberen, optimierten und dokumentierten Code schreiben. Dabei sollten Sie berücksichtigen, dass dieser Code entfällt, wenn er nach einiger Zeit nicht mehr wirtschaftlich ist.

Schreiben Sie den Code, den Sie jetzt benötigen, und stellen Sie sicher, dass Sie die Anforderungen von heute und morgen optimal erfüllen können.


4
Ich bin zwar kein Fan von ausgewachsenem TDD, aber dies ist immer ein guter Rat, da Sie nach dem Befolgen von TDD gezwungen sind , sauberen, gut dokumentierten Code zu schreiben.
Wayne Molina

1
Ich denke, er meinte, er würde das gesamte Projekt fallen lassen, wenn es nicht klappt. Wenn dies zutrifft, unterscheidet sich diese Antwort nicht von "sauberen Code schreiben".
Jeremy

@ Jeremy, du nimmst meine Antwort richtig an. Diese Antwort ist jedoch nicht dieselbe. Es basiert auf strenger Programmierweise, wo andere auf Erfahrung basieren, sicher, dass sie in einigen Fällen ähnlich aussehen, aber es ist nicht dasselbe :)
Nun,

1
@JackLeo Ich denke, der Punkt ist, dass, sobald Sie ein bestimmtes Erfahrungsniveau erreicht haben, kein Unterschied mehr zwischen "Code, an dem ich hart gearbeitet habe" und "Code, den ich gerade geschrieben habe" besteht.
Ant P

@AntP In der Tat. Es ist interessant, über diese Frage 6 Jahre später
nachzudenken

16

wie gewöhnlich...

Es hängt davon ab, ob

Wenn Sie einen Prototyp erstellen, um ein Risiko zu minimieren oder ein unbekanntes Problem aufzudecken, codieren Sie es einfach und erwarten Sie, dass Sie es entsorgen, wenn Sie fertig sind

Wenn Sie Prototypen für iterative Verfeinerungen erstellen, codieren Sie sie einfach und erwarten Sie, dass Sie sie häufig modifizieren und umgestalten

Wenn Sie anfangen, das eigentliche Produkt zu schreiben , es aber als Prototyping bezeichnen, um faul zu sein , dann seien Sie nicht faul und schreiben Sie es beim ersten Mal gut


2
+1 Großartiger Beitrag! Ich würde hinzufügen, dass es zwar unbrauchbar erscheint, nachdem Sie diese Funktion entwickelt haben, aber NIEMALS Ihre Prototypen wegwerfen. Ich habe immer die Quellcodeverwaltung für jeden Prototyp, an dem ich arbeite, da ich manchmal auf sie zurückgreife, um Tipps und Hinweise zu erhalten.
maple_shaft

1
@maple_shaft: ja, "wegwerfen" ist metaphorisch, wie in "nicht unbedingt versuchen, es umzugestalten, planen, es umzuschreiben"
Steven A. Lowe

2
Ich sage, sei faul und schreibe es beim ersten Mal gut, damit du nicht zurückgehen und es später noch einmal besuchen musst.
Blrfl

Der dritte Satz machte meinen Tag.
Christopher Francisco

10

Warum denken Sie beim Prototyping über sauberen Code nach? Die eigentliche Idee des Prototyping ist, dass es ein Konzept oder eine Idee beweisen und danach weggeworfen werden soll.

Ich werde mit den meisten hier nicht einverstanden sein, indem ich sage, wenn Sie bereits über die Wahl nachdenken, ob Sie sauberen Code schreiben oder schnell etwas für das Prototyping erledigen möchten, wählen Sie Letzteres. Vor allem, wenn es um frühe Entwicklungsphasen geht. Ich sage nicht, schreibe niemals sauberen Code, ich sage, bring die Idee raus, sorge dafür, dass es die Richtung ist, in die es gehen soll, und dann gehe zurück, säubere es - Refactor.

Als Softwareentwickler sind wir beim ersten Mal so sehr damit beschäftigt, Dinge richtig zu machen und zu säubern, dass wir nicht erkennen, dass es sich nicht um Code handelt, den wir liefern, sondern um eine Lösung für ein Problem .

Ich denke beim Codieren wie beim Schreiben eines Papiers:

Wenn wir eine Arbeit schreiben, fangen wir irgendwo an, skizzieren Ideen, Umrisse usw. Sie enthält nicht alle Details und sieht nicht vollständig aus - es handelt sich im Wesentlichen um einen ersten Entwurf, gefolgt von einem zweiten und so weiter. Vieles wird auf dem Weg zu einem verfeinerten und fertigen Papier umgeschrieben, ersetzt und / oder sogar entfernt. (Offensichtlich geht diese Analogie nicht so weit, zu sagen, dass Code jemals wirklich jemals fertig oder endgültig wie ein Papier ist.)


+1 Sehr gute Antwort :) Mir ist in den frühen Tagen viel passiert, daher kann das Springen auf große Projekte dasselbe bewirken ... Davor habe ich Angst.
JackLeo

"Als Softwareentwickler sind wir beim ersten Mal so begeistert, dass wir nicht erkennen, dass es sich nicht um Code handelt, den wir liefern, sondern um eine Lösung für ein Problem." Ich würde sagen, es ist umgekehrt: "Wir haben nie Zeit, es richtig zu machen, aber wir haben immer Zeit, es noch einmal zu machen".
Christopher Francisco

6

Es gibt zwei Arten von Prototypen:

  • Evolutionärer Prototyp , der sich durch Verbesserungen und Korrekturen zum Endprodukt weiterentwickelt.
  • Einweg-Prototyp, der nur existiert, um das Sammeln von Anforderungen und das Feedback von Kunden in frühen Projektphasen effektiver zu machen. Dann wird er komplett fallengelassen und die Entwicklung des Endprodukts beginnt von vorne.

Laut Capers Jones stellen evolutionäre Prototypen Endprodukte von geringer Qualität her, die viel mehr Aufwand und längere Zeit erfordern, um Stabilität zu erreichen.

Wenn Sie also über ein Prototyping nachdenken, damit der Kunde so schnell wie möglich etwas sehen kann, um eine bessere Vorstellung und genauere Angaben zu den Anforderungen zu erhalten, ist es besser, ein Einwegprototyp zu sein und die Entwicklung später mit sauberem Code durchführen zu lassen. Wenn Sie sich das nicht leisten können, schreiben Sie sauberen Code von Anfang an und pflegen Sie ihn sorgfältig, aber wie andere vorgeschlagen haben, optimieren Sie nicht übermäßig und fügen Sie keine Dinge hinzu, bis Sie sie benötigen.


Sehr guter Punkt, das ist für die Darstellung verschiedener Arten von Prototyping, ich habe nicht darüber nachgedacht :) Essen für eine
Weile

Stimme dem Punkt zu!
Richard Topchiy

Das große Risiko eines Einweg-Prototyps besteht darin, dass das Management Probleme haben wird zu verstehen, warum die Produktionsversion im Vergleich zum Prototyp so lange dauern sollte und warum die Arbeit am Prototyp „verschwendet“ werden sollte. Wenn es sich um Ihr eigenes Startup handelt, gibt es natürlich kein solches Management, was es viel einfacher macht.
Jan Hudec

5

Ich zögere es, schmutzige Codierungen aus irgendeinem Grund zu entschuldigen. Nach meiner Erfahrung haben Leute, die Quick & Dirty als Entschuldigung für das Prototyping beanspruchen, diese Einstellung gegenüber jedem Code, einschließlich der Produktion. Wenn jemand einen chaotischen Prototyp erstellt, erstellt er Chaos in einem beliebigen Code. Prototyping bedeutet nicht schmutzige Codierung, sondern vereinfachte Annahmen zum Testen der wichtigsten Anwendungsfälle. Der Code ist möglicherweise nicht formal getestet oder kümmert sich um alle Details, sollte aber dennoch gut gestaltet und gut implementiert sein. Sauberkeit ist ein Zeichen von Kompetenz, kompetente Programmierer empfinden natürlichen Ekel gegenüber unordentlichem Code, unabhängig von dessen Zweck.


Nur eines habe ich vergessen zu erwähnen. Ich habe es immer wieder gesehen, wie Leute für "Prototyping" -Zwecke schnell und schmutzig schrieben und es wurde für Produktionszwecke schmerzhaft und hässlich. Seitdem es fertig ist und funktioniert, fügen die Leute immer wieder Verbände hinzu und häufen Unordnung um Unordnung an.
Gene Bushuyev

Du hast einen guten Punkt - "Warum neu schreiben, wenn es funktioniert?" ist ein Problem für viele junge Unternehmen, ich sehe es sogar in meiner aktuellen Job-Position, wenn große Unternehmen ein 10 Jahre altes CMS verwenden, das schmerzhaft ist, um auf die heutigen Standards aufzurüsten. Ich möchte hier keinen Fehler machen. Obwohl Ihre Antwort hauptsächlich besagt, dass ich nach einer Entschuldigung suche, um schlampigen Code zu schreiben. Sunpech und M.Sameer haben es verstanden. Prototyp soll etwas machen, um zu sehen, wie die Welt darauf reagieren wird. Wenn es funktioniert - mach es gut.
JackLeo

1

Schreiben Sie von Anfang an sauberen, optimierten und dokumentierten Code. Ich bin nicht in der Lage, das selbst zu tun, und das ist ein echtes Problem. Ich bin kein Programmierer, aber ich habe für Softwareentwicklungsunternehmen in kundenorientierten Managementfunktionen gearbeitet, und da sie mir viele gute Ideen geben, baue ich gelegentlich einen Prototyp für etwas. Fast jedes Mal, wenn dieser Prototyp dann an einen Entwickler übergeben wurde, der ihn "aufräumte" und in ein Versandprodukt verwandelte. Wenn ich die Quelle auschecke, sind es immer noch 80-90% meines beschissenen Codes.


0

Ein Kollege von mir befürwortet enthusiastisch das wiederholte Prototyping mit der Einschränkung, dass man genug Disziplin haben muss, um jeden Prototyp wegzuwerfen und erneut von Grund auf neu zu schreiben Als nächstes schreibt man den gleichen Prototyp mehrmals in einem trivial anderen Stil. Er schlug halb ernsthaft vor, dass Sie, wenn Sie wirklich an einem brillanten Stück Code hängen, den Sie unmöglich verwerfen könnten, diesen ausdrucken, das Quellcodeverwaltungs-Repository löschen und den Ausdruck an sich selbst senden sollten - er wird verschwinden lang genug, dass es die nächste Iteration nicht infiltrieren kann.


Dieser Beitrag ist ziemlich schwer zu lesen (Textwand). Hätten Sie etwas dagegen bearbeiten sie in eine bessere Form ing?
gnat

Können Sie vorschlagen, was Ihrer Meinung nach das Problem ist? Vielleicht sind die Sätze zu lang, wie ich gerade bemerkt habe, gibt es nur zwei davon. Noch etwas?
Tom W

-1

Sie können jederzeit damit beginnen, es (überhaupt) zum Laufen zu bringen, es dann zu überarbeiten, um es sauber zu machen, und es dann schnell / klein zu machen, wenn es wirtschaftlich sinnvoll ist, dies zu tun. Ich würde mit ein paar Experimenten beginnen, die Sie wegwerfen, und sie dann wieder ins Leben rufen, wenn Sie wissen, was funktioniert.


-1

Beide sind gut. Beides mag ich. Sie widersprechen sich nicht.

Ich mag Prototypen. Das Prototyping entwickelt meine Kreativität. Ich teste viele mögliche Lösungen. Wenn ich es schnell mache, habe ich die Möglichkeit, viele Möglichkeiten zur Problemlösung zu testen.

Ich schreibe gerne sauberen, gut getesteten Code. Es entwickelt meine Kernkompetenzen. Normalerweise wähle ich einen der Prototypen aus und verbessere ihn entweder oder schreibe ihn von Grund auf neu.

Sie sollten den Prototyp jedoch niemals mit dem Seriencode verwechseln. Prototyp sollte niemals in Produktion gehen. Es sollte immer als Prototyp gekennzeichnet sein. Machen Sie am besten alle Prototypen in Ihrer eigenen Branche.


-2

Ich neige dazu zu sagen, dass Extreme fast immer schlecht sind.

Ich rate dazu, die Balance zwischen sauber, gut dokumentiert und Prototyping zu halten. Wenn Sie für eine Bibliothek oder Plattform entwickeln, haben Sie keine Erfahrung mit dem Prototyping. Das gilt besonders für den Anfang und für Plattformen, z. B. Android oder Container, die Sie in ihr Korsett stecken. Das heißt, Sie implementieren ihre Schnittstellen und sie rufen Sie an.

Nach meiner eigenen Erfahrung lebt der Großteil des Codes nicht sehr lange. Trotzdem können Sie schnell loslegen, indem Sie Ihre Funktion implementieren. Wenn Sie früher oder später (die meiste Zeit früher) Ihren vorhandenen Code überarbeiten / überarbeiten müssen, weil Sie mit der nächsten Funktion besonders komplizierte Teile aufräumen. Achten Sie auf ordnungsgemäße automatisierte Tests, um ein problemloses Refactoring zu ermöglichen. Zu den oben genannten Plattformen wie Android: Oft machen sie das automatisierte Testen aufgrund der engen Kopplung und des fehlenden Designs für die Testbarkeit nicht so einfach. Dann können Sie Ihre Testbasis auf ein höheres Niveau heben, z. B. Integrationstests.

Ich habe einen Artikel geschrieben, der einige Hinweise zum Starten geben könnte: https://medium.com/@ewaldbenes/start-lean-why-its-best-to-split-your-next-coding-project-by-feature-70019290036d

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.