Sembra che ci sia un'enorme discrepanza tra ciò che mi aspetto qualcuno che ha studiato programmazione per alcuni anni all'università, e ciò che si sa realmente.
Non mi sento come se stessi facendo domande troppo complicate nelle interviste. Alcune delle mie solite domande sono:
Qual è la differenza tra un tipo di riferimento e un tipo di valore?
Se sembra che l'intervistato non capisca davvero la propria risposta, o se non conosce la terminologia che sto usando, ottengo maggiori dettagli chiedendogli di spiegarmi cosa succede quando scrivo int i = 0; in un metodo, che dire dell'oggetto o = 0, dell'oggetto o = new MyClass (), ecc ...
Fondamentalmente, faccio tutto il possibile per indurre l'intervistato a parlarmi del callstack, dell'heap ecc. E cerco di rimanere nei concetti di linguaggio agnostico. Se l'intervistato mi dice che ha fatto molto C, o C ++, o c #, mi tuffo più a fondo nel linguaggio specifico, e possibilmente nei dettagli di implementazione.
Se necessario, chiedo all'intervistato che cos'è un callstack o dove vengono archiviati gli argomenti passati a una funzione nella lingua imperativa di sua scelta.
la maggior parte degli intervistati non ha idea di cosa sia un callstack, per non parlare delle considerazioni sulla boxe, ecc.
Qual è la differenza tra una classe astratta e un'interfaccia. In quali casi dovresti usare l'uno sull'altro?
Di solito, chiedo anche loro di immaginare un progetto di una piccola biblioteca con un caso d'uso che mira a utilizzare alcune eredità e alcune fabbriche astratte
La maggior parte degli intervistati non ha idea di quale possa essere il vero scopo dell'ereditarietà. Di solito conoscono alcune parole chiave (virtuale, override, ecc.), Ma non sanno davvero quando usarle, figuriamoci spiegando cos'è una tabella virtuale.
Anche se previo screening dei CV, anche per persone con 5 anni di esperienza in progetti di vita reale che coinvolgono architetture complesse, direi che meno del 25% di tutti i miei intervistati può rispondere correttamente a queste due domande. E quando dico correttamente, non intendo "approfondito" ... solo per avere un'idea approssimativa di quale sia il concetto.
Per quanto riguarda i ragazzi, sto bene con l'assunzione di qualcuno che non sa organizzare molto bene il suo tempo, o qualcuno che non è abituato ai processi di costruzione industriale, ad esempio, ma ho la sensazione che se non si ha sentito la parola " callstack "dopo alcuni anni di studi in Informatica, è o stupido o non motivato, o ha scelto la sua università molto saggiamente.
Pensi che io sia troppo estremista qui? È comune imparare questi concetti di base dopo aver completato l'università? Conosci persone che non li conoscevano e sono diventate dei bravi ingegneri del software dopo pochi anni? E pensi che la mia azienda potrebbe avere un problema nell'attirare persone di talento o riscontri lo stesso tipo di problemi nel tuo processo di assunzione?
Modificare. per quanto riguarda il "tipo immediato", era solo una traduzione letterale dal francese all'inglese, come di solito facciamo le nostre interviste in francese. L'ho risolto nella mia domanda. Tuttavia, penso che tutti voi capiate perfettamente cosa volevo dire, che tipo di argomento ha ragione, no?