Festgefahren, weil "zu viel gewusst" wurde [geschlossen]


147

Weitere Informationen finden Sie unter http://news.ycombinator.com/item?id=4037794

Ich habe eine relativ einfache Entwicklungsaufgabe, aber jedes Mal, wenn ich versuche, sie anzugreifen, gerate ich in tiefe Gedanken - wie könnte sie die Zukunft verlängern, was werden die Kunden der zweiten Generation brauchen, wie wirkt sie sich auf "nicht funktionsfähig" aus? Aspekte (z. B. Leistung, Autorisierung ...), wie sollte ein Architekt Änderungen zulassen ...

Ich erinnere mich an mich selbst vor einiger Zeit, jünger und vielleicht eifriger. Das "Ich", das ich damals war, hätte sich darüber keine Gedanken gemacht - er wäre vorgegangen und hätte etwas geschrieben, dann hätte er es umgeschrieben, dann hätte er es noch einmal umgeschrieben (und noch einmal ...). Das "Ich" ist heute zögerlicher, vorsichtiger.

Ich finde es heutzutage viel einfacher, zu sitzen und andere zu planen und zu unterweisen, wie man Dinge tut, als tatsächlich voranzugehen und sie selbst zu tun - nicht, weil ich nicht gerne programmiere - im Gegenteil, ich liebe es! - aber jedes Mal, wenn ich an der Tastatur sitze, lande ich an demselben ärgerlichen Ort.

Ist das falsch? Ist das eine natürliche Entwicklung, oder habe ich mich selbst in eine Brunft getrieben?

Fair Disclosure - Früher war ich Entwickler, heute ist meine Berufsbezeichnung "Systemarchitekt". Viel Glück beim Überlegen, was es bedeutet - aber das ist der Titel.


Beeindruckend. Ich habe ehrlich gesagt nicht erwartet, dass diese Frage so viele Antworten generiert. Ich werde versuchen, es zusammenzufassen.

Gründe dafür:

  1. Analyse Lähmung / Über Engineering / Vergoldung / (jede andere "zu viel Vorausdenken kann Sie verletzen").
  2. Zu viel Erfahrung für die gegebene Aufgabe.
  3. Ich konzentriere mich nicht auf das, was wichtig ist.
  4. Nicht genug Erfahrung (und das zu realisieren).

Lösungen (nicht auf Gründe abgestimmt):

  1. Zuerst testen.
  2. Codierung starten (+ zum Spaß)
  3. Eine zum Wegwerfen (+ eine API zum Wegwerfen).
  4. Zeitbeschränkungen festlegen.
  5. Entfernen Sie die Flusen und bleiben Sie bei den Sachen.
  6. Machen Sie flexiblen Code (ein bisschen im Gegensatz zu "One to Throw", nein?).

Vielen Dank an alle - ich denke, der größte Vorteil dabei war zu erkennen, dass ich mit dieser Erfahrung nicht alleine bin. Eigentlich habe ich bereits mit dem Codieren begonnen und einige der zu großen Dinge sind natürlich abgefallen.

Da diese Frage geschlossen ist, akzeptiere ich die Antwort ab heute mit den meisten Stimmen. Wann / wenn es sich ändert - ich werde versuchen zu folgen.


47
Zeitdruck hilft viel dabei, Dinge nicht mehr zu überdenken.
user281377

51

49
Trinken Sie 2 Biere ..
Andrew T Finnell

6
Zweiter Systemeffekt, wer?
Billy ONeal

21
Ihr Problem ist nicht, "zu viel zu wissen", sondern zu viel zu analysieren. Sie müssen sich jetzt nicht allzu sehr um Leistung, zukünftige Funktionen usw. kümmern. Es ist nicht so, dass die Welt untergeht, wenn der Kunde Ihnen eine neue Funktion gibt, die ein bisschen schwer zu implementieren ist
Louis Rhys

Antworten:


90

Über diese Dinge nachzudenken ist definitiv gut, aber lass dich nicht davon aufhalten.

Ein Ansatz, der sehr gut funktioniert (insbesondere bei iterativer Entwicklung), besteht darin, eine einfache Lösung zu implementieren und diese später bei Bedarf zu überarbeiten. Dies hält den Code so einfach wie möglich und vermeidet Überentwicklungen. Die meisten der von Ihnen in Betracht gezogenen Leistungs- oder Architekturänderungen sind wahrscheinlich ohnehin nicht erforderlich. Schreiben Sie sie also erst, wenn sie offiziell erforderlich sind. Sorgen Sie sich beispielsweise nicht um die Leistung, bis ein Profiler Ihnen mitgeteilt hat, dass es Zeit ist, die Leistung zu verbessern.

Eine Sache, die Sie tun können, um sich anzupassen, besteht darin, ein Zeitlimit festzulegen, wie lange Sie über etwas nachdenken, bevor Sie Code schreiben. Meistens wird der Code besser, wenn Sie ein wenig nachdenken, ihn schreiben, Ihre Fehler erkennen und sie dann durch Refactoring beheben.

Hier ist ein Gleichgewicht zu finden. Sie sollten nicht nur kopfüber vorgehen und nicht über die Konsequenzen nachdenken, sondern auch nicht versuchen, Ihren Code zu überarbeiten.


15
Offizieller Name: YAGNI .
Mark Ransom

48

Wikipedia nennt es "Analyse Lähmung" in der Software. Das Rezept ist, sich an agile Methoden zu halten. Das bedeutet, dass jede Aktivität oder einzelne Aktion viel mehr Wert hat als der Versuch, Praktiken oder Richtlinien festzulegen. Jeder Mitwirkende im Team ist wertvoll, egal wie gut oder schlecht die Fähigkeiten der Person zu architektonischen Idealen passen. In agilen Situationen stehen Individuen, Ego und Politik an erster Stelle.

Meine Lieblingsantwort lautet "Architektur ist Verb". Hör auf zu denken, fang an zu handeln, egal wie unvollkommen und ineffizient du und das Team fühlen werden. Vielleicht können die ersten Maßnahmen darin bestehen, unangemessene Richtlinien zu demontieren.



38

Ist das falsch? Ist das eine natürliche Entwicklung, oder habe ich mich selbst in eine Brunft getrieben?

Es hängt davon ab, ob. Dies ist in der Regel ein gewöhnlicher Schritt auf dem Weg eines Entwicklers.

  1. Fangen Sie an, Mist zusammen zu werfen, und lassen Sie sich dabei in den Arsch beißen
  2. Fangen Sie an, die Hölle aus allem heraus zu konstruieren, und merken Sie, dass YAGNI
  3. Machen Sie es sich auf einem pragmatischen Mittelweg gemütlich, wo die einfachen Dinge zusammengeschlagen werden und die harten / änderungswahrscheinlichen Dinge genug Technik erhalten, um das Arbeiten mit / ändern zu erleichtern.

Es ist nur eine Brunft, wenn Sie bei Nummer 2 bleiben.


4
+1 Sie werden feststellen, dass Sie sich auf Platz 2 befinden, wenn Sie anfangen, "Hello World" zu überarbeiten.
Spoike

3
@Spoike - oder Fizzbuzz. Ala, Enterprise Fizzbuzz !
CraigTP

1
4. Machen Sie sich klar, dass 3 ebenfalls falsch ist, und kümmern Sie sich nur darum, die geschäftlichen Anforderungen zu erfüllen, anstatt die technischen Anforderungen zu erfüllen. Das universelle Geschäftsbedürfnis ist, dass sich alles ständig ändert, ob klein oder groß. Die Implementierungsdetails stimmen mit den grundlegenden Treibern überein und werden adressiert, wenn sie benötigt werden, nicht früher, nicht später. Just In Time Entwicklung.

14

Eines der Dinge, an die ich immer gerne denke, ist das Sprichwort: "Die Zukunft ist nicht mehr so, wie sie früher war."

Mit einer gewissen Erfahrung wird es verlockend zu glauben, dass man die Zukunft vorhersagen kann, aber nicht. Es ist einfach, sich Features vorzustellen, die zukünftige Kunden / Benutzer / was auch immer wollen, aber das bedeutet nicht, dass sie sie sofort wollen werden. Es bedeutet auch nicht, dass sie sie über eine andere widersprüchliche Funktion hinweg haben wollen. Sie müssen sich also wirklich darauf beschränken, wie viel Zeit Sie heute für die Zukunft planen. Sie müssen vor allem begrenzen, wie viel Zeit Sie heute damit verbringen, Dinge zu bauen, die in Zukunft nur noch von Nutzen sein werden.

Die Frage, die ich stelle, um mich auf dem richtigen Weg zu halten, lautet: "Wie viel schwieriger wird es sein, dieses Feature später zu erstellen, als es jetzt zu unterstützen?" Normalerweise ist die Antwort, dass der zukünftige Aufwand ungefähr gleich oder vielleicht doppelt so hoch ist wie der, den man jetzt machen würde. Da ich die Zukunft nicht vorhersagen kann, habe ich in diesem Fall kein Problem damit, sie jetzt nicht zu erstellen. Wenn die Antwort das 10-fache oder mehr erreicht, frage ich mich, wie wahrscheinlich es ist, dass wir dies in den nächsten ein oder zwei Jahren brauchen werden. Selbst dann würde ich mich einfach darauf beschränken, sicherzustellen, dass es nicht notwendig ist, Dinge, die wir heute tun, rückgängig zu machen, um dieses Ziel in Zukunft zu erreichen, es sei denn, es besteht weitgehende Übereinstimmung.

Ich habe zum Beispiel an einigen Projekten gearbeitet, in denen wir viel Zeit damit verbracht haben, die Tatsache zu abstrahieren, dass wir später Hibernate als Datenzugriff verwendeten. (Ich habe noch nie gesehen, dass das auf Hibernate basierende Projekt nicht mehr verwendet wird. Das war also zunächst eine Zeitverschwendung, aber lassen Sie uns das beiseite.) Auch wenn es eine vernünftige Möglichkeit gewesen wäre, die wir später möglicherweise ändern möchten, weil Wir haben auch ein Datenzugriffsobjektmuster verwendet. Es wäre nicht schwieriger gewesen, die Flexibilität zum Auswechseln des Ruhezustands und zum gleichen Zeitpunkt, zu dem wir sie benötigten, einzubauen, als die Flexibilität von Anfang an einzubauen. Angesichts einer solchen Situation würde ich diese Flexibilität einfach aufschieben, bis wir sie wirklich brauchten.

Wenn Sie keine strategische Planung für ein großes Unternehmen durchführen, lohnt es sich kaum, mehr als zwei oder drei Jahre später über Architekturfragen nachzudenken, da sich die Technologie so schnell ändert. Das Feature, an das Sie vielleicht heute denken, ist möglicherweise in zwei oder drei Jahren als Open Source frei verfügbar. Mit ziemlicher Sicherheit wird sich die Kosten-Nutzen-Analyse geändert haben.

Beschränken Sie sich darauf, ein System zu entwickeln, das genau das tut, was Sie heute brauchen, auf das Sie stolz sind und an dem Sie in einigen Monaten gerne arbeiten werden, was auch immer die nächste Runde von Änderungen bringt. Wirklich, das ist das Beste, was Sie tun können.


Die vorzeitige Verallgemeinerung ist für den größten Teil des Zahnfleisches in unserer aktuellen Codebasis verantwortlich.
Benjol

10

Hier ist mein persönlicher Eliminierungsprozess für verrückte Designs, die (in ihrer ersten Version) unpraktisch werden und ein Projekt aus geschäftlicher Sicht beschädigen können.

  1. Identifizieren Sie das Epizentrum : Stellen Sie sich Ihr Projekt als Hot-Dog-Stand vor, das Epizentrum wären die Hot-Dogs. Sie können jedes andere Gewürz / Dressing / Gemüse von Ihrem Stand nehmen und trotzdem Hot Dogs verkaufen. Was ist der Hauptzweck Ihrer Software? Isolieren Sie jeden anderen Zusatz und / oder Mehrwert davon und konzentrieren Sie sich zuerst auf das Epizentrum.
  2. Wiederholen Sie sich immer wieder: "Später machen heißt besser machen" : Sehen Sie, wo es Sinn macht, und schreiben Sie ein wenig "für später" darauf. Wenn Sie es gut machen und über den tatsächlichen Gebrauch nachdenken, erhalten Sie dasselbe Design, das Sie jedoch in einer Roadmap priorisiert haben.
  3. Diminish-Decouple-Discard : Unabhängig davon, welches Moduldesign Sie haben, machen Sie es so einfach / essentiell / rein / universell wie möglich (manchmal kann dies erreicht werden, ohne Features zu entfernen). Wenn Sie es nicht weiter vereinfachen können, entkoppeln Sie Elemente, die für sich leben und einen Zweck haben könnten. Am Ende, wenn Sie noch etwas Fett drin haben, können Sie es einfach abschneiden.
  4. Trennen Sie "Bibliothekscode" von "Produktionscode" : Es wird immer Code geben, der nicht wiederverwendet werden kann, aber das Design wird immer verrauscht. Dieser Code enthält Geschäftsregeln. Sie werden feststellen, dass einige Geschäftsregeln manchmal einfacher und schneller zu ändern sind ( extrem wichtig ) als bei einem robusten Design. Sie finden Code, auf den Sie sich verlassen können, und Code, den der Kunde in Zukunft ändern oder neu implementieren muss. Sie möchten, dass diese so getrennt wie möglich sind.

Und übrigens, Schritt 0 ist: "verrückt nach dem Design". Dies hilft mir dabei, mein System zu verlassen und häufig neue Implikationen, versteckte Anforderungen und sogar neue Funktionen zu finden.

Ich habe 1 & 2 von Rework genommen .


9

Schreiben Sie die Tests. Sie sind fertig, wenn die Tests alle bestanden haben: nicht vor und schon gar nicht lange nach einer epischen Phase der Überentwicklung. Wenn Sie eine Reihe von Tests für den Code haben, den Sie schreiben, erhalten Sie einen unabhängigen, unvoreingenommenen Beobachter, der Ihnen mitteilt, wann Sie aufhören können.


6
(Nicht meine Ablehnung) Wann hören Sie auf, Tests zu schreiben? Sie haben das Problem nur auf eine indirekte Ebene gebracht.
MSalters

2
@MSalters Ich denke, Graham bezieht sich auf TDD, wo Sie eine Reihe von Tests vor dem Code schreiben. Dann schreiben Sie den einfachsten Code, der diese Tests bestehen lässt. Dann überarbeiten Sie. Das Befolgen dieser Technik kann Sie daran hindern, Ihre anfängliche Entwicklung zu überdenken, da Ihr Ziel darin besteht, den Test zu bestehen und nicht den perfekten Code zu erstellen.
Oleksi

2
Testen kann niemals das Fehlen von Fehlern beweisen. Nur weil Ihr Toast vorbei ist, heißt das noch lange nicht, dass Sie fertig sind. Ihre Tests können bestenfalls zeigen, dass eine sehr, sehr kleine Stichprobe statistischer Bedeutungslosigkeit der möglichen Eingaben in Ihr Programm die Ausgaben liefert, die Sie für richtig halten. Das beweist noch lange nicht, dass das Programm korrekt ist. In jedem Fall hilft Ihnen das Schreiben der Tests nicht dabei, eine Lösung zu entwickeln, die in Zukunft erweiterbar und wartbar ist.
Old Pro

6
@OldPro Die Tests sind ein Mittel, kein Ziel. Sie fördern ein gutes Design und einen fokussierten Arbeitsablauf und haben den Nebeneffekt, dass sie bei der Reduzierung von Fehlern hilfreich sind. Allgemein gesagt. Nicht immer.
Phil

2
Tests helfen, den Umfang und die Reichweite des Artikels zu definieren. Ganz gleich, ob Sie TDD oder eine andere Methode verwenden, die Idee, Tests zu definieren und dann zu implementieren, bis diese Tests erfüllt sind, ist das, was @Graham hier sagt.
Preet Sangha

4

Wenn Sie jung sind, sehen Sie kein Risiko (möglicherweise ist der Grund, warum Nachwuchspolitiker unheimlich sind), aber wenn Sie älter werden, lähmen Sie Ihre schlechten Erfahrungen bei jeder Gelegenheit (möglicherweise stagniert der Grund, warum Nachwuchspolitiker stagnieren). Nehmen Sie einen gestochen scharfen Ansatz von Occam an - entscheiden Sie sich für die Lösung mit den geringsten Anforderungen und entwickeln Sie sich von dort aus weiter.


4

Es gibt nur zwei Dinge, die Sie beim Schreiben und Entwerfen von Software wirklich beachten müssen: Wartbarkeit und Korrektheit.

Die Richtigkeit ist kurzfristig von größter Bedeutung und kann leicht durch Tests nachgewiesen werden.

Die Wartbarkeit wird später in der Entwicklung hilfreich sein, ist jedoch schwieriger zu bestimmen.

Meine derzeitige Strategie besteht darin, zunächst einen monolithischen Proof of Concept zu erstellen und dann die Benutzeroberfläche vom Modell zu trennen (um sicherzustellen, dass das Modell nichts über die Benutzeroberfläche weiß), sobald ich überzeugt bin, dass sie realisierbar ist. Wenn ich zu lange auf diesen Schritt warten würde, würde ich etwas bekommen, das nicht mehr zu halten ist. Wenn ich mit den getrennten Ebenen beginne, kann ich einfach nicht anfangen, da ich nicht weiter weiß, was die Benutzeroberfläche über das Modell wissen muss.


3

Wenn ich in Situationen wie diesen feststeckte, stellte ich fest, dass es hilfreich ist, sich hartnäckig vorzustellen, dass ich ein Endbenutzer bin, der das hypothetische Programm verwendet, um etwas ziemlich Triviales zu erledigen. Dann versuche ich, mich auf die programmatischen Einstiegspunkte zu konzentrieren, die zur Unterstützung dieser Aktionen erforderlich sind, und versuche so weit wie möglich, andere Aspekte des Systems zu ignorieren. Von hier aus ist es oft möglich, eine (kleine!) 'Wunschliste' von Funktionen des fertigen Systems zu erstellen und einen unrealistischen Code zu schreiben, der diese zu implementieren beginnt . Nach dieser Übung fange ich normalerweise an, und der Rest des Systems wird klarer. Es geht nur um den Einstiegspunkt - und der Einstiegspunkt der meisten Software sind die anfänglichen Aktionen des Endbenutzers mit einem Programm.


3

Ich denke, es ist ein Syndrom, dass die Aufgaben, die Sie erledigen, zu einfach für Sie sind.

Vor ein paar Jahren bestand die Herausforderung für Sie darin, einen Code zu schreiben, der die vorgegebene Aufgabe erfüllt. Dies war es, was deinen Verstand völlig beschäftigte. Jetzt arbeitet Ihr Verstand (Ihre Erfahrung usw.) effektiver und die gleiche Aufgabe erfordert nur einen Teil der Energie, die zuvor benötigt wurde. Deshalb endet ihr in dieser Spirale tiefer Gedanken. Ihr Geist wehrt sich gegen Routine und kämpft um Herausforderungen.

Ich denke, Sie sollten überlegen, Ihre Arbeit zu ändern. Vielleicht solltest du eine neue Programmiersprache lernen.


3

Ich hatte vor 15 Jahren das gleiche Problem. Ich wollte perfekten, wiederverwendbaren, universellen Code schreiben, der die Lösung viel komplizierter als nötig machte. Heute sehe ich das als Vergoldung . Was mir sehr geholfen hat, war der Rat eines Kollegen:

  • Wenn Sie eine Idee haben, was die Funktionalität verbessern könnte, machen Sie sie universeller, ... schreiben Sie diese Idee in eine separate Textdatei "ideas.txt", aber implementieren Sie sie jetzt nicht .
  • Führen Sie die dringenden Aufgaben weiter aus.
  • Überprüfen Sie nach sechs Monaten Ihre "ideas.txt" und analysieren Sie, welche dieser Änderungen dem Projekt wirklich zugute gekommen wären.

2

Dies ist einfach eine Lähmung durch Analyse. Es passiert vielen Menschen auf vielen Gebieten. Sie können es durchbrechen.

Die Antwort ist - nur weiter so ;-)

Ich poste in einem Fitness-Forum und viele, viele Male posten Leute über verschiedene Routinen und versuchen, genau die perfekte für sie zu finden. Also sagen wir ihnen, fangen Sie einfach an zu trainieren und arbeiten Sie daran, während Sie fortfahren. Sie möchten stärker werden, einige Kraftübungen machen und dann die Dinge auf Ihrem Weg optimieren.

Wenn Sie ein großes Programm haben und Ihr Gehirn Überstunden macht - programmieren Sie zunächst nur die einfachen Fälle. Zunächst muss das Programm ausgeführt werden, dann müssen Eingaben vorgenommen werden usw.
Ihre Herausforderung besteht darin, die Dinge später einfach zu aktualisieren und umzugestalten, aber der Code MUSS nicht komplizierter sein, als es für die jeweilige Aufgabe erforderlich ist.

Denken Sie daran, dass es in Zukunft in Ordnung ist, Code umzugestalten, um neuen Prioritäten gerecht zu werden. Sie können nicht alle voraussagen, versuchen Sie es also nicht.

Code nur für die nächste Aufgabe. Code ist einfach und gut, so dass es bei Bedarf einfach ist, ihn umzugestalten. Stellen Sie sicher, dass das Programm funktioniert. Wiederholen.


1

Da Sie nicht weiter überlegen können, welche Anwendungsszenarien für Endbenutzer möglich sind, sollten Sie hier etwas berücksichtigen, wenn Sie eine API veröffentlichen und davon ausgehen, dass Ihnen unbekannte Personen diese API verwenden. Sobald eine API veröffentlicht ist, müssen Sie sie entweder weiterhin unterstützen, auch wenn Sie später feststellen, wie schlecht Ihre erste Version ist, oder Sie müssen den Code aller möglicherweise Ihnen unbekannten Personen brechen, die dagegen geschrieben haben, und riskieren so eine Entfremdung sie für die ganze zukünftige Zeit.

Die Standardlösung besteht darin, mit der Bedingung zu veröffentlichen, dass sich die API jederzeit auf irgendeine Weise ändern kann, bis Sie ein Gefühl dafür bekommen, was Ihre Benutzer und API-Konsumenten benötigen.

In dieser Lösung denke ich, ist Ihre eigene Lösung. Schreiben Sie nur ein paar kleine Dinge, die ein oder zwei Dinge bewirken, vielleicht sind sie ganz in Ordnung, und behalten Sie das Verständnis für sich, dass sich alles, was Sie tun, in Zukunft ändern kann.

Es ist nicht möglich, alles richtig zu machen, oder in einigen Fällen sogar, wenn Sie anfangen, weil Design wirklich eine Entdeckungsreise ist. Es ist das Letzte, das auftaucht, nicht das Erste, was getan werden muss.

Sie können eine API nicht sofort entwerfen und müssen sie niemals an Ihre Kunden weitergeben. Sie verstehen, warum das so ist. Aus dem gleichen Grund können Sie keine Software schreiben und müssen möglicherweise nicht alles wegwerfen und mit einem neuen Ansatz beginnen.

Ich glaube nicht, dass Sie ein Problem in dem Sinne haben, dass Sie sich versehentlich zu etwas entwickelt haben, das weniger kreativ, produktiv oder wünschenswert ist. Ich denke, dass Sie hohe Standards haben, die Sie versehentlich falsch auf Ihre Situation anwenden - ein häufiger Fehler, wenn Sie denken, dass jeder einen Fehler macht.

Erfahrung zählt nie gegen Sie, es sei denn, Sie werden ein zynischer Besserwisser, der alles tut, und das klingt wirklich wie das Gegenteil Ihrer Situation.

Ich habe ein paar Bilder, die mir in Erinnerung bleiben, wenn ich groß werde. Man spielt mit Lego. Ich setze es zusammen und zerlege es nach Belieben. Was ich anfange zu machen, kann nicht das sein, was ich am Ende mache. Ich surfe und nutze die Möglichkeiten, die mir im Laufe der Zeit in den Sinn kommen. Oftmals erschaffe ich meine Ziele ganz unmittelbar vor Ort als Inspiration. Das ist es, was Kreativität IST.

Das andere Bild ist eine Analogie, die ich gehört habe und die beschreibt, wie man echte Wissenschaft macht. Sie tappen in einem dunklen Raum nach einer schwarzen Katze, die möglicherweise nicht da ist. Es ist nur ärgerlich, wenn Sie sich selbst als Versager betrachten, weil Sie diese Katze nicht gefunden haben. Es gibt keine andere Möglichkeit, schwarze Katzen zu finden. Das ist die einzige Aktivität, die sie jemals findet. Alles andere ist eine Form von bereits haben, was Sie angeblich suchen.


0

Sie wissen nicht zu viel; du weißt nicht genug! Und das haben Sie erst kürzlich gemerkt.

Betrachten Sie Ihre Designentscheidungen nicht als etwas, das "richtig" sein muss, da es kein "richtig" gibt - es gibt viele "falsche", aber es gibt auch Kompromisse (in Bezug auf Ausführungsgeschwindigkeit, Zeit, um die Codierung abzuschließen) Aufgabe, Erweiterbarkeit usw.). Der Code, den Sie schreiben, wenn Sie ihn gut durchdacht haben, hat immer noch verschiedene Stärken und Schwächen.

Das Ziel sollte sein, zu einem Punkt zu gelangen, an dem das Verständnis dieser Stärken und Schwächen im Zusammenhang mit der gegenwärtigen und zukünftigen Verwendung und Wartung nicht wesentlich schwieriger ist als das Schreiben von Code.

Vermeiden Sie also keine tiefen Gedanken, sondern denken Sie daran, dass Sie Erfahrung brauchen, nicht nur Gedanke, um ein Meister in dieser Art von Design zu werden. Denken Sie nach, bis Sie einen Punkt erreicht haben, an dem Sie sich einer bestimmten Wahl nicht sicher sind, und setzen Sie dann das um, von dem Sie hoffen, dass es das Beste ist. Probieren Sie es aus und lernen Sie, wie es gelaufen ist.


-1

Übe das Codieren. Überlegen Sie sich Übungen oder suchen Sie sie online und versuchen Sie, sie so schnell wie möglich richtig zu beenden. Wenn Sie schneller werden, sollten Sie Aspekte wie Wartbarkeit und Leistung berücksichtigen. Sie werden feststellen, dass es erfrischend ist, Dinge zu codieren, die nicht in die Produktion gehen, und es könnte Ihnen helfen, Ihre Angst vor dem Codieren loszuwerden.


-2

Machen Sie das Programmieren in Ihrer Freizeit so, wie Sie es vor 10 Jahren getan haben, mit weniger Sorgen und nur dem Spaß.

Werden Sie Teammanager und leiten Sie jüngere Entwickler - die sich jetzt in derselben mentalen Verfassung befinden wie vor 10 Jahren.


-2

Nein, du weißt noch nicht genug.

Bereichern Sie Ihr Wissen zB durch diese einfachen Regeln:

  • KISS: Halte es klein und einfach.
  • YAGNI: Du wirst es nicht brauchen.
  • Schlimmer ist besser: Einige schlechtere Lösungen sind in Bezug auf die Wartbarkeit sogar besser.

Überingenieur nicht. Seien Sie bereit für Änderungen, indem Sie über Refactoring-Kenntnisse verfügen, aber codieren Sie nicht jede mögliche Änderung des Codes. Wenn Sie feststellen, dass eine Klasse oder Funktion im Laufe der Zeit zu groß wird, ändern Sie sie. Teilen und erobern. Verwenden Sie Schnittstellen, verwenden Sie mehr Funktionen. Wenn Sie das Gefühl haben, dass Sie zu viel geteilt haben (dh es wurde irgendwie schicker, aber weniger lesbar), machen Sie Ihre letzte Änderung rückgängig.

Fazit: Machen Sie Ihren Code flexibel genug, aber nicht flexibler. Machen Sie sich stattdessen flexibel und kaufen Sie ein Buch über Refactoring.


-2

Zwei Dinge:

  1. Es ist nicht genug, viel zu wissen. Sie müssen Meinungen dazu haben, was es wert ist, implementiert zu werden. Ich persönlich sehe TDD als eine Krücke, die schlechte Architektur ermöglicht. Angesichts der schieren Menge an populärer Meinung, die gegen mich spricht, liege ich wahrscheinlich falsch, aber ob TDD in JavaScript implementiert wird, ist kein Problem, über das ich nachgedacht habe, denn Debugging war für mich nie ein gewaltiges Problem und hey, Es wäre nicht das erste Mal, dass die Meinung der Bevölkerung in der Entwicklungsgemeinschaft später als fehlerhaft angesehen wird. Lerne also, ein arroganter Trottel zu sein. Zumindest von innen. Sie könnten sich irren, aber zumindest sich auf Dinge festlegen, die für Sie funktionieren, anstatt Dinge zu überdenken, die möglicherweise nicht funktionieren.

  2. Es hört sich so an, als würden Sie mit dem Mikro anfangen. Beginnen Sie mit Makro. Zuerst die Tools, die Sie für die Aufgaben Ihrer App benötigen. Dieser Teil sollte leicht genug kommen. Beginnen Sie dann mit den Architektur- / Schnittstellenaspekten. Wie sich das Sanitär anschließt und woran es anschließt, sollten eigentlich nur die schwachen Teile über allem sein, die Sie einfach beiseite wischen und aus einer Laune heraus ersetzen können. Ebenso mit den Details, wie die Dinge gemacht werden. Ordnungsgemäß verpackt können diese problemlos ausgetauscht / bearbeitet werden.


-2

Aber jedes Mal, wenn ich versuche, es anzugreifen, komme ich in tiefe Gedanken

Da ist nichts falsch. Sie haben nur gemerkt, dass es Zeit ist, Ihren Prozess zu verbessern: in diesem Fall Ihren Denkprozess.

Viele Menschen verlieren sich in der Analyse oder werden auf andere Weise abgelenkt und bemerken es nicht einmal. Sie haben bemerkt, dass Sie Ihren Denkprozess ändern können, um auf dem richtigen Weg zu bleiben.

Hierfür gibt es viele Lösungen, und die beste, die ich oben gesehen habe, ist die Festlegung einer zeitlichen Beschränkung. Bevor Sie beginnen, entscheiden Sie, wie lange (1 Stunde?) Sie sich damit beschäftigen, darüber nachzudenken und zu analysieren. Stellen Sie einen Timer ein.

Starten Sie dann die Codierung, wenn der Timer abläuft. Wenn Sie wieder zu lange darüber nachdenken, treffen Sie einfach eine sofortige Entscheidung. Was auch immer Sie in diesem Moment entscheiden, ist die richtige Entscheidung. Sie können später jederzeit Änderungen und Verbesserungen vornehmen.

Außerdem verändert sich unser Umfeld ständig. Wir müssen unseren Code häufig aktualisieren, um neue Anforderungen, neue Technologien, neue Hardware, Sprach- und Systemupdates usw. zu verarbeiten.


-2

Ja, dieser Coding-Horror passiert sogar bei mir. Vom Stapelüberlauf überrascht zu werden. Codierung im Detail für eine kleine Anwendung. Wenn es sich jedoch um ein ausgelagertes Projekt handelt, wird aus Zeitgründen nicht viel Zeit benötigt. Und ich fühle, dass auch die Arbeit mit einer Gruppe neuer Leute darüber hinwegkommen kann.


-3

Du bist nicht rücksichtslos genug

http://playswithfire.com/blog/2012/02/19/you-are-not-ruthless-enough/

Bearbeiten: In diesem Artikel geht es darum, bei der Entwicklung auf kleine Details zu achten. Ich habe jedoch festgestellt, dass es hilfreich ist, sich einer einfachen oder komplexen Aufgabe mit einer skrupellosen Haltung zu nähern, um die effizienteste Lösung zu finden und die Aufgabe einfach zu erledigen.

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.