Wenn Sie einen Interviewkandidaten bitten, ein Programm auf das Whiteboard zu schreiben, erwarten Sie, dass der Kandidat syntaktisch korrekten Code schreibt?
Ich hatte zwei Kandidaten, von denen einer ein syntaktisch korrektes Programm schrieb, aber die Logik war nicht auf dem neuesten Stand, und der andere hatte die Logik besser geschrieben, aber die Syntax war Mist.
Ich bevorzuge den ersten Kandidaten.
Antworten:
Ich würde die Person bevorzugen, die in der Lage ist, das Problem zu durchdenken, eine gute Lösung zu finden und mir dann ihre Lösung zu erklären. Selbst wenn ihre Logik nicht 100% wäre, wenn sie auf dem richtigen Weg wären und das Problem durchdenken, die richtigen Fragen stellen und den richtigen Weg gehen, wäre das mein Gewinner.
Wenn Sie Code on the Job entwickeln, verfügen Sie über zahlreiche Tools - IDEs, Compiler, statische Analysen, Komponententests, Integrationstests und Abnahmetestverfahren -, um Fehler in Syntax und Logik zu finden. Wenn Sie auf eine weiße Tafel schreiben, verfügen Sie nicht über diese Werkzeuge, und Sie müssen Syntaxfehler machen (vergessen Sie einen Methodennamen, ein Semikolon, eine geschweifte Klammer), und das kann ich verzeihen.
Meine einzige Frage an Sie: Warum lassen Sie Ihre Kandidaten tatsächlichen Code auf das Whiteboard schreiben, anstatt sich auf Algorithmen, Entwurfsstrategien und logisches Denken zu konzentrieren? Programmiersprachen ändern sich, Problemlösung nicht.
quelle
Ich würde den zweiten Kandidaten bevorzugen. Logik kann schwierig sein ( manchmal sehr schwierig), genau das Richtige zu finden. Die Syntax lässt sich sehr einfach ermitteln, wenn die IDE und der Compiler sowie andere verschiedene Tools hilfreich sind.
Der erste Kandidat kann zwar nie einen Compilerfehler auslösen, aber wenn sein Code häufig in allen möglichen seltsamen (und weniger seltsamen) Grenzfällen versagt, ist es nicht so viel wert, zu wissen, wo er ein Semikolon setzen soll.
quelle
Abhängig von den tatsächlichen syntaktischen Fehlern würde ich den zweiten Kandidaten bevorzugen , da die Überprüfung der Syntax normalerweise besser den Maschinen überlassen wird .
Fehler wie fehlende Semikolons, das Vergessen von schließenden Klammern, das Vergessen von Kommas in Argumentlisten usw., selbst nicht-syntaktische Fehler wie das Ändern der Argumentreihenfolge beim Aufrufen einer Funktion werden normalerweise vom Syntax-Textmarker, dem Compiler oder beim ersten Ausführen des Codes abgefangen sind alle Dinge, die man normalerweise benutzt, aber nicht auf dem Whiteboard verfügbar.
Es gibt jedoch einige Fehler, die, obwohl sie technisch gesehen nur Syntaxfehler sind, ein tieferes Missverständnis aufweisen.
Ein etwas künstliches Beispiel, um den Punkt zu verdeutlichen: Betrachten Sie einen Python-Programmierer, der all seinen Variablen $ voranstellt oder die for-Schleife als schreibt
for list as item
. Technisch gesehen handelt es sich bei beiden um Syntaxfehler, aber selbst wenn man nur begrenzt mit Python in Berührung kommt, sollte man sich mit legalen Zeichen und der for-Schleife auskennen. Es wäre eine gute Vermutung, dass der Kandidat PHP (oder Perl?) Kennt und versucht, über seine Python-Fähigkeiten zu bluffenquelle
Ich würde den zweiten Kandidaten vorziehen, da ein Whiteboard mehr Einfluss auf die Syntax als auf die Logik hat und Syntaxfehler leichter zu korrigieren sind - entweder die IDE oder der Compiler können dies normalerweise.
quelle
Ich schreibe seit fast 13 Jahren SQL und CSS (die einfachsten und grundlegendsten Sprachen, die ich kenne) und kann mich nicht immer an die Syntax erinnern.
Mein Freund (auch ein Entwickler) arbeitet für einen Hedgefonds, er kann sich nie an die Syntax für eine Insert-Anweisung erinnern.
Wir beide landen auf W3CSchools , ich denke, wir sollten uns schämen (er hat einen Abschluss und ich habe einen Doktortitel).
Um ehrlich zu sein, denke ich, dass wir unsere Prioritäten richtig gesetzt haben. Syntax ist keine wichtige Fähigkeit.
quelle
Einige Gedanken zu Syntaxfehlern ... Ich habe mich gefragt, ob Sie beiden klargemacht haben, dass Syntax korrekt sein muss. Manchmal gehen die Leute davon aus, dass Pseudocode in Ordnung ist.
Wenn jemand jahrelange Erfahrung in einer Sprache vorweist und die grundlegende Syntax nicht korrekt darstellen kann, sollten Sie an der Behauptung zweifeln.
Syntaxfehler können unterschiedlich sein. Wenn also jemand einen Methodennamen vergisst, ist dies in Ordnung (für mich), aber wenn jemand nicht weiß, wie er auf eine Methode in einer Klasse verweist (Punktnotation) oder ein grundlegendes Denken wie die Syntax für a nicht kennt einfache Klasse, dann besteht die Möglichkeit, dass diese Person die Sprache seit langer Zeit nicht mehr verwendet hat.
Glauben Sie, dass der Typ, der die Syntax nicht richtig verstanden hat, seine Fehler leicht mit dem entsprechenden Spracheditor hätte beheben können? wenn ja, stimme ich für ihn.
Ich denke, was ich hier denke, ist, dass Syntaxfehler in Grenzen akzeptabel sind.
quelle
Ein Junior Assistant Programmer oder sogar ein Software-Tool kann möglicherweise eine fehlerhafte Syntax finden und beheben, wenn die Logik gut ist. Schlechte Logik ... jede Korrektur ist viel weniger sicher. Alle Programmierer werden es vermasseln. Ich würde denjenigen auswählen, dessen Fehler leichter zu erkennen und zu beheben sind.
quelle
Sofern das Problem nicht subtil ist und die meisten Interviewfragen es nicht sind, wird der erste Kandidat disqualifiziert. Das Erlernen der Sprachsyntax ist viel einfacher als das Entwickeln von Algorithmen. Ich werde einen Programmierer einstellen, der bereits in mehreren Sprachen erfolgreich gearbeitet hat, auch wenn er keine Erfahrung mit meiner aktuellen Technologie hat. Dies ist nicht die beste Strategie, wenn ich heute etwas erledigen muss, aber wenn ich in den nächsten zwölf Monaten eine Menge Dinge erledigen muss, dann werde ich immer allgemeine Fähigkeiten über spezifische Erfahrungen auswählen.
quelle
Die Syntaxprüfung ist das, wofür ein Compiler gedacht ist. Ein Compiler kann Ihre Logik nicht verbessern, aber er kann Ihnen sagen, wie Sie Ihre Syntax korrigieren können. Das bedeutet, dass bei jedem Job, bei dem Sie Code mithilfe eines Compilers schreiben, die Logik von Natur aus wesentlich wertvoller ist, als syntaktisch korrekt zu sein.
quelle
Interviews sind immer peinliche Situationen - man kann dies sagen , denn wenn man aus gehen, sofort Sie an all die Dinge denken , Sie sollten gesagt haben, oder die richtigen Antworten auf die Fragen und die Dinge , die Sie sie fragen wollte , aber vergessen. Daher ist es unrealistisch, perfekt geschriebenen Code ohne Syntaxfehler zu erwarten.
Außerdem stimmen Ihre Erwartungen an perfekten Code (auf einem Whiteboard!) Möglicherweise nicht mit denen der Interviewer überein. Bei einem Interview, an dem ich teilgenommen habe, wurde ich beispielsweise gebeten, eine Klasse zu schreiben in einem Kopierkonstruktor. Also schrieb ich einen ein, der nichts anderes tat, als a = b zu setzen, aber das war genug, um ihn zufrieden zu stellen. Meine Erwartungen an das Problem erforderten keinen Kopierer, so dass ich es als irrelevant für das zu lösende Problem ausschloss - ich hatte nicht erwartet, dass ich vollständig konformen, kompilierenden Code (nach seinen verborgenen Codierungsstandards) schreiben und einfach zeigen musste mein verständnis von der lösung. (Der gleiche Interviewer mochte meine Lösung auch nicht, es war nicht so, wie er es getan hätte, so offensichtlich habe ich es falsch verstanden, seufz).
Wenn Sie Arbeitscode von einem Befragten wünschen, geben Sie ihm einen Compiler. Dann beschweren Sie sich nicht, wenn sie Ihnen in Rechnung stellen :)
Wenden Sie sich also an die Person, die weiß, was sie tut, und nicht an die Person, die die Wörter nachahmen kann, aber die Bedeutung nicht versteht.
quelle
Während eines Interviews ist der Interviewer mehr daran interessiert, Ihre Person zu sehen
Die Syntax ist zwar nicht so wichtig, spielt aber bei der Lösung eines Problems eine herausragende Rolle. Bei größeren Fehlern in der Syntax ist nicht zu erwarten, dass der Interviewer beeindruckt wird.
Die richtige Logik und Syntax zusammen können in einem Interview den Trick für Sie tun.
Ein kleiner oder kleiner Fehler würde Sie nie viel kosten, wenn die Logik gut genug ist.
Darüber hinaus gibt es möglicherweise eine IDE, mit der sich die Syntax auch jeder anderen in der richtigen Form leicht umsetzen lässt. Aber welche Methode wo und wann und vor allem WARUM anzuwenden ist , würde nur einem Mann bekannt sein, der die richtige Logik und das Wissen über das eigentliche Thema besitzt.
Ich hoffe und fordere Sie dringend auf, etwas mehr als eine weiße Tafel oder einen Notizblock bereitzustellen, um den Code zu schreiben.
Ich würde mit dem zweiten Kandidaten gehen. ..
quelle
Nun, einige Leute wollen großartige Java-Entwickler, großartige C # -Entwickler, großartige C ++ - Entwickler usw. Wenn das Ihr Fall ist, entscheiden Sie sich für A und mehr Leistung. Eine Sorge, die ich hätte, ist, wenn sie nicht Grund haben, das Problem zu lösen, wie können Sie erwarten, dass sie Ihre geschäftlichen Probleme begründen und lösen?
Andere wollen einfach großartige Entwickler, die in jeder gewünschten Sprache arbeiten können. Sie überlegen / modellieren das Problem und implementieren es dann in einer beliebigen Sprache. Wenn Sie plötzlich entscheiden, dass .NET nicht mehr funktioniert und auf Java umschaltet oder umgekehrt, sind dies die Entwickler, die nicht sofort loslegen oder sich weigern, etwas zu lernen. Auch wenn Sie eine Art Automatisierungspaket / Berechnungspaket mit einer proprietären Sprache erhalten und einige Aufgaben automatisiert ausführen müssen, sind dies die Entwickler, die dazu in der Lage sind. Beispiel aus der Praxis ... Ich musste eine benutzerdefinierte proprietäre Skriptsprache für ein Mapping-Softwarepaket finden, um Postleitzahlen für benutzerdefinierte Regionen für einen alten Arbeitgeber zu extrahieren. Ein weiteres Beispiel: Mein aktueller Arbeitgeber verfügt über ein proprietäres Immobilienverwaltungssystem, das eine benutzerdefinierte Sprache zum Verfassen von Berichten enthält.
Auch auf der weißen Tafel gibt es zusätzlichen Druck / Nervosität, so dass niemand von seiner besten Seite ist. Außerdem bezweifle ich sehr, dass Sie beim Codieren jedes Mal alles perfekt machen. Ich vermute, Sie kompilieren oder nur ausführen und einige Fehler finden. Zusätzlich kommt es auf die Sprache an. C ist klein genug, dass Sie sich wahrscheinlich die meisten Sprach- / Kernbibliotheken merken können (obwohl ich es nicht benötige). Java / C # hat so große Bibliotheken (mit so häufigen Änderungen), dass ein Speichern der Bibliothek nicht in Frage kommt.
Auch mehrere Sprachen zu beherrschen kann gegen Sie arbeiten. C # und Java stören sich bei mir. Die Kenntnis mehrerer Sprachen kann Ihre Sichtweise jedoch auch erweitern, insbesondere wenn Sie zusätzlich zu C # / Java eine Skriptsprache und eine funktionale Sprache kennen.
Wenn beide Kandidaten das Problem mit der richtigen Logik lösen, hat der Typ mit der richtigen Syntax wahrscheinlich einen Vorteil. Wenn man das Problem löst und man nicht, dann würde ich persönlich mit dem Mann gehen, der das Problem lösen kann.
Wenn jemand behauptet, ein Java-Experte zu sein und ein Array nicht als if-Anweisung oder while-Schleife deklarieren kann, kann er lügen. Aber ich verstehe vielleicht, ob jemand ein Java-Experte ist, aber in letzter Zeit viel mit C # zu tun hat und versucht, Map oder so etwas zu tun .Length oder string.length () / string.Length / string.length anstelle von string.length () ... Kleinigkeiten, die ich vergeben würde. Oder wenn sie die Argumentreihenfolge eines Bibliotheksaufrufs vergessen. Oder ein Tippfehler / Semikolon hier oder da ....
quelle
Ich werde keinen von ihnen nehmen.
Eine gute Syntax ist nutzlos, wenn der Programmierer Probleme nicht gut löst. Und eine schlechte Syntax für eine bestimmte Sprache bedeutet, dass sich der Kandidat mit dieser bestimmten Sprache nicht wohl fühlt, möglicherweise aufgrund mangelnder direkter Erfahrung.
Logik ist jedenfalls weitaus wichtiger als Syntax.
quelle
Es kommt wie immer darauf an. Wenn die Syntaxfehler relativ gering sind, würde ich sie ignorieren. Wenn sie weltbewegend groß sind, würde ich ihnen Aufmerksamkeit schenken und versuchen zu schließen, warum sie dort sind.
Ich denke, logische Fehler sind schlimmer als Syntaxfehler. Letztere können fast immer mechanisch abgefangen werden, erstere weniger (hängt bis zu einem gewissen Grad von der Sprache ab, in der Sie schreiben) Rückschluss und Überprüfung).
quelle
Es würde definitiv von der Position abhängen, für die das Interview ist, und wahrscheinlich auch von der Sprache.
Bei der Arbeit an C ++ ist es beängstigend, einen Typen zu haben, der über die Syntax stottert. C ++ ist voller dunkler Ecken, Fallen liegen praktisch überall. Ein Stottern in der Syntax bedeutet eine schlechte Beherrschung der Sprache, und C ++ - Anfänger machen viele Fehler (ganz zu schweigen davon, dass andere dies von Zeit zu Zeit nicht tun).
Um Ihre Frage zu beantworten, dann:
Es gibt nur eine Einschränkung: Menschen, die ihre mangelnde Erfahrung anerkennen. Im Idealfall sollten die Benutzer in der Sprache ihrer Wahl oder, wenn sie dies bevorzugen, in einem Pseudocode codieren (z. B. Studenten).
quelle
Wahre Geschichte, ich vergesse immer noch die Syntax von C # -Ereignissen, wenn ich sie von Hand ausschreiben muss. Es kommt manchmal in Interviews vor. Ich habe das Problem nicht, wenn ich auf einer Tastatur codiere.
Wählen Sie den Typ, der codieren kann, nicht den, der sich an die Syntax erinnern kann.
quelle
Wenn ich selbst für ein Vorstellungsgespräch Code auf Papier / Whiteboard schreibe, überspringe ich im Grunde genommen einen großen Teil der Syntax. Ich benutze keine Semikolons, fudge Methodenaufrufe usw. Ich schreibe eher einen Satz, der 4 Zeilen wirklich einfachen Codes erklärt, als den Code selbst. Wirklich, ich benutze einen PHP-ähnlichen Pseudocode und spreche währenddessen durch, was ich tue, und notiere kurze Kommentare, um Dinge zu erklären, die ich beschönige (die theoretisch nichts sind, was für die eigentlich wichtig ist) Programm)
Mein Ziel beim Codieren in einem Interview ist es, zu zeigen, wie ich das Problem löse, und nicht zu diktieren, was ein Schreibkraft in Notepad eingeben und ausgeführt haben könnte.
Lange Rede kurzer Sinn: Ich denke, Sie sollten sich überlegen, warum der erste Programmierer eine beschissene Syntax hatte. Er wusste es sehr gut, hielt es aber für irrelevant für das Interview und zog es vor, sich auf die Teile dieses Jobs zu konzentrieren, die schwierig sind (Logik und Problemlösung).
quelle
Die Person, die die Antwort logisch nicht erfüllen kann, ist nicht qualifiziert. Es gibt zu viele Leute in unserer Branche, die Müllcode produzieren, der den Anforderungen entspricht, aber nicht das tut, was er tun sollte, oder Fehler oder Randfälle handhabt.
Die zweite Person kann je nach Art und Anzahl der Fehler und der Schwierigkeit, die Sie von ihnen erwarten, unqualifiziert sein oder nicht. In SQL-Begriffen (die Sprache, in der ich schreibe) ist die Person, die sich nicht an die Syntax für einen expliziten Join erinnern kann, nicht für einen Job qualifiziert, bei dem Sie eine Datenbank abfragen müssen - keine Ausnahmen. derjenige, der sich nicht erinnern kann, wie man einen wiederverwendbaren CTE erstellt (aber der weiß, dass er existiert und versucht, einen zu verwenden), ist es nicht. Mit anderen Worten, ich würde erwarten, dass die Syntax für den Basiscode, den Sie ständig schreiben, korrekter ist, jedoch nicht für Dinge, die nur gelegentlich ausgeführt werden, und nicht für komplexe Syntax.
Wenn ich eine Person in Betracht ziehen würde, von der ich wusste, dass sie in einem verwandten Bereich hervorragende Qualifikationen, aber nur minimale Kenntnisse meiner spezifischen Sprache besitzt, wäre ich wahrscheinlich auch in Bezug auf Syntaxfehler verzeihender. Ich würde lieber einen großartigen Oracle-Entwickler als einen mittelmäßigen SQL Server-Entwickler für einen SQL Server-Job einstellen (natürlich wäre eine großartige SQL Server-Person am besten) und würde nicht erwarten, dass diese Person die SQL Server-Syntax kennt, wenn sie mir zeigen könnte, wie es geht Mach es in Oracle. Das Gleiche gilt für Java- und C # -Leute. Die Person mit hervorragenden Fähigkeiten zum Lösen von Problemen schlägt die Person mit hervorragenden Sprachkenntnissen, aber die mit beiden gewinnt jedes Mal (manchmal sind sie nur schwer zu finden).
quelle