Wie gehe ich mit Analyse-Lähmungen um?


60

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?



Besprechen Sie mit einem Kollegen auf einem Whiteboard. Dies hilft häufig dabei, die Angelegenheit zu klären, und wenn Sie zustimmen können, hat es eine gute Chance, eine gute Wahl zu sein

Antworten:


34

Zwei einfache Regeln:

  1. Tun Sie das Einfachste, was möglicherweise funktionieren könnte.
  2. Refactor kontinuierlich.

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.


4
Kontinuierliches Refactoring ist nur dann sinnvoll, wenn Sie eine gute Testabdeckung haben. Also würde ich sagen "Schreiben Sie einen Komponententest. Dann tun Sie das Einfachste, um den Test zu bestehen. Refactor. Wiederholen."
Kevin Cline

Stimme definitiv zu. "Rot, Grün, Refactor" ist der richtige Weg.
Rein Henrichs

5
Schöner kleiner Leckerbissen aus dem XP-Handbuch, aber wirklich kein guter Rat, wenn man ihn aus dem Zusammenhang nimmt.
Aaronaught

2
Außerhalb des Kontexts entspricht es buchstäblich der Cowboy-Codierung. Sehen Sie, dass Fowlers Design tot ist? das warnt vor Cherry-Picking-Prinzipien von XP und ähnlichen Methoden. Vielleicht sind Sie ein ausgezeichneter Designer und Programmierer und von Natur aus und implizit in der Lage und motiviert, die konzeptionelle Integrität beim Refactoring aufrechtzuerhalten, aber die meisten Programmierer tun dies nicht, und diesen Ratschlag außerhalb des Kontexts zu geben, ist unverantwortlich (obwohl sie es alle lieben, ihn zu hören, seitdem es bedeutet weniger Arbeit für sie).
Aaronaught

1
"Tun Sie das Einfachste, was möglicherweise funktionieren könnte" erfordert keinen zusätzlichen Kontext. Refactoring funktioniert, aber wie kann jemand, der den Kontext nicht kennt, Refactoring erlernen, wenn er den Kontext lernt?
Rein Henrichs

9

Wenn ich so fühle, muss ich normalerweise Folgendes versuchen:

  1. Stehen Sie auf, gehen Sie herum und stellen Sie sicher, dass die gesamte Biologie in Ordnung ist.
  2. Gehen Sie zu einem Whiteboard und zeichnen Sie, bis ich ein Gefühl des Vertrauens habe.
  3. Finden Sie einen "Design-Beschwerdeführer", mit dem Sie das Problem einfach durchsprechen können.

Wenn das Problem Syntax und kleine Teile betrifft, dann:

  1. Überzeugen Sie sich selbst, dass es, auch wenn es hässlich ist, irgendwo gut eingekapselt ist und eine rein lokale Art von Cruft darstellt.
  2. Fügen Sie TODO-Marker oder Kommentare hinzu, die erklären, warum der Code Sie stört.
  3. Fahren Sie mit der nächsten Aufgabe fort.

+1 für die erste und zweite # 2s. Wenn ich Kästen, Linien und Beschriftungen zeichne und große Bilder bekomme, kann ich in der Regel leichter zwischen verschiedenen Optionen wählen. Wenn Sie einen netten Code-Analyzer haben, der Aufgaben verfolgt (Hudson kann TODOs verfolgen und sie in Ihren Builds gut anzeigen), können Sie leicht die Dinge verfolgen, die Ihnen nicht gefallen.
Randy

5

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.


Mir ist dies bewusst, aber es fällt mir immer noch schwer, eine einzige Wahl zu treffen.
Anne Nonimus

@anne: Es ist besser, sofort etwas Konstruktives zu tun, als das Richtige zu spät. Das Einzige, was mit Sicherheit falsch ist, ist, nichts zu tun.
Satanicpuppy

4

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.


2

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:

  • Wenn es eine Option gäbe, die den anderen klar überlegen wäre, würden Sie sich nicht fragen, welche Sie wählen sollten. Wenn Sie also bei einer nicht allzu komplizierten Angelegenheit keine Entscheidung treffen, bedeutet dies, dass die Optionen insgesamt ziemlich gleich sind. Es gibt also nicht viel zu verlieren, wenn Sie sich für einen von ihnen entscheiden.
  • Trotzdem ist Intuition kein Zufall, sondern eine ziemlich gute, fundierte Vermutung für die optimale Lösung. Oft besser als das, was man sich durch endloses Stöbern einfallen ließ.
  • Unter Berücksichtigung des Perfektionismus könnte man die Schnelligkeit der Entscheidung höher bewerten als die Optimalität der Wahl, wenn man seine Leistung halbbewusst bewertet. Was bei unwichtigen Entscheidungen durchaus Sinn macht, aber nicht einfach zu bedenken ist.

Viel Glück! :)


2

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.


1

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.


3
Und dann kann er Stunden damit verbringen, sich zu quälen, wie lange der Wecker genau eingestellt sein soll! :)
Jordanien

1
Jordan: Auch für dieses Problem gibt es mehrere mögliche Lösungen. Leider kann ich mich nicht entscheiden, welchen ich vorschlagen soll.
user281377

0

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.


Sie sollten einen Prototyp niemals wegwerfen, da Sie ihn möglicherweise später erweitern können, wenn Sie ein Feature hinzufügen. Oder Sie müssen einen Fehler mit einer SSCCE testen. Ich kontrolliere alle meine Prototypen immer an einem separaten Ort.
maple_shaft

2
Ich denke, die Idee hinter "Wegwerfen" ist nicht, dass Sie Daten verlieren, sondern dass Sie Prototypen nicht als Grundlage für ein Programm verwenden sollten, da der springende Punkt bei Prototypen darin besteht, mit der Freiheit zu experimentieren, Fehler zu machen.
Darien

Führen Sie die erforderlichen Tests durch und erstellen Sie eine saubere Version in Core.
zzzzBov

0

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.


0

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.


Snippet-Programmierung ist die schlimmste Art der schlechten Praxis
Neil Butterworth

@Neil: Die Verwendung der Snippets anderer Leute als Snippet-Programmierung und das Nicht-Wissen, was sie tun, ist eine schlechte Übung. Die Verwendung eigener Code-Schnipsel ist im Allgemeinen gut, da Sie wahrscheinlich verstehen, was Sie geschrieben haben. Wenn nicht, dann gibt es wahrscheinlich keine Hoffnung für Sie.
Jordanien

@Neil, du bist heute besonders schlecht gelaunt! Die meisten älteren Programmierer haben sowieso eine riesige Sammlung von Schnipsel im Kopf, man merkt einfach nicht, dass man sie benutzt. Für einen Junior hilft das Aufschreiben, dies aufzubauen.
gbjbaanb

0

Hier ist eine Strategie , die kombiniert die Vorschläge von Rein Henrichs ( Start einfach, Refactoring ) und ammoQ ( Timeboxing ):

  1. Geben Sie sich eine ziemlich strenge Frist für eine erste Lösung , die einfach funktioniert. ZB 30 Sekunden für einen Variablennamen. Sie könnten sich zuerst so etwas einfallen lassen xund es dann verfeinern string, namebis die Zeit abgelaufen ist.
  2. Fahren Sie dann für eine bestimmte Zeit mit anderen Aufgaben fort , z. B. 10 Minuten.
  3. Nur dann gönnen Sie sich eine weitere Zeitbox, um Ihre Entscheidung weiter zu verbessern, zuserHandle

Mögliche Vorteile dieses Ansatzes:

  • Das Wissen, später darauf zurückzukommen, kann das Loslassen des Problems fürs Erste erleichtern
  • Wenn Sie andere Aufgaben ausführen, können Sie einfach eine zufriedenstellende Lösung finden, ohne zeitaufwändig zu stöbern
  • Nachdem Sie nach Schritt 1 losgelassen haben und sich im Ablauf von Schritt 2 befinden , kann es leicht sein, Schritt 3 wirklich schnell zu halten, da Sie mit Schritt 2 fortfahren möchten. Wählen Sie daher glücklicherweise einfach eine anständige Lösung aus und akzeptieren Sie sie

Diese Antwort scheint spezifischer und vollständiger zu sein als Ihre vorherige , aber beide scheinen denselben Grund zu haben. Bitte füge sie zu einer zusammen oder wähle die aus, die du behalten möchtest.
Adam Lear

@Anna Ich habe zwei separate Posts verfasst, da sie unterschiedliche Konzeptideen enthalten, über die unabhängig abgestimmt werden sollte: Diese: Loslassen durch Verschieben der endgültigen Entscheidung. Die vorherige: Bauchgefühl. In der Tat passen beide Techniken gut zusammen, aber jede funktioniert auch ohne die andere.
Aaron Thoma

0

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.


0

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.


0

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.


0

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:

Der Keramiklehrer gab am Eröffnungstag bekannt, dass er die Klasse in zwei Gruppen aufteilt. Alle, die sich auf der linken Seite des Studios befänden, würden nur nach der Menge der von ihnen produzierten Arbeiten beurteilt, alle, die sich auf der rechten Seite befanden, nur nach ihrer Qualität. Sein Verfahren war einfach: Am letzten Schultag brachte er seine Personenwaage mit und wog die Arbeit der "Mengen" -Gruppe: 50 Pfund Töpfe mit einem "A", 40 Pfund einem "B" und so weiter. Diejenigen, die mit "Qualität" bewertet wurden, mussten jedoch nur einen Topf produzieren - wenn auch einen perfekten -, um ein "A" zu erhalten.

Nun, es kam die Sortierungszeit und eine merkwürdige Tatsache stellte sich heraus: Die Arbeiten von höchster Qualität wurden alle von der Gruppe produziert, die nach Quantität sortiert wurde. Es scheint, dass die "Qualitäts" -Gruppe, während die "Quantitäts" -Gruppe eifrig Arbeit stapelte - und aus ihren Fehlern lernte - über Perfektion theoretisiert hatte und am Ende nur wenig mehr für ihre Bemühungen zu zeigen hatte als grandiose Theorien und ein Haufen toten Lehms.

von http://www.codinghorror.com/blog/2008/08/quantity-always-trumps-quality.html .


-8

Ich habe das nie verstanden. Als ich ein Ausbilder war, sagte ich etwas wie:

"OK, create an integer variable and assign the return value of strlen() to it."

Nicht zu kompliziert, könnte man meinen, und 95% der Leute schrieben so etwas wie:

int x;   // or y, or len, or whatever
x = strlen( s );

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.


2
@Anne Ich gehe nicht von Annahmen aus - Sie sagten selbst, es fiel Ihnen schwer, sich Namen für Dinge auszudenken.
Neil Butterworth

3
Und warum sollte ich mich nach einer anderen Karriere umsehen, weil ich einige Dinge nur schwer benennen kann? Nicht jedes Konzept hat eine klare, kurze Zuordnung zur natürlichen Sprache.
Anne Nonimus

2
@Anne Der Kern Ihrer ursprünglichen Frage scheint mir zu sein, dass Sie Probleme haben, das zu tun, was für gute Programmierer selbstverständlich ist. Das ist keine Schande - die meisten Leute (sogar die meisten Programmierer!) Sind schrecklich darin, diese Dinge zu tun. Unter der Annahme, dass Sie wie ich nur glücklich sein können, etwas zu tun, in dem Sie wirklich gut sind, schlug ich vor, dass das Programmieren möglicherweise nicht das ist, für das Sie geeignet sind. Ich habe die ersten 10 Jahre meines Erwachsenenlebens als Mikrobiologe verbracht. Ich war nicht sehr gut darin und war viel glücklicher, als ich zum Programmierer gewechselt bin.
Neil Butterworth

3
Eine freundliche Erinnerung an alle: Wenn Sie mit der Antwort nicht einverstanden sind, können Sie dies auch mit Downvotes ausdrücken. Persönliche Angriffe von beiden Seiten werden entfernt.
Adam Lear

3
Letztendlich habe ich das Gefühl, dass die Antwort ziemlich hart ist, aber die Kommentare geben mir das Gefühl, dass es nicht so hart ist. Vielleicht solltest du das
ändern
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.