80/20 também afeta a programação

Todos nós já ouvimos falar da regra 80/20, aquela que diz que 80% do nosso sucesso (efeitos) vem de apenas 20% das nossas ações (causas). Bem, essa verdade universal também afeta o desenvolvimento de software e, neste artigo, vamos revelar um pouco dos fundamentos desta declaração.

Processos

Business Process Management, por sua sigla em inglês, é uma disciplina de gestão (entre outras coisas) que permite compreender visualmente os processos que devem ser realizados em uma empresa (ou em muitos outros locais). Entre suas principais qualidades está o fato de poder analisar processos complexos e torná-los "simples".

Existem muitas ferramentas de software livre que permitem desenvolver diagramas de BPM, aquela que usei para este artigo é BonitaSoft. Se você quiser aprender um pouco mais sobre gerenciamento de processos existem diversos tutoriais na internet e livros sobre o assunto. Agora vamos voltar ao tópico central.

Projetos de software

Hoje em dia, existem muitas metodologias para o desenvolvimento de projetos: ágil, tradicional, híbrida, entre outras. Um ponto em comum entre todas elas é a preparação . O que quero dizer com isso? Que 80% do sucesso do seu projeto de software dependerá dos primeiros 20% de todo o processo: a preparação.

Preparando um projeto

Este é um ponto lógico que raramente é aplicado na realidade (como muitas outras coisas lógicas que são ilógicas na prática). Quando falamos de preparação, devemos entender a capacidade de compreender o problema, entender a solução e, sobretudo, o processo que a solução emprega. Uma das coisas menos comuns encontradas em projetos de software não profissionais é a falta de documentação sobre este tópico. Isso geralmente ocorre em empresas privadas, já que o desejo de vender muitas vezes ofusca o processo de desenvolvimento.

Como muitos dos leitores destes artigos trabalham na área da tecnologia ou estão relacionados a ela, vale a pena mencionar que, se em algum momento de suas vidas profissionais eles se depararem com uma empresa/fornecedor que não atenda a um bom padrão de preparação, há quase 80% de certeza de que o projeto não será bem-sucedido.

Abstração é a chave

Isso é algo que aprendi durante meu tempo usando GNU/Linux, e que se mostra fundamental no processo de desenvolvimento de software. A capacidade de abstrair problemas e transformá-los em coisas mais simples é vital para gerar código elegante e, acima de tudo, durável . E talvez essa seja uma das principais diferenças entre grandes projetos profissionais e projetos que crescem sem controle. Os primeiros planejam, compreendem e estruturam o processo, enquanto os últimos simplesmente o mantêm em funcionamento sem precisar entendê-lo.

Stager

Este é o nome do projeto que o instalador do Gentoo desenvolve, como você pode imaginar, é um processo bastante complexo, pois suporta um grande número de arquiteturas. Outro fator a levar em consideração é o número de configurações que ele suporta, no nível do kernel, sistema de inicialização, etc. E conto tudo isso porque é também o meu projeto de tese, que devo terminar antes de terminar de estudar. Obviamente não posso fazer um programa que contemple absolutamente todas as opções possíveis em tão pouco tempo (até julho do ano que vem), mas pelo menos posso gerar um que permita que um sistema funcional seja instalado de uma forma bem básica.

Compreender o processo de instalação

Graças às ferramentas BPM, um diagrama de processo pode ser gerado que nos permite entender os passos necessários para a instalação bem sucedida do Gentoo em um computador.

Processo de instalação do Gentoo

Próprio. Christopher Diaz Riveros

Apesar de conter vários processos e subprocessos, obviamente está bastante resumido e pode-se verificar que temos 18 etapas lineares. Isso é importante porque um aplicativo que possui uma estrutura linear é fácil de implementar e, ao mesmo tempo, o paralelismo pode ser gerado em um ou mais dos threads, se necessário.

Outro fator importante é que nos permite abstrair conjuntos de processos por tipo; por exemplo, definir um subprocesso do kernel permite-nos saber que existem tarefas específicas dentro dele que estão diretamente relacionadas ao processo de instalação bem-sucedida de um kernel.

Subprocesso "kernel"

Próprio. Christopher Diaz Riveros

Desta forma, cada passo “complexo” torna-se “simples” de forma global, sem perder os detalhes necessários. Isto facilita a visibilidade da montagem sem reduzir o nível de especificação necessário para concluir o processo com êxito. E não podemos negar que é mais fácil ver a imagem do que ler o Manual inteiro de uma só vez 

Economizar tempo

Outra vantagem óbvia é que, por não ter uma linguagem de programação diretamente conectada, é possível realizar análises lógicas sem necessariamente perder tempo com a implementação da linguagem. Isso é uma vantagem em comparação com a quantidade de tempo que pode ser gasto na implementação de um recurso apenas para descobrir que ele será descartado porque existe uma solução mais eficiente. Como quais seriam as soluções em pseudo-código (algo que também é ignorado por muitos "desenvolvedores", mas não deveria ser).

Direcionar projetos de forma fácil

Levando em conta esses conceitos, o gerenciamento de projetos (de qualquer natureza) se torna mais simples, pois concentramos esforços onde eles são realmente necessários, e se essa parte for feita corretamente, o resto fica sob seu próprio peso. Espero que ajude sua curiosidade e te motive a pesquisar BPM, algoritmos e quem sabe, talvez te encoraje a me ajudar com minha tese  Muito obrigado por ter vindo até aqui e nos vemos em breve. Saudações


Adicionar como fonte preferencial no Google