Frage

Viele Male haben wir uns auf ein Problem arbeiten zu finden, nur die Lösung, um herauszufinden, erstellt wird ist weitaus komplexer als das Problem erfordert. Gibt es Kontrollen, bewährtes Verfahren, Techniken, etc., die Sie in Ihrem Arbeitsplatz der Kontrolle über Komplikation helfen?

War es hilfreich?

Lösung

Jemand neu um es zu betrachten.

Andere Tipps

Wenn es zu schwer zu testen, ist Ihr Design zu kompliziert. Das ist die erste Metrik ich.

Nach meiner Erfahrung für einen allzu allgemeinen Fall der Gestaltung neigt zu viel Komplexität zu züchten.

Engineering Kultur fördert Designs, die weniger Annahmen über die Umgebung zu machen; dies ist in der Regel eine gute Sache, aber manche Leute nehmen es zu weit. Zum Beispiel ist es könnte schön, wenn Ihr Auto-Design übernimmt keine spezifische Gravitation, eigentlich niemand wird Ihr Auto auf dem Mond fahren, und wenn sie es täten, würde es nicht funktionieren, weil es kein Sauerstoff, um den Treibstoffverbrauch zu machen.

Der schwierige Teil ist, dass der Mann, der die „Werke-on-any-Planet“ Design wird oft entwickelt als klug angesehen, so dass Sie kann härter arbeiten, zu argumentieren, dass sein Design ist zu clever.

Abwägungen zu verstehen, so dass Sie die Entscheidung zwischen einem guten Annahmen und schlechten Annahmen getroffen werden können, werden einen langen Weg in eine unnötig komplizierte Konstruktion vermieden werden.

Hier sind einige Ideen zu Design bekommen mehr einfacher:

  • einige Programmier Bücher und Artikel lesen, und dann anwenden , um sie in Ihrer Arbeit und schreiben Code
  • lesen Sie viel Code (gut und schlecht) von anderen Leuten geschrieben (wie Open-Source-Projekte) und lernen, um zu sehen, was funktioniert und was nicht
  • baut Sicherheitsnetze (Unit-Tests) Experimente mit Ihrem Code aktivieren
  • Verwendung der Versionskontrolle zu ermöglichen, Rollback, wenn diese Experimente nehmen falsch abgebogen
  • TDD (Test Driven Development) und BDD (Verhalten Driven Development)
  • Sie Ihre Haltung ändern, fragen, wie man es so machen, dass „einfach funktioniert“ (Konvention über Konfiguration dort helfen könnte, oder fragen, wie Apple würde es tun)
  • Praxis (wie Jazzer - Marmelade mit Code, versuchen -Code Kata )
  • schreibt gleichen Code mehrfach, mit verschiedenen Sprachen und nach einiger Zeit vergangen
  • neue Sprachen lernen mit neuen Konzepten (wenn Sie statische Sprache verwenden, dynamisch man lernen, wenn man prozedurale Sprache verwenden, lernt funktional ein; ...) [eine Sprache pro Jahr etwa right]
  • jemanden fragen Sie den Code zu überprüfen und aktiv fragen, wie Sie Ihren Code einfacher und eleganter machen können ( und dann machen es )
  • erhalten Jahre unter dem Gürtel über Dinge zu tun (aktiv Geist hilft)

Ich erstelle ein Design usw., und dann sehe ich es und versuchen und entfernen (agressiv) alles, was nicht nötig zu sein scheint. Stellt sich heraus, dass ich es später brauchen, wenn ich das Design bin Polieren ich es wieder hinzufügen. Ich tun dies über mehrere Iterationen verfeinert, wie ich entlang gehen.

Lesen "Effektives Arbeiten mit Legacy-Code" von Michael C. Federn.

Der Punkt ist, wenn Sie Code, das funktioniert, und Sie müssen das Design ändern, funktioniert nichts besser als Ihr Code-Einheit prüfbar zu machen, und brechen Sie den Code in kleinere Stücke.

Mit Test Driven Development und im Anschluss an Robert C. Martin drei Regeln des TDD :

  1. Sie sind nicht erlaubt jede Produktion Code zu schreiben, es sei denn, es ist eine fehlerhafte Einheit Testdurchlauf zu machen.
  2. Sie werden nicht mehr von einem Unit-Test zu schreiben erlaubt als ausreichend ist zum Scheitern verurteilt; und Kompilation Ausfälle sind Ausfälle.
  3. Sie sind mehr Produktionscode nicht erlaubt zu schreiben, als ausreichend ist, die eine fehlerhafte Einheit Test zu bestehen.

Auf diese Weise werden Sie nicht wahrscheinlich sind viel Code zu erhalten, die Sie nicht brauchen. Sie werden immer machen eine wichtige Sache Arbeit konzentrieren und wird nicht immer zu weit voraus, sich in Bezug auf die Komplexität bekommen.

Test zuerst kann hier helfen, aber es ist für alle Situation nicht geeignet. Und es ist kein Allheilmittel sowieso.

Start klein ist eine weitere gute Idee. Brauchen Sie wirklich alle 10 Design-Muster in diese Sache zu stopfen? Versuchen Sie es zuerst „dumme Art und Weise“ zu tun. Ist es nicht ganz schneiden? Okay, tut es „etwas weniger dumm Art und Weise“. Etc.

Erhalten Sie es überprüft . Wie jemand anderes geschrieben hat, zwei Augenpaare sind besser. Noch besser sind zwei Gehirne. Ihr Partner kann nur ein Zimmer für eine Vereinfachung sehen, oder ein problematischer Bereich, den Sie in Ordnung gedacht war, nur weil man viele Stunden damit verbringen, Hacking es.

Mit magerer Sprache. Sprachen wie Java oder C ++ manchmal scheinen manchmal böse, gewundene Lösungen zu fördern. Einfache Dinge sind in der Regel mehr Code-Zeilen umspannen über, und Sie brauchen nur drei externe Bibliotheken zu verwenden und einen großen Rahmen, um alles zu verwalten. Betrachten Sie mit Python, Ruby, usw. - wenn nicht für das Projekt, dann für einige den privaten Gebrauch. Es kann Ihre Einstellung ändern Einfachheit bevorzugen, und sicher zu sein, dass Einfachheit möglich ist.

Es ist unvermeidlich, wenn Sie ein Programmierer gewesen sein, dass dies geschehen wird. Wenn Sie ernsthaft die Mühe oder schlagen ein Problem, wo Sie Ihre Lösung einfach nicht funktioniert, dann stoppen Codierung und bekommt das Gespräch mit Ihrem Projektmanager unestimated. Ich immer mit mir zu nehmen, die Lösungen wie das Treffen Problem ist, A, können Sie x tun, die 3 Tage dauern, oder wir können y versuchen, die 6 Tage dauern wird. macht die Wahl nicht selbst.

  • Sprechen Sie mit anderen Programmierern bei jedem Schritt des Weges. Je mehr Augen gibt es auf dem Design, desto wahrscheinlicher ist ein allzu komplizierter Aspekt früh aufgedeckt wird, bevor es zu verknöchert in der Codebasis wird.
  • Ständig fragen Sie sich, wie Sie verwenden, was Sie gerade arbeiten. Wenn die Antwort ist, dass Sie sich nicht sicher sind, aufhören zu überdenken, was Sie tun.
  • Ich habe es nützlich gefunden notieren Gedanken darüber, wie etwas zu potenziell vereinfacht ich gerade arbeite. Auf diese Weise, wenn ich es tatsächlich arbeiten muß, ist es einfacher, zurück und Refactoring gehen oder wie nötig wiederholen, anstatt mit etwas in Unordnung, die noch nicht einmal funktional ist.

Dies ist ein Balanceakt: Einerseits Sie nicht wollen etwas, das zu lange dauert, zu entwerfen und zu implementieren, auf der anderen Seite Sie nicht wollen, einen Hack, die nicht kompliziert genug ist, mit dem nächsten beschäftigen Woche Problem, oder noch schlimmer erfordert neu zu schreiben. anzupassen

Ein paar Techniken, die wir finden hilfreich:

Wenn etwas komplexer scheint, als Sie möchten dann nie hinsetzen, sie umzusetzen, sobald Sie es beendet haben zu denken. Finden Sie etwas anderes für den Rest des Tages zu tun. Zahlreiche Male, die ich von einer anderen Lösung zu einem frühen Teil des Problems zu denken am Ende, die später viel von der Komplexität entfernt.

In ähnlicher Weise hat jemand anderes kann man Ideen abprallen. Stellen Sie sicher, Sie können ihnen erklären, warum die Komplexität gerechtfertigt ist!

Wenn Sie Komplexität hinzufügen, weil Sie denken, es wird in Zukunft gerechtfertigt werden dann versuchen, herzustellen, wenn in der Zukunft Sie es verwenden werden. Wenn Sie nicht (realistisch) vorstellen, die Komplexität für ein Jahr benötigen oder drei dann wahrscheinlich nicht vertretbar ist nun, dafür zu zahlen.

Reduzieren Sie die Datenmenge, mit dem Sie arbeiten, indem Sie die Aufgabe in eine Reihe von kleineren Aufgaben Serialisierung. Die meisten Menschen können nur ein halbes Dutzend (plus oder minus) Bedingungen in ihrem Kopf halten, während Codierung, so dass die Einheit der Umsetzung machen. Design für alle Aufgaben, die Sie erreichen müssen, aber dann rücksichtslos das Design hacken, so dass Sie nie mehr als ein halbes Dutzend Wege, obwohl das Modul spielen müssen.

Das von Bendazo der Post folgt - vereinfachen, bis es leicht wird,

.

Ich frage meine Kunden Warum sie eine Funktion benötigen. Ich versuche, auf den Grund ihrer Anfrage zu erhalten und das Problem identifizieren sie erleben. Dies verleiht oft selbst auf eine einfachere Lösung als ich (oder sie) von denken würde.

Natürlich, wenn Sie Ihre Kunden Arbeitsgewohnheiten kennen und welche Probleme sie lösen müssen, können Sie ihre Probleme viel besser aus der verstehen get-go. Und wenn Sie „kennen sie“ wissen sie, dann verstehen Sie ihre Sprache besser. So entwickelt eine enge Zusammenarbeit mit den Benutzern. Es ist Schritt Null der Technik.

Nehmen Sie sich Zeit, die Konzepte des Systems gut zu nennen, und finden Sie die Namen, die verwandt sind, macht dies das System besser vertraut. Zögern Sie nicht, Konzepte zu benennen, desto besser ist die Verbindung zur Welt Sie wissen, desto besser Ihr Gehirn kann damit arbeiten.

Stellen Sie

für Meinungen von Menschen, die ihre Kicks von sauberen, einfachen Lösungen zu bekommen.

Es werden nur Konzepte durch das aktuelle Projekt benötigt umzusetzen (der Wunsch nach Zukunftssicherheit oder generische Systeme machen Ihr Design aufgebläht).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top