Espero que esta não seja uma questão geral demais; Eu realmente poderia usar alguns conselhos experientes.
Eu sou recém-contratado como o único "Engenheiro de SW" em uma pequena loja de cientistas que passou os últimos 10-20 anos reunindo uma vasta base de código. (Foi escrito em uma linguagem virtualmente obsoleta: G2 - pense em Pascal com gráficos). O programa em si é um modelo físico de uma usina de processamento químico complexo; A equipe que o escreveu possui conhecimento de domínio incrivelmente profundo, mas pouco ou nenhum treinamento formal em fundamentos de programação. Eles aprenderam recentemente algumas lições difíceis sobre as conseqüências do gerenciamento de configuração inexistente. Seus esforços de manutenção também são muito prejudicados pelo vasto acúmulo de "lodo" não documentado no próprio código. Vou poupar-lhe a "política" da situação (há sempre política!), Mas basta dizer que não há um consenso de opinião sobre o que é necessário para o caminho a seguir.Eles me pediram para apresentar à equipe alguns dos princípios do desenvolvimento moderno de software. Eles querem que eu introduza algumas das práticas e estratégias padrão do setor relacionadas a convenções de codificação, gerenciamento do ciclo de vida, padrões de design de alto nível e controle de origem. Francamente, é uma tarefa bastante difícil e não sei por onde começar.
Inicialmente, estou inclinado a ensiná-los em alguns dos conceitos centrais do Programador Pragmático , ou Refatoração do Fowler ("Code Smells", etc) . Também espero introduzir várias metodologias ágeis. Mas, em última análise, para ser eficaz, acho que vou precisar aperfeiçoar os fundamentos básicos de 5 a 7; em outras palavras, quais são os princípios ou práticas mais importantes que eles podem realisticamente começar a implementar, o que lhes dará o maior "retorno do investimento".
Então, essa é a minha pergunta: O que você incluiria em sua lista de estratégias mais eficazes para ajudar a endireitar o espaguete (e evitá-lo no futuro)?