it-swarm.it

Come dovrebbe essere il mio "esempio di codice"?

Ho appena avuto una buona intervista telefonica (per una posizione relativa a CakePHP, non che sia particolarmente importante per la domanda). L'intervistatore sembrava essere colpito dal mio curriculum e dalla mia personalità. Alla fine, però, mi ha chiesto di inviargli via email un esempio di codice dal mio progetto di lavoro esistente, "per verificare che non sei segretamente un programmatore terribile, ah ah!"

Non sono troppo preoccupato che il mio codice non possa reggere da solo, ma sono un programmatore intermedio piuttosto che un esperto . In quali ovvie insidie ​​dovrei assicurarmi che il mio codice di esempio non rientri, nel caso in cui mi escludano sul posto? In secondo luogo, e questa è probabilmente la parte più difficile della domanda a cui rispondere, quali caratteristiche in un esempio di codice sarebbero così impressionanti da renderti immediatamente molto più propenso verso il programmatore?

Tutte le idee o i suggerimenti sono i benvenuti!

24
thesunneversets

Mi piacerebbe vedere codice pulito :

Codice pulito : codice software formattato correttamente e organizzato in modo che un altro programmatore possa leggerlo o modificarlo facilmente.

Questo significa:

  • Funzionalità - Alcune semplici parti di funzionalità non banali (un gruppo di getter/setter non mostrerebbe che sai qualcosa)
  • Stile coerente e pulito - Popolare o almeno comune stili di involucro, rientro, spaziatura e parentesi
  • Buona denominazione - Nomi di qualità - non utilizzare i a meno che non sia l'unico valore di incremento. Non usare nomi di variabili senza senso.
  • Altri attributi di Codice pulito - Buone pratiche su controllo degli errori, condizioni, loop, metodi di convenienza o metodi di utilità e buone separazione di -concerns (tra metodi). E questo è un buon momento per essere al 100% DRY - nessuna ripetizione!

Vuoi inviare loro qualcosa di abbastanza complesso da essere interessante ma abbastanza pulito da consentire a un buon sviluppatore di essere quasi immediatamente capire cosa sta facendo.

Alcuni dei commenti sopra sembrano preoccuparsi della facilità con cui questo potrebbe essere simulato. * Se vuoi proteggerti da ciò, allora eventualmente invia una breve descrizione dello scopo e della cronologia del codice nell'email.


* Per lo meno se l'intervistatore ha chiesto in anticipo i progetti passati, allora ti ha chiesto un campione da questo progetto e ti ha chiesto cosa ti richiedeva di scriverlo o come si è evoluto, penso che il il processo sarebbe abbastanza a prova di bugiardo. Penso che la maggior parte dei candidati che lo farebbero mentiranno mostreranno problemi in altre aree, comunque.

17
Nicole

Quando cercavo lavoro, ho risolto un sacco di domande sul concorso di programmazione ACM, in diverse lingue, e da allora ho usato quelle per esempi di codice. Penso che abbiano fatto buoni esempi di codice perché:

  • Hanno risolto problemi impegnativi
  • Il problema non richiedeva un'enorme quantità di contesto, inoltre è facile ottenere le domande
  • Il codice scritto non ha alcun rischio IP associato ad esso.
  • Ogni problema può ragionevolmente esistere in un singolo file e spesso non estremamente lungo, quindi dovrebbe essere facile per chiunque compilare e testare la tua soluzione, e può usare i dati di test delle domande.
  • Mostra che puoi scomporre un problema complesso in pezzi più piccoli.
  • Se ti viene chiesto come funzionano tutti gli aspetti della tua soluzione, ti dà una grande opportunità per dimostrare di sapere di cosa stai parlando, soprattutto se ha molti anni ma puoi decifrare rapidamente cosa sta succedendo.

E quindi, il codice che crei dovrebbe essere chiaro, coerente, facile da leggere e facile da capire.

E infine:

  • Vale la pena risolverli solo per divertimento ed è una buona pratica.
9
whatsisname
  • Dovrebbe compilare/interpretare errori e avvisi senza il massimo livello di rigidità.
  • Non dovrebbe essere il codice boilerplate che scrivi ogni giorno. Renderlo unico e interessante, quindi è ovvio che non lo hai copiato/incollato.
  • Dovrebbe avere alcune interessanti decisioni di progettazione con commenti che spiegano come/perché li hai fatti.
  • Obiettivo per non più di 2-3 pagine stampate.
  • Dovrebbe essere nella lingua richiesta.
  • Non dovrebbe farmi male al cervello quando l'ho letto per la prima volta. Chiedi a un amico di esaminarlo o pubblica su codereview.
6
Karl Bielefeldt

Bene, se ti intervistassi, vorrei vedere il tuo codice.

La pulizia è buona, la risoluzione dei problemi è buona, ma il vero codice è migliore. Un buon programmatore sa quando è stato truffato da un altro programmatore, quindi la fiducia potrebbe diminuire.

Leggere un altro codice persona è come danza fare sesso: sai quando è la cosa reale, e se l'altra persona la sta fingendo, alla fine si verificherà un disastro. (appena realizzato veri nerd non sanno ballare)

Abbi solo fiducia in te stesso e nelle tue capacità di programmazione. Se non conosci veramente il tuo intervistatore, non puoi anticipare ciò che si aspetta dal tuo stile/abilità di programmazione.

3
Machado

Fai anche molta attenzione che NON sia un codice del tuo attuale datore di lavoro (lo possiedono non lo fai e ti garantisco che non gli piacerà condividerlo.). Prendi qualcosa di cui sei orgoglioso e rielaboralo da solo per non essere specifico del datore di lavoro (elimina qualsiasi riferimento alle loro tabelle del database o ai nomi dei server, ecc.). Qualunque cosa tu faccia, non inviare il codice che presenta errori o è una tecnica scadente per il tipo di codice (probabilmente respingerei qualcuno che ha inviato un cursore quando un'operazione basata su un set sarebbe più semplice e funzionerebbe meglio durante la revisione del codice SQL. Esistono tecniche simili per altre lingue che sono lì per risolvere un problema relativamente raro che può essere usato per altri problemi più comuni ma non sono la scelta migliore per quegli altri problemi. Quella frase aveva senso?)

2
HLGEM

Come opinione di qualcuno che richiede esempi di codice durante la valutazione dei candidati, ci sono alcune funzionalità di alto livello (contenuto del codice) e alcune funzionalità di basso livello (struttura del codice). Funzionalità di alto livello:

  1. Identità: il sapore del codice. Se ti stai fatturando come un codificatore UI/HCI, voglio vedere un bell'aspetto/sentire qualcosa di visivo quando lo eseguo. Se sei un builder DB, voglio vedere qualcosa di interessante con la rappresentazione o l'analisi dei dati. L'esempio dovrebbe essere qualcosa di cui sei orgoglioso di. Se non hai almeno uno di questi, non hai identità.
  2. Maturità: cambiate strategia per problemi diversi? Stai risolvendo problemi interessanti? Il codice o l'approccio sarebbero facili da estendere a un problema simile? Al contrario, mi sento come se stessi guardando un membro di un comune di culto del carico?
  3. Comunicazione: il codice spiega facilmente cosa sta facendo e perché? Ciò non significa che il codice debba essere semplice. In effetti, è un vantaggio rendere semplice la comprensione di codici complessi.

Gli aspetti di basso livello sono più semplici:

  1. Stile: il codice deve essere pulito, coerente (segue alcune linee guida stabilite) e ben documentato.
  2. Packaging: dovrebbero esserci almeno un readme breve, una versione eseguibile e test eseguibili. Il file Leggimi dovrebbe dirmi come eseguire gli ultimi due, nonché il motivo per cui stai dimostrando questo particolare esempio di codice.
  3. Language (s): Di solito chiedo a qualcuno un campione nella lingua per la posizione, così come quella in cui si sentono più forti. Fornisce una buona idea degli attuali massimali di una persona.

Per un buon candidato, mi aspetto che un campione sia: A) Un piccolo campione a prova di proiettile o B) Una buona parte di un progetto interessante più ampio (ad esempio, un modulo da un repository personale Github). Mi aspetto che siano progetti personali o progetti accademici. Se ne inviano uno da un progetto a pagamento, mi aspetto una nota che gli sia stato dato il permesso di usarlo. Se non ricevo quella nota, li taglierò dai candidati (candidato debole) o glielo chiederò durante il colloquio (candidato forte). Non avere il permesso sarebbe una grande bandiera rossa (probabilmente insormontabile). Per un candidato avanzato, mi aspetto un disclaimer che noti che alcuni dei loro migliori campioni di origine non possono essere mostrati perché è stato fatto come parte del loro lavoro. Tuttavia, mi aspetto quindi una sgargiante testimonianza del motivo per cui sono orgogliosi di quel design inconfondibile e di come lo adorano come un bambino.

Infine, per quanto alcune persone sostengano che "Oh, qualcuno potrebbe semplicemente ottenere un campione di codice da Internet", la contro argomentazione è che la maggior parte delle persone che non capiscono un buon codice di qualità della produzione non lo capiscono quando lo vedono . Inoltre, si può sempre cercare su Google una riga distintiva per il controllo del codice. Inoltre, nella migliore delle ipotesi, rubare il codice porterà un candidato a un colloquio in cui si mettono in imbarazzo ("Allora perché l'hai fatto in questo modo ...?").

Come ultima nota sul codice di un precedente impiego: basta non farlo. Dal punto di vista delle risorse umane, la richiesta di codice dall'occupazione precedente è inappropriata e una bandiera rossa sull'azienda. Avreste entrambi la responsabilità legale (vale a dire, potreste entrambi essere citati in giudizio) e ciò dimostra che non hanno idea di quello che stanno facendo. Il codice fatto per un precedente datore di lavoro non dovrebbe mai essere dato a meno che il codice non sia già disponibile al pubblico o non si disponga dell'autorizzazione esplicita di quel datore di lavoro. Peggio ancora, in una grande azienda, il tuo capo diretto potrebbe non avere il potere di darti il ​​permesso, quindi divertirti con l'ufficio legale in quel caso? Sono sicuro che saranno felicissimi di esporre il loro IP a un dipendente uscente.

0
Namey

Vorrei distaccare il post da Renesis sul codice pulito, ma aggiungerei all'elenco fornendo test unitari di qualità e ben documentati al codice che invii. Un buon programmatore dovrebbe scrivere unit test per il proprio codice.

0
Chris Knight