Sehr häufig stecke ich bei der Auswahl der besten Designentscheidung fest. Selbst für kleine Details wie Funktionsdefinitionen, Kontrollfluss und Variablennamen verbringe ich ungewöhnlich lange Zeiträume damit, die Vorteile und Kompromisse meiner Auswahl zu prüfen.
Ich habe das Gefühl, dass ich viel an Effizienz verliere, wenn ich meine Stunden mit unwesentlichen Details wie diesen verbringe. Obwohl ich im Hinterkopf weiß, dass ich diese Dinge ändern kann, wenn mein aktuelles Design nicht funktioniert, habe ich Probleme, mich für eine Entscheidung zu entscheiden.
Was soll ich tun, um dieses Problem zu bekämpfen?
Antworten:
Zwei einfache Regeln:
Wenn Sie diese Schritte ausführen, gewinnen Sie das Vertrauen, dass Sie jetzt einfache Entscheidungen treffen können, ohne Ihre Fähigkeit zu beeinträchtigen, später auf Änderungen zu reagieren.
Denken Sie daran, dass Zukunftssicherheit bedeutet, Code einfach zu ändern, und nicht zu versuchen, jede mögliche Art und Weise vorherzusagen, in der sich Ihr Code ändern muss.
quelle
Wenn ich so fühle, muss ich normalerweise Folgendes versuchen:
Wenn das Problem Syntax und kleine Teile betrifft, dann:
quelle
Es ist sehr einfach, sich in Untätigkeit zu versetzen. Auch wenn es Ihnen gelingt, irgendwie, mit der besten Lösung zu kommen jetzt so leicht , bevor Sie das Projekt abzuschließen ändern könnte, und was dann?
Es ist besser, eine anständige Lösung auszuwählen und damit zu rennen, als sich hinzusetzen und darüber nachzudenken, was die beste Lösung wäre. Die beste Lösung ist schwer fassbar und schlechter, subjektiv. Wenn sich die Anforderungen nur geringfügig ändern, ist Ihre Lösung möglicherweise schlechter als eine Lösung, die Sie verworfen haben, weil sie zu diesem Zeitpunkt nicht die beste war.
quelle
Ich lerne auch, Analyse-Lähmungen zu vermeiden, also ein großes Lob an uns =) Dies geschieht oft, weil wir das "beste Design" machen wollen. In Wirklichkeit liegt das "Beste" im Auge des Betrachters . Meine Formel, um eine Analyse-Lähmung zu vermeiden, lautet, das ausreichend gute Konstruktionsprinzip anzuwenden . Wie mache Ich das? Ich bringe Variablen wie Zeit-Constraints, Zeitplan und frage mich , was die einfachste Konstruktion ist , die den Job erledigen kann (dies bedeutet nicht die einfachste) ohne Kompromisse bei der Qualität, sondern zugleich stelle ich sicher , dass a prüfbar und ein offenes zur Erweiterung geschlossen zur Änderung (OCP)Design auch. Was meine ich mit testbar und OCP? Nun, anstatt nach dem zu suchen, was ich für das Beste hielt, habe ich mir ein Design überlegt, das mir sagen kann, wann die Dinge schlecht laufen, und versucht, gerade genug Code zu schreiben, damit ich später überarbeiten und verbessern kann. Auch versuchen , den Code zu trennen , die mit dem Code ändern werden, die die gleiche bleibt. Refactoring wird einfacher, weil der Code, der sich nicht ändern soll, sicherer für Sie oder andere ist.
quelle
Wie wäre es, wenn Sie Ihr Bauchgefühl für eine der Optionen entscheiden lassen? Das sollte ziemlich schnell gehen und sich gut mit Timeboxing kombinieren lassen , was ammoQ ebenfalls vorschlug . Sie können ein Limit von 1 Minute versuchen, wenn die Optionen bereits festgelegt sind, oder 2 Minuten, wenn Sie sie zuerst definieren müssen. Oder was auch immer angemessen erscheint (vorher definiert). Wenn Sie lernen, auf Ihr Bauchgefühl zu hören, wird Ihre intuitive Auswahl mit dem Üben schneller und besser .
Für den Fall, dass Sie sich Sorgen über die Möglichkeit machen, nicht perfekt zu wählen, finden Sie hier einige Überlegungen, um dies zu beheben:
Viel Glück! :)
quelle
Ich denke, es verschwindet mit ein bisschen Erfahrung. Der größte Teil meiner Lähmung geschieht, weil ich mir vorstelle, wie die Codebasis viel weiter vorne aussehen wird, als ich es tun muss, um sie zu überwinden. Sobald das Projekt eine bestimmte Form hat, fallen die sich wiederholenden Codeeinheiten auf und es ist einfach genug, die sich wiederholenden Muster zu abstrahieren und den Code zu vereinfachen.
quelle
Wenden Sie Timeboxing an, um Ihre Zurückhaltung bei der Entscheidung zu überwinden : Stellen Sie einen Wecker ein, der in wenigen Minuten ausgeht . quäle deinen Geist bis dahin, aber wenn der Alarm losgeht, wähle die beste Option, die du bis dahin gefunden hast.
quelle
Erstellen Sie einen Prototyp. Denken Sie daran, dass ein Prototyp weggeworfen werden muss, sodass es nicht darauf ankommt, welche Funktionen, Variablennamen oder welche großartige Architektur Sie verwenden. Sie bauen es nur, um zu beweisen, dass es funktioniert.
Sobald Sie es erstellt und herausgeworfen haben, würde ich wetten, dass es Ihnen leichter fallen würde, diese Entscheidungen zu treffen.
quelle
Ich leide auch unter diesem Problem. Was ich sagen würde, ist, dass Sie nicht genug Anreiz für die Fertigstellung haben.
Als ich zum Beispiel Code zum Rendern schrieb, hatte ich einen großen Anreiz für die Fertigstellung, weil ich wusste, dass ich, wenn ich damit weiterkäme, das System in Aktion sehen und darüber nachdenken würde, wie großartig ich für die Texturierung eines Quad war. oder Transformieren eines Vert. Aber jetzt, wo ich re-factoring bin (Versuch 4, wenn Sie es wissen möchten), leide ich, weil es eine Menge Arbeit ist, und selbst wenn ich fertig bin, sehe ich nur das gleiche alte Quad. Und ich möchte wirklich nicht noch einmal umgestalten müssen und habe es satt, immer wieder das gleiche alte Quad zu sehen, und es ist keine Belohnung mehr für mich.
Sie müssen es in Komponenten aufteilen und sich für die Fertigstellung belohnen, auch wenn nur einige Konsolen-E / A zeigen, dass es funktioniert.
quelle
Ich habe Ihre Frage gelesen und nach dem Vorbild der anderen Plakate gedacht: Sie sind für diesen Job nicht geeignet; gib dir ein Zeitlimit; Mach für einen Moment etwas anderes. Nach einigem Nachdenken bin ich mir nicht sicher, ob eine der Antworten wirklich so hilfreich ist
Das Problem mit solchen mentalen Problemen ist, dass sie nicht einfach zu lösen sind, ein Teil von Ihnen sind und Sie sich offensichtlich (vielleicht zu sehr) um Ihren Job kümmern und nicht das Vertrauen haben, mit sich selbst übereinzustimmen Unerfahren, wenn man bedenkt, dass man die erste Wahl ist, war es von Anfang an richtig, oder es ist zu viel Stress, wenn man es perfekt hinbekommt. Warum sollten Sie sich sonst um solche Kleinigkeiten sorgen ?!
Jetzt habe ich ähnliche Probleme, aber nicht mit so viel Code. Normalerweise ist es was zum Abendessen. Pizza oder Curry , aber dann bekommst du mehr Curry, aber ... und so weiter. :)
Also dachte ich mir - warum habe ich keine ähnlichen Probleme mit der Codierung und ich denke, das liegt einfach daran, dass ich eine Reihe von Mustern habe, die ich regelmäßig verwende. Wenn ich eine Funktionsdefinition benötige, ist es einfach. Sie wird in der gleichen Weise sein wie jede andere Funktionsdefinition, die ich jemals programmiert habe. Wenn ich einen Kontrollfluss benötige, entscheide ich zuerst, ob ich eine for-Schleife oder eine while-Schleife benötige, und erstelle dann denselben alten Code, den ich zuletzt verwendet habe, als ich eines dieser Dinge benötigte. Das gleiche gilt für alles, möchte ich eine Warteschlange? Sicher - lassen Sie uns meinen 'Standard'-Warteschlangencode ausschneiden und einfügen (der aus dem letzten Projekt stammt, an dem ich gearbeitet habe, oder einem, an den ich mich erinnern kann, dass er eines dieser Dinge verwendet hat). Endergebnis ... Ich ärgere mich nur über neue Sachen, und um ehrlich zu sein, das ist eine Freude.
Mein Rat ist also, eine Bibliothek mit Codeausschnitten zu erstellen - ich habe sie mir immer per E-Mail zugesandt und in einem Ordner abgelegt, aber was auch immer Sie verwenden, ist am besten - und dann werden Sie jedes Mal wissen, was zu tun ist. Sie werden immer zu dem alten Code gehen, den Sie geschrieben haben, und das Problem aus dem Weg räumen, um für das nächste Problem bereit zu sein. Sie werden zu einem viel schnelleren Entwickler (im Ernst, dies ist der einzige Weg, um die Produktivität von Programmierern zu steigern) und finden hoffentlich Zeit für die lustigen Dinge, nicht für die tristen Alltagsaufgaben, die Sie bereits oft gelöst haben Über.
Natürlich ist auch der letzte Teil von allem wichtig - je mehr Arbeit Sie haben, desto weniger Luxus müssen Sie sich Gedanken machen.
quelle
Hier ist eine Strategie , die kombiniert die Vorschläge von Rein Henrichs ( Start einfach, Refactoring ) und ammoQ ( Timeboxing ):
x
und es dann verfeinernstring
,name
bis die Zeit abgelaufen ist.userHandle
Mögliche Vorteile dieses Ansatzes:
quelle
Wenn ich die Nachforschungen angestellt habe und keine klare beste Wahl getroffen habe, gebe ich mir eine Frist (normalerweise 5 Minuten), um eine auszuwählen, und fahre dann einfach damit fort. Selbst wenn Sie auf Hindernisse stoßen, gibt es zu diesem Zeitpunkt keine Garantie dafür, dass Sie nicht auf ein gleiches Hindernis gestoßen wären, wenn Sie eine andere Entscheidung getroffen hätten. Ich kann mir keine Zeit vorstellen, in der ich meine Entscheidung bereut habe.
quelle
Normalerweise können Sie sich nicht entscheiden, weil der Unterschied unerheblich ist oder Sie nicht genügend Informationen haben.
Für den Fall a) Setzen Sie eine Frist, um angemessene Optionen zu finden, die berücksichtigt werden müssen. Entscheide noch nicht welche. Wählen Sie am Ende der Zeit eine (zufällige, wenn keine klare Präferenz) der identifizierten Optionen und ein anderes Zeitlimit. Wenn am Ende der Zeit keine klare Entscheidung getroffen wird, ist es die bereits gewählte. Beginnen Sie mit der Codierung und überarbeiten Sie sie, wenn Sie eindeutig einen Fehler gemacht haben. Wenn der Chef fragt, warum, sagen Sie "Ich habe eine Münze geworfen, haben Sie einen besseren Weg?"
In Fall b) - Sie brauchen mehr Informationen und sitzen auf Ihrem großen fetten A herum .... der ganze Tag wird es nicht liefern. Verlassen Sie den Entwurfsmodus und wechseln Sie in den Modus zum Sammeln von Informationen. Prototypen, Fragen stellen, Fachzeitschriften lesen. Was auch immer Sie tun, schlafen Sie nicht zu lange darauf.
quelle
Oft ist es die beste Lösung, Ihre Entscheidung einem Kollegen zu erklären. Da Sie dies jedoch nicht sehr oft tun möchten, ist es das nächstbeste, auf Papier zu denken - entweder mit einem Papier / Stift oder einem leeren Notizblockfenster.
Beginnen Sie damit, absolut alles zu schreiben - nur um in den Rhythmus des Schreibens zu kommen. In einem Notizblockfenster können Sie einfach "Ich denke auf Papier" eingeben und dann einfach mit einem Bewusstseinsstrom fortfahren. Nach ein paar Sekunden sind Sie im Rhythmus des Schreibens. Drücken Sie also einige Male die Eingabetaste und erklären Sie Ihr Dilemma.
Geben Sie das Problem an und geben Sie dann die möglichen Lösungen an, was an jedem gut ist usw.
Obwohl dies nicht immer funktioniert, können Sie durch das Abrufen von Gedanken aus dem Kopf (RAM) und auf externe Medien (das Notizblockdokument) neue Verbindungen herstellen und die Entscheidung aus verschiedenen Perspektiven betrachten.
quelle
Ich leide unter dem gleichen Problem. Bei kleinen Problemen versuche ich, mit dem ersten Entwurf umzugehen, der meiner Meinung nach nicht dumm ist. Es macht keinen Sinn, nach einem optimalen Design zu suchen. Es ist schwierig, wenn nicht unmöglich, über alle Nuancen eines Designs nachzudenken, an das Sie denken, ohne es aufzuschreiben. Während Sie programmieren, werden Sie feststellen, dass Sie kleine Verbesserungen vornehmen können. Richtig gemacht, finde ich es ziemlich einfach, auf diese Weise zu einer einigermaßen guten Lösung zu gelangen.
Bei größeren Problemen ist es meines Erachtens sinnvoll, zuerst über Ihre Optionen nachzudenken, aber überlegen Sie es sich. Große Probleme haben große Lösungsräume, Sie können nicht jede Möglichkeit bewerten und sollten es auch nicht versuchen.
TLDR; Wählen Sie eine vernünftige Lösung, und verbessern Sie sie im Laufe der Zeit.
Dies ist auch relevant:
von http://www.codinghorror.com/blog/2008/08/quantity-always-trumps-quality.html .
quelle
Ich habe das nie verstanden. Als ich ein Ausbilder war, sagte ich etwas wie:
Nicht zu kompliziert, könnte man meinen, und 95% der Leute schrieben so etwas wie:
Aber gelegentlich saß einer wie ein im Scheinwerferlicht gelähmter Hase. Ich würde mitfühlend fragen, was das Problem war, und sie würden sagen "Ich weiß nicht, wie ich es nennen soll!".
Das sind die Leute, die eine andere Karriere suchen sollten. Wie du vielleicht solltest.
quelle