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.)
Respostas:
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.
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.
fonte
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, a
its importance
relevâ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.
fonte
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 ++:Pode ser notoriamente difícil de detectar, a menos que você conheça o idioma.
fonte
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 .
fonte