Overengineering: A raíz de todo mal
"Otimização prematura é a raíz de todo mal" - Donald Knuth
Eu sou o tipo de pessoa que buscou sempre soluções complexas não só para problemas simples, mas também para simplificar processos já existentes. Provavelmente essa foi a razão da minha entrada no mercado de tecnologia e a busca por um diploma na área de engenharia. Esse instinto curioso de procurar saber como tudo funciona é algo que me acompanha desde a infância. Na adolescência, eu acreditava que fazer coisas difíceis me faria mais inteligente, então naquela época eu era aficionado por Nanotecnologia, Inteligência Artificial, e várias outras "HardSciences" da moda. Não só isso, eu queria ser um analista, um construtor e um pensador, por isso eu me esforçava nos temas de filosofia, literatura e línguas. De certa forma, isso me moldou muito bem, hoje falo 4 idiomas, fiz/faço diversos cursos, trabalho com tecnologia, e tenho uma estante linda (em construção) de livros variados (Não estou querendo me gabar, apenas citando consequências desses eventos), mas isso nunca foi o suficiente, sempre quis fazer mais coisas, pois há tanto o que aprender, tanto há explorar e melhorar.
O blog foi uma válvula de escape, pois eu poderia escrever sobre diversos assuntos e sentir que isso complementaria o meu "vazio" na questão de produção útil a sociedade. Foi assim que me senti, quando no meu primeiro de mês de faculdade, ingressei em um projeto que estava sendo formulado por alunos veteranos, chamado "Arandu", onde o foco era ensinar engenharia básica para alunos de escola pública, pois na minha cabeça, eu já estaria devolvendo a sociedade, de forma rápida, o que ela estava investindo em mim, afinal de contas, universidades públicas são pagas com o dinheiro dessa mesma sociedade. A verdade, é que nossas experiências pessoais, alinhadas a nossos interesses e talentos, geram ideias e caminhos no momento em que começamos o processo criativo para resolver algum problema, criar alguma solução, algo que ajude as pessoas ou as prejudique (evite isso). Alguns chamam esse processo de "designthinking", outros de engenharia, não existe um consenso sobre os limites de cada abordagem, mas todas começam com o famoso "brainstorming", e é nesse momento que as pessoas mais empolgadas (eu, por exemplo) cometem o erro de evitar a abordagem mais simplista do problema. No mundo da tecnologia, usamos muitas vezes o termo "overengineering" para nos referirmos a uma solução muito rebuscada e complicada para aquele problema, não importa o quão complicado seja o problema, existem soluções simples e soluções complexas, a SpaceX construiu dezenas de foguetes usando equipamentos que não eram de origem militar, rádios amadores, economizando assim alguns milhões. Provavelmente na tecnologia esse termo surgiu mais recentemente, pois as pessoas de TI hoje dispõem de "técnicas melhores", existem muitas tecnologias e muitas maneiras de fazer algo, se formos comparar com 15 ou 20 anos atrás, hoje é muito mais fácil desenvolver e publicar um site na internet. Fazer algo simples não significa fazer algo ruim, mal feito ou pouco consistente, muito pelo contrário, às vezes, a maneira mais inteligente de realizar algo, é buscando sua simplicidade, e assim é que bons arquitetos, engenheiros e designers devem pensar.
Claro, existem casos e casos. É óbvio que meu blog não precisa e nem deve usar as mesmas técnicas e complicações que a plataforma da Netflix, por exemplo, e é claro que eles possuem um sistema com maior complexidade, porém, provavelmente eles também buscam a forma menos complexa de fazer o seu trabalho. Na maioria das vezes, o simples também é o melhor, algumas vezes, pessoas buscam meios complexos para construírem ferramentas simples para o usuário final, e isso não tem problema, são ossos do ofício, porém sempre que possível, vale mais a pena pensar mais e de forma inteligente para chegar na solução mais simples (note que não estou falando de dificuldade aqui). É aqui que entra uma das minhas filosofias favoritas (ou chame de método, o que quiser) -KISS (KeepItSimpleStupid), para não contar muita história, basicamente é um termo militar inventado nos anos 60 por um engenheiro chamado Kelly Johson. A ideia por trás disso era que basicamente um militar pudesse consertar no meio do combate, qualquer equipamento construído pelos engenheiros. Existem variações desse acrônimo, e outras filosofias ou princípios construídos baseados nele, como, por exemplo, o YAGNI (YouAren't GonnaNeedIt), traduzindo seria "Você não vai precisar disso", ou seja, não precisamos complicar algo até que seja necessário. Existem muitos outros muito interessantes, mas não vou me estender nisso. Até agora em minha carreira eu me deparei com frases semelhantes: "Faz certo que dá certo". Os desenvolvedores mais experientes sabem que usar esse forma de abordagem é muito melhor do que adicionar várias camadas de complexidade desnecessárias, causando mais dor de cabeça no futuro. Provavelmente, adotar um pouco desses princípios na vida, facilita muito a forma como lidamos com os problemas.
Recentemente comecei a ler um livro chamado "Como inventar tudo" do Ryan North, basicamente o livro começa como um manual de instruções para um equipamento chamado FC3000, que é uma máquina do tempo. Este documento explica todas as consequências do seu uso, ética envolvida, e possui uma seção de perguntas frequentes. No final ele possui um "Guia de Reparo", onde diz que infelizmente é impossível consertar a máquina, e que se você está lendo esta parte, é porque provavelmente ficou preso no passado, para isso, eles fornecem um guia de como construir tudo para que o leitor molde seu próprio futuro, ta aí o título do livro. O interessante do sistema usado no livro é que ele busca te dar as ferramentas mínimas para fazer algo funcionar, não tem muito segredo, na teoria. Óbvio que o processo criativo é demorado e complicado, mas conhecer todos os caminhos, facilita tudo. Tem até um capítulo sobre o método científico, que explica de forma fácil algo que a epistemologia não consegue demonstrar para os mais leigos. O livro é apenas um exemplo do quão difícil pode ser uma jornada sem as ferramentas básicas, mas não só isso, você pode possuir todas as técnicas e tecnologias possíveis, mas se escolher a abordagem errada para resolver um problema, você vai se perder e gastar mais tempo do que deveria naquilo. No fim, aquilo que comentei no começo do texto sobre os fundamentos do processo criativo e o que seria uma solução ideal para um problema, chego à conclusão que eu sempre acreditei, técnicas e tecnologias devem facilitar a vida dos seus usuários e não deixá-la mais complicada. Deveriam mostrar isso para a "galera" da Caixa que implementou uma fila virtual no aplicativo complicando a vida de todos, até mesmo dos próprios funcionários.
Como diria o mestre Gunpei Yokoi "Pensamento lateral com tecnologia murcha" (em inglês é melhor - "Lateral thinking with withered technology"). Não se preocupe em produzir o estado da arte de imediato, isso leva tempo e no nosso mundo infelizmente, raramente vão te dar esse tempo, eu sei, é um problema, mas trabalhamos com o que temos. Se você for um cientista independente, bilionário que mora em um local isolado em seu castelo, fique a vontade, experimente e complique, eu faria o mesmo, tudo depende do contexto, mas vai chegar o momento que até para esse caso, o KISS será acionado.