O código científico é um domínio diferente o suficiente para ignorar padrões comuns de codificação?
Não, não é.
O código de pesquisa geralmente é "descartado" e escrito por pessoas que não são desenvolvedores por experiência, por mais fortes que sejam suas credenciais acadêmicas. Alguns dos códigos de pesquisa que escrevi me faziam chorar . Mas funcionou!
Uma coisa a considerar é que os porteiros dos projetos conduzem o que é incluído. Se um grande projeto começou como um projeto de código acadêmico / de pesquisa, acaba funcionando e agora está uma bagunça, alguém precisa tomar a iniciativa de refatorá-lo.
É preciso muito trabalho para refatorar o código existente que não está causando problemas. Especialmente se for de todo o domínio específico ou não tiver testes. Você verá que o OpenCV possui um guia de estilo muito abrangente, mesmo que não seja perfeito. Aplicando isso retroativamente a todo o código existente? Isso não é para os fracos de coração.
Isso é ainda mais difícil se todo esse código funcionar. Porque não está quebrado. Por que consertar isso?
No entanto, esses projetos prosperam, são mantidos e amplamente utilizados!
Esta é a resposta, em certo sentido. O código de trabalho ainda é útil e, portanto, é mais provável que seja mantido.
Pode ser uma bagunça, especialmente inicialmente. Alguns desses projetos provavelmente começaram como um projeto único que "nunca precisaria ser reutilizado e poderia ser jogado fora".
Considere também que, se você estiver implementando um algoritmo complexo, pode fazer mais sentido ter métodos maiores, pois você (e outras pessoas familiarizadas com o lado científico) pode conceitualmente entender melhor o algoritmo. Meu trabalho de tese foi relacionado à otimização. Ter a lógica do algoritmo principal como um método era consideravelmente mais fácil de entender do que estaria tentando separá-lo. Certamente violou a regra "7 linhas por método", mas também significou que outro pesquisador poderia examinar meu código e entender mais rapidamente minhas modificações no algoritmo.
Se essa implementação fosse abstraída e projetada bem, essa transparência seria perdida para não programadores .
Para outros respondentes: Esta pergunta refere-se à base de código das bibliotecas de código-fonte aberto para tarefas computacionalmente intensivas em um ou mais domínios científicos. Esta pergunta não é sobre código descartável. Faça uma pausa por um momento para ter certeza de entender todos os aspectos destacados antes de escrever uma resposta.
Eu acho que as pessoas geralmente têm a idéia de que todos os projetos de código aberto começam como "ei, eu tenho uma ótima idéia para uma biblioteca que será muito popular e usada por milhares / milhões de outras pessoas" e, em seguida, todo projeto acontece assim.
A realidade é que muitos projetos são iniciados e morrem. Uma porcentagem ridiculamente pequena de projetos "chega" ao nível do OpenCV ou VTK etc.
O OpenCV começou como um projeto de pesquisa da Intel. A Wikipedia descreve como parte de uma "série de projetos". Seu primeiro lançamento não beta foi em 2006, ou sete anos após o início. Suspeito que o objetivo inicialmente era versões beta significativas, não código perfeito.
Além disso, a "propriedade" do OpenCV mudou significativamente. Isso faz com que os padrões mudem, a menos que todas as partes responsáveis adotem exatamente os mesmos padrões e os mantenham durante o projeto.
Devo também salientar que o OpenCV já existia há vários anos antes da publicação do Manifesto Ágil, a partir do qual o Clean Code se inspira (e o VTK quase 10). O VTK foi iniciado 17 anos antes da publicação do Clean Code (o OpenCV era "apenas" 9 anos antes).