Wie würden Sie objektorientierte Designfähigkeiten bewerten? [geschlossen]

11

Welche Art von Einsichten oder Fragen würde Sie dazu bringen, die OOAD-Fähigkeiten einer Person zu bestimmen?

Rohan Monga
quelle
Fragen Sie sie, ob sie ihre i's punktieren.
Job

Antworten:

10

Sie könnten ein halbherziges OO-Design eines einfachen Problems zeigen und diskutieren, was es tut, was gut und was schlecht daran ist, ob es flexibel genug ist, was verbessert werden könnte und wie.

Wenn Sie die Diskussion in Gang bringen möchten, fragen Sie, was die Person über einen Aspekt des Codes denkt, aber nicht mit einer Leitfrage.

Es ist wichtig, sich daran zu erinnern, dass die Diskussion wichtig ist und nicht, dass Sie die Antworten vorher gekannt haben. Jeder anständige Entwickler sollte in der Lage sein, auf etwas über den Code hinzuweisen, an das Sie vorher noch nicht einmal gedacht haben.

Guffa
quelle
Ich mag diese Methode des Interviews, bei der es sich eher um eine Diskussion als um eine Frage und Antwort handelt.
Rohan Monga
5

Besprechen Sie ein offenes Designproblem mit der Person. Sehen Sie, wie er / sie ein Modell des Systems erstellt, welche Art von Fragen gestellt werden und wie sich das Design als Reaktion auf neue Informationen ändert.

Ein gutes Beispiel - von Steve Yegge in einem seiner Blog-Beiträge erwähnt - ist die Aufforderung an die Person, ein Objektmodell für XML zu erstellen.

Talonx
quelle
Könnten Sie mir den Link geben :)
Rohan Monga
1
@bronzebeard - Los geht's - sites.google.com/site/steveyegge2/… . Er spricht tatsächlich über OO-Modellierung von HTML - aber ich denke, XML kann eine härtere Version dieser Frage sein :)
Talonx
4

Eine gute Kenntnis aller gängigen Entwurfsmuster kann beweisen, dass der Kandidat tatsächlich nach Lösungen für seine Entwurfsprobleme gesucht hat.

In der Lage zu sein, sie zu diskutieren und zu wissen, wann man sie anwendet oder nicht, ist ein guter Hinweis darauf, dass er sie versteht.

Es kann auch hilfreich sein, ihn zum Beispiel nach Verwendungen in seinen früheren Erfahrungen zu fragen.


quelle
Dies ist ein Test, um zu wissen, wie Überladung in C # funktioniert, aber kaum ein Test für OOAD-Designfähigkeiten.
user281377
Sie haben vollkommen recht. Ich habe deine Frage zu schnell gelesen, ich ändere sie.
4
Sie können jedoch Kenntnisse über Entwurfsmuster haben und haben noch nie von dem Konzept gehört. Ich hatte Dinge wie Verantwortungskette, Beobachter und Kontrolleure benutzt, lange bevor ich wusste, dass sie Namen hatten. Gehen Sie nicht davon aus, dass jemand, der den Namen eines Musters nicht kennt, es nicht kompetent verwenden kann.
Michael K
@ Michael: Ja, deshalb ist es sicherlich besser, zuerst zu fragen, wie ein bestimmtes Problem gelöst werden kann, und dann über den tatsächlichen Namen des Musters zu sprechen. Ich kenne viele Leute, die jeden Tag das Strategiemuster verwenden und die nicht wissen, dass es so heißt. Sie "schufen" es einfach, indem sie nur dachten, wie es die ursprüngliche Vierergruppe tat. Der Unterschied besteht darin, dass dieser ein Buch zu diesem Thema geschrieben hat.
Beachten Sie, dass die Viererbande die Muster von OO-Code erhalten hat, der in anderen Projekten verwendet wurde. Sie würdigen keines der Entwürfe, sondern erkennen sie nur und beschreiben sie auf einheitliche Weise.
Macneil
3

Gib kein Vokabeltest. "Vererbung definieren" oder "3 Merkmale des OO-Designs benennen" sind Fragen, die nichts über die Fähigkeiten des Einzelnen aussagen, sondern nur darüber, wie lange er / sie zuletzt ein Lehrbuch gelesen hat. Ich habe mehrere großartige Programmierer getroffen, die diese Fähigkeiten jeden Tag nutzen, aber ersticken würden, wenn sie gebeten würden, die formale Definition zu geben.

AShelly
quelle
2

Bittet ihn, die Geschäftsobjekte, Klassen und Schnittstellen / Methoden für einen Raum oder eine andere virtuelle Entität aufzuschreiben

Gopi
quelle
2

Wenn möglich, fragen Sie nach einem Beispielcode.

Suchen Sie andernfalls einen prozeduralen Code als Beispiel (oder einen schlecht gestalteten OO-Code) und fragen Sie sie, wie sie ihn neu entwerfen, verallgemeinern und verbessern würden. Stellen Sie sicher, dass das Programm über einen zusätzlichen Kontext verfügt, damit das Redesign sinnvoll sein kann.

Letztendlich ist das, was Sie testen - Design - subjektiv. Daher sollte Ihre Bewertung offen sein, um mehrere mögliche gute Lösungen zu ermöglichen, und nicht nur eine einzige. Denken Sie dann über mögliche Änderungen an Anforderungen nach, die eine Änderung der Schnittstelle erzwingen würden: Wie gehen sie damit um?

Macneil
quelle
1

Lesen Sie das Buch Head First Design Patterns. Alle Beispiele im Buch beginnen mit einem objektorientierten Problem und enden dann im Entwurfsmuster. Sie erklären auch, warum bestimmte OOP-Konzepte begrenzte Ergebnisse erzielen und warum bestimmte besser sind als andere.

Obwohl es sich um ein Design Pattern-Buch handelt, ist dieses Buch voller Probleme von OOP :-)

Geek
quelle
Ich weiß nicht, denn alle Beispiele im Buch beziehen sich speziell auf das eine oder andere Designmuster. Wenn Sie gerade genug theoretisches Wissen haben, können Sie es herausfinden und das spiegelt nicht die pragmatische Anwendung wider
Rohan Monga
1

Fangen Sie einfach an: Worum geht es bei OOP?

Sie könnten zunächst nach den Grundvoraussetzungen von OOP fragen: Abstraktion, Polymorphismus, Vererbung und Kapselung. Gutes Denkanstoß, um sie aufzuwärmen.

Gib ihnen ein Problem

Stellen Sie ihnen als Nächstes ein Problem vor, bei dem es wahrscheinlich um Muster geht. Es ist nicht notwendig, Muster zu benennen oder zu verwenden, aber ihr Ansatz wird wahrscheinlich einige ergeben, wenn sie Erfahrung in diesem Bereich haben.

Möglicherweise dynamische Validierung der Texteingabe. Sie möchten in der Lage sein, die Eingabe zeichenweise zu überprüfen, um festzustellen, ob es sich um ein gültiges Datum, eine gültige Uhrzeit oder ein gültiges Datum und eine gültige Uhrzeit im ISO8601-Format handelt. Sie erhalten jedes Mal eine Kopie der Eingabezeichenfolge, wenn eine Taste gedrückt wird, und Sie können einen Booleschen Wert zurückgeben, um anzugeben, ob der Text in mindestens einem der Formate gültig bleibt. Bitten Sie sie, ein Design anhand der OO-Designprinzipien zu besprechen und zu skizzieren.

Bis Sie fertig sind

  1. Controller (das Ding, das die Änderungsereignisse auslöst und die Antworten auswertet),
  2. Beobachter (die Validatoren reagieren auf die Änderungsereignisse),
  3. Strategie (jeder Validator stellt eine andere Methode dar, um festzustellen, ob die Eingabe gültig ist),

dann hast du eine ziemlich gute Idee, wenn sie OOD verstehen.

Geben Sie ihnen wieder das gleiche Problem, aber fragen Sie diesmal nach einem anderen Design

Bitten Sie sie nun, das System ohne Verwendung eines Observer-Musters (falls erwähnt) neu zu gestalten. Sie können sich für einen Chain-of-Responsibility-Ansatz oder ein Befehlsmuster entscheiden. Es ist dir egal, welche, du weißt, dass sie ein vernünftiges Verständnis für die Prinzipien haben.

Selbst wenn sie sich nicht für einen musterbasierten Ansatz entscheiden, führt das Hören der Art und Weise, wie sie versuchen, das Problem in die zugehörige Funktionalität zu zerlegen, zu den gewünschten Ergebnissen.

Gary Rowe
quelle
1

Ich neige dazu, ein reales Szenario auszuwählen, das jedem bekannt ist †, und sie zu bitten, die Entitäten zu identifizieren. die beteiligten Akteure; Welche Wechselwirkungen gibt es zwischen ihnen? wo gemeinsame Merkmale abstrahiert werden könnten; Welche Eigenschaften müssen berücksichtigt werden?

Ja, Sie könnten sie bitten, sich zu setzen und UML zu zeichnen. Ja, Sie könnten ihnen Fragen zu einigen OOP-Implementierungsspezifikationen stellen, um zu sehen, ob sie "den ersten Schritt machen" können.

Was ein Arbeitgeber in seinem Team wirklich braucht, ist ein Geist, der die Konzepte versteht und sie auf alles anwenden kann, was auftaucht. Besonderheiten können schnell erlernt werden, wenn Konzepte eingebettet sind.


† Tiefe Vertrautheit und das Fehlen einer Verbindung mit Code helfen: Die Benutzung eines Badezimmers durch eine Familie am Morgen; Abendessen kochen; eine Buslinie zur Arbeit; die Montage eines Autos.

Orbling
quelle
0

Etwas, das ziemlich gut zu funktionieren scheint und eigentlich nur ein paar Sekunden dauert: Bitten Sie sie, ein Objektmodell zu entwerfen. Es ist egal für was. Es kann absolut trivial sein. In der Tat sollte es wahrscheinlich trivial sein, den Test nicht unnötig herauszuziehen.

Wenn das erste, was sie schreiben, ein Objekt ist, sind sie in ihrem Verständnis von OO bereits 99% ihrer Kollegen voraus. Wenn das erste, was sie schreiben, eine Klasse ist, bitten Sie sie, den nächsten Kandidaten einzusenden und darüber nachzudenken, warum er OOP und nicht COP heißt.

Jörg W Mittag
quelle
Während ich verstehe, was du meinst, denke ich, dass ich ein bisschen vorsichtig sein könnte, wenn ich das wörtlich nehme. Wenn ich frei denkende Designlösungen bin, verwende ich normalerweise UML-Klassennotationen, auch wenn das nicht das ist, was ich mit meinem Diagramm wirklich meine.
Ken Henderson