|
Só o código importa. Essa frase nem sempre me disse tanto quanto diz hoje em dia. Sua simplicidade desafia a compreensão de um profissional que vivenciou e ainda vivencia projetos de software nos quais o código é apenas mais uma das coisas que podem dar errado. Em um contexto no qual passamos boa parte da graduação aprendendo a montar diagramas e no mercado em que os profissionais passam o dia montando documentos, essa frase realmente não pode fazer sentido. Desde 2009 atuo em um contexto diferente da maioria do mercado: O contexto de entregas rápidas e funcionais de software. Nele o tempo é um recurso que precisa ser muito bem aplicado e tudo o que for desnecessário ou demorado deve ser simplificado ou simplesmente removido do processo, buscando a entrega. Nesse contexto, onde o que importa é software funcionando, feedbacks rápidos e projetos adaptáveis à mudança de requisitos e tecnologias, o código ganha muito mais relevância do que tem nas fábricas e torna-se a base para obtenção de bons resultados. Trabalhar nesse contexto me trouxe algumas percepções que gostaria de compartilhar. Não são verdades absolutas é claro, mas fazem muito sentido para mim:
Teorias e soluções são comprovadas com código Uma coisa comum em projetos é que ao nos depararmos com um problema, teorizamos sobre as possíveis soluções. Soluções que podem ser desde um simples design de classes até um projeto secundário que vai revolucionar o mundo. A questão é: Documentos e diagramas aceitam qualquer coisa, o código não. Nenhuma solução é válida até que se prove sua viabilidade no código. Felizmente, na área de desenvolvimento o custo para se criar uma prova de conceito não é alta. Podemos passar trinta minutos discutindo possíveis soluções para um problema em um quadro branco ou folha de papel e já partir para construção do seu código. Prolongar o tempo da solução fora do código é prejudicial, pois somente o código fornece o feedback necessário para uma avaliação. Na prática, o ideal é ficar o menor tempo possível com uma solução fora do código. O código trás resultados. Documentos não. Sabe o que você consegue quando gasta tempo confeccionando documentos e diagramas? Documentos, diagramas e nenhum software funcionando. Em um contexto no qual o objetivo é conseguir o software funcional rápido, tudo que não for essencial deve ser descartado ou simplificado, pois não há tempo a perder. Software não é um fim, mas sim um meio. O objetivo do time de desenvolvimento não é desenvolver um requisito, mas sim entender a necessidade do cliente e atendê-la com uma solução de software. Apesar dos conceitos parecerem semelhantes, na prática são completamente diferentes. Artefatos válidos são artefatos úteis. A utilidade do artefato está na informação em si, não no seu formato ou nas assinaturas de aprovação do requisito no fim da página. Reduzir o tempo de confecção de artefatos e investir em codificação é certamente uma das melhores práticas para se obter resultados rápidos. Nenhum documento diz mais sobre o software do que seu próprio código Uma linguagem de programação é tão útil para registrar uma informação quanto qualquer outro documento, com a vantagem de nunca ficar desatualizada. Geralmente, documentos são gerados para expressar regras de negócio que seriam difíceis de entender no próprio código, além de outras razões burocráticas. Meu ponto não é contra documentações, mas sim a favor de um código expressivo que não necessite de artefatos externos para ser compreendido. É claro que, até o código ser produzido, podemos precisar de documentos auxiliares para expressar as regras que devemos codificar. Porém, depois de escrito, o código passa a ser a única referência confiável sobre aquela regra. Muitas empresas acreditam que uma boa documentação irá auxiliar na passagem de conhecimento entre programadores, mas nada é tão útil quanto um código expressivo e com testes unitários que não só expressem a intenção do código, mas também garantam que o mesmo está funcionando corretamente. É possível ter um código expressivo. Investir na qualidade do código traz mais resultados do que gastar tempo na confecção de artefatos para traduzi-lo. O código levanta questões sobre o domínio Construir software é expressar através de código as coisas como elas de fato acontecem, ou seja, as imperfeições e indefinições do ambiente do cliente ficarão explicitas no momento da codificação, o que levanta a questão: O que fazer nesse momento? A comunicação entre cliente e time de desenvolvimento não é uma via de mão única, sendo totalmente plausível existirem questionamentos sobre o processo do cliente, afinal, tudo é passível de melhoria. O time de desenvolvimento não pode ser omisso ao encontrar deficiências no domínio. Uma coisa que não funciona na vida real também não vai funcionar no software, podendo inclusive potencializar problemas que não eram tão evidentes quando o processo era feito manualmente. Convenções e regras de criação de código podem auxiliar na detecção de falhas em um processo. O código mostra o nível de experiência de um profissional Não importa quantas certificações ou anos de experiência um profissional tenha. O código que ele produz é a uma das maiores evidências de sua competência. Alguns minutos de codificação ao lado de um profissional dizem muito sobre ele. Essa percepção foi a grande responsável por introduzir técnicas como Pair Programming e Coding Dojos em processos de seleção. Conclusão Em um cenário em que a entrega de software funcionando é o maior objetivo, o código se torna o bem mais precioso do projeto. O código é capaz de provar teorias, mostrar a experiência de um profissional, documentar uma regra e ainda trazer propostas de melhoria para o ambiente no qual será inserido. Algumas Referências
Comentários:
6 Comentários postados em "Fale menos, codifique mais"
Vinícius Andrade on maio 26th, 2011 at 19:22 #
Entregar software de forma rápida e funcional é muito diferente do que a maioria das fábricas faz hoje em dia! Para produtos, criar um help explicando as funcionalidades e as regras de negócio é essencial! Mas, acima de tudo, é essencial entender o cliente e as necessidades (mesmo as não ditas) para entregar o melhor software possivel.
Claudio Br on maio 31st, 2011 at 22:43 #
Nossa, que beleza de post, e o melhor, escrito por quem desenvolve software. Acho que de tudo o mais importante é “Teorias e soluções são comprovadas com código”. Perdi muito tempo da minha vida tratando requisitos, que são hipóteses a serem comprovadas como certezas que precisam ser realizadas. Denis, existe algo muito legal que pode complementar esse bom trabalho e é de responsabilidade principal do PO e deve ser apoiada pelo time: “a arte de não fazer software”. Mais código escrito traz mais risco de problemas. Tudo que puder ser resolvido sem software (de forma razoável) é melhor para o negócio, ou seja, aqueles 50% das funcionalidades que acabam nunca sendo usadas pelo negócio nunca deveriam ir para o desenvolvimento. Nem sempre temos certeza disso, se algo é ou não útil pode também ser uma hipótese. Como comprovar? Código! Desenvolve um pouquinho e entrega. Se ninguém usar… grande abraço,
Denis Ferrari on maio 31st, 2011 at 23:41 #
Olá Claudio, Concordo plenamente com você. No time no qual atuo, nosso maior desafio é “Fazer menos”. Ser pragmático e não desenvolver mais do que o necessário para atender a necessidade do cliente. Obrigado pelo feedback! Abraços!
Viviane Guerra on junho 2nd, 2011 at 15:57 #
Oi Denis, concordo que codificar mais é uma ótima solução. Ja aprendi pela experiência e ouvi experts dizendo que requisito só é validado de fato quando o cliente põe a mão no software redondo e fala “é isso que eu queria”. Quanto a documentar soluções… depende do que vc considera documento. Minha tese é que qualquer artefato, seja uma ordem de serviço aberta, uns rabiscos na NAPKIN ou diagrama UML, que fale sobre o seu sistema pode considerado um documento. O legal é manter as informações NECESSÁRIAS acessíveis, organizadas e disponíveis para quando você precisar. E garanto que em algum momento, o que te parece óbvio agora, pode ser um “problema de memória” futuramente. Para mim, a chave é usar o equilíbrio, documentar o que for preciso documentar (incluindo comments nos códigos) na medida da necessidade. Adorei seu blog.
Denis Ferrari on junho 6th, 2011 at 10:49 #
Oi Viviane, Concordo com você. No que diz respeito a escrita do “requisito”, qualquer meio é válido, desde que o time entenda o objetivo do cliente. Sobre a documentação, registrar a intenção do seu código com testes unitários acaba sendo mais efetivo que um documento em linguagem natural. Abraços!
Luis Fernando Lopes on agosto 15th, 2011 at 14:23 #
Concordo que você só conhece um profissional, a partir de um código que ele faça e não importa o tempo que ele tenha de desenvolvimento ou o número de certificações.. até pq certificação não quer dizer que vc sabe basta pegar um testking.. Mas não é essa a questão, a questão é que eu acredito que deva ter documentação, por melhor que esteja o código, a regra de negocio muitas vezes não está explicita e o projeto é muito grande ao ponto de ninguém da equipe conhecer direito o processo. Deixe um comentário
|
|