Que métricas seria útil para determinar o nível experiência em uma linguagem de programação específica

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

  •  22-08-2019
  •  | 
  •  

Pergunta

Estou interessante nas métricas brutas (ou compostos) usados ??para obter uma alça sobre o quão bem uma pessoa pode programar em uma linguagem particular.

Cenário:. George sabe algumas linguagens de programação e quer aprender "foobar", mas Ele gostaria de saber quando ele tem uma quantidade razoável de experiência em "foobar"

Estou realmente interessante em algo mais amplo do que apenas o LOC (linhas de código) métrica.

A minha esperança para esta questão é entender como engenheiros quantificar as experiências de linguagem de programação de outros e se isso pode ser medido mecanicamente.

Obrigado antecipadamente!

Foi útil?

Solução

Em resposta às duas anteriores cartazes, eu acho que há é uma maneira de obter uma alça sobre o quão bem uma pessoa pode programar em uma linguagem especial: você pode testar o quão bem alguém sabe Inglês ou Matemática, ou música, ou na medicina, ou as belas artes, então o que há de tão especial sobre uma linguagem de programação?

Em resposta ao OP, eu acho que os testes devem avaliar:

  • Como assim você pode programar
  • Como assim você pode usar a linguagem de programação

Portanto, as métricas podem ser:

  1. O que é a bondade de programação da pessoa (e há várias dimensões da bondade, como livre de bugs, sustentável, rápida / barata para escrever, é executado rapidamente, atende as necessidades dos utilizadores, etc.)?

  2. Será que o uso pessoa apropriada / características idiomáticas da linguagem de programação em questão, a fim de fazer isso uma boa programação?

Seria difícil fazer o teste 'mecânica', no entanto: a maioria dos exames que eu conheço são classificados por um examinador humano. No caso da programação, parte do teste poderia ser classificada mecanicamente (ou seja, "o faz correr?"), Mas parte dele ( "é compreensível e idiomática?") Se destina a beneficiar, e é melhor julgado por, outro ser humano programadores.

Outras dicas

O melhor indicador de sua perícia em uma linguagem particular, na minha opinião, é como produtivo você está nele.

A produtividade não é o quão rápido você pode trabalhar, mas, mais importante, como alguns erros que você criar e quão pouco refactoring / retrabalho seja necessário mais tarde.

Por exemplo, se você tomou duas línguas você tem nível semelhante de experiência com, e foram (em universos paralelos) para construir o mesmo sistema com ambos, eu diria que o idioma que você construir o sistema com mais rápido e com menos defeitos / falhas de projeto, é a linguagem que você tem mais experiência em.

Infelizmente não é um "duro" métrica para você, é uma abordagem mais prática.

Eu não acredito que este pode ser "mecanicamente medida". Eu pensou muito sobre isso embora.

Hang on ...

Mesmo o "LOC" de um programa é um tema muito disputado! (Estamos falando sobre a saída do gato * {h, c} |.???? Wc -l ou algum outro mechnanism, por exemplo E sobre linhas em branco Os comentários são observações importantes é bom código documentado)

Até que você percebeu o quão inútil uma comparação LOC é, você não tem nenhuma esperança de perceber o quão inútil outras métricas são.

É uma coisa bastante qualitativa que raramente é medido com qualquer grande precisão. É como perguntar "o quão inteligente foi Einstein?". A certificação é um (e razoavelmente completa) indicador quantitativo, mas mesmo ela cai drasticamente curto de identificar "bons programadores", como muitos recrutadores descobrir.

O que você finalmente está tentando alcançar? Geral aptidão programação pode ser mais importante do que conhecimento linguagem em algumas situações.

Se você estiver em língua focado, assumindo um desafio como Projeto Euler usando esse linguagem pode ser uma forma de acompanhar o progresso.

Como proficiente estão na depuração de problemas complexos em que a linguagem.

Pergunte-lhes sobre projetos que tenham trabalhado no passado, problemas difíceis que eles encontraram e como eles resolveram-los. Pergunte-lhes sobre a depuração técnicas que eles usaram - você vai se surpreender com o que você vai ouvir, e você pode até aprender algo novo; -)

Um monte de lugares têm uma pessoa ou duas que é um superstar em seu campo - a pessoa toda a gente vai para quando não consegue descobrir o que está errado com seu programa. Eu estou supondo que isso é a pessoa que você está procurando: -)

Facility com uma linguagem de programação não é suficiente. O que é necessário é a facilidade com a linguagem de programação no contexto de um conjunto partiular de bibliotecas em uma plataforma específica

  • C ++ em winapi no Windows de 32 bits
  • C ++ no KDE no Linux
  • C ++ em Symbian em um Nokia S60 telefone
  • C # no MS .NET no Windows
  • C # no Mono no Linux

Dentro de tal contexto, uma, as medidas de competência usando a língua-alvo na plataforma de destino são as seguintes:

  • A capacidade de expressar comum padrões de forma sucinta e enérgica.
  • A capacidade de comum depuração mas erros sutis, como condições de corrida.

Seria possível desenvolver um conjunto de exercícios de referência para um programador. Pode-se também, uma vez que as amostras foram significativas disponível, determinar a curva de sino para a capacidade. Preparar estas coisas levaria literalmente anos e que iriam ser rapidamente obsoleto. Esta (e aperto geral) É por isso que as organizações não se incomode.

Além disso, seria necessário para as pessoas grau em ambos "ferramenteiro" e modos de "usuário ferramenta". fabricantes de ferramentas são pessoas muito diferentes, com um nível muito mais elevado de competência, mas são muitas vezes inadequadas para o trabalho macaco, para que você realmente deseja que um usuário de ferramentas.

John

Há um par de maneiras de abordar a sua pergunta:

1) Se você está entrevistando candidatos para uma posição específica que requer uma linguagem particular, então a única medida para comparar os candidatos é 'quanto tempo essa pessoa sido escrito nesta língua.' Não é perfeito - não é mesmo muito bom - mas é a realidade. A menos que você quer dar ao candidato um problema, um computador, e um compilador para testá-los no local não há nenhuma outra medida. E, em seguida, a maioria dos programadores-tipos não fazem bem em "alguém está observando você" cenários.

2) Eu interpreto a sua pergunta a ser mais de "quando eu posso me chamar profecient em um idioma? Para isso, remeto para os níveis de aprendizagem de uma língua não-nativa: primeiro nível é que você precisa para procurar palavras / frases em um dicionário (livro), a fim de dizer ou entender nada; segundo nível seria que você pode entender ouvir a língua (ou a leitura de código) com apenas a pesquisa ocasional em seu dicionário confiável e agora bem-vestida; terceiro nível, agora você pode falar (ou escrever código) com apenas a pesquisa ocasional; quarto nível é onde você sonha na língua; e os níveis finais é onde enganar falantes nativos em pensar que você é um falante nativo também (na programação, outros especialistas poderia pensar que você pode ter ajudado a desenvolver a sintaxe da linguagem).

Note que isso não ajuda determinar como bom de um programador você é - assim como saber Inglês, sem ter que procurar palavras no dicionário não mostrar "como gooder você está em writin' coisas" - que é subjetiva e não tem nada a ver com uma língua particular como as pessoas que são bons em programação são bons em qualquer língua que lhes dão.

A frase "uma quantidade razoável de experiência" é dependente da língua que está sendo considerada e que essa linguagem pode ser utilizado.

A métrica é o resultado de uma medição. Stevens (ver Wikipedia: Nível de Medida) proposto que as medições utilizar quatro tipos diferentes de escala: nominal (atribuir uma etiqueta), ordinais (atribuindo uma classificação), o intervalo (ordenando as medições) e proporção (com uma não-arbitrária do ponto zero de partida) . LOC é uma medida da relação. Embora longe de ser perfeito, eu acho LOC é um número pertinentes, objectivos, indicando o quanto a experiência que você tem em um idioma e pode ser comparado a valores quantificáveis ??na indústria de software. Mas, isso levanta a questão: onde é que estes valores da indústria vêm de

Pessoalmente, eu diria que "George" vai saber que ele tem uma quantidade razoável de experiência, quando ele foi concebido, implementado e testado um projeto, talvez de sua escolha em seu tempo pessoal em seu computador de casa se for necessário. Por exemplo: banco de dados, aplicações de negócio, página web, ferramenta de teste GUI, etc

.

A partir dos gerentes de contratação ponto de vista, gostaria de começar por perguntar o programador quão bom ele / ela está no idioma, mas isso não é uma métrica. Eu sempre pensei que a melhor maneira de medir a capacidade de pessoas para escrever programas é dar ao programador vários problemas de programação pequenas que são pensadas com antecedência e resolvidos em um determinado período de tempo, digamos, 5 minutos cada. Eu nunca se opôs a este ser feito para mim em entrevistas de emprego. Várias métricas estão disponíveis: o programador foi capaz de resolver o problema (sim ou não - nominal)? Quanto tempo demorou (número de minutos - ratio)? Qual a eficácia foi a sua abordagem para resolver o problema (bom, regular, ruim - ordinal)? Você aprende não só a capacidade de pessoas para escrever código, mas pode-se observar várias coisas subjetivas, bem como, tais como o seu comportamento como eles vão sobre como resolver o problema, as perguntas que ele / ela pede ao resolver o problema, a capacidade de trabalhar sob pressão, etc, de uma perspectiva de "qualidade", porém, lembrar que as pessoas não gostam de ser medido.

Ainda assim, eu acredito que há algumas boas métricas como o McCabe Cyclomatic Metric para a complexidade ciclomática ou a quantidade de comentários úteis por bloco de código ou mesmo a quantidade média de código escrito entre dois testes consecutivos.

Eu sei de nada disso. Eu não acredito que há consenso sobre como quantificar experiência ou o que significa "razoáveis". Talvez eu aprender alguma coisa também, mas se eu não fizer isso vai ser uma grande surpresa.

Este pode ser pertinente.

Eu acho que testar a capacidade de depuração é um indicador mais preciso da habilidade de programação do que qualquer teste destinado a problemas de programação simples que eu encontrei. Dada a fonte para uma classe de tamanho razoável ou função com um declarado (ou não declarada, em alguns casos) mau comportamento, pode o testee localizar o problema?

Bem, eles tentam que em entrevistas de emprego. Não há nenhuma métrica, mas você pode avaliar habilidades de uma pessoa através do questionamento e interrogando.

WTF / s * LOC, menor é melhor.

não há nenhum; perícia só pode ser julgado subjetivamente em relação aos outros, ou testado em detalhes (que tem seu próprio nível de imprecisão)

o que é o fascínio com métricas de código para mais informações

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top