Sollte ich erwarten, dass die jüngsten Absolventen mit den grundlegenden Programmierkonzepten vertraut sind? [geschlossen]

9

Es scheint eine RIESIGE Diskrepanz zwischen dem, was ich von jemandem erwarte, der einige Jahre an der Universität Programmieren studiert hat, und dem, was man tatsächlich weiß.

Ich habe nicht das Gefühl, in Interviews überkomplizierte Fragen zu stellen. Einige meiner üblichen Fragen sind:

  • Was ist der Unterschied zwischen einem Referenztyp und einem Werttyp?

    Wenn es so aussieht, als ob der Befragte seine eigene Antwort nicht wirklich versteht oder wenn er die von mir verwendete Terminologie nicht kennt, gehe ich auf weitere Details ein, indem ich ihn auffordere, mir zu erklären, was passiert, wenn ich int i = 0 schreibe. Was ist in einer Methode mit dem Objekt o = 0, dem Objekt o = new MyClass () usw.

    Grundsätzlich tue ich alles, um den Befragten dazu zu bringen, mir von dem Callstack, dem Haufen usw. zu erzählen, und ich versuche, mich an sprachunabhängige Konzepte zu halten. Wenn der Befragte mir sagt, dass er viel C, C ++ oder C # gemacht hat, gehe ich tiefer in die spezifische Sprache und möglicherweise in die Implementierungsdetails ein.

    Bei Bedarf frage ich den Befragten, was ein Callstack ist oder wo Argumente gespeichert sind, die an eine Funktion in der imperativen Sprache seiner Wahl übergeben wurden.

    Die meisten Befragten haben einfach keine Ahnung, was ein Callstack ist, geschweige denn Überlegungen zum Boxen usw.

  • Was ist der Unterschied zwischen einer abstrakten Klasse und einer Schnittstelle? In welchen Fällen sollten Sie eine über die andere verwenden?

    Normalerweise bitte ich sie auch, sich einen Entwurf einer kleinen Bibliothek mit einem Anwendungsfall vorzustellen, der darauf abzielt, einige Vererbungs- und einige abstrakte Fabriken zu verwenden

    Die meisten Befragten haben einfach keine Ahnung, was der eigentliche Zweck der Vererbung sein könnte. Sie kennen normalerweise einige Schlüsselwörter (virtuell, überschreiben usw.), wissen aber nicht wirklich, wann sie verwendet werden sollen, geschweige denn, was eine virtuelle Tabelle ist.

Obwohl ich Lebensläufe vorher überprüfe, selbst für Personen mit 5 Jahren Erfahrung in realen Projekten mit komplexen Architekturen, würde ich sagen, dass weniger als 25% aller meiner Befragten diese beiden Fragen richtig beantworten können. Und wenn ich es richtig sage, meine ich nicht "eingehend" ... nur um eine ungefähre Vorstellung davon zu haben, was das Konzept ist.

In Bezug auf Junioren kann ich gut jemanden einstellen, der nicht weiß, wie man seine Zeit sehr gut organisiert, oder jemanden, der nicht an industrielle Bauprozesse gewöhnt ist, aber ich habe das Gefühl, wenn man das Wort nicht gehört hat " callstack "Nach ein paar Jahren Informatikstudium ist er entweder dumm oder unmotiviert oder hat seine Universität sehr unklug gewählt.

Glaubst du, ich bin hier zu extremistisch? Ist es üblich, diese Grundkonzepte nach Abschluss der Universität zu lernen? Kennen Sie Leute, die mit diesen nicht vertraut waren und nach einigen Jahren sehr gute Software-Ingenieure wurden? Und glauben Sie, dass mein Unternehmen Probleme haben könnte, talentierte Leute anzuziehen, oder haben Sie die gleichen Probleme mit Ihrem eigenen Einstellungsprozess?


Bearbeiten. In Bezug auf den "unmittelbaren Typ" war es nur eine wörtliche Übersetzung vom Französischen ins Englische, da wir unsere Interviews normalerweise auf Französisch führen. Ich habe es in meiner Frage behoben. Trotzdem denke ich, dass Sie alle perfekt verstehen, was ich meinte, was meine Meinung ist, nicht wahr?

Brann
quelle
4
Nur eine kleine Bemerkung, aber ich würde nicht wissen, was Sie mit einem unmittelbaren Typ, Werttyp andererseits meinen, den ich Ihnen erklären könnte. Ich bin jedoch der Meinung, dass jeder, der einen CS-Abschluss erworben hat, in der Lage sein sollte, diese beiden Fragen zu beantworten. Um Ihre Frage zu verbessern, könnten Sie vielleicht ein Beispiel dafür geben, wie umfassend die erwarteten Antworten sein sollten.
Sebastiangeiger
Wenn Sie mehr als 2 Jahre lang eine Sprache an der Universität studieren und sich mit anderen Fächern messen, bleibt den Studenten nach Abschluss ihrer Tests nur das Nötigste. Das einzige, dessen Sie sich sicher sein können, ist, dass sie diese Informationen lernen können oder sie es einmal gewusst haben. Nur praktische Erfahrung kann ihnen Wissensbeständigkeit verleihen. Joel Spolsky gibt in seinem Blog-Artikel hier - http://www.joelonsoftware.com/items/2009/10/26.html
Justin Shield
@sebastiangeiger; Du bist richtig auf dem Laufenden!
Brann
2
Er muss wissen, dass er fast nichts weiß. Dies ist der entscheidende Punkt, um mit der Zeit besser zu werden.
Deadalnix
Interessanterweise erwähnen Brann alle Personen, die diese Frage beantwortet haben, den "unmittelbaren Typ" (Übersetzungsfehler) und sagen Ihnen, dass sie nicht wissen, was es ist. Sagen Ihre Interviewer: "Ich habe diese Fragen nicht eingehend untersucht?" oder behaupten sie, Experten zu sein, zum Beispiel für Laufzeitspezifikationen und ein tiefes Verständnis von Compilern?
Pindatjuh

Antworten:

15

Terminologie ist ein häufiger Nachteil in einer Interview-Situation.

Sie stellen dem Befragten eine Frage unter Verwendung einer Terminologie, die Ihnen etwas bedeutet, aber der Befragte kennt sie möglicherweise unter einem anderen Begriff oder kennt nur die generische Theorie ohne Anwendung auf bestimmte Sprachen oder Umgebungen. Es kommt zu Missverständnissen. Keine Partei ist glücklich.

Tatsächlich stellt sich heraus, dass der Befragte vollkommen versteht, dass einige Werte möglicherweise direkt in einem Register gespeichert sind und andere auf einen Teil des Speichers an anderer Stelle verweisen, aber weil Sie die Frage auf eine bestimmte domänenbezogene Weise stellen, den Punkt, den Sie fragen, und Was der Befragte Ihnen erzählen soll, kommt nicht wirklich rüber.

Vielleicht gibt es viele Situationen, in denen der Befragte plötzlich klickt und sagt: "Oh - das ist es, worüber Sie sprechen" - und dann ganz angemessen erklärt.

Es ist eine schwierige Balance, weil Programmierer, die gerade die Universität verlassen haben, nicht die vielfältigen Erfahrungen haben werden, die ihnen die Entwicklung der realen Welt in einer Teamumgebung bietet. In der Zwischenzeit werden sich erfahrene Entwickler oft nicht an all die Dinge erinnern (oder sich sogar dafür interessieren), die sie an der Universität gelernt haben, weil sie für ihren täglichen Gebrauch einfach irrelevant sind.

Diese beiden Arten von Menschen (yep - das ist der Interviewte und der Interviewer) Notwendigkeit zu lernen , wie man kommuniziert mit ihnen , bevor Sie lernen können , um sie. Die Verantwortung liegt bei der Person mit der größeren Erfahrung (dem Interviewer), um sicherzustellen, dass dies geschieht.

Ganz zu schweigen von der Tatsache, dass manche Menschen in Interviews einen vollständigen Gedächtnisfehler bekommen. Mich eingenommen. Ich erinnere mich, dass ich gebeten wurde, ein Programm in C zu schreiben, und ich konnte mich für mein ganzes Leben nicht an das Symbol erinnern, mit dem über einen Zeiger (->) auf ein Mitglied zugegriffen wurde, und musste jemanden fragen. Es war nicht einmal für meinen ersten Job. Junge hat mich in den letzten 15 Jahren geplagt :-)

Weitaus nützlicher ist meiner Meinung nach die Fähigkeit zu kommunizieren, Probleme effizient und vollständig zu lösen; Dinge schnell aufheben; positive Einstellung zeigen; gut mit anderen Menschen und anderen Grundwerten interagieren.

Geben Sie die Befragten nicht auf, weil sie nicht wissen, was ein unmittelbarer Typ ist. Mach weiter.

Roger Attrill
quelle
@Brann - Soforttyp -> Werttyp. notiert
Roger Attrill
Nun, vielleicht ist es aus dem Wortlaut meiner Frage nicht klar genug, aber ich tue wirklich viel, um sicherzustellen, dass es keine Terminologieprobleme gibt. Ich frage den Befragten, was in bestimmten Situationen in der Sprache seiner Wahl passiert, ich frage ihn, ob er weiß, was ein Callstack ist, ich frage ihn, ob es verschiedene "Arten" von Erinnerungen gibt, ich frage ihn, wo Argumente an eine Funktion übergeben werden in der imperativen Sprache seiner Wahl gespeichert. Ich glaube wirklich nicht, dass es sich um ein Terminologieproblem handelt. Manchmal hat der Befragte einfach keine Ahnung, was hinter den Kulissen passiert, wenn eine Klasse instanziiert wird.
Brann
Was das "Weitermachen" angeht, mache ich das normalerweise. Aber meiner Erfahrung nach weiß ein Befragter, wenn er nicht weiß, was ein Werttyp ist, weder über die Thread-Synchronisation noch darüber, wofür Generika bestimmt sind usw. Nach einigen Fragen, wenn klar wird, dass der Kandidat dies nicht ist Nicht für den Job geeignet, gebe ich ihm normalerweise einige Ratschläge, was er lernen soll, um in technischen Interviews bessere Leistungen zu erbringen, und ... mache mit dem nächsten Kandidaten weiter :)
Brann
12

Sie fragen nach sprachspezifischen Kenntnissen, und die von Ihnen verwendeten Begriffe werden nicht in allen Sprachen zu 100% gleich verwendet. Ich habe keine Ahnung, was ein "unmittelbarer Typ" ist.

Bedenken Sie auch, dass an einer Universität nicht gelehrt wird, wie man Standardcode in X herausholt, sondern dass man viele zugrunde liegende Konzepte gelernt und verschiedene Programmierparadigmen gesehen hat. Mit anderen Worten, es ist einem Führerschein sehr ähnlich - obwohl Sie die grundlegende Theorie kennen, brauchen Sie noch viel Übung.


quelle
Ich habe auf "Werttyp" aktualisiert. Aber die Sache ist, dass wenn der Befragte die Frage nicht versteht, ich sie normalerweise ausführlicher erkläre und viele Dinge versuche, um den Befragten dazu zu bringen, mir von dem Callstack, dem Haufen usw. zu erzählen (ja, ich weiß das sind Implementierungsdetails, aber dennoch sind dies allgemeine Konzepte, die nicht wirklich sprachspezifisch sind (IMO)
Brann
Ich denke, das "Callstack" -Konzept ist eines der allgemeinen Konzepte, über die Sie sprechen. Selbst nachdem ich die Frage auf zehn verschiedene Arten umformuliert habe, um sicherzustellen, dass der Befragte weiß, dass ich von ihm erwarte, dass er mir Informationen zu Speicherzuweisung, Callstack, Werttypen usw. gibt, bekomme ich immer noch meistens leere Blicke ...
Brann
Wenn ich Sie richtig verstehe, möchten Sie wissen, ob der Entwickler Zeiger kennt und weiß, was sie tun und wie sie verwendet werden?
Nein, ich nicht. Ich möchte sicherstellen, dass der Entwickler zumindest eine ungefähre Vorstellung davon hat, was hinter den Kulissen passiert, wenn er das Feature x oder y seiner Sprache verwendet. Ihn nach Zeigern zu fragen, ist nur eine Möglichkeit, ihn dazu zu bringen, über das zu sprechen, was er über die Speicherzuweisung weiß.
Brann
3
@Brann, all die detaillierten Dinge über Aufrufstapel, Heap usw. sind im Wesentlichen nur angewendete Zeiger .
3

"Ich höre und ich vergesse. Ich sehe und ich erinnere mich. Ich tue und ich verstehe." (Und meiner Meinung nach führt Verständnis zu einer besseren Gedächtniserhaltung.)

Einfach ausgedrückt, ein Absolvent der letzten Zeit hat nicht viel Erfahrung. Wie jemand anderes bemerkt hat, wird er nicht viel mehr als das Nötigste an Wissen haben, unabhängig von seiner "gewählten" Sprache.

Ich ging an ein College, das speziell entwickelt wurde, um das Lernen über das gewählte Hauptfach zu optimieren (zum Beispiel hätten Sie keine historische Literatur, wenn Sie ein CS-Hauptfach wären; das, was Sie der historischen Literatur am nächsten kommen könnten, ist Science Fiction) gerade aus der Schule, würde ich nicht in der Lage gewesen , zu sagen , was eine Schnittstelle war allein seine Differenz zu einer abstrakten Klasse lassen, obwohl wir über Abstraktion haben lernen (und Schnittstellen gibt es zuhauf in .Net, die Technik habe ich gelernt). Wir haben vielleicht Schnittstellen berührt, aber es ging in all den anderen Dingen verloren, die wir wissen mussten, um die Klasse zu bestehen. Erst bei meinem ersten Job am College lernte ich Schnittstellen kennen, insbesondere in irgendeiner sinnvollen Weise.

Sie haben erwähnt, dass Sie Interviews auf Französisch führen, was deutlich macht, dass wir uns in verschiedenen Ländern befinden. Daher kann Ihr Kilometerstand variieren, aber hier in den USA sind die Colleges notorisch hinter den Zeiten zurück, in denen es um Technologie geht. Wenn Sie sich nicht mit den ausgereiften Sprachen (C / C ++, COBOL usw.) beschäftigen, ist es daher auch sehr wahrscheinlich, dass das, was Sie selbst seit Jahren verwenden, in der Version, die die Schüler gelernt haben, nicht verfügbar ist. Zum Beispiel führte .Net 3.0 Entity Framework, WPF, WCF und viele andere coole Dinge ein, aber selbst meine Schule blieb bei .Net 1.1 und 2.0 hängen (was bedeutete, bei ADO.NET zu bleiben und nicht einmal etwas über Object zu lernen -Relationale Zuordnung). Eine Schule, die PHP verwendet, kann an (Nicht-OOP) PHP 4 hängen bleiben.

Denken Sie auch daran, dass ein Schüler eine Menge Informationen aufnehmen muss, die oft nur für kurze Zeit verwendet werden. "Fortgeschrittene" Konzepte wie Abstraktion werden oft gegen Ende des Unterrichts unterrichtet, wobei der Schüler möglicherweise nur etwa eine Woche Zeit hat, um damit zu spielen, während er sich mit den anderen Klassen auseinandersetzt, die er / sie möglicherweise annehmen muss oben auf einem Teilzeit- oder Vollzeitjob. Kombinieren Sie all diese zusammen und es ist ein Wunder, dass sich die Person an alles erinnern kann , geschweige denn alles gerade halten.

Zumindest in den USA wird oft angenommen, dass ein Absolvent in jüngster Zeit nichts über die allgemeinen Grundlagen hinaus weiß (der Unterschied zwischen dem Übergeben von Werten und dem Übergeben von Referenzen möglicherweise), da verstanden wird, dass generische Theorie und Problemlösung der Hauptteil von sind Schule, nicht die Vor- und Nachteile einer bestimmten Sprache lernen.

Ich empfehle, die Fragen, die Sie mehr hatten, als Maß dafür zu verwenden, was Sie zum Unterrichten / erneuten Unterrichten benötigen (denken Sie daran, es ist durchaus möglich, dass sie den Begriff , den Sie verwenden möchten, einfach nicht gelernt haben , selbst wenn Sie denken, es ist allgegenwärtig), im Gegensatz dazu, ob der Befragte "wertlos" ist oder nicht. Kombinieren Sie dies mit der Einschätzung, wie lernbereit sie sind und wie ihre allgemeinen Fähigkeiten zur Problemlösung aussehen (im Ernst, geben Sie ihnen ein Rätsel, das sie lösen müssen, und sehen Sie, wie sie dies tun), und Sie können sehr gut einen zukünftigen Rockstar haben, den Sie haben Möglicherweise sind sie verstorben, weil sie nicht wussten, was Sie mit "Callstack" meinten.

Shauna
quelle
Nun, in Frankreich (und ich vermute, dass es an den meisten Orten dasselbe ist) enthält jeder CS-Lehrplan eine obligatorische Codierung in C (oder ähnlichen Sprachen), wenn man unter anderem etwas über die Speicherzuweisung lernt) und eine obligatorische Codierung in C ++ / java / .net (wo man etwas über OOP erfährt). Darüber hinaus machen Sie viele Dinge, die viele Bereiche abdecken können, aber wenn jemand seinen Abschluss macht, ohne zu wissen, was eine virtuelle Methode ist, bedeutet dies, dass er sein Studium nicht sehr ernst genommen hat ... Ich wusste ganz genau, was Es war, als ich meinen Abschluss machte ... Was denkst du über einen Mathematikstudenten, der nicht weiß, was eine Serie ist?
Brann
@Brann - Nach meiner (schnellen) Forschung darüber, was Informatik ist (sowie meinem vorherigen Verständnis davon), ist CS kein Programmierfach. Ja, es enthält Programmierung, aber es ist nicht unbedingt das Hauptaugenmerk. Im Übrigen ist "Informatik" so weit gefasst und ziemlich vage, dass es von Schule zu Schule unterschiedlich sein kann. Stanford gehört zu den Top-CS-Schulen in den USA und hat für seine Auswahllisten für Herbst- und Winterkurse ( www-cs.stanford.edu/courses ) weniger als ein halbes Dutzend Kurse, die sich anscheinend nicht nur auf die eigentliche Programmierung konzentrieren Programmtheorie), aus ca. 50 Klassen.
Shauna
Dies bedeutet, dass ein Student wahrscheinlich eine bestimmte Sprache für ein oder zwei Semester verwendet und sie dann für den Rest seiner Studentenkarriere nicht berührt. Darüber hinaus lernt er Robotik und genetische Programmierung, die sich stark von Standard-Desktop- / Embedded-Systemen / Firmware-Programmierung unterscheiden.
Shauna
Was denkst du über einen Mathematikstudenten, der nicht weiß, was eine Serie ist? - Das hängt davon ab, auf welche Art von Mathematik sich der Schüler spezialisiert hat und woran er tatsächlich arbeitet. Auch hier ist es durchaus möglich, dass der Schüler es gelernt hat (und daher technisch weiß, was es ist), es aber einfach vergessen hat, weil er es in seiner täglichen Arbeit mit Kryptographie oder diskreter Mathematik nie verwendet. Mathematik und Programmierung werden im Allgemeinen als Use-it-or-lose-it-Themen betrachtet.
Shauna
3

Sie haben eine ganze Reihe enger Ansichten und nehmen diese implizit an.

  • Es scheint eine RIESIGE Diskrepanz zwischen dem, was ich von jemandem erwarte, der einige Jahre an der Universität Programmieren studiert hat, und dem, was man tatsächlich weiß.

    Meines Wissens gibt es keine Universität, an der Leute ein paar Jahre lang Programmieren studieren. Universitäten bieten Kurse in Informatik an, wobei Programmierung ein Aspekt ist.

  • Was ist der Unterschied zwischen einem Referenztyp und einem Werttyp?

    Faustregel: Wenn Lisp auf die Unterscheidung verzichten kann, ist es nur Unordnung;)

  • Grundsätzlich tue ich alles, um den Befragten dazu zu bringen, mir von dem Callstack, dem Haufen usw. zu erzählen, und ich versuche, mich an sprachunabhängige Konzepte zu halten.

    Es ist eine gute Idee, über sprachunabhängige Konzepte zu sprechen. Weder der Heap noch der Stack sind jedoch sprachunabhängig.

  • Wenn der Befragte mir sagt, dass er viel C, C ++ oder C # gemacht hat, gehe ich tiefer in die spezifische Sprache und möglicherweise in die Implementierungsdetails ein.

    Alle diese Sprachen haben Spezifikationen. Die Implementierung ist durch die Sprache nicht definiert. C und C ++ können mithilfe von LLVM überkompiliert werden, um auf dem Flash Player oder einer beliebigen JavaScript-Laufzeit ausgeführt zu werden. Dies macht Ihre Annahmen zur Heap- und Stack-Zuordnung ungültig.
    Mit C # ist es ähnlich. C # wird vor der Ausführung mit viel Optimierung JITed, was getan werden kann. Lokale Variablen, die von Closures erfasst werden, werden letztendlich auf dem Heap anstelle des Stapels angezeigt, während die Escape-Analyse das Speichern von bereichslokalen Objekten (die normalerweise zum Heap gehen sollten) ermöglicht, die im Stapel gespeichert werden sollen. Durch eine ordnungsgemäße Registerzuweisung wird auch die Notwendigkeit einer Stapelzuweisung erheblich verringert.

  • Bei Bedarf frage ich den Befragten, was ein Callstack ist oder wo Argumente gespeichert sind, die an eine Funktion in der imperativen Sprache seiner Wahl übergeben wurden.

    Was würden Sie jemanden fragen, der nur über umfangreiche Programmiererfahrung mit Haskell verfügt? : P.

  • Die meisten Befragten haben einfach keine Ahnung, was ein Callstack ist, geschweige denn Überlegungen zum Boxen usw.

    Die Grundidee hinter Autoboxing ist, dass Grundelemente auch als Objekte behandelt werden können (oder zumindest Werte, deren Typ zur Laufzeit erkannt werden kann). In Bezug auf diese Abstraktion gibt es drei Arten von Sprachen:

    1. diejenigen, wo es nicht existiert. Ich nehme an, Objective-C ist das kanonische Beispiel.
    2. diejenigen, wo es wirklich gilt
    3. diejenigen, wo es existiert, aber nicht hält. Ich denke, Java ist das beste Beispiel (ich würde annehmen, dass es inzwischen behoben wurde).

    Ich verstehe nicht, warum Leute keine Sprachen der Kategorie 1 verwenden sollten (eigentlich ist es eine gute Idee). Ich verstehe nicht, warum Leute, die Sprachen der Kategorie 2 verwenden, sich wirklich darum kümmern sollten. Und ich denke, jeder, der eine Sprache der Kategorie 3 verwendet, dh eine, bei der ein semantisches Kernmerkmal einfach gebrochen ist, verwendet die falsche Sprache.

  • Was ist der Unterschied zwischen einer abstrakten Klasse und einer Schnittstelle? In welchen Fällen sollten Sie eine über die andere verwenden?

    Das ist sehr subjektiv und hängt wirklich von der Sprache ab. C ++ hat keine Schnittstellen. Objective-C hat keine abstrakten Klassen. Ich würde argumentieren, dass jede Sprache, die beides hat, dringend neu gestaltet werden muss. Viele moderne Sprachen verwenden Merkmale, Mixins, Kategorien, Rollen und ähnliche Konstrukte, um weitaus sauberere Lösungen für die Wiederverwendung von Code bereitzustellen als die Vererbung von Teilimplementierungen. Prototypbasierte Sprachen haben sowieso keine Klassen.

    Letztendlich ist dies ein schwieriges und umstrittenes Thema. Ein Interview ist kaum der richtige Ort, um diese Frage zu lösen, und ich würde niemanden wirklich dazu bringen, sich für eine Junior-Stelle zu bewerben, wenn er mir keine gute Antwort gibt.

  • Die meisten Befragten haben einfach keine Ahnung, was der eigentliche Zweck der Vererbung sein könnte. Sie kennen normalerweise einige Schlüsselwörter (virtuell, überschreiben usw.), wissen aber nicht wirklich, wann sie verwendet werden sollen, geschweige denn, was eine virtuelle Tabelle ist.

    Es gibt eine Reihe objektorientierter Sprachen, die keine Vererbung oder klassische vtables verwenden.

Mein Rat:

  • Seien Sie sehr vorsichtig , dass alles , was Sie über die Programmierung wissen davon ausgehen , ist wirklich ein grundlegendes Programmierkonzept. Sie können davon ausgehen, dass jeder gute Programmierer die Neugier hat, Antworten auf diese Fragen zu finden. Sie können jedoch nicht davon ausgehen, dass jemand, der sie kennt, gut ist. Ich neige dazu zu glauben, dass diejenigen, die solchen Details zu viel Bedeutung beimessen, den Wald vor lauter Bäumen wahrscheinlich nicht sehen.
  • Sorgen Sie sich weniger um Implementierungsdetails. Programmiersprachen sollen Abstraktionen erzeugen. Sie müssen in diesen Abstraktionen und nur in diesen denken. Guter Code wird nicht gegen Implementierungsdetails einer Sprache geschrieben. Es wurde geschrieben, um die Semantik Ihrer Lösung am besten in die Sprachfunktionen einzubetten. Wenn Ihnen dies gelingt, wird Ihr Code nicht nur robust, sondern für jeden, der mit der Sprache vertraut ist, gut lesbar und für einen Compiler einfacher zu optimieren.
  • Es ist nicht so wichtig, die erwarteten Antworten zu kennen. Sie zu verstehen ist. Wenn jemand sie nur kannte, weil sie sie in einem Lehrbuch gelesen haben oder sein Professor es ihnen sagte, dann ist es von geringem Wert. Eigentlich können Sie sich all diese Dinge innerhalb weniger Stunden erklären.
    Wichtig ist, dass Sie verstehen, wie diese einfachen und isolierten Fakten angewendet werden können, um flexible und wartbare Lösungen für komplexe Probleme zu entwickeln.

Um zur eigentlichen Frage zu gelangen:

Und glauben Sie, dass mein Unternehmen Probleme haben könnte, talentierte Leute anzuziehen, oder haben Sie die gleichen Probleme mit Ihrem eigenen Einstellungsprozess?

Alle Unternehmen haben Probleme, geschickte Leute anzuziehen, außer vielleicht die großen Akteure. Das liegt daran, dass es nur wenige von ihnen gibt. Und aufgrund der Annahme, dass die Universität die Menschen geschickt macht. Das tut es nicht. Es macht sie sachkundig (vorausgesetzt, sowohl der Student als auch die Universität halten an ihrem Teil des Geschäftes fest). Erfahrung macht Menschen geschickt.

Es gibt einige, die vor dem Eintritt in die Universität Erfahrungen gesammelt haben und dies während ihres Studiums tun. Weil sie gerne programmieren und wenn sie während eines Kurses eine neue Idee aufgreifen, werden sie versuchen zu sehen, wie sie sie umsetzen können, als erstes, wenn sie nach Hause kommen. Dies ist die Art von Leuten, die Sie gerne einstellen würden. Aber es gibt nur wenige von ihnen.
Es ist die Leidenschaft für Programmierung und Selbstverbesserung und ihr Streben, die Programmierer gut macht. Rechtzeitig.

Ich denke, Sie müssen sich darüber im Klaren sein, dass die meisten Menschen leider ohne ausreichende Programmiererfahrung die Universität betreten und verlassen werden.
Gleichzeitig braucht unsere Branche dringend erfahrene Programmierer. Daher glaube ich, dass es die Mission unserer Branche ist, tatsächlich zu versuchen, einzugreifen. Wenn Sie Kandidaten für Junior-Positionen interviewen, suchen Sie realistisch nach Menschen, die bereit sind, zu lernen und sich zu verbessern. Und Sie sollten sorgfältig auswählen, da Sie viel Energie investieren müssen und nicht möchten, dass dies verschwendet wird.

Stellen Sie sich vor, Sie stellen frisches Blut ein, um Fahrer für Ihr Rennteam zu werden: Ein guter Fahrer verfügt über ein ausreichendes Verständnis der Mechanik, um sein Auto optimal nutzen zu können, aber dieses Wissen allein nützt nichts (es ist nicht einmal ein großer Kopf Anfang). Was Sie suchen, ist jemand, der bereit ist, hart an seiner eigenen Verbesserung und gut mit Ihrem Team zu arbeiten.

back2dos
quelle
1

Unabhängig von dem Begriff "Soforttyp", von dem ich keine Ahnung habe (Werttyp? OK, ich war mir nicht sicher, danke für die Aktualisierung), denke ich, dass Sie mit Ihren Fragen Recht haben und absolut nicht extremistisch sind. Dies sind beantwortbare Fragen, wenn man direkt aus der Schule kommt. Trotzdem werde ich die Kandidaten nicht sofort entlassen, es gibt noch einige, die Potenzial haben könnten, weil sie lernen wollen .

Um mit der Führerscheinanalogie fortzufahren: Einige Leute kümmern sich nicht darum, was passiert, wenn sie den Schlüssel einstecken (oder die "Start" -Taste drücken). Sie machen es einfach und fahren. Das bedeutet nicht, dass sie auch wertlos sind, nur dass es einige Zeit dauern wird, bis sie berühmt werden ;-)

Nur eine persönliche Bemerkung zum Abschluss / Diplom: Ich arbeite derzeit mit Leuten mit Biochemie und industriellem Hintergrund zusammen, die über einige Jahre Erfahrung im IT-Bereich verfügen, sowie mit einigen "erfahrenen" Leuten mit CS-Hintergrund und rate, wer am besten informiert ist wie der Fahrzeugmotor funktioniert? Ja, es sind nicht die Leute, die CS studiert haben! Ich erlebe nur die Tatsache, dass das Diplom nicht immer wichtig ist!

Jalayn
quelle
2
Einige Leute können so lange an ihrem Fahrzeug basteln, um es auf Höchstgeschwindigkeit zu bringen, dass die langsamen fertig sind, bevor sie überhaupt anfangen.
fair genug :-)
Jalayn
Ich stimme voll und ganz zu, was Leute betrifft, die aus anderen Bereichen als CS kommen. Aber für jemanden, der tatsächlich einen CS-Abschluss besitzt, scheint es, gelinde gesagt, ein bisschen beunruhigend zu sein, nicht zu wissen, was ein Werttyp ist ...
Brann
@brann, sie kennen den Begriff möglicherweise nicht, sind sich jedoch bewusst, dass die physische Platzierung der von der Variablen gehaltenen Daten im Datensegment und nicht im Heap oder im Stapel platziert wird. Welche Sprache verwenden Sie, da dies wichtig zu sein scheint?
Ich benutze c #. Und ich stimme zu, dass es in diesem Zusammenhang wahrscheinlich nicht so wichtig ist, diese Art von Implementierungsdetails zu kennen (obwohl dies in bestimmten Situationen der Fall sein könnte). Die Sache ist, dass ich nicht versuche, einen AC # -Experten zu finden. Ich versuche, jemanden zu finden, der klug und motiviert genug ist, um wirklich gut in c # zu programmieren. Wenn man nicht lernen / verstehen wollte, was für ein Werttyp, neige ich (vielleicht zu Unrecht) zu der Annahme, dass er zumindest eine dieser beiden Eigenschaften vermisst
Brann
1

Ich stelle im Allgemeinen keine spezifischen Fragen zu Terminologie oder Definitionen während der Interviews. Wie andere Antworten festgestellt haben, haben Menschen unterschiedliche Begriffe für unterschiedliche Konzepte, und obwohl sie das Thema konzeptionell verstehen, können sie Ihnen dies möglicherweise nicht vermitteln.

Bei Junioren konzentriere ich mich intensiv auf ihre Praktika oder Schulprojekte. Ich stelle Fragen über Fragen über sie, lasse sie Antworten artikulieren und tauche dann tiefer in ihre tatsächliche Beteiligung am Projekt ein, was sie gelernt haben, was sie fühlten.

Wenn die Person im Projekt Mitnahme hatte, kann sie mir im Allgemeinen keine zufriedenstellenden Antworten geben, daher ist es normalerweise ziemlich einfach zu sagen. Achten Sie nur darauf, nervös und introvertiert nicht mit desinteressiert und unbeteiligt zu verwechseln.

Es ist ein wenig schwierig, den guten Kandidaten zu bestimmen, der schüchtern und introvertiert ist, aber die Kultur, in der ich arbeite, wäre für einen introvertierten und schüchternen Entwickler nicht gut. Wenn er also kein produktives, detailliertes Gespräch mit mir führen kann, dann tun sie es passen nicht gut.

maple_shaft
quelle
1
 or chose his university very unwisely.

Das ist sehr unfair. Wenn Sie Student sind, können Sie nur die Universität mit dem höchsten Rang auswählen, an die Sie mit Ihren Noten gelangen, oder vielleicht die Universität, an der Sie mit fußballspielenden Roboterhunden spielen können. Nichts mehr. Sie können einen Universitätskurs erst bewerten, nachdem Sie ihn abgeschlossen haben. Dann haben Sie einige Jahre in der Industrie gearbeitet und einige nicht triviale Projekte erstellt.

Selbst wenn Sie auf jedem solchen Kurs eine riesige Leuchtreklame mit der Aufschrift "WIR UNTERRICHTEN DEN ANRUFSTAPEL" aufleuchten lassen, was erwarten Sie dann von den Schülern, um dies zu tun? Verbringen Sie Monate damit, es zu erforschen, damit sie tatsächlich verstehen können, was das bedeutet und wie viel sie eines brauchen würden, das es lehrt? Für jeden Kurs mit jeder Zeichenkombination?

Die Menschen können ihre Ausbildung nicht realistisch wählen.

DeadMG
quelle
0

Wenn ich neue Absolventen interviewe, halte ich mich an die Themen, die in ihrem Lebenslauf aufgeführt sind. Wenn sie Java verwendet haben, werde ich sie nach Java fragen. Wenn sie Blub benutzt haben, verbringe ich eine halbe Stunde damit, über Blub zu lesen und frage sie danach. Aber ich frage immer mit den Sprachschlüsselwörtern. Wenn es Java ist, werde ich nach "Erweitert" und "Implementieren" fragen, aber nicht nach "Unterklasse" und "Erben". Ich erwarte von neuen Absolventen, dass sie über den von ihnen geschriebenen Code sprechen, ein einfaches Programmierproblem lösen und die grundlegenden Datenstrukturen (Hash-Tabellen und -Bäume) verstehen können.

Kevin Cline
quelle
0

Als Direktor, der den Interviewprozess entworfen hat, kann ich Ihnen mitteilen, was unser Unternehmen von neuen Absolventen erwartet: Ich erwarte Menschen, die Dokumentation lesen und Wissen anwenden können. Daher haben wir einige sehr praktische Aufgaben, die wir von ihnen verlangen. Dies sind einfache Codierungsaufgaben, die nicht viel schwieriger sind als eine durchschnittliche Übung in der College-Klasse (erfahrene "gute" Entwickler können sie in etwa 15 Minuten ausschalten). Der Kandidat erhält eine Workstation mit Internetzugang, einen Compiler (in unserem Fall Visual Studio) und Hilfedateien.

Wenn sie unter diesen Bedingungen keinen Code schreiben können, erhalten sie keine Gegenleistung für die Einstellung. So einfach ist das. Die ganze Ausrede "Nun, ich kenne die Sprache nicht" hat mich nie wirklich beeindruckt, denn jeder Kandidat, der hier zum Vorstellungsgespräch kommt, weiß, dass es einen Test geben wird. Er kennt die Sprachen und Werkzeuge, die wir im Vorfeld verwenden. Sie können Visual Studio Express zu Hause herunterladen und einige Grundlagen lernen, bevor Sie den Einstiegstest bestehen, diejenigen, die sich nicht darum kümmern ... das nenne ich eine rote Fahne.

Eric
quelle
Dies ist der beste Weg, um jemanden zu finden, der behauptet, etwas zu wissen, weiß es tatsächlich gut genug, um es zu benutzen. Zu fragen, was ein Begriff bedeutet, etwas, das außerhalb eines Klassenzimmers kaum verwendet wird, ist irgendwie sinnlos. Ich meine, in den letzten 18 Monaten hatte ich kein einziges Mal eine Diskussion über Referenztypen, die sich möglicherweise über etwas beschwert haben, das Zeiger beinhaltete.
Ramhound