Por que o desenvolvimento de software deve ajudá-lo na vida… e na política?

Luc Claustres Blocked Desbloquear Seguir Seguindo 10 de janeiro

Como desenvolvedores de software, considero que temos a oportunidade de interagir praticamente com um grande público e construir um know-how em sistemas complexos. Talvez mais do que a maioria das pessoas realmente faz, e esse conhecimento pode ser usado em sua vida diária …

O que exatamente é o desenvolvimento de software?

Em primeiro lugar, devo confessar que muitas vezes é difícil explicar o que é o desenvolvimento de software e software para pessoas sem conhecimento prévio. Você pode encontrar muitas definições como “ uma coleção de instruções que informam ao computador como trabalhar ”, “ a arte de criar um programa que pode executar uma tarefa necessária ” ou “ os processos coletivos envolvidos na criação de programas ”. Eu acho que precisamos de algo mais “prático”, então eu diria que programas são ferramentas usadas por pessoas para trocar e manipular informações significativas , ou seja, conceitos (eu sei que isso não cobre todos os tipos de software, mas principalmente aqueles usados por pessoas Vida real). Geralmente, esses conceitos estão vinculados a um domínio específico, como contabilidade (por exemplo, ERP ), comunicação em linguagem natural (por exemplo, bate-papo ), etc. Desenvolvedores de software simplesmente são pessoas criando essas ferramentas.

Manipular informações significativas é, na verdade, o que seu cérebro sempre faz . E essa informação é sempre uma receita para a ação, seja modificando seu comportamento, o comportamento dos outros ou interagindo com objetos do mundo real. Por exemplo, um software notificando alertas pode transformar uma entrada de sensor em uma saída visual significativa (por exemplo, uma luz vermelha), fazendo com que as pessoas parem uma máquina ou impeçam outras pessoas de realizar algumas tarefas ao receber as informações. Quase todas as empresas ou organizações humanas podem usar um programa de software para executar várias tarefas, o que pode facilitar o trabalho de uma pessoa, garantir mais segurança, reduzir o número de erros, reduzir o tempo para executar uma tarefa e / ou reduzir a necessidade de mão de obra.

Por que o desenvolvimento de software é uma profissão única?

O desenvolvimento de software nunca foi uma ciência exata e a projeção de conclusão e execução de programas pequenos é extremamente difícil. Embora seja fora do escopo deste artigo demonstrar essa suposição, aqui estão alguns insights: os requisitos são coletados a partir de linguagem humana ambígua, os algoritmos estão sujeitos ao problema da parada , o teste está sujeito à explosão combinatória , etc.

Mais especificamente, o software envolve sistemas complexos (intrinsecamente ou interagindo com). Um sistema complexo é um sistema composto de muitos componentes que interagem entre si de maneira intrinsecamente difícil de modelar, levando a reações imprevistas. Grupos humanos ou sociedades, formados pela interação e dependência mútua dos indivíduos, é um sistema complexo. Outros exemplos de sistemas complexos são organismos, o cérebro humano, organizações econômicas, etc.

Por último, mas não menos importante, o desenvolvimento de software foi um dos primeiros a adotar o modelo de código aberto que incentiva a colaboração aberta. Isso se refere, por um lado, à produção por pares que depende de comunidades públicas auto-organizadas de indivíduos. Por outro lado, licenciado de forma a permitir ser utilizado, modificado e distribuído gratuitamente.

Em certo sentido, o desenvolvimento de software é provavelmente a única indústria artesanal que mistura alta tecnologia e colaboração transnacional massiva .

O que os desenvolvedores de software aprenderam?

1. Contexto é tudo

Este princípio é talvez o mais importante porque todos os outros resultam dele de alguma forma, tentarei explicá-lo com um exemplo real. No passado, trabalhei em um software de centro de controle de satélite, repliquei o ambiente de execução (SO, aplicativos, etc.) e executei a chamada aceitação de fábrica em nossas instalações. Tanto quanto nós poderíamos ver tudo funcionou como esperado. Depois, seguimos com crescente espanto a chamada aceitação no local nas instalações do cliente. Na verdade, as coisas começaram a dar errado rapidamente, não que o software falhasse, mas agisse aleatoriamente às vezes, sem causar nenhum erro. Depois de muitas investigações, notamos que alguns dos valores de configuração eram um pouco diferentes na memória do que nos arquivos. Finalmente descobrimos que a casa decimal do sistema operacional era definida de maneira diferente do que em nosso ambiente de teste, fazendo com que o analisador leu erroneamente valores de ponto flutuante. De fato, a Grã-Bretanha e os Estados Unidos são dois dos poucos lugares no mundo que usam um período para indicar a casa decimal, enquanto muitos outros países usam uma vírgula e, infelizmente, o servidor de nosso cliente. A explicação do nosso fracasso é simples: o contexto mudou . O que funcionou bem em um contexto não funcionou nem um pouco diferente .

Assim, da próxima vez que um político tentar persuadi-lo, uma receita deve ser aplicada porque ela produziu bons resultados há 50 anos ou em outro país, pergunte-se: são contextos semelhantes (e se contextos semelhantes podem ser encontrados em complexos sistemas como uma sociedade humana)?

2. Planejar em detalhes não ajuda a cumprir os prazos

A falácia do planejamento é um dos vieses cognitivos mais comuns e consistentemente demonstrados. Está provado que as pessoas subestimam o tempo que levará para completar uma tarefa futura, apesar do conhecimento de que tarefas anteriores geralmente demoraram mais do que o planejado . Em suma, quanto mais tarefas seu projeto envolve, mais oportunidades existem para planejar dar errado. Eu não digo que você não deve planejar nada, mas se a sua agenda tem muitos detalhes, você provavelmente acabará completamente sobrecarregado na tentativa de mantê-la, em perigo para o projeto. Na minha humilde opinião, o mesmo se aplica se você tentar controlar todos os detalhes da produção .

Como conseqüência, nos últimos anos, o gerenciamento de projetos de software comercializou exaustivo planejamento inicial (também conhecido como Waterfall ) para começar com pequenos passos, reunir feedback, aprender, corrigir o curso e depois repetir (também conhecido como abordagem ágil ). Um dos quatro princípios centrais do Manifesto Ágil é precisamente: responder à mudança depois de um plano .

A próxima vez que você ouvir um político descrever seu plano pelos próximos 5 ou 10 anos, eu recomendo um profundo ceticismo, ele deve ao menos descrever simultaneamente como ele irá lidar com as mudanças em seu plano. Da mesma forma, se ele quiser criar uma nova estrutura com centenas de casos específicos, mas prometer que uma instituição de controle será configurada para garantir que as coisas sejam colocadas nos lugares certos, você deve se perguntar se a nova instituição não custará mais do que a meta. objetivo.

3. Totalmente testado é sempre uma perspectiva

Quando as relações de causa e efeito são facilmente rastreáveis, você pode seguir o link para ver o que faz com que um elemento mude seu estado. Mas, em sistemas complexos, rastrear a causa de uma determinada mudança de estado, ou mesmo se um determinado estado é alcançável, é em geral impossível . E, do ponto de vista da teoria de computação, a pior das hipóteses significa investigar todas as possíveis configurações de estado possíveis em cada etapa do programa. Para um programa pequeno, já estamos em um inventário de teste muito além do número de moléculas no universo.

Às vezes, diferentes bugs compensam a si mesmos, de forma que o sistema parece funcionar como esperado. Mas uma vez que um bug é resolvido, outros aparecem do nada. Outro exemplo aqui, trabalhei em um software de visualização 3D conectado a um simulador e descobri que todos os cálculos de orientação realizados pelo simulador foram realmente revertidos. Ninguém notou isso por anos, porque o software de análise de saída anterior não fornecia nenhuma visualização 3D e também reverteu a orientação usando uma convenção errada em uma exibição textual. Às vezes, uma única pequena falha pode quebrar todo um sistema devido à interação complexa entre seus componentes. Se você não acredita em mim, simplesmente leia sobre os dez principais erros de software de todos os tempos .

Se um político alega ter uma solução totalmente testada para um problema, peça-lhe que o prove primeiro, geralmente a lei de Murphy é a melhor aposta.

4. Manter é mais difícil do que construir

Ao contrário do que você pode acreditar, a manutenção de software é uma atividade mais ampla do que o desenvolvimento de software. Na verdade, inclui correção de erros, melhorias, prevenção de recursos obsoletos, otimização, etc. Como a mudança é inevitável, é preciso desenvolver mecanismos para avaliação, controle e modificações. Por exemplo, de acordo com estimativas , o governo federal dos EUA planeja gastar mais de 80% do orçamento de TI em Operações e Manutenção.

Eu sempre me surpreendo com a quantidade de programas políticos focados na criação de novas leis (ou seja, desenvolvimento), em vez da revogação ou aprimoramento de leis obsoletas (ou seja, manutenção), embora o custo mais importante seja sempre gerenciar o “sistema legado”.

5. A centralização não consegue escalar

Para construir um software que seja escalável, ou seja, que suporte o uso massivo ou a complexidade, os desenvolvedores favorecem um modelo distribuído / descentralizado versus um monolito / modelo centralizado . Na verdade, isso aumenta a tolerância a falhas, ataques e evita o conluio (subgrupos que coordenam “contra” outros, um exemplo simples é a necessidade de leis antitruste). Do ponto de vista político, o último ponto é provavelmente o mais importante – quantos indivíduos são capazes de controlar o sistema social?

“Descentralização” é uma das palavras que é usada no espaço político com mais frequência hoje em dia. Isso prova que a maioria dos países desenvolveu primeiro estruturas administrativas governamentais centralizadas. Embora muitos políticos tenham anunciado reformas descentralizadoras, é provável que muitas delas tenham sido minadas. De fato, a descentralização requer estruturas centralizadas para minar sua própria posição , liberando poder para a periferia, mas estas são as pessoas com menos interesse em seu sucesso .

Conclusão

Como o software, a condição humana é diversa, formada por bilhões de variáveis, muitas das quais o humano tinha pouco controle (chame-o de “contexto”), de modo que não podem / não fazem a coisa certa em todos os momentos a vida deles. E neste artigo tentei destacar as lições mais importantes que os desenvolvedores de software aprenderam da maneira mais difícil e que não devemos esquecer como seres humanos: confie na colaboração ao invés de controle e seja humilde sobre o que podemos alcançar.

Texto original em inglês.