Wie kann man vermeiden, unter Druck zu einer Lösung zu springen? [geschlossen]

18

Wenn ich unter einer besonders strengen Programmierfrist (wie einer Stunde) in Panik gerate, tendiere ich dazu, ohne einen wirklichen Plan in die Programmierung einzusteigen, und hoffe, dass ich es im Laufe der Zeit herausfinde. Bei genügend Zeit kann dies funktionieren, aber in einem Interview war es ziemlich erfolglos, wenn nicht sogar ausgesprochen kontraproduktiv. Ich sitze nicht immer gerne da und denke nach, während die Uhr tickt.

Gibt es eine Checkliste oder gibt es Techniken, um zu erkennen, wann Sie das Problem gut genug verstehen, um mit dem Codieren zu beginnen? Wann ist es am produktivsten, bei einigen Experimenten mehr über das Denken und Entwerfen im Vergleich zum Code nachzudenken und das Gesamtdesign später herauszufinden?

Hier finden Sie eine Liste der Techniken, mit denen Sie eine Mathematikprüfung und eine mündliche Prüfung ablegen können . Gibt es eine ähnliche Liste von Techniken zur Behandlung eines unter Druck stehenden Programmierproblems?

ANTWORTEN: Ich denke, dies ist eine gültige Antwort: Wie man es löst . Ich fand diesen Link als Antwort auf Schritte zum Lösen oder Herangehen an eine Lösung . Es gab auch einige wirklich gute Tipps bei Ist lautes Nachdenken während eines Interviews wirklich die beste Strategie? . Ein gutes und prägnantes Argument für TDD ist die erste Antwort auf TDD. Code schreiben oder die Antwort auf ein Problem herausfinden?.

GlenPeterson
quelle
2
Es ist für jeden anders. Früher kannte ich jemanden, der lange Zeit keine Tastatur berührte, dann konnte er in kürzester Zeit eine gute Lösung finden. Ich finde, TDD hilft mir am schnellsten dabei, die richtige Lösung zu finden. Niemand kann Ihnen sagen, was für Sie arbeiten wird.
pdr
1
Das sind zwei Techniken. Wenn die Leute genug Techniken aufführen würden, würden verschiedene Techniken für verschiedene Leute funktionieren.
GlenPeterson
2
Ich fürchte, es gibt keine endliche Anzahl von Programmierern, die Ihnen helfen können. Normalerweise verstehen Programmierer das Problem, und sie tun dies einfach, indem sie es verstehen. Es gibt eine Reihe von trivialen Methoden, um sicherzustellen, dass Sie es richtig machen, aber es ist schwierig, eine für Sie zu finden, da sie absolut offensichtlich sein sollten. Die Art von Eile, die Sie beschreiben, scheint ... etwas verrückt zu sein? Haben Sie versucht, mehr mit Echtzeit-Tests zu üben? Haben Sie darüber nachgedacht, psychologische Hilfe bei Angstzuständen zu suchen oder zumindest einige Selbsthilfebücher über das Arbeiten unter stressigen Bedingungen zu lesen?
2.
2
@ZJR - Gute Vorschläge, um mit zeitgesteuerten Tests zu üben und psychologische Quellen für eine bessere Leistung unter Stress zu untersuchen. Vielleicht bin ich hier negativ, aber ein Teil Ihres Kommentars liest sich so, als ob Sie denken, ich habe entweder kein Talent oder ich habe ein klinisch-psychologisches Problem. Autsch!
GlenPeterson
1
Finden Sie zuerst heraus, was genau erforderlich ist oder erwartet wird. Was zu lösen ist, ist oft schwieriger als das, was zu lösen ist. Es erfordert mehr Analyse und zeigt oft eine andere Frage auf.
minusSeven

Antworten:

17

Ich erinnere mich, eine Studie darüber gelesen zu haben, wie Feuersäulen einen Aktionsplan bilden, wenn sie am Ort eines Feuers ankommen. In der Studie wurde festgestellt (und verurteilt), dass sie eine Idee hatten und diese erste Idee sofort verfolgten. Aufgrund des Zeitdrucks war es so ziemlich "das könnte funktionieren", gefolgt von "ok, lass uns das machen". Die Studie stellte fest, dass bessere, schnellere und sicherere Optionen zur Verfügung standen, die jedoch nicht befolgt wurden, weil die Marshalls nicht zuerst an sie dachten.

Wenn Sie eine strukturierte Herangehensweise an den Umgang mit "Bränden" wünschen, nehmen Sie vielleicht ein Blatt aus ihrem (neuen) Buch, das mehrere Phasen vorschreibt:

RRAPID

  1. Reaktion - Ressourcen für Vorfälle mobilisieren
  2. Aufklärung - Sammeln Sie Daten über die Situation
  3. Wertschätzung - Wählen Sie eine Vorgehensweise basierend auf den besten und schlechtesten Szenarien
  4. Plan - Entwickeln Sie einen Plan, der auf der Vorgehensweise basiert
  5. Auftragserteilung - Verwenden Sie das Standardbriefing-Format
  6. Bereitstellung - Ausführen und überwachen

oder allgemeiner:

  1. Wecken Sie alle auf und bringen Sie sie in Bewegung
  2. Finde heraus, was los ist
  3. Brainstorming-Lösungen
  4. Wähle eins aus und plane es
  5. Sagen Sie allen, was ihre Aufgabe ist
  6. Ausführen und überwachen
John Mee
quelle
1

Ich beginne immer damit, die Anforderungen zu verstehen und nach Lücken zu suchen, die beantwortet werden müssen.

Dann skizziere ich (sehr grob und auf Papier oder einem Whiteboard) zwei oder drei mögliche Lösungen. Dann frage ich mich: "Gibt es noch etwas, das ich wissen muss, um eines davon zu implementieren?"

Sobald ich meine ersten Fragen habe (es gibt zu 100% Fragen, wenn Sie keine haben, haben Sie die Anforderungen nicht wirklich eingehend geprüft.), Gehe ich zurück zu den Stakeholdern, um meine Antworten zu erhalten.

Während ich über ihre Antworten nachdenke, überlege ich, ob meine Lösungen besser sind als die anderen oder besser, wenn ich die Antworten auf die Fragen bekomme. Wenn zum Beispiel die Frage, wie schnell Sie sie brauchen, sofort beantwortet wird, greife ich möglicherweise zu der mit der schnellsten Entwicklung, lasse aber einen Weg offen, um das Design später zu verbessern. Wenn sie mir sagen, dass die Leistung kritisch ist, dann schaue ich mir die Lösungen an und bestimme, welche mit größerer Wahrscheinlichkeit die bessere Leistung erbringen (dies sind Vermutungen zu diesem Zeitpunkt, aber allgemein informierte). Wenn es sich um eine grafische Benutzeroberfläche handelt, kann ich einen Papierprototyp mit verschiedenen Designs erstellen und die Beteiligten dazu bringen, sich diese anzuschauen, bevor ich etwas codiere Design!)

Sobald ich meine Antworten erhalte, wähle ich ein grobes Design und erstelle eine Liste aller Dinge, die ich tun muss, um es umzusetzen. Dann fange ich an zu codieren.

HLGEM
quelle
1

... ich neige dazu, ohne einen wirklichen Plan in die Programmierung einzusteigen und hoffe, dass ich es herausfinde, wenn ich vorwärts gehe.

Das habe ich an der Uni gemacht. Dies wurde zu einem echten Problem und führte in der Regel dazu, dass der Code neu geschrieben wurde. Ich fing an, dies zu beheben, indem ich keinen Code schrieb. Ich legte Wert darauf, über das Problem nachzudenken. Mit genügend Übung greife ich instinktiv nach meinen Gedanken und nicht nach einer Tastatur.

... in einem Interview ist es ziemlich erfolglos gewesen, wenn nicht geradezu kontraproduktiv. Ich sitze nicht immer gerne da und denke nach, während die Uhr tickt.

Innerhalb eines Interviews muss es eine durchdachte Implementierung einer Lösung geben, und das ist nicht immer einfach. Was Sie nicht tun möchten, ist Antworten herausplatzen, ohne darüber nachzudenken. Wenn Sie die Antwort kennen, geben Sie sie schnell. Wenn Sie dies nicht tun, verlassen Sie sich auf Ihre Gedanken, um eine Lösung zu finden. Geben Sie immer an, wenn Sie nicht wissen, wie Sie eine Lösung finden würden.

Gibt es eine Checkliste oder gibt es Techniken, um zu erkennen, wann Sie das Problem gut genug verstehen, um mit dem Codieren zu beginnen?

Ich würde davon abraten, weil Sie sich streng darauf verlassen können. Fragen Sie sich lieber, ob Sie das Problem gut genug verstehen, um mit dem Codieren zu beginnen. Wie würdest du wissen? Denn wenn Sie Ihre Herangehensweise begründen und sie dann unter Berücksichtigung Ihrer derzeitigen Sprachkenntnisse prüfen, ist dies sinnvoll. Haben Sie immer einen Plan und eine Vorgehensweise. Denken Sie auch daran, dass Code niemals fertig ist und sich nicht weiterentwickelt hat. Erwarten Sie daher, dass Sie häufig zu Ihrem Code zurückkehren.

Wann ist es am produktivsten, bei einigen Experimenten mehr über das Denken und Entwerfen im Vergleich zum Code nachzudenken und das Gesamtdesign später herauszufinden?

Sie werden das Gesamtdesign kennenlernen und darüber nachdenken wollen. Dann beginnen Sie mit der Erstellung der Klassenstruktur und der Stubs. Dann überprüfe es noch einmal. Macht das Sinn? Codierungsexperimente sind eine großartige Möglichkeit, um zu demonstrieren, dass etwas gut funktioniert, und sollten verwendet werden, aber nicht, um den von Ihnen geschriebenen Code zu gestalten oder zu formen.

Matschig
quelle