Come dovrebbe essere il mio "esempio di codice"? [chiuso]


24

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 del 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 esempio di codice non cada, 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 al programmatore?

Tutte le idee o i suggerimenti sono i benvenuti!


2
Ci sono stati dei requisiti sull'esempio di codice da inviare? Sembra piuttosto inutile, chiunque può copiare / incollare bellissimo codice dal web. A meno che non si sta cercando di estirpare persone che non possono anche ottenere che a destra ...
FrustratedWithFormsDesigner

5
Solo per calci, potresti inviare uno script Perl che ha la forma del suo nome ...;)
FrustratedWithFormsDesigner

2
@thesunneversets: Quindi immagino che il codice sorgente assolutamente meraviglioso dei tuoi progetti personali sia uscito ...;) Seriamente, questo potrebbe essere facilmente falsificato. E il tuo attuale datore di lavoro è d'accordo con te nel dare un campione rappresentativo del tuo codice sorgente? Va bene se parte del codice è stato scritto da un collega (forse il file è andato avanti e indietro tra alcune persone nel tempo)?
FrustratedWithFormsDesigner,

2
Le implicazioni etiche sono un po 'preoccupanti ... ma solo un po'. Non credo di cadere in una trappola di spionaggio industriale. Per quanto riguarda i colleghi, purtroppo solo due persone hanno mai messo le mani su questa base di codice, e il codice dell'altro ragazzo è stato un gran casino, quindi sono praticamente da solo! :)
thesunneversets

4
@thesunneversets, fornire il codice dei tuoi datori di lavoro non è solo immorale, in molti luoghi è illegale. Non farlo.
HLGEM,

Risposte:


17

Mi piacerebbe vedere il codice Clean :

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 dimostrerebbero di sapere qualcosa)
  • Stile coerente e pulito - popolare o almeno comuni stili involucro, indentazione, spaziatura e staffa
  • Buona denominazione - Nomi di qualità - non utilizzare a imeno che non sia l'unico valore di incremento. Non usare nomi di variabili senza senso.
  • Altri attributi del codice Clean - Buone pratiche su controllo degli errori, condizioni, loop, metodi di convenienza o metodi di utilità e buona separazione delle preoccupazioni (tra metodi). E questo è un buon momento per essere 100% ASCIUTTO - nessuna ripetizione!

Volete inviare loro qualcosa di abbastanza complesso da essere interessante ma abbastanza pulito da consentire a un buon sviluppatore di capire quasi immediatamente 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, quindi ti ha chiesto un campione da questo progetto e ti ha chiesto cosa ti richiedeva di scriverlo o come si è evoluto, penso che il processo sarebbe abbastanza a prova di bugiardo. Penso che la maggior parte dei candidati che sarebbe mentire stanno per mostrare problemi in altre aree, in ogni caso.


Se chiedi alla persona di spiegare il codice e loro non possono non averlo scritto o hanno modificato il codice di qualcun altro in manutenzione senza preoccuparsi di capirlo prima. Incredibile per me quante persone ho intervistato nel corso degli anni che non sono in grado di spiegare il proprio campione.
HLGEM,

Aggiungi alcuni commenti nel caso in cui il tuo marker odia il codice pulito.
Ewan,

9

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 soluzione e può utilizzare 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 poi, 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.

Questa è un'ottima soluzione Lo farò. Ci sono state domande specifiche che ti sono piaciute di più?
zkent,

1
Come commento da parte mia, penso che avere un esempio di codice a file singolo non sia necessariamente un'ottima idea a meno che non si stia facendo domanda per l'ottimizzazione del codice o degli algoritmi. Il codice certamente non dovrebbe essere enorme, ma dovrebbe essere in qualche modo rappresentativo di ciò che puoi effettivamente realizzare (ad esempio, se puoi scrivere un buon codice OO e dividere il codice in moduli ragionevolmente, dovrebbe dimostrarlo).
Assoluto

6
  • Dovrebbe compilare / interpretare errori e avvisi senza il massimo livello di rigidità.
  • Non dovrebbe essere il codice del 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.

3

Bene, se ti intervistassi, mi piacerebbe vedere il tuo codice.

Clean è buono, 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 codice di un'altra persona è come ballare facendo sesso: sai quando è la cosa reale e se l'altra persona lo sta fingendo, alla fine si verificherà un disastro. (ho appena realizzato che i veri nerd non sanno ballare)

Abbi 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.


10
Adoro che non pensi che i nerd possano ballare ma sei sicuro della loro abilità sessuale! : D
thesunneversets,

No, ho appena visto troppi disastri da solo ... :)
Machado,

Nella mia scuola, le uniche persone che si presentano per le lezioni / balli di danza sociale sono specializzazioni in ingegneria.
Eva,

Dovresti sostituire il sesso con alcuni riferimenti di gioco per essere più accurati :)
zkent,

2

Fai anche molta attenzione che NON sia un codice del tuo attuale datore di lavoro (lo possiedono e non ti garantisco che non ti 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 codice che presenta errori o è una tecnica scadente per il tipo di codice (probabilmente rifiuterei qualcuno che ha inviato un cursore quando un'operazione basata su set sarebbe più semplice e avrebbe prestazioni migliori quando si esaminasse il 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?)


Sono d'accordo, rielaborarlo completamente in modo che non contenga più informazioni specifiche del datore di lavoro sembra una buona idea. L'etica è importante - grazie per il suggerimento!
thesunneversets

0

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

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 / qualcosa per qualcosa di visivo quando lo eseguo. Se sei un builder DB, voglio vedere qualcosa di interessante con la rappresentazione o l'analisi dei dati. Il campione dovrebbe essere qualcosa di cui sei orgoglioso . Se non ne hai almeno uno, 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. Confezione : dovrebbero esserci almeno un file Leggimi 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. Lingua (e) : in genere chiedo a qualcuno un campione nella lingua per la posizione, così come quella in cui si sentono più forti. Dà una buona idea dei massimali attuali 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 più ampio e interessante (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 incredibile 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: non farlo. Dal punto di vista delle risorse umane, la richiesta di codice dall'occupazione precedente è inappropriata e una bandiera rossa sull'azienda. Avresti entrambi una responsabilità legale (cioè potresti essere entrambi citati in giudizio) e questo dimostra che non hanno idea di cosa stiano 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.


Noterò anche che, in piena divulgazione, ho fornito un campione di codice al laboratorio della scuola di specializzazione in cui sono stato accettato per un dottorato di ricerca. Questo esempio di codice era il codice completo per un robot autonomo (5-10k linee), con un particolare tre file individuati. La documentazione era rispettabile, ma non incontaminata. Se avessi dovuto ricominciare da capo, probabilmente non avrei portato una versione stampata del codice al mio colloquio in loco (avrei potuto portare 100 pagine con scritto "ROOKIE MISTAKE" a grandi lettere). Ho ricevuto una borsa di studio completa, quindi non è stato un passo falso. Morale: troppo> = troppo poco.
Assoluto
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.