Quali metriche sarebbe utilizzabile per determinare il livello competenza in un particolare linguaggio di programmazione

StackOverflow https://stackoverflow.com/questions/539694

  •  22-08-2019
  •  | 
  •  

Domanda

Sono interessanti le metriche prime (o composito) utilizzati per ottenere una maniglia su quanto bene una persona può programmare in una determinata lingua.

Scenario:. George conosce alcuni linguaggi di programmazione e vuole imparare "foobar", ma Egli vorrebbe sapere quando ha una ragionevole quantità di esperienza in "foobar"

Sono veramente interessante in qualcosa di più ampio che solo la LOC (linee di codice) metrica.

La mia speranza per questa domanda è quello di capire come gli ingegneri quantificare le esperienze del linguaggio di programmazione degli altri e se questo può essere misurata meccanicamente.

Grazie in anticipo!

È stato utile?

Soluzione

In risposta alle due precedenti manifesti, direi che ci è un modo per ottenere una maniglia su quanto bene una persona può programmare in un linguaggio particolare: è possibile verificare quanto bene qualcuno sa inglese, o di matematica, o Musica, o medicina, o di belle arti, così che cosa c'è di così speciale un linguaggio di programmazione?

In risposta alla OP, immagino le prove devono valutare:

  • Come ben si può programmare
  • Come ben si può utilizzare il linguaggio di programmazione

Perciò i parametri potrebbero essere:

  1. Qual è la bontà della programmazione della persona (e ci sono diverse dimensioni di bontà, come, mantenibile, rapido / a buon mercato di scrivere privo di bug, corre in fretta, incontra le esigenze degli utenti, ecc.)?

  2. La persona uso appropriato caratteristiche / idiomatiche del linguaggio di programmazione in questione, al fine di farlo buona programmazione?

Sarebbe difficile fare il test 'meccanico', però: la maggior parte degli esami che io sappia sono classificati da un esaminatore umano. Nel caso di programmazione, parte della prova potrebbe essere classificato meccanicamente (cioè "non funzionare?"), Ma parte di essa ( "è comprensibile e idiomatica?") È destinato a beneficio, ed è meglio giudicato da, altro essere umano programmatori.

Altri suggerimenti

Il migliore indicatore della tua esperienza in una particolare lingua, a mio parere, è il modo produttivo si è in esso.

La produttività non è solo quanto velocemente si può lavorare, ma, soprattutto, come alcuni bug di creare e di quanto poco refactoring / rilavorazione è necessaria in seguito.

Ad esempio, se hai preso due lingue si ha lo stesso livello di esperienza con, e sono stati (in universi paralleli) per costruire lo stesso sistema con entrambi, direi che la lingua che a costruire il sistema con più velocemente e con meno difetti / difetti di progettazione, è la lingua che hanno più esperienza in.

Ci dispiace che non è una metrica "duro" per voi, si tratta di un approccio più pratico.

Non credo che questo possa essere "meccanicamente misurato". Ho pensato su questo molto però.

Aspetta ...

Anche il "LOC" di un programma è un argomento fortemente contestato! (Stiamo parlando l'output di cat * {h, c} |.????? Wc -l o qualche altro mechnanism, per esempio cosa circa righe vuote commenti sono commenti importante è buon codice documentato)

Fino a quando hai capito quanto inutile un confronto LOC è, hai alcuna speranza di rendersi conto di quanto inutili altre metriche sono.

E 'una cosa piuttosto qualitativa che raramente viene misurata con qualsiasi grande precisione. E 'come chiedere "quanto intelligente era Einstein?". La certificazione è una (e una ragionevolmente accurata) indicatore quantitativo, ma anche cade drasticamente a corto di identificare "buoni programmatori", come molti reclutatori scoprire.

Che cosa stai in ultima analisi, cercando di raggiungere? Generale attitudine programmazione può essere più importante di competenze linguistiche in alcune situazioni.

Se siete linguaggio focalizzato, assumendo una sfida come Project Euler utilizzando tale lingua può essere un modo per monitorare i progressi.

Come abili sono in debug dei problemi complessi in quella lingua.

Chiedete loro sui progetti che hanno lavorato in passato, problemi difficili che hanno incontrato e come li hanno risolti. Chiedete loro di debug di tecniche che hanno usato - sarete sorpresi di quello che si sente, e si potrebbe anche imparare qualcosa di nuovo; -)

Un sacco di posti hanno una persona o due che è una superstar nel loro campo - la persona tutti gli altri va a quando non riescono a capire ciò che è sbagliato con il loro programma. Sto indovinando questo è la persona che state cercando: -)

Struttura dotata di un linguaggio di programmazione non è sufficiente. Ciò che è necessario è struttura con un linguaggio di programmazione, nel contesto di una suite di librerie partiular su una particolare piattaforma

  • C ++ su winapi su Windows a 32 bit
  • C ++ su KDE su Linux
  • C ++ su Symbian su un telefono Nokia S60
  • C # su MS .NET su Windows
  • C # su Mono su Linux

In un tale contesto, le misure di competenza utilizzando il linguaggio di destinazione sulla piattaforma di destinazione sono i seguenti:

  • La capacità di esprimere comune modelli succintamente e robusta.
  • La capacità di eseguire il debug di errori comuni, ma sottili come le condizioni di gara.

Sarebbe possibile sviluppare una serie di esercizi di riferimento per un programmatore. Si potrebbe anche, una volta campioni significativi erano disponibili, determinare il curva a campana per la capacità. Preparare queste cose sarebbero voluti letteralmente anni e sarebbero essere rapidamente obsoleto. Questo (e generale senso di oppressione) è il motivo per cui le organizzazioni non si preoccupano.

Sarebbe anche necessario per le persone di grado in entrambi i "stampista" e modalità "user strumento". produttori di utensili sono persone molto diverse con un livello molto più elevato di competenza, ma spesso sono inadatti al lavoro scimmia, per il quale si vuole veramente un utente strumento.

Giovanni

Ci sono un paio di modi per avvicinarsi alla tua domanda:

1) Se si sta intervistando i candidati per una particolare posizione che richiede una particolare lingua, quindi l'unica misura per confrontare i candidati è 'da quanto tempo questa persona scritto in questa lingua.' Non è perfetto - non è nemmeno molto buona - ma è la realtà. A meno che non si vuole dare al candidato un problema, un computer e un compilatore di testarli sul posto non c'è nessun altro provvedimento. E poi la maggior parte dei programmatori-tipi non fanno bene in "qualcuno sta guardando voi" scenari.

2) io interpreto la tua domanda per essere più di 'quando posso definirmi profecient in una lingua?' Per questo mi permetto di rinviare a livelli di apprendimento di una lingua non nativa: primo livello è quello che dovete cercare le parole / frasi in un dizionario (libro) al fine di dire o capire niente; secondo livello sarebbe che tu possa capire sentendo la lingua (o la lettura di codice), con solo la ricerca occasionale nel vostro dizionario affidabile e ormai ben indossato; terzo livello si può ora parlare (o scrivere il codice), con solo la ricerca occasionale; quarto livello è dove si sogna nella lingua; ed i livelli finali è dove ingannare madrelingua a pensare che sei un madrelingua anche (in programmazione, altri esperti potrebbe pensare che si può avere contribuito a sviluppare la sintassi del linguaggio).

Si noti che questo non aiuta a determinare quanto bene di un programmatore si è - proprio come conoscere l'inglese senza dover cercare le parole nel dizionario non mostra "come gooder voi è a writin' roba" - che è soggettivo e non ha nulla a che fare con un linguaggio particolare per quanto le persone che sono bravi a programmazione sono buoni in qualsiasi lingua si dà loro.

La frase "una ragionevole quantità di esperienza" dipende dalla lingua che viene considerato e ciò che il linguaggio può essere utilizzato per.

Una metrica è il risultato di una misurazione. Stevens (vedi wikipedia: livello di misurazione) ha proposto che le misure utilizzano quattro tipi di scala differenti: nominale (assegnazione di un'etichetta), ordinale (assegnando un voto), intervallo (ordinare le misurazioni) e rapporto (avente un non-arbitrario punto di partenza zero) . LOC è una misurazione del rapporto. Anche se ben lungi dall'essere perfetto, penso LOC è un numero rilevante, obiettivo che indica quanta esperienza hai in una lingua e può essere paragonato a valori quantificabili nel settore del software. Ma, si pone la domanda:? Da dove vengono questi valori del settore provenienti da

Personalmente, direi che "George" saprà che ha una quantità ragionevole di esperienza quando ha progettato, realizzato e testato un progetto, forse di sua scelta per il suo tempo personale sul suo computer di casa, se necessario. Ad esempio: database, applicazioni di business, pagina web, strumento di prova GUI, ecc

.

Dal punto di vista responsabili delle assunzioni, vorrei iniziare, chiedendo il programmatore come buoni s / lui è nella lingua, ma questa non è una metrica. Ho sempre pensato che il modo migliore per misurare una capacità delle persone di scrivere programmi è quello di dare al programmatore diversi problemi di programmazione di piccole dimensioni che si pensa-out in anticipo e risolti in un determinato periodo di tempo, diciamo, 5 minuti ciascuno. Non ho mai contestato questo essere fatto a me in colloqui di lavoro. Diversi parametri sono disponibili: Era il programmatore in grado di risolvere il problema (sì o no - nominale)? Quanto tempo c'è voluto (numero di minuti - ratio)? Quanto efficace è stato il loro approccio alla soluzione del problema (buono, discreto, scarso - ordinale)? Si impara non solo la capacità delle persone di scrivere codice, ma possono osservare diverse cose soggettive pure, come ad esempio il loro comportamento come vanno di risolvere il problema, le domande s / Chiede mentre la soluzione del problema, la capacità di lavorare sotto pressione, ecc, Dal punto di vista "qualità", anche se, ricorda che la gente non piace essere misurata.

Ancora, credo che ci sono alcune buone metriche quali il McCabe Cyclomatic Metric ciclomatica complessità o la quantità di commenti utili per blocco di codice o addirittura la quantità media di codice scritto tra due prove consecutive.

Non conosco nulla di simile. Non credo ci sia concensus su come quantificare esperienza o cosa significa "ragionevoli". Forse imparerò qualcosa di troppo, ma se lo faccio sarò una grande sorpresa.

Questo può essere pertinente.

Trovo che testare la capacità di debug è un indicatore più accurato di abilità di programmazione di qualsiasi test volto a problemi di programmazione semplici che ho incontrato. Data la fonte per una classe di dimensioni ragionevoli o funzione con un comportamento scorretto dichiarato (o non dichiarata, in alcuni casi), si chiede alla testee individuare il problema?

Bene, provano che nei colloqui di lavoro. Non c'è metrica, ma si può valutare la capacità di una persona attraverso la discussione e quiz.

WTF / s * LOC, più piccolo è il migliore.

non ce ne sono; esperienza può essere giudicato solo soggettivamente rispetto agli altri, o testati su specifiche (che ha il proprio livello di imprecisione)

ciò che è il fascino metriche del codice per ulteriori informazioni

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top