A Importância das Estruturas de Dados

por Fabio A. Mazzarino

Qualquer curso de desenvolvimento, seja curso livre, técnico, ou superior, começa a ensinar desenvolvimento ensinando algoritmos. Natural, uma vez que a maioria das pessoas não conhece como funciona código estruturado.

O que raramente é ensinado é a importância das estruturas de dados para o desenvolvimento de software, isso reflete em muitos projetos, muitas vezes profissional, que sofrem pela falta de estruturação dos dados.

Os Exemplos em C e C++

Os dois últimos posts (Implementando Pilha com Lista Ligada em C e Implementando Pilha com Lista Ligada em C++) servem bem ao propósito de ilustrar a importância da estruturação dos dados.

Em ambos os casos foram implementadas duas pilhas, uma utilizando C e outra utilizando C++. Desde o início o foco principal foi na estrutura de dados, e somente depois no algoritmo. Isso fica bem claro na pouca diferença que existe entre as duas implementações, as estruturas de dados são bem próximas, e consequentemente o mesmo acaba por acontecer com o código fonte.

Vantagens

Ao colocar as estruturas de dados em ênfase foi possível obter uma série de vantagens.

O fato de organizar inicialmente os dados melhora a qualidade geral da gestão dos dados. Evita duplicidade de dados, consequentemente evita a necessidade de gerenciar múltiplas cópias dos dados; evita também a possibilidade de existirem dados conflitantes.

Com cada código gerindo um conjunto de dados a duplicidade de código para gerir o mesmo conjunto de dados é eliminada, reduzindo a base de código no geral. Cada alteração na estrutura de dados implica em menos modificações, e menor chance de erros de desenvolvimento.

Adicionalmente a manutenção geral do código fica mais facilitada, reduzindo o tempo e o custo de manutenção. As falhas são corrigidas mais rapidamente, com menor custo, e as melhorias são implementadas mais facilmente, e com menos erros. A estabilidade geral do sistema é incrementada.

Consequências

Quando um sistema não tem foco nas estruturas de dados há consequências, a primeira delas é a dificuldade de manutenção por conta da profusão de código. O principal sintoma são os arquivos com grande quantidade de linhas, com funções cada vez mais longas.

Outro sintoma é o processamento executando tarefas repetidas, seja para gerenciar estruturas de dados duplicadas e dessincronizadas, ou para executar tarefas duplicadas ou rotinas que já haviam sido executadas.

Conjuntamente vem a dificuldade de manutenção do código, sendo necessário desenvolvedores cada vez mais experientes no sistema. O treinamento de novos desenvolvedores hábeis à manutenção fica cada vez mais complicado exigindo um tempo cada vez maior. Cada alteração envolve um esforço crescente, e as possibilidades de falhas aumentam proporcionalmente.

No geral o código passa a ser menos estável, mais sujeito a falhas de difícil detecção. O tempo para determinar a causa raiz de uma falha é maior, exigindo maior esforço, e consequente custo, para a solução de problemas detectados.

As consequências são mais facilmente detectadas conforme o tamanho do sistema, sendo mais dificilmente notadas em sistemas pequenos, e mais impactantes em sistemas grandes. Em todos os casos os desperdícios são aparentes, porém nem sempre facilmente detectáveis.