Wie gehe ich mit einem "Bad Code" -Interview um? [geschlossen]


12

Bei einem "Bad Code" -Interview wird dem Befragten ein Ausschnitt aus einem "Bad Code" angezeigt, der korrigiert oder auf Fehler hingewiesen werden soll. Ich habe Probleme mit diesen Interviews, weil ich einige Zeit brauche, um den Code zu lesen, herauszufinden, was er tut, und auf die Fehler hinzuweisen. In einer Situation, in der Zeitdruck herrscht, friere ich ein und sehe, dass der Code funktionieren sollte, auch wenn dies nicht der Fall ist.

Was ist ein guter Weg, um mit dieser Art von Interview umzugehen, und was sind allgemein einige gute Techniken, um Code schnell zu lesen und zu verstehen ?


8
Warum "schnell"? Wenn Sie Zeit zum Nachdenken brauchen, was ist dann falsch daran, sich Zeit zum Nachdenken zu nehmen?
S.Lott,

Handelt es sich um einen Teil der schriftlichen Eignungsprüfung? Dann müssen Sie Ihre Hausaufgaben zu solchen Prüfungen für betroffene Unternehmen machen.
Aditya P

@ S.Lott Nun, ich wollte hauptsächlich einige Techniken, die mir helfen, kognitive Blockaden in solchen Situationen zu vermeiden. Techniken, die schnell angewendet werden können, funktionieren für mich in der Regel besser.
Quanticle

@AdityaGameProgrammer Nun, es ist kein schriftlicher Test. Sie erhalten ein Blatt mit Quellcode, und Sie werden gebeten, den Quellcode durchzugehen und seine Mängel zu erörtern. Es wäre eigentlich besser, wenn es ein schriftlicher Test wäre, da ich mich in einem schriftlichen Format weniger unter Druck gesetzt fühle.
Quanticle

@quanticle: Wie ist "Stop and Think" nicht die erste "Technik", die Sie verwenden würden? In der Tat, welche andere mögliche Technik gibt es als "Stop and Think"?
S.Lott

Antworten:


18

Schlechter Code Interviews (wenn sie richtig gemacht wurden) sollten Ihnen Code mit folgendem Inhalt zeigen:

  • Eine schlechte Sprachtechnik ( usingbei Bedarf nicht die Anweisung in C # verwenden oder ein ArrayListanstelle von ein verwenden List<T>)
  • Eine schlechte Designentscheidung (warum zum Teufel übergeben wir überall Strings oder verwenden refund outParameter so oft?)
  • Syntaxfehler (Dies sollte nicht einmal kompiliert werden!)
  • Laufzeitfehler (z. B. ein Stapelüberlauf, der durch eine in C # auf sich selbst verweisende Eigenschaft verursacht wird)

Es gibt eine mentale Checkliste, die Sie durchgehen sollten und die alle oben genannten Punkte erfüllt. Wenn Sie sich den Code nicht ansehen und das tun können, ist das ein Punkt der Verbesserung. Welche Sprache Sie auch immer als "kompetent" bezeichnen, Sie sollten in der Lage sein, sich einen Codeblock anzusehen und auf diese vier Arten von Fehlern hinzuweisen.

Ich habe kürzlich über einen Code gebloggt, der all diese Probleme aufweist . Er soll Ihnen helfen, denselben mentalen Prozess zu durchlaufen.

Ayende geht mit seiner Wages of Sin- Serie noch tiefer .


Vielen Dank für die Checklisten-Idee. Es ist alles ziemlich "offensichtlich", aber in der Situation ist es leicht, einige dieser Dinge aus den Augen zu verlieren, wenn Sie sie nicht bewusst im Kopf behalten, während Sie den Code lesen.
Quanticle

Toller Blogbeitrag. Immer am lustigsten, wenn der Code, den der Experte als Beispiel hochhält, massive Fehler aufweist. Ich hoffe, mein Kommentar setzt die Bugdemonstration, die Sie und Scott hinter sich haben, nicht fort.
Ben Voigt

Die andere Sache, die in Interviews mit schlechtem Code verwendet wird, ist ein logischer Fehler. Zum Beispiel zeigen sie Ihnen eine kleine Funktion, sie sagen Ihnen, was zu tun ist und Sie müssen ihnen sagen, warum es nicht geht oder in welchem ​​Fall das nicht funktioniert.
HoLyVieR

+1. Ein weiterer Punkt für die Checkliste: Überprüfen Sie, wie der Code mit Grenzfällen List<T>null
umgeht

9

Versuche nicht, es schnell zu verstehen. Das Ziel hier ist nicht zu sehen, ob Sie den Code wie einen Guru verstehen können, sondern zu sehen, wie Sie denken.

Der Schlüssel IMO ist einfach laut zu denken. Also, selbst wenn Sie einfrieren - dann sagen Sie einfach: "Ich betone hier, aber lassen Sie mich das langsam laut durchgehen."

Vorausgesetzt, Sie haben die Fähigkeit, laut zu denken, wird Sie genug verlangsamen, um Ihren Verstand richtig zu machen. Wenn die Interviews geschickt genug sind, werden sie Ihre Situation erkennen und Ihnen weiterhelfen, bis Sie klar denken. Sie versuchen nicht, dich dazu zu bringen, dumm auszusehen - nur eine mächtige Technik, um zu sehen, wie du denkst.


2

Wahrscheinlich ist der Zeitdruck, den Sie spüren, völlig selbst auferlegt. Es hat mehr damit zu tun, dass Sie sich unsicher fühlen und sich Gedanken darüber machen, wie gut Sie sich messen können.

Der beste Rat, den jeder geben kann, ist: Entspannen Sie sich. Nehmen Sie sich Zeit, sehen Sie sich den Code an und sprechen Sie über das, was Sie sehen, während Sie es sehen. Fühlen Sie sich frei, über die guten und die schlechten Seiten zu sprechen. Es wird Ihnen helfen, Ihre Nervosität und innere Sorgen zu lindern, dass zu viel Zeit vergeht.

Darüber hinaus kann es ein bisschen einfacher sein, bestimmte Details zu erkennen, wenn Sie verschiedene „Durchgänge“ durchlaufen. Suchen Sie in einem Durchgang nach nicht übereinstimmenden Klammern oder Tippfehlern. Nehmen Sie einen weiteren Pass und suchen Sie nach verschleierten Linien. Nehmen Sie eine andere, die nach semantischen Brezeln sucht. Wenn Sie sich auf eine Art von "Falschem" konzentrieren, können Sie diese Details leichter erkennen und Ihre innere Stimme (wieder) reduzieren, indem Sie sich fragen, ob Sie es schnell / gut genug machen.

Überlegen Sie sich vor allem, was Sie tun und denken - es hilft Ihnen und dem Interviewer.


1

Ich war noch nie in einer solchen Art von Interview, aber wenn ich versuche, an einem heiklen Stück Code zu arbeiten, von dem ich vermute, dass er schlecht ist, spreche ich manchmal leise mit mir. Ich finde, dass das Vokalisieren manchmal beim Lösen von Problemen hilft. Auch in einem Interview können Sie versuchen, die Ausführungsschritte als Diagramm oder etwas mit Bleistift und Papier nachzuzeichnen. Das hat früher in der Schule für mich funktioniert, manchmal auch bei der Arbeit. YMMV natürlich ...


1

Ich würde denken, ein guter Startpunkt (wenn Sie nichts Offensichtliches sehen) wäre das "Debuggen". Wenn Sie mögliche Probleme nicht von Anfang an erkennen, sollten Sie zunächst eine kleine Liste von Testwerten erstellen. Gute Werte sind ein (normaler) Wert für 'happy path', ein Wert für 'zero' oder 'empty', Nullen, ein sehr kleiner Wert (eine Zeichenfolge mit 1 Zeichen, die Ganzzahl 1 usw.), ein sehr großer oder sehr langer Wert value und 'strange' typspezifische Werte (z. B. Unicode-Zeichen für Zeichenfolgen, negative Zahlen für Ints usw.). Es würde hier nicht schaden zu erwähnen, dass Sie normalerweise Komponententests mit diesen Werten schreiben würden, um den Code zu testen, und diese nur ausführen würden, um die Funktion zu verifizieren.

Beginnen Sie mit Ihren Happy-Path-Werten. Für eine Additionsfunktion können Sie mit 3 oder 4 beginnen. Untersuchen Sie jede Zeile auf Tipp- und Logikfehler und verfolgen Sie dabei die Werte lokaler Variablen. Hoffentlich finden Sie ein paar Fehler. Wenn Sie mit dem glücklichen Weg fertig sind, werden Sie ein besseres Gefühl für den Code haben und sich hoffentlich ein bisschen weniger überfordert fühlen. Sagen Sie also so etwas wie "Jetzt, wo ich ein besseres Gefühl dafür habe, was dieser Code tut, bin ich Gehen Sie einen Schritt zurück und schauen Sie es sich an. "Dann tun Sie genau das. Suchen Sie nach Dingen, die für Sie als Dinge herausstechen, die Sie anders gemacht hätten (schlechte Entwurfsentscheidungen, schlecht benannte Variablen, untersuchen Sie mögliche Fehler usw.).

Wenn Sie dadurch nicht weiter kommen oder das Gefühl haben, nichts mehr zu sagen, kehren Sie zu Ihrer Liste der Testwerte zurück und wiederholen Sie diese mit einem neuen Wert, von dem Sie glauben, dass er wahrscheinlich Probleme verursacht.

Das wird dich zumindest zum Laufen bringen.


0

Wie Stephen Bailey bereits sagte, ist lautes Denken in dieser Situation eine hervorragende Technik, da Ihre Interviewer Ihren Denkprozess sehen können. Erklären Sie, was Sie herausfinden wollen. Das andere, was Sie tun können, ist den Interviewern mitzuteilen, dass Sie den Code richtig durchlesen werden, bevor Sie eine Diagnose über die Unzulänglichkeit des Codes erstellen. Ich war auf beiden Seiten des Tisches und ich weiß, dass es in diesen Situationen für beide Seiten frustrierend sein kann.


0

Wenn Sie bei einem schriftlichen Test weniger Druck verspüren, ziehen Sie Ihr Notebook heraus und machen Sie sich Notizen. Ich habe ein Notizbuch herausgezogen und angefangen, als Teil meines Denkprozesses in einem Interview Notizen zu skizzieren. Wenn Sie ein Notizbuch und einen Stift haben, sehen Sie selbst organisiert aus. Sie könnten ein paar Punkte aufschreiben, nach denen gesucht werden muss, Syntax, Logikfehler, Datentypinkongruenzen, Werte lokaler Variablen (die Liste kann je nach Art des Codes variieren, den Sie haben, meine Liste für ein komplexes Stück SQL würde variieren) Seien Sie anders als jemand, der einen Code erhalten hat, der nicht datenzentriert ist, wenn Sie den Prozess usw. durchlaufen. Selbst wenn Sie nicht alle Probleme finden, bevor der Interviewer weitermachen möchte, kann er eine Liste der Dinge sehen, die Sie überprüfen wollten. Wenn Sie im Voraus eine Checkliste mit den gesuchten Dingen erstellen, können Sie sicherer mit dem Prozess beginnen und wissen, welche Dinge Sie sich ansehen möchten. In der Regel geht es bei diesen Fragen eher darum, wie Sie die Fehler finden, als dass Sie tatsächlich alle finden.


0

Ich bin ein bisschen zu spät zu dieser Party, aber eine Technik, die Sie verwenden könnten, wäre, Komponententests für den fraglichen Code zu schreiben. Dann können Sie sich weniger auf das konzentrieren, was am Code auf subtile Weise falsch ist, als vielmehr auf die erwarteten Ergebnisse, die Sie suchen. Ich würde lieber jemanden einstellen, der gute Tests schreiben kann, als jemanden, der sofort erkennt, was an einem Code-Teil falsch ist.


0

Möglicherweise gibt es zwei Probleme:

Es könnte ein "Stress-Interview" sein http://en.wikipedia.org/wiki/Job_interview#Stress . Interviewer versucht zu sehen, wie Sie mit Stress umgehen, da das Arbeitsumfeld so ist.

ODER

Sie könnten selbst gestresst werden. In diesem Fall müssen Sie diesen Stress bewältigen, z. B. nach innen schauen und sehen, wie Sie ruhig bleiben können.

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.