Ontem conversando com Yaron de #Isarael (Solution Architect Sr – eGlue / Nice) sobre qual era a visão dele em relação a iniciar o projeto do zero ou continuar com o “antigo” e ele tomou uma atitude que me surpreendeu enviando o artigo aqui publicado agora, acredito que esse artigo é de grande importância a todos.
A fonte original do mesmo se encontra aqui: http://www.joelonsoftware.com/articles/fog0000000069.html
Coisas que você nunca deve fazer, parte I
Netscape 6.0 está finalmente chegando ao seu primeiro beta público.Nunca houve uma versão 5.0. O último lançamento grande, versão 4.0, foi lançado há quase três anos. Três anos é muito tempo no mundo da Internet. Durante este tempo, o Netscape sentou-se, impotente, como sua participação no mercado despencou.
É um bajulador pouco de mim criticá-los para esperar tanto tempo entre os lançamentos. Eles não fizeram isso de propósito, agora, não é?
Bem, sim. Eles o fizeram. Eles fizeram isso ao fazer o pior erro estratégico único de que qualquer empresa de software pode fazer:
Eles decidiram reescrever o código do zero.
Netscape não foi a primeira empresa a cometer este erro.Borland cometeu o mesmo erro quando comprei Arago e tentou fazê-lo em dBase para Windows, um projecto condenado que levou tanto tempo que o Microsoft Access comeu seu almoço, então eles fizeram isso de novo em reescrever Quattro Pro a partir do zero e as pessoas com surpreendente quão poucos recursos que ele tinha. Microsoft quase cometeu o mesmo erro, tentando reescrever o Word para Windows a partir do zero em um projeto fadado chamado Pyramid que foi fechada, jogada fora, e varridos para debaixo do tapete. Sorte para a Microsoft, que nunca parou de trabalhar na base do código antigo, então eles tinham algo para navio, tornando-se meramente de uma catástrofe financeira, e não uma estratégia.
Estamos programadores. Programadores são, em seus corações, arquitetos, ea primeira coisa que quero fazer quando chegar a um site é para arrasar o lugar plano e construir algo grandioso. Nós não estamos animado pela renovação elementares: consertar, melhorar, plantando canteiros de flores.
Há uma razão sutis que os programadores sempre querem jogar fora o código e começar de novo. A razão é que eles acham que o código antigo está uma bagunça. E aqui é a observação interessante: eles provavelmente estão errados. A razão que eles acham que o código antigo está uma bagunça por causa de um direito fundamental, o direito cardeal da programação:
É mais difícil ler o código de escrevê-lo.
É por isso que a reutilização de código é tão difícil. É por isso que todos em sua equipe tem uma função diferente que eles gostam de usar para dividir strings em arrays de strings. Eles escrevem a sua própria função, pois é mais fácil e divertido do que descobrir como funciona a função de idade.
Como corolário desse axioma, você pode pedir praticamente qualquer programador hoje sobre o código que está trabalhando. “É uma grande bagunça peluda”, eles vão te dizer. “Eu gostaria de nada melhor do que jogá-lo fora e começar de novo.”
Por que é uma bagunça?
“Bem”, dizem eles, “olhe para esta função. São duas páginas! Nenhuma parte deste material pertence lá! Eu não sei o que metade destas são para as chamadas de API”.
Antes da nova planilha Borland para Windows enviado, Philippe Kahn, fundador colorido da Borland, foi citado muito nos vangloriando de imprensa sobre como Quattro Pro seria muito melhor que o Microsoft Excel, porque foi escrito a partir do zero.Todo o código fonte nova! Como se o código-fonte enferrujado.
A idéia de que o novo código é melhor do que velho é patentemente absurdo. Código antigo foi usado. Foi testado. Lotes de bugs foram encontrados, e eles foram fixados. Não há nada errado com ele. Ele não adquirem bugs, só por estarem em seu disco rígido. Au contraire, baby!É um software deveria ser como um velho Dodge Dart, que oxida apenas sentado na garagem? É um software como um ursinho de pelúcia que é meio nojento, se não é feito de todo o material novo?
Voltar a essa função de duas páginas. Sim, eu sei, é apenas uma função simples para mostrar uma janela, mas tem crescido pelinhos e outras coisas sobre ele, e ninguém sabe porquê. Bem, eu vou dizer porquê: esses são correções de bugs. Um deles correções de bugs que Nancy tinha quando tentei instalar a coisa em um computador que não tem o Internet Explorer. Outro que corrige bug que ocorre em condições de pouca memória. Outro que corrige bug que ocorria quando o arquivo está em um disquete e que o usuário puxa para fora o disco no meio.Essa chamada LoadLibrary é feio mas faz o trabalho de código em versões antigas do Windows 95.
Cada um destes bugs levou semanas de uso no mundo real antes de serem encontrados. O programador pode ter gasto um par de dias reproduzir o bug no laboratório e corrigí-lo. Se ele é como um monte de erros, a correção pode ser uma linha de código, ou pode até mesmo ser um casal de personagens, mas de muito trabalho e tempo entraram os dois personagens.
Quando você joga fora de código e começar do zero, você está jogando fora todo esse conhecimento. Todos os recebidos correções de bugs.Anos de trabalho de programação.
Você está jogando fora a sua liderança no mercado. Você está dando um presente de dois ou três anos para os seus concorrentes, e acreditem, isso é um longo tempo em anos de software.
Você está se colocando numa posição extremamente perigoso, onde você estará enviando uma versão antiga do código por vários anos, completamente incapazes de fazer quaisquer mudanças estratégicas ou reagir a novos recursos que o mercado exige, porque você não tem código entregável. Você pode muito bem fechar negócios durante o período.
Você está desperdiçando uma quantidade de dinheiro estranho escrever o código que já existe.
Existe uma alternativa? O consenso parece ser que o código base do Netscape antigo era muito ruim. Bem, pode ter sido ruim, mas você sabe o quê? Funcionou muito bem em darn uma enorme quantidade de sistemas de computador do mundo real.
Quando os programadores dizem que seu código é uma bagunça santa (como sempre fazem), existem três tipos de coisas que estão erradas com ela.
Em primeiro lugar, há problemas de arquitetura. O código não está contabilizado corretamente. O código de rede está aparecendo suas próprias caixas de diálogo a partir do meio do nada, o que deveria ter sido tratado no código de interface do usuário. Estes problemas podem ser resolvidos, um a um, cuidadosamente, em movimento, refatoração de código, mudando interfaces. Elas podem ser feitas por um programador que trabalha com cuidado e fazer check-in suas alterações de uma só vez, de modo que ninguém é interrompido.Mesmo bastante grandes mudanças na arquitetura pode ser feito semjogar fora o código. No projeto Juno, passamos vários meses Rearchitecting em um ponto: basta mover as coisas, limpá-las para cima, criando classes base que fazia sentido, e criação de interfaces acentuada entre os módulos. Mas fizemo-lo com cuidado, com a nossa base de código existente, e não introduzir novos bugs ou jogar fora o código de trabalho.
A segunda razão programadores pensam que seu código é uma bagunça é que é ineficiente. O código de processamento no Netscape foi rumores de ser lento. Mas isso só afeta uma pequena parte do projeto, que você pode otimizar ou mesmo reescrever. Você não tem de reescrever a coisa toda. Ao otimizar a velocidade, 1% do trabalho é que 99% do estrondo.
Em terceiro lugar, o código pode ser doggone feio. Um projeto em que trabalhei na verdade tinha um tipo de dados chamado FuckedString.Outro projeto tinha começado usando a convenção de começar variáveis membro com um sublinhado, mas depois mudou para o padrão mais “m_”. Assim, metade das funções começou com “_” e metade com “m_”, que olhou feio. Francamente, esse é o tipo de coisa que você resolve em cinco minutos com uma macro no Emacs, e não por começar do zero.
É importante lembrar que quando você começar do zero não háabsolutamente nenhuma razão para acreditar que você vai fazer um trabalho melhor do que você fez pela primeira vez. Primeiro de tudo, você provavelmente não tem mesmo a equipe de programação mesmo que trabalhou em uma versão, então você realmente não tem “mais experiência”. Você só vai fazer a maior parte dos antigos erros de novo, e apresentar alguns problemas que não estavam na versão original.
O velho mantra construir uma para jogar fora é perigoso quando aplicado a grandes aplicações comerciais.Se você estiver escrevendo código experimentalmente, você pode querer rasgar a função que você escreveu na semana passada quando você pensar em uma melhor algoritmo. Isso é bom. Você pode querer refatorar uma classe para torná-lo mais fácil de usar. Isso é bom, também. Mas jogando fora todo o programa é uma loucura perigosa, e se realmente tinha alguma Netscape supervisão de um adulto com experiência na indústria de software, eles não poderiam ter atirado no próprio pé tão mal.
Categorias:Diversos, Gerência de Projetos, Programação
Deixe uma resposta