Come valuteresti le capacità progettuali orientate agli oggetti? [chiuso]


11

che tipo di approfondimenti o domande ti porterebbe a determinare le abilità OOAD di una persona.


Chiedi loro se punteggiano il loro io.
Lavoro

Risposte:


10

Potresti mostrare un disegno OO a metà di un semplice problema e discutere cosa fa, cosa c'è di buono e di male, se è abbastanza flessibile, cosa può essere migliorato e come.

Se hai bisogno di avviare la discussione, chiedi cosa pensa la persona di alcuni aspetti del codice, ma non con una domanda principale.

Importante è ricordare che la discussione è importante, non che tu conoscessi le risposte in anticipo. Qualsiasi sviluppatore decente dovrebbe essere in grado di indicare qualcosa sul codice a cui non avevi nemmeno pensato prima.


mi piace questo metodo di intervista in cui si tratta di una discussione piuttosto che di una domanda e risposta.
Rohan Monga,

5

Discutere con la persona di un problema di progettazione aperto. Scopri come procede alla costruzione di un modello del sistema, che tipo di domande vengono poste, come cambia la progettazione in risposta a nuove informazioni.

Un grande esempio - citato da Steve Yegge in uno dei suoi post sul blog - è quello di chiedere alla persona di elaborare un modello a oggetti per XML.


Potresti darmi il link :)
Rohan Monga,

1
@bronzebeard - Here you go - sites.google.com/site/steveyegge2/… . In realtà parla di OO modellando HTML - ma penso che XML possa essere una versione più difficile di quella domanda :)
talonx

4

Avere una buona conoscenza di tutti i modelli di progettazione più popolari può dimostrare che il candidato ha effettivamente cercato soluzioni ai suoi problemi di progettazione.

Essere in grado di discuterne e sapere quando applicarle o meno è una buona indicazione che le comprende.

Chiedergli ad esempio l'uso delle sue esperienze passate può essere d'aiuto.


Questo è un test per sapere come funziona il sovraccarico in C #, ma difficilmente un test per le capacità di progettazione di OOAD.
user281377

Hai perfettamente ragione. Ho letto la tua domanda troppo in fretta, la cambio.

4
Tuttavia, puoi avere una conoscenza dei modelli di progettazione e non aver mai sentito parlare del concetto. Avevo usato cose come catena di responsabilità, osservatori e controllori molto prima di sapere che avevano nomi. Fai attenzione a non presumere che, poiché qualcuno non conosce il nome di un modello, non può usarlo con competenza.
Michael K,

@Michael: sì, questo è certamente il motivo per cui è meglio prima chiedere come risolvere un determinato problema, quindi parlare del nome effettivo del modello. Conosco molte persone che usano il modello di strategia ogni giorno e che non sanno che si chiama così. L'hanno semplicemente "creato" semplicemente pensando, come ha fatto il gruppo di quattro originale. La differenza è che quest'ultimo ha scritto un libro sull'argomento.

Nota, Gang of Four ha ottenuto gli schemi nel vedere il codice OO usato in altri progetti. Non si prendono in alcun modo credito per nessuno dei disegni, ma solo per riconoscerli e descriverli in modo coerente.
Macneil,

3

Non fare un quiz sul vocabolario. "Define Inheritance" o "name 3 features of OO design" sono domande che non ti diranno nulla sulle capacità dell'individuo, solo per quanto tempo dall'ultima volta che ha letto un libro di testo. Ho incontrato diversi programmatori fantastici che usano queste abilità ogni giorno, ma si strozzerebbero se gli venisse chiesto di dare la definizione formale.


2

Gli chiederà di annotare gli oggetti business, le classi e le interfacce / i metodi per una stanza o qualsiasi altra entità virtuale


2

Se possibile, chiedere il codice di esempio.

Altrimenti, trova un codice procedurale da utilizzare come esempio (o un codice OO mal progettato), quindi chiedi loro come lo ridisegnerebbero, generalizzerebbero e migliorerebbero. Assicurati che il programma abbia un contesto aggiuntivo, in modo che la riprogettazione possa essere significativa.

In definitiva ciò che stai testando, il design, è soggettivo. Pertanto, la tua valutazione dovrebbe essere aperta per consentire diverse possibili buone soluzioni, e non solo una singola. Quindi, pensa a possibili modifiche ai requisiti che potrebbero forzare una modifica dell'interfaccia: come la gestiscono?


1

Leggi il libro Head First Design Patterns. Tutti gli esempi nel libro iniziano con un problema orientato agli oggetti e finiscono con il modello di progettazione. Dicono anche perché alcuni concetti di OOP raggiungeranno risultati limitati e perché alcuni sono migliori di altri.

Anche se un libro Design Pattern questo libro è pieno dei problemi di OOP :-)


Non mi occupo di questo, perché tutti gli esempi nel libro sono specificamente rivolti a un Design Pattern o all'altro. Se hai abbastanza conoscenze teoriche saresti in grado di capirlo e ciò non riflette un'applicazione pragmatica
Rohan Monga,

1

Inizia con semplicità: cos'è OOP?

Si potrebbe iniziare chiedendo le premesse di base di OOP: astrazione, polimorfismo, eredità e incapsulamento. Buon cibo per pensare di scaldarli.

Dai loro un problema

Quindi, presentali con un problema che potrebbe comportare modelli. Non è necessario nominare o utilizzare i modelli, ma il loro approccio probabilmente produrrà alcuni se hanno esperienza nell'area.

Convalida forse di input dinamico del testo. Vorresti essere in grado di convalidare il carattere di input per carattere per vedere se è una data, ora o data e ora valide nel formato ISO8601. Si ottiene una copia della stringa di input ogni volta che si preme un tasto e si può restituire un valore booleano per indicare se il testo rimane valido in almeno uno dei formati. Chiedi loro di parlare e delineare un progetto utilizzando i principi di progettazione OO.

Quando hai finito di chattare

  1. Controller (quella cosa che attiva gli eventi di modifica e valuta le risposte),
  2. Observer (i validatori rispondono agli eventi di modifica),
  3. Strategia (ogni validatore rappresenta un modo diverso di determinare se l'input è valido),

allora avrai una buona idea se capiscono OOD.

Dai loro di nuovo lo stesso problema, ma questa volta chiedi un design diverso

Ora, chiedi loro di riprogettare il sistema senza usare un modello di osservatore (se lo hanno menzionato): possono scegliere di adottare un approccio a catena di responsabilità o forse un modello di comando. Non ti interessa davvero quale, sai che hanno una ragionevole comprensione dei principi coinvolti.

Anche se non scelgono un approccio basato su schemi, solo ascoltare il modo in cui tentano di scomporre il problema nella sua funzionalità correlata produrrà i risultati che stai cercando .


1

Tendo a scegliere uno scenario del mondo reale, qualcosa di ben noto a chiunque † e chiedere loro di identificare le entità; gli attori coinvolti; quali interazioni ci sono tra loro; dove si potrebbero sottrarre caratteristiche comuni; quali proprietà devono essere considerate.

Sì, potresti chiedere loro di sedersi e disegnare UML, sì, potresti chiedere loro di cercare domande su alcune specifiche dell'implementazione di OOP per vedere se riescono a "correre in terra".

Ma ciò di cui un datore di lavoro ha davvero bisogno all'interno del proprio team è una mente che comprenda i concetti coinvolti e possa applicarli a qualunque cosa si presenti. I dettagli possono essere appresi rapidamente, quando i concetti sono incorporati.


† Profonda familiarità e assenza di una connessione con l'aiuto del codice: l'uso da parte della famiglia di un bagno al mattino; cucinando la cena; una linea di autobus per lavorare; l'assemblaggio di un'auto.


0

Qualcosa che sembra funzionare piuttosto bene e in realtà richiede solo pochi secondi: chiedi loro di progettare un modello a oggetti. Non importa per cosa. Può essere assolutamente banale. In effetti, probabilmente dovrebbe essere banale non trascinare inutilmente il test.

Se la prima cosa che scrivono è un oggetto, sono già in vantaggio del 99% dei loro pari nella comprensione di OO. Se la prima cosa che scrivono è una lezione, chiedi loro di uscire e mandare il prossimo candidato e riflettere sul perché si chiama OOP e non COP.


Mentre capisco cosa intendi, penso che potrei essere un po 'attento a prenderlo alla lettera. Quando sono soluzioni di design a "pensiero libero", tendo a usare le notazioni di classe UML anche se non è ciò che intendo veramente per i miei diagrammi.
Ken Henderson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.