Ich bin beschäftigt! Die meiste Zeit verbringe ich mit analytischen Techniken oder mit Kursarbeit, und wenn ich in den Programmiermodus umschalte, muss ich schnell Code generieren. Da ist es dem Primärforscher für das Labor, in dem ich bin, egal, ob ich TDD oder einen Abakus verwende, solange ich schnelle Ergebnisse bekomme.
Ich habe "TDD by example" gelesen und finde es sehr hilfreich. Ich kaufte später "Refactoring: Verbesserung des Designs von bestehendem Code", "Design Patterns: Elemente von wiederverwendbarer objektorientierter Software" und "Effektiv mit Legacy Code", aber diese Bücher sind groß und die Aussichten, in diese zu springen, ist entmutigend !
Der Dialogstil und -fluss von "TDD by example" erleichterte die Integration in meinen Zeitplan. Aber ich weiß nicht, wie ich in diesen anderen Büchern und in welcher Reihenfolge arbeiten soll; es scheint, dass jeder ist genauso relevant (Ich bin in einer Art Dining Philosoph Deadlock - Ich warte auf jeden Aspekt meiner Programmierung Toolkit zu verbessern, aber ihre Interdependenz hat mich entweder festgefahren oder verlieren Zeit für Kontextwechsel - Entschuldigung für die Analogien :)). z.B. Ich habe Legacy-Code, der refaktoriert und mit Tests abgedeckt werden muss, ich muss mit TDD weitermachen (aber ich tue es nie), ich muss mit Designmustern codieren, damit ich die Räder nicht neu erfinden muss.
Gibt es eine gute Möglichkeit, diese erforderlichen Lesevorgänge in bytegroße Chunks aufzuschlüsseln und einen Weg zu finden, während sie ihre Techniken auf aktuelle Projekte anwenden (persönlich verliere ich die Informationen, wenn ich nicht kann sofort anwenden)? Konzentriere ich mich auf ein Buch und vervollständige es? Brauche ich zuerst TDD, dann Refactoring und Design Pattern Skills (aber "Hühnchen und das Ei" all diese Unit Test Bücher sprechen über Design-Muster und Refactoring, als ob ich sie weiß, rückwärts und vorwärts)?
Ich habe die besten Tutorials für Anfänger gelesen , aber das tut es nicht. Ich erkläre, wie ich dies in einen vollen Terminkalender integriere. Und ich lese Programmierung in einer wissenschaftlichen Umgebung , aber wieder vermisst es die Markierung, wie fügen Sie diese Techniken hinzu, wenn Sie bereits rechtzeitig zurück sind.
Angesichts der Beschreibung dessen, was Sie tun, würde ich zuerst damit beginnen, die Annahme in Frage zu stellen. Ich weiß nichts über die Komplexität Ihrer Programme, aber wenn Ihre Programmierung ausschließlich aus der Generierung von Berechnungen besteht, ist es eine Art "Skript-Ebene", was bedeutet, dass Sie für ein bestimmtes Stück Code genauso einfach wegwerfen und schreiben Sie es so um es zu behalten, dann sind viele dieser Techniken übertrieben. Ich denke, TDD (vielleicht eine gepaarte Version, die beim Integrationstest kombiniert wird) wird immer wertvoll sein, aber darüber hinaus nicht unbedingt.
Wenn Sie jedoch wirklich Softwaresysteme entwerfen (und zumindest einige von dem, was Sie tun, könnten sich qualifizieren, selbst wenn das alles nicht funktioniert, zum Beispiel Datenbankmodell, Eingabebildschirme, Ergebnisverteilung), würde ich sagen, dass Sie genug gelesen haben von diesen Büchern, um anzufangen, und mach dir keine Sorgen darüber, es nicht die ganze Zeit für Anfänger zu machen, stell einfach sicher, dass du jede Woche messbare Fortschritte machst.
Übrigens können Entwurfsmuster nützlich sein, um zu lesen, wie ähnliche Probleme behandelt werden, aber nicht "entwerfen, sie zu verwenden" statt etwas anderes. Ihr Design ist vielleicht nicht gut für sich selbst, aber Muster kommen aus dem realen Design, nicht umgekehrt. Sie können sicherlich mehr objektorientierte Lösungen sehen, was Sie tun können, aber machen Sie sich keine Gedanken darüber, ob das, was Sie tun, zu einem Designmuster passt. Stellen Sie sicher, dass das, was Sie tun, ein gut zu wartendes Design ist, und die Muster werden davon ausgehen.
Sie können nicht alles auf einmal tun (das wussten Sie). Einige Techniken sparen Zeit, und TDD und Refactoring stehen auf dieser Liste ganz weit oben. Besonders mit TDD - machen Sie sich keine Sorgen darüber, wann Sie es tun, ob Sie es tun, wie es in Ihren Zeitplan passt; Mach es einfach. Je früher Sie beginnen, desto schneller sparen Sie Zeit. Sobald Sie diese Fertigkeit in der Hand haben, schreiben Sie, während Sie sich einer Aufgabe auf dem Legacy-Code nähern, Tests, um Sie zu schützen (nein, das ist keine TDD, sondern die Testschreibfähigkeiten, die Sie mit TDD verfeinert haben). Wenn Sie eine gute Abdeckung des Moduls haben, die Sie ändern müssen, können Sie es kostenlos umgestalten, indem Sie Ihre Tests häufig ausführen. Von den Büchern, die Sie erwähnen, in der Situation, die Sie beschreiben, ist die nächste, die ich empfehlen würde, Michael Feathers 'Effective with Legacy Code - es wird Ihnen die Tricks geben, die Sie weiterbringen.
Vorerst allerdings: TDD alles. Es wird Ihnen früher Zeit sparen, als Sie es sich vorgestellt haben, und Sie können diese Zeit nutzen, um mehr und bessere Techniken zu erlernen.
Ich würde mit dem Refactoring-Buch beginnen (weil Sie erwähnt haben, dass es in Legacy-Code überschwemmt ist) und versuchen, es Stunde um Stunde zu lesen. Wenn Sie das nächste Mal programmieren, suchen Sie nach Möglichkeiten, das Gelernte anzuwenden.
Wenn Sie einmal das Gefühl haben, dass Sie etwas Zeit haben, schauen Sie sich die anderen Bücher an. Ich empfehle auch das Buch Code Complete zur Verbesserung Ihrer Fähigkeiten.
Tags und Links unit-testing tdd scientific-computing