Ich bereite Fragen für Vorstellungsgespräche für eine leitende Entwicklungsposition vor. Der Job würde objektorientiertes Design beinhalten, und die vorhandene Software verwendet Designmuster. Daher möchte ich die Kandidaten bitten, ein paar Designmuster zu erklären, die sie kennen, die sie verwendet haben, wie sie sie verwendet haben und warum sie sie verwendet haben benutzte sie und so weiter. In früheren Interviews, in denen ich leitende Entwickler mit mindestens 5 bis 10 Jahren Erfahrung zu Entwurfsmustern befragt habe, hat jedoch fast niemand von ihnen gehört. Ich denke, zwei von zwanzig Entwicklern könnten ein einziges Entwurfsmuster nennen (Singleton bzw. MVC).
Meine Frage lautet also: Ist es sinnvoll, diese Fragen zu stellen? Oder ist dies ein so dunkles Thema, dass Sie nicht erwarten können, dass Neueinstellungen diese bereits kennen?
Sollte ein leitender Entwickler Erfahrung mit Entwurfsmustern haben, oder würden Sie sagen, dass Entwurfsmuster ein so einfaches Thema sind, dass jeder anständige Entwickler sie während des Trainings aufgreifen kann? Wenn ja, welche Fragen würden Sie stattdessen stellen, um ihre Entwurfsfähigkeiten einzuschätzen?
Hinzufügen Nach dem Lesen der bisherigen Antworten sollte ich einige Erläuterungen geben:
- Der Job ist für einen .NET-Entwickler mit Erfahrung in OOP / OOD
- Der vorhandene Code verwendet Klassennamen wie
IParameterGraphVisitor
undIStorageFactory
an vielen Stellen - Wie befragt man Menschen nach ihren Erfahrungen mit OO-Designs, die sie erstellt haben, wenn sie nicht über das Vokabular verfügen, um ihre Designs zu erklären? Das ist, was ich tun möchte, und alles, was ich mir einfallen lassen kann, ist "Bitte zeichnen Sie die Design- / Objekthierarchie Ihres letzten Projekts auf das Whiteboard".
quelle
Antworten:
Die Chancen stehen gut sie tun sie kennen. Sie kennen sie möglicherweise nicht als "Entwurfsmuster". Das heißt, sie sind möglicherweise nicht mit der akademischen Terminologie für solche Dinge vertraut. Was Sie als "Zustandsmaschine" betrachten, ist für einen älteren, erfahreneren Programmierer möglicherweise nur eine vernünftige Herangehensweise an ein Problem. Ich habe zum Beispiel nie viel auf „Design Patterns“ geachtet, aber als ich lernte, was eine State Machine ist, musste ich lachen, weil ich das schon seit Jahren tue. Wer hätte gedacht, dass ich so ein Akademiker bin? Ich habe es immer nur als grundlegende Codierfertigkeit betrachtet und nicht als 'Designmuster'.
Es geht nicht darum, dass Ihre erfahrenen Entwickler die Fachbegriffe für Dinge kennen. Fragen Sie sie stattdessen, wie sie Klassen strukturieren oder wie sie sich einer Aufgabe nähern würden.
quelle
Ihre Erwartung ist für einen erfahrenen OO-Entwickler durchaus vernünftig. Jeder, der sich selbst so nennt, ohne Design Patterns zu kennen, zeigt nur, dass Erfahrung nicht automatisch in den vergangenen Jahren einfließt :-( Sicher, es gibt viele Entwickler, die Jahre oder sogar Jahrzehnte auf dem Gebiet verbracht haben, ohne jemals etwas über Design gehört zu haben Muster - das zeigt nur, dass sie nicht daran interessiert waren, neue Ideen zu lernen, sich selbst zu verbessern und bewährte Verfahren anzuwenden.
IMO Erfahrung zählt viel. Theoretisch kann ein anständiger Entwickler Design Patterns in einem Buch oder sogar auf Wikipedia nachlesen und das Grundkonzept in 15 Minuten verstehen. Die richtige Anwendung der Konzepte erfordert jedoch viel Erfahrung. Es ist leicht, sich in Patterns zu verlieben und sie in jeden möglichen Code zu packen, l'art pour l'art. Es ist auch einfach, sie zu entlassen und zu sagen: "Muster sind keine Wundermittel, verwenden Sie einfach das Einfachste, was möglicherweise funktionieren könnte." Es erfordert jahrelange Erfahrung, den Mittelweg zwischen den beiden Extremen zu finden, indem man lernt, wann und wie man Muster verwendet, um echte Probleme zu lösen, und wann man sie nicht verwendet .
In Übereinstimmung mit den obigen Ausführungen würde ich Ihrer Liste nur die folgenden Fragen hinzufügen:
Aktualisieren
@GrandmasterB hat den Vorteil, dass einige Entwickler möglicherweise bestimmte Entwurfsmuster verwenden, ohne ihren Namen zu kennen. In gewisser Weise hat er Recht damit, dass dies eine Terminologie- / Kommunikationsfrage ist. Die Kehrseite der Medaille ist jedoch, dass es sich in der Tat um eine Terminologie- / Kommunikationsfrage handelt :-) Das heißt, einer der Hauptvorteile von Design Patterns besteht darin, Entwicklern ein gemeinsames Vokabular zu vermitteln, wodurch die Kommunikation enorm verbessert wird . (Versuchen Sie, die Grundidee des Adapters zu erklären, ohne das Wort selbst oder die Synonyme "Wrapper" usw. zu verwenden!) So talentiert und sachkundig ein Kandidat auch sein mag, ohne die allgemein akzeptierten Begriffe zu kennen, wird er ein Kommunikationsproblem einführen in deinem Team.
quelle
Ein leitender Entwickler? Bestimmt. Ein Junior sollte. Ich bin 15 Jahre alt, habe keine formale Ausbildung zu diesem Thema und verstehe sie sogar. Es ist nicht nur vernünftig zu erwarten, dass sie sie kennen, es wäre inakzeptabel, wenn sie es nicht tun würden. Vorausgesetzt, sie wissen etwas über objektorientierte Programmierung, was sie höchstwahrscheinlich tun.
quelle
In einem Interview sollten Sie fragen, was für den Kandidaten wichtig ist, um die Arbeit zu erledigen.
Wenn sie die Namen der Muster von Gang of Four kennen müssen, ist dies eine gültige Voraussetzung.
Wenn Sie andererseits möchten, dass sie angemessene Kenntnisse der Programmarchitektur aufweisen, sollten Sie ein Problem angeben und sie fragen, wie der Code strukturiert werden soll. Wenn sie Ihnen die passende Musterlösung geben, haben Sie den Beweis, dass sie es wissen, unabhängig vom verwendeten Namen.
Wenn ich für leitende Positionen interviewe, sind sie in der Regel "praktischer" als Fragen und Antworten. Ich möchte eine klare Demonstration des Könnens und des Komforts beim Programmieren. Ich möchte auch eine solide Grundlage für CS-Konzepte, dh allgemeinere Kenntnisse in der Anwendung von Konzepten wie Kapselung, Algorithmen, Kopplung / Kohäsion usw. Erfahrung und Vertrautheit in mehreren Sprachen und Paradigmen.
quelle
Hängt vom Fachgebiet ab. Ich würde nicht erwarten, dass ein Embedded C-Entwickler viel über Entwurfsmuster weiß. Wenn es sich um einen Java- oder .NET-Entwickler handelt, sollten sie mit Entwurfsmustern vertraut sein und insbesondere wissen, wie sie nicht allzu mitgerissen werden können.
quelle
Angenommen, Sie streben in OOP nach einem höheren Dienstalter, lautet die Antwort auf jeden Fall Ja. Entwurfsmuster sind ein Lexikon der OOP-Sprache.
Darüber hinaus ist es heutzutage unvernünftig, dass ein anständiger OOP-Programmierer mit zehnjähriger Erfahrung kein Entwurfsmuster benennen kann, da dies in Standard-APIs, -Bibliotheken und -Entwicklungsframeworks weit verbreitet ist.
Es ist Jahre her, dass ich diese Frage in Interviews gestellt habe und es ist ein Showstopper, wenn der Kandidat keine befriedigenden Antworten zu dem Thema liefert.
quelle
Ja, aber Sie sollten wahrscheinlich ihr Verständnis herausfordern, indem Sie nach dem Design fragen stellen, anstatt die Leute zu bitten, die Designmuster aufzulisten, von denen sie gehört haben. Ich mag Muster, die in PoEAA, GoF und sogar in einigen funktionalen Programmiermustern beschrieben sind, und ich glaube immer noch nicht, dass Sie mehr über meinen Lösungsansatz erfahren würden, wenn Sie mich bitten, einige Muster zu nennen.
Wenn Sie eine Frage wie "Gestalten Sie mir einen Texteditor" mit Folgemaßnahmen wie "Wie werden Sie eingebettete Objekte wie Bilder unterstützen? Fett und kursiv? Rückgängig machen?" Sie würden wahrscheinlich irgendwann genug hören, um das Befehlsmuster, das zusammengesetzte Muster, das Erinnerungsmuster und einige andere zu erkennen, auch wenn Sie sich nur kurz unterhalten.
Entwurfsmuster wurden entdeckt und dann beschrieben, damit wir eine gemeinsame Sprache haben, mit der wir Entwurfsentscheidungen kommunizieren können.
Ich habe leider für jemanden gearbeitet, für den jede Verwendung eines Entwurfsmusters erklärt und begründet werden musste, nicht wegen der Sorgfalt, sondern weil er sie einfach nicht kannte. Das ist nicht lustig. Aber die meisten ernsthaften Entwickler haben aus Versehen oder aus Versehen die Namen der am häufigsten verwendeten OO-Muster gelernt, und die meisten Entwickler von Unternehmensanwendungen wissen zumindest etwas über die am häufigsten verwendeten PoEAA-Muster.
quelle
Angemessen. Auf jeden Fall. Notwendig. Nein
Ich frage potenzielle Kandidaten, ob sie Designmuster kennen. Es ist nur eines von mehreren Kriterien, die als Ganzes abgewogen werden müssen. Übersehen Sie nicht das Gesamtbild.
Ja, ohne Zweifel verwenden viele Entwickler unwissentlich einige Entwurfsmuster.
Deshalb stelle ich die Frage nicht.
Es ist wichtig zu wissen, dass ich schnell und effektiv mit einem anderen Entwickler kommunizieren kann. Ich möchte nicht 20 Minuten auf einem Whiteboard verbringen, um einen Zustandsautomaten zu erklären, nur um festzustellen, dass er "vorher verwendet wurde, aber nie wusste, wie man ihn nennt". Das ist nicht produktiv.
Sie helfen auch beim Refactoring-Prozess. Wenn man durch den Code blickt, kann man zufällig eine Form eines Factory-Musters implementieren, aber das GoF-Factory-Muster hat den Test der Zeit überstanden. Das ist der Grund, warum es das Werksmuster ist und nicht NOCH EINMAL (das Rad neu zu erfinden ist nicht zu bevorzugen, Joel bei der Software hat viele Nachteile).
Ein Team, das die Bedeutung von Entwurfsmustern nutzt und erkennt, erhöht die Kommunikation und Produktivität. Wenn Ihr Team als Einheit keine DPs einsetzt, verlieren diese ihre Relevanz.
quelle
Aus eigener Erfahrung habe ich Designmuster eine ganze Weile ignoriert. Ich wusste, dass es sie gibt, ich habe nur nie darüber gelesen. Als ich mich endlich an die Kugel biss, stellte ich fest, dass ich die ganze Zeit über Designmuster verwendet hatte und ich wusste einfach nicht, dass meine Designlösungen tatsächlich einen gemeinsamen Namen hatten.
Ich wäre eher geneigt, eine Reihe von Problemen zu finden, bei denen ein bestimmtes Entwurfsmuster gut zur Lösung passt, und zu sehen, dass der Entwickler etwas Ähnliches wie das Muster findet. Wenn doch, großartig. Vielleicht bin ich sogar eher geneigt, einen Entwickler einzustellen, der unwissentlich Entwurfsmuster verwendet, da ich sehe, dass viele Entwickler mit Entwurfsmusterkenntnissen versuchen, eine Lösung für ein Muster zu finden, wenn es nicht angemessen ist, anstatt zu erkennen, dass ein bestimmtes Muster das Problem löst Problem gut.
quelle
Ich denke, eine bessere Frage wäre: Wenn der Kandidat einen Namen für ein Muster und eine Beschreibung des Musters hat, zum Beispiel ein Fabrikmuster aus dem Buch der Viererbande, sollte er in der Lage sein, ein Szenario zu entwickeln, in dem das Muster vorkommt ein vernünftiger Ansatz.
quelle
Es gibt Entwickler mit einer Erfahrung von 5 bis 10 Jahren und es gibt erfahrene Entwickler. Sie sind überhaupt nicht dasselbe. Ja, wenn Sie auf Senior-Ebene einstellen und von den Mitarbeitern erwarten, dass sie Designmuster kennen und anwenden, würde ich keine Senior-Person einstellen, die mit ihnen nicht vertraut ist. Das wäre so, als würde man einen Datenbankspezialisten einstellen, der die Linksverknüpfungen nicht versteht. Das ist ziemlich grundlegend für einen echten Senior-Entwickler. Ich würde aber wahrscheinlich einen Junior einstellen.
quelle
Ja, sie sollten mit dem Begriff vertraut sein und sogar einige der Muster benennen können - aber machen Sie nicht den Fehler, theoretisches Wissen mit Erfahrung zu verwechseln.
Es gibt viele Leute, die vor einem Interview Designmuster auffrischen und sie mit einer kurzen Beschreibung abrütteln können - aber das ist nur die Theorie. Es ist ein echter Senior-Entwickler, der erkennen kann, wann er eines verwenden soll, oder ohne Kenntnis eines formalen Musters das Problem auf klassische Art und Weise lösen würde.
Der beste Weg, dies zu überprüfen, ist, sie etwas vor sich entwerfen zu lassen und Fragen zu stellen. Ein leitender Entwickler ist jemand, der auf der Abstraktionsebene natürlich denken kann. Dies sind die Leute, die die Designmuster "kreieren".
Wie die Klasse Peopleware, in der es darum geht , einen Jongleur einzustellen, ohne ihn zum Jonglieren aufzufordern - nur weil er sagt, er könne nicht viel bedeuten, probieren Sie ihn aus.
quelle
Wie bereits erwähnt, halte ich es auch für in Ordnung, wenn sie sich nicht auswendig an Schlagworte erinnern. Da dies jedoch eine Führungsposition ist, sollten sie wissen, wann ein Muster zur optimalen Lösung eines Problems anzuwenden ist, anstatt schlechteste Lösungen zu verwenden. Geben Sie ihnen daher ein Problem, das mithilfe eines Musters gelöst werden sollte (z. B. wie Sie ein Objekt erstellen, ohne seine Klasse fest zu codieren, wie Sie auf die Elemente eines Objekts zugreifen, ohne Details zu seiner Implementierung zu haben, usw.) und sehen Sie, wie sie werden es angreifen.
quelle
Auf jeden Fall sollten sie die Muster kennen, aber nicht unbedingt die Schlagworte.
Zum Beispiel hat MVC viele sehr ähnliche Alternativen wie PAC, 3-Tier. Vor ein paar Jahren war "Model 2" ein weiteres beliebtes Schlagwort für MVC. Ich kenne sehr gute Entwickler, die dieses Muster perfekt kennen, aber das aktuelle Schlagwort dafür war MVC.
quelle
Ganz einfach: Wenn Sie sie verwenden, müssen Sie Ihre Kandidaten fragen. Wenn sie Muster kennen, sollten ein paar Pluspunkte hinzugefügt werden. Aber nicht zu wissen, sollte sie nicht unbedingt entkräften, besonders wenn sie gute OOD-Fähigkeiten zeigen. Entwickler, die an Instandhaltungsprojekten teilgenommen haben, wissen wahrscheinlich nicht viel über Entwurfsmuster im Vergleich zu denen, die sie entworfen haben. es hängt auch davon ab, ob ihnen im College Designmuster beigebracht wurden. Nach meiner Erfahrung ist es unwahrscheinlich, dass sie es tun werden. Die meisten Universitäten und Privatkurse unterrichten Sie OOP, aber nicht OOD. Die Chancen, dass sie DP studiert haben, sind noch geringer.
Persönlich hatte ich DP nicht studiert, bis mein Projekt mich auch verlangte. Schon damals stellte ich fest, dass ich einige der Muster verwendet hatte, zumindest in ähnlicher Weise, wenn auch nicht in der im Buch beschriebenen Weise. Ich war überrascht zu wissen, dass sie kodifiziert waren. Suchen Sie nach guten Designfähigkeiten, wenn Sie DP nicht kennen. Wenn sie DP kennen, ist es wahrscheinlich, dass sie gut im Design sind und sie dennoch testen. Sie haben vielleicht nur ein paar Schlagworte über DP gelesen oder von einem Insider erfahren und ein paar Muster studiert, ohne sie angewendet zu haben.
quelle
Sie können davon ausgehen, dass Personen, die sich bei Ihnen bewerben, wissen (oder lernen), was in Ihrem Job-Slot benötigt wird, unabhängig davon, ob es sich um Branchenstandards handelt oder nicht. Ansonsten verurteilen Sie sich zur Mittelmäßigkeit. Achten Sie jedoch darauf, dass Sie Kenntnisse (oder Fertigkeiten) zu einer Arbeitsanforderung machen, wenn dies nicht wirklich erforderlich ist.
Nehmen wir an, Sie haben zwei Kandidaten mit ungefähr ähnlichen Hintergründen, und einer kann Ihnen von Designmustern erzählen, der andere nicht. Was sagt Ihnen das darüber, wie sie bei der Arbeit abschneiden werden?
Sie sagen, die vorhandene Software verwendet Entwurfsmuster. Ist das ein vorteil Wenn das so ist, wie? Ist es Ihr Ziel, dass neue Software in Übereinstimmung mit vorhandenen Mustern geschrieben wird oder dass neue Muster eingeführt werden? Warum?
quelle
Ich kann mir einen leitenden Entwickler vorstellen, der in der folgenden Situation keine Kenntnisse über Entwurfsmuster hat:
quelle
Warum sollte jeder Entwickler in einer Nicht-OO-Umgebung über OO-Entwurfsmuster Bescheid wissen? Ich habe in Geschäften nur mit Cobol, nur mit PL / SQL, nur mit Progress 4GL usw. gearbeitet. OO-Designprinzipien sind dort irrelevant. Ich würde erwarten, dass die Senioren in diesen Umgebungen relevante Kenntnisse in diesen Umgebungen haben, nicht in OO-Design Muster.
Aus einem Musterkatalog sinnlos zitieren zu können, macht Sie auch nicht zu einem guten Entwickler (meiner Erfahrung nach produziert es tatsächlich einige der schlimmsten Codestücke, die ich je gesehen habe). Aber das ist es, was Sie erwarten, um das Zeichen eines "Senior-Entwicklers" zu sein. Ich arbeite seit 15 Jahren in der Industrie, bitte mich jedoch nicht, ein Musterdiagramm zu zeichnen. Ich habe es nie viel Zeit gegeben, ich brauche nicht. Ich habe genug Erfahrung gesammelt, um herauszufinden, was funktioniert, ohne einen bestimmten Namen zu vergeben, und wenn ich die formale Definition benötige, weiß ich, wo ich sie nachschlagen kann (und ja, ich habe die Nachschlagewerke in meiner persönlichen Bibliothek). Das ist das Markenzeichen des erfahrenen Entwicklers, nicht das Wissen, das er durch das Überfüllen einiger Schulbücher gewonnen hat.
quelle