Estudos sobre até que ponto um programador pode entender o código em idiomas desconhecidos? [fechadas]


15

Existem estudos sérios sobre até que ponto um programador experiente que conhece a linguagem X pode entender o código escrito por um programador competente usando a linguagem Y, para uma boa variedade de linguagens amplamente usadas como X e Y?

É claro que o mundo real não é tão simples quanto um programador conhece apenas um idioma. O que gostaríamos de saber é: se fizermos nosso projeto em, digamos, C #, e algum dia alguns físicos antigos que sabem apenas Fortran e Algol o examinam, até que ponto faria sentido para eles? Partes matemáticas podem ser boas para eles, se ignorarem o que para eles são alguns sinais de pontuação aleatórios. Ou um especialista em Python seria capaz de encontrar falhas no meu inteligente script Ruby?

Pode haver problemas desde o nível da sintaxe superficial até o nível dos grandes conceitos, como objetos, metaprogramação de modelos, funcionais e assim por diante. Não estou esperando que um programador compreenda completamente todos os detalhes de sintaxe do código em uma "língua estrangeira" ou siga a religião de algum grande conceito, mas me pergunto até que ponto eles obteriam o fluxo principal de controle, encontre o local onde algo é desenhado na tela e o que determina sua cor ou tamanho, verifique se um robô programado para dirigir um carro desligará o motor quando terminar, esse tipo de coisa.

Um estudo de boa qualidade incluiria pesquisa acadêmica publicada, um relatório oficial de algum grupo da indústria ou grande empresa de software, embora eu faça observações sistemáticas e imparciais de líderes experientes de oficinas e aulas ou outras fontes. Não estou interessado em blogs curtos, exemplos de casos únicos ou anedotas. (Bem, talvez algumas histórias, caso sejam uma boa leitura.)


1
Não sei se existem estudos, mas, pela minha experiência pessoal, digo que sim, consegui entender um programa sem conhecer o idioma.
SuperM

2
Isso dependeria de um par de linguagens: escolha C # vs. Java - e você terá uma familiaridade quase instantânea; escolha Algol vs. C - e você terá familiaridade com uma folha de dicas de uma página. Boa sorte ao escolher C vs. Prolog ou Whitespace vs. Ada - será frustrante. A propósito, a linguagem não é a única coisa que ajuda a entender um programa: um especialista em C especializado em projetos incorporados tentando entender o código MFC escrito em C é uma visão bastante lamentável (essa é a experiência em primeira mão).
precisa saber é o seguinte

Quão fácil é para alguém que entende de álgebra pegar trigonometria versus alguém que entende de cálculo? Depende da linguagem e do paradigma. Detectar e isolar as diferenças entre os idiomas já é bastante difícil, especialmente porque os idiomas estão em constante evolução. Duvido seriamente que alguém possa avaliar a compreensão com uma quantidade razoável de precisão.
Evan Plaice

Respostas:


9

Obviamente, depende do grau de relação entre os idiomas. Por exemplo, se você possui experiência em C ou C ++ e já fez alguma programação em C # ou Java, deve ser fácil ler e entender a outra dessas duas linguagens (Java ou C #). Se você conhece bem o Lisp, o Scheme não deve ser um grande problema. Uma vez depurei um programa PHP sem ter nenhum conhecimento sobre PHP, apenas com meu conhecimento em C, C ++ e Perl. Tenho certeza de quando esse programa teria sido escrito em Haskell ou Smalltalk, que teria sido imenso mais difícil do que impossível para mim.

De fato, não acho que uma pesquisa acadêmica sobre esse assunto faça sentido (pelo menos, não grave). Não existe um "programador experiente padrão que conheça a linguagem X"; portanto, qualquer estudo perderia dados de base garantidos. As pessoas têm conhecimentos diferentes e, mesmo que tenham percorrido as mesmas escolas, são diferentemente talentosas e motivadas.

mas imaginando até que ponto eles receberiam o fluxo principal de controle, encontre o local em que algo é desenhado na tela

Isso pode ser difícil, mesmo quando você está familiarizado com a linguagem, porque a qualidade do código é muito baixa ou a estrutura usada é muito complexa ou a base de código é muito grande.


6

Não tem certeza sobre a referência de um estudo acadêmico realizado, mas a nomenclatura auto-explicativa de métodos, classes e funções em linguagens C # / C ++ / Java / Python ou etc. deve facilitar a compreensão da base de código e do fluxo do processo de negócios.

A convenção de nomenclatura no projeto e geralmente no desenvolvimento de software é um aspecto muito importante. No entanto, aits importancerelevância para a criação de software de qualidade é muitas vezes ignorada ou ignorada por todos.

As diretrizes de nomenclatura usadas no .NET Framework e as convenções gerais de nomenclatura usadas no .NET também são boas referências.


As boas convenções de design e nomenclatura da API ajudam, mas mesmo as convenções de nomenclatura com base no idioma geralmente são "opinativas" de uma maneira que se aplica apenas a esse idioma. Ao lado de C # / Java (que são quase idênticos), a maioria das linguagens opera com princípios diferentes que possuem fluxos de trabalho e implementações exclusivos específicos para essa linguagem. Por exemplo, em idiomas que não seguem o modelo de estrutura principal mega-monolítica, geralmente você encontra um enorme ecossistema de pacotes que se unem usando um gerenciador de pacotes comum.
Evan Plaice

3

Depende tremendamente do programador individual e de como eles internalizam as linguagens. Não tenho absolutamente nenhum problema em trabalhar em uma dúzia de idiomas, enquanto tenho um amigo que conhece apenas C ++. Ele não é pior em programação do que eu, ele apenas aprendeu de uma maneira diferente.

Pessoalmente, acho uma pergunta relacionada mais interessante: quando há um erro no código (ou seja, o programador X pensou que ele escreveu, someFunction(x, y)mas realmente escreveu outra coisa), quão difícil é para o segundo desenvolvedor identificar o erro. Um bom programador X tornaria extremamente óbvio o que ele queria que o computador fizesse, e isso seria fácil de ler. No entanto, se ele cometeu um erro, pode ser um grande problema. Coisas como o seguinte bug do C ++:

int x = getCorrectValueForX();
if (x = 2)
   doSomethingWhenXIsTwo();

Pode ser notoriamente difícil de detectar, a menos que você conheça o idioma.


1

Não depende apenas do programador, como as outras pessoas disseram, mas também das semelhanças entre as linguagens, tanto em sintaxe quanto em filosofia e implementação.

Muitos idiomas diferentes usam uma sintaxe derivada C e, portanto, seguir o fluxo de controle será mais fácil se você estiver familiarizado com esse tipo de sintaxe. O mesmo vale para linguagens fortemente tipadas e pouco tipadas, linguagens com suporte a funções de ordem superior, nível de abstração e filosofias programáticas. Não depende apenas de você poder ler a sintaxe, mas também estar familiarizado com os conceitos e filosofias das linguagens.

Se você aprendeu C, por exemplo, acho razoável esperar que você consiga derivar o fluxo de controle de C #, Java ou C ++ etc. Seria um pouco mais difícil decifrar o VB por causa da diferença de sintaxe ou JavaScript por causa de fechamentos, digitação fraca e funções de ordem superior (eu sei que você pode fazer isso em C, mas é um pouco instável). Eu não esperaria que você, no entanto, fosse capaz de depurar o conjunto Lisp, F #, R ou, Deus permita, porque estes usam um paradigma de programação completamente diferente.

TL; DR Não é apenas importante ser capaz de reconhecer a sintaxe, na maioria das vezes você pode decifrar uma declaração ou chamada de método, mas compreender a razão por que um programa é escrito de uma certa maneira é o cerne da compreensão e da leitura de código .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.