Manchmal starre ich verständnislos in den Raum oder skizziere Ideen und schreibe einige Pseudocodes auf Papier. Dann scratche ich es aus und beginne von vorne. Wenn ich denke, dass ich die richtige Lösung für das Problem habe, beginne ich mit dem Schreiben des Codes.
Ist es normal, tagelang zu denken, ohne Code zu schreiben? Ist das ein Zeichen dafür, dass ich mich dem Problem völlig falsch nähere? Es macht mich nervös, keinen konkreten Code in meine IDE zu schreiben.
Antworten:
Abhängig von dem Problem, das Sie lösen möchten, kann die Entwurfsphase Wochen und Monate (wenn nicht Jahre) dauern, nicht nur Tage.
Es braucht Erfahrung, um nicht sofort mit dem Herausschlagen von Code zu beginnen. Das Nachdenken über die Architektur und das High-Level-Design sollte Tage dauern, wenn nicht länger - definitiv etwas, das passieren sollte, bevor Sie anfangen, Ihren Code zu schreiben.
quelle
Dies wird allgemein als "Analyse-Paralyse" bezeichnet.
Es ist üblich, aber falsch. Irgendwann müssen Sie die verschiedenen Ideen testen, um herauszufinden, was für Sie am besten geeignet ist, und diese dann schrittweise verbessern.
Empfohlene Lektüre des Pragmatic-Programmierers Speziell in Kapitel 2 den Abschnitt über "Tracer Bullets"
quelle
Das ist völlig normal. Wenn Sie jedoch einen "Test first" - oder TDD-Ansatz wählen, ist dieser seltener und hilft Ihnen möglicherweise, Ihre Ideen besser zu formulieren.
quelle
Gewohnheiten sind normalerweise das Ergebnis von Versuch und Irrtum in Bezug auf Dinge und das Weiterführen dessen, was uns zu den gewünschten Ergebnissen führt, und das Vermeiden dessen, was nicht der Fall ist. Das zu tun, was wir mögen und zu vermeiden, was wir nicht mögen, kommt ebenfalls ins Spiel. Das funktioniert bis zu einem gewissen Punkt, denn irgendwann werden wir etwas tun, das wir nicht mögen, um die Miete zu bezahlen.
Es kommt darauf an, was Sie dazu führt und aus welchen Gründen. Hier sind ein paar:
Hoffentlich haben Sie festgestellt, dass Ihr Code besser ist, wenn Sie länger entwerfen. Wenn Sie zurückblicken und feststellen können, dass es nicht darauf ankommt, wie viel Zeit Sie für das Design aufwenden, möchten Sie möglicherweise Änderungen vornehmen. Eine andere Überlegung ist, wie oft Sie Probleme entdecken, nachdem Sie Code geschrieben haben, im Vergleich zur Arbeit mit Ihren Entwürfen. Wenn Sie erst nach dem Schreiben von Code Probleme feststellen, sollten Sie eine Abwägung vornehmen und eher früher als später mit dem Codieren beginnen. Möglicherweise könnte dieser Ansatz auf die Verwendung neuerer Technologien oder auf ein sehr komplexes Feature angewendet werden.
Ich weiß nicht, ob ich die Disziplin habe, bei dem einen oder anderen Ansatz zu bleiben, auch wenn ich feststelle, dass einer besser funktioniert als der andere. Manchmal habe ich das Bedürfnis, an die weiße Tafel zu gehen. andere die Tastatur.
quelle
Es ist sehr verbreitet und ich denke, es ist eine bessere Art, Dinge zu handhaben und zu verstehen. Während ich an einem Projekt arbeite, stecke ich oft fest und es dauert ein oder zwei Tage, um zu verstehen, wie ich es besser angehen kann. Auch nachdem das Problem behoben ist, warte ich, bis ein Tag vergangen ist. Das erfrischt mich und macht mich auf den Weg.
Es ist ein natürliches Phänomen und gut für einen Entwickler, seine Gedanken zwischenzeitlich abzufangen.
quelle
Als ich einen Kurs in Projektmanagement belegte, war eines der Dinge, die der Kursleiter über Planung mit uns in Verbindung brachte und die in meinem Kopf steckten, dass die Faustregel, die sie im Militär lehrten, 1/3 der Planungszeit war . Wenn Sie also eine Operation hatten, für die Sie in drei Monaten fertig sein mussten, müssen Sie einen Monat für die Planung aufwenden, bevor Sie mit der Ausführung beginnen.
quelle
Meiner Ansicht nach gibt es drei Ansätze, die jeweils für eine bestimmte Codierungssituation geeignet sind
Ich habe zuvor ein ähnliches Problem gesehen, daher habe ich eine ziemlich gute Vorstellung von den anzuwendenden Mustern, und es ist klar, wie sich die Lösung verhalten und reagieren sollte.
=> Verwenden Sie BDD / TDD ausgehend von den gewünschten Lösungen und arbeiten Sie sich in den Code ein. (Ok, manchmal betrüge und schreibe ich ein bisschen Code und dann den Test - Art eines verschachtelten 2. -> 1. Ansatzes).
Ich habe eine gute Idee, welche Muster angewendet werden sollen, bin mir aber nicht sicher, wie die Lösung aussehen soll.
=> Prototyp, um zu sehen, welche interessanten Dinge herauskommen. Gehen Sie zu 1., wenn ich herausgefunden habe, welche interessanten Dinge gewünscht sind.
Ich bin nicht sicher, welche Muster angewendet werden sollen.
=> Denken Sie darüber nach, welches Problem vorliegt und wie sich die verschiedenen Herangehensweisen an das Problem auf den Code auswirken. Fahren Sie je nach Ergebnis der Übung mit 2) oder 1) fort.
Mit anderen Worten, die Antwort ist der Favorit des Ingenieurs: Es kommt darauf an.
quelle
Es ist besser, einen Monat lang nachzudenken und zu entwerfen, als einen schnellen Prototypen zu entwickeln, der auf einem minderwertigen Design basiert und den man dann in Form bringen muss. Vor allem, wenn Sie in einem Team sind; Sobald andere in Abhängigkeit von Ihrem Code beginnen, ist es viel schwieriger, ein besseres Design mit einer anderen API zu implementieren.
quelle
Ich stimme den anderen Antworten zu, dass es grundsätzlich eine gute Idee ist, sich Zeit zu nehmen, um ein Problem / eine Lösung zu überdenken. Wenn Sie sich jedoch nicht sicher fühlen, habe ich einige Empfehlungen, wie Sie den Planungsprozess ein wenig kohärenter gestalten können:
Erstellen Sie Design-Artefakte. Was ist, wenn Sie keinen Code schreiben? Vielleicht schreibst du einfach ein Tagebuch deiner Gedanken auf. Oder eine Skizze einer allgemeinen Lösung. Oder auch nur eine wirklich gute Zusammenfassung des Problems, das Sie im Laufe der Zeit verfeinern. Wenn Sie über Ideen nachdenken und diese annehmen / ablehnen, führen Sie ein Protokoll Ihrer Überlegungen zu diesem Thema. Auf diese Weise können Sie am Ende des Tages immer noch auf reale Ergebnisse als Beweis für Ihre Arbeit verweisen.
Mit Leuten reden! Es gibt nichts Schöneres, als einen lebenden, atmenden Menschen zu haben, mit dem man Ideen diskutieren kann. Wenn Sie denken, Sie stecken fest, sprechen Sie es mit jemandem durch. Schnappen Sie sich jemanden - irgendjemanden - und erklären Sie ihm das Problem. Skizzieren Sie Ihre Gedanken, wie Sie das Problem lösen können. Selbst wenn sie nur zehn Minuten lang einatmen, ausatmen und blinken, während Sie plappern, werden Sie wahrscheinlich schon bei der Erklärung des Problems neue Erkenntnisse entdecken .
quelle
Wie Satchel Paige sagte: "Manchmal sitze ich und denke nach und manchmal sitze ich einfach."
Ich denke, was er damit gemeint hat, ist, dass es manchmal gut ist, seinen Geist zu klären, da dies dazu führen kann, dass Sie über Ihr Problem auf andere Weise nachdenken. Wenn Sie sich also nicht mit Code beschäftigen, können Sie sich eine Lösung oder Idee einfallen lassen, die Ihnen sonst möglicherweise entgangen ist. Also, ja, es ist normal und eine gute Praxis, nicht direkt in die Programmierung einzusteigen.
Es gibt zwei Möglichkeiten, wie ich diesen Prozess selbst durchführe. Ich erstelle einen Ordner, in dem ich eine Textdatei und alle Zeichnungen zum Projekt habe. Dort schreibe ich meine Ideen auf und versuche, den gesamten Denkprozess so gut wie möglich abzuspeichern. Außerdem erstelle ich ein Notizblockprojekt, in dem ich einfache Ideen von Algorithmen bis zu CSS-Layouts schnell testen kann.
quelle
Programm = Algorithmus + Datenstruktur
Meiner Meinung nach regelt der Entwurfsprozess (Problemlösung) vollkommen. Details zur Implementierung (technisches Problem) folgen und werden natürlich gelöst.
quelle
Hier ist mein Gedankenfall.
Von vorne anfangen Zuerst ist eine grobe Vorstellung von dem, was Sie wollen, erforderlich. Versuchen Sie, eine Liste einiger Anforderungen zu erstellen oder zu erstellen. Es sollte einige Zeit dauern, um die Dinge hier herauszufinden. Sobald Sie mindestens ein Teil haben, von dem Sie sicher sind, dass Sie es möchten, und den größten Teil der Benutzeroberfläche dieses Teils kennen, können Sie mit dem Codieren beginnen.
Beheben eines Problems mit vorhandenem Code Verfolgen Sie zunächst das Problem. Dies kann einige Zeit in Anspruch nehmen, bis der eigentliche Code nicht geschrieben wurde (möglicherweise wird ein Teil des Debug-Codes geschrieben, dies wird jedoch normalerweise nicht beibehalten). Sobald Sie das Problem gefunden haben, schreiben Sie je nach Komplexität Code, um es zu beheben. Wenig Gedanke sollte erforderlich sein, sobald der Fehler bekannt ist. Wenn sich herausstellt, dass das Problem ein schwerwiegender Konstruktionsfehler ist, lesen Sie den nächsten Abschnitt.
Konstruktionsänderungen / Hauptmerkmale Dies ist höchstwahrscheinlich das, das die meisten Überlegungen erfordert. Überlegungen zum Erhalt der Struktur, zur Abwärtskompatibilität usw. müssen enthalten sein. Das Durchdenken für die beste Veränderung könnte eine erhebliche Zeitersparnis bedeuten, in der Regel dauert es jedoch nicht länger als ein paar Tage.
Hinzufügen eines einfachen Features Wenn keine wesentlichen Änderungen am Design erforderlich sind, codieren Sie Ihr Feature einfach mit einem Versuch / Irrtum. Dies sollte im Allgemeinen nicht viel Zeit erfordern.
quelle
Ich werde dem Konsens in diesem Punkt nicht zustimmen. Ich möchte lieber mit dem Prototyping beginnen, sobald ich die vage Idee habe, wie mein System funktionieren soll. Es ist mir fast unmöglich, an all die kleinen Details zu denken, die Probleme verursachen könnten, wenn ich die Dinge nicht sehr genau spezifiziere. Wenn ich nur mit Menschen über Design spreche, ist es zu einfach, einige der komplexeren Probleme mit der Hand zu winken. Sobald ich solche Dinge spezifiziere, kann es auch direkt im Quellcode sein, anstatt in einem anderen Ausdrucksmittel, das genauso präzise und formal ist, aber nicht kompiliert und ausgeführt werden kann.
quelle
Es kommt darauf an, was du mit "normal" meinst . Wenn ich über mich selbst spreche, denke ich, dass Code ein großartiges Lernwerkzeug ist. Wenn ich mich einem komplexen Problem gegenübersetze, mache ich Skizzen auf Papier, aber ich mache auch ein paar testgetriebene Codierungen. Der Code sagt mir, dass ein Whiteboard das nicht sagen kann und umgekehrt, und vielleicht ist das Ergebnis Einsicht oder die Notwendigkeit, dem Domain-Experten noch ein paar Fragen zu stellen.
Der eigentliche Rat lautet also: "Verwenden Sie jedes Lernwerkzeug, das erforderlich ist, um näher an die Problemdefinition heranzukommen" , aber denken Sie auch daran, dass dies Lernwerkzeuge sind. Verlieben Sie sich also nicht in sie. " Sowohl Code als auch Skizzen sollten weggeworfen werden .
quelle
In dieser Ära von RAD und agiler Programmierung sollten Sie mit der Entwicklung beginnen, sobald Sie wichtige Teile des Systems identifizieren können. Da die Software immer größer wird, führt die vorzeitige Fokussierung auf jedes einzelne Detail zu nichts mehr.
quelle