Achei interessante a thread sobre a importância do design, e então resolvi postar outro assunto correlato.
Você é contratado para desenvolver um sistema. Para desenvolve-lo primeiro é necessário um conhecimento a cerca do dominio do problema. Então você faz algum design para organizar as informações coletadas e traçar alguma estratégia de desenvolvimento. E então sai “codando”. Apresenta um protótipo, mexe aqui e acolá, a coisa vai amadurecendo e voila! Nasce o sistema. Como todo criança ele vai crescer e amadurecer.
Por mais atento, experiente e paranormal que você seja vão aparecer necessidades ao longo do tempo que você não percebeu ou então concluirá que determinada parte do sistema precisa ser refeita. A famosa manutenção.
O tempo passa e novas maneiras de fazer aquele sistema vão aparecendo. São as mudanças de paradigma. Um dia você conclui que aquele sistema, se fosse feito com os conhecimentos atuais, seria incrivelmente melhor, mais ágil e menos “sacal” de se fazer manutenção. E aí? Vai fazer tudo novamente do zero ou “já que está funcionando deixa como está”?
Sempre fiquei preocupado com a velocidade que as coisas evoluem na informática. Por isso procurei me dedicar aquelas linguagens/tecnologias que me parecessem menos volúveis. Um exemplo é a linguagem C. Demorei bastante a aceitar o Java, precisava ter a certeza que “a coisa ia pegar” e não desaparecer dentro de alguns anos.
Não é um sistema basicamente o conhecimento a cerca de procedimentos sobre uma base de dados? E se ao invés de escrevermos programas, escrevessemos uma base de conhecimento e sobre essa base, um programa e não um programador gerasse o sistema? Se hoje temos Java, geramos os sistemas em Java. Se amanhã for X, geramos para X. Concentrariamos os esforços de programação no programa gerador e não no sistema em si, afinal ele é apenas a projeção de um conhecimento.
Será possivel?


