O que a Arquitetura de Software pode nos ensinar sobre aprender
As arquiteturas de software modernas são baseadas na divisão do software em partes, o mais interessante disso é que esse princípio vai além da tecnologia, podendo ser aplicado em diversas áreas — inclusive para turbinar a velocidade com que adquirimos conhecimento.
Quem nunca se sentiu perdido diante da enorme quantidade de informações que precisa estudar — seja para aprender algo novo ou simplesmente para manter-se atualizado? Essa sensação de sobrecarga frequentemente leva algumas pessoas a considerarem abandonar suas aspirações profissionais.
Isso ocorre porque com o passar do tempo, as informações sobre qualquer tema tendem a se tornar mais complexas. No universo do software, acontece algo semelhante: a complexidade cresce à medida que os sistemas evoluem. A arquitetura de software enfrenta esse desafio aplicando o princípio da divisão em partes, um conceito que também pode ser aplicado em muitas outras áreas do conhecimento.
Por que dividir?
As arquiteturas de software modernas têm como base separar o domínio da infraestrutura. Mas por que essa separação é tão importante? Porque o domínio varia com muito menos frequência do que a infraestrutura. Uma arquitetura centrada no domínio, que é a parte mais estável, torna o software mais robusto e mais fácil de manter.
De forma semelhante aos softwares, em nossas vidas, existem aspectos que mudam pouco com o tempo — os princípios — e outros que estão em constante transformação — os detalhes. Entender essa distinção é essencial para trazer mais estabilidade ao nosso ciclo de aprendizagem.
Qual é a vantagem de separar os princípios dos detalhes?
A premissa principal dos padrões arquiteturais é que, ao separar o domínio da infraestrutura, o software torna-se mais estável. O mesmo conceito se aplica a outras áreas da vida: ao basear nossas ações em princípios, que são atemporais, ganhamos consistência e clareza no que fazemos.
Aplicando ao mundo do desenvolvimento de software, compreender profundamente um princípio nos permite enxergar um novo framework, um novo banco de dados ou uma nova linguagem como apenas uma implementação específica de algum princípio. Ou seja, uma nova implementação de algo que já existia. Isso torna o aprendizado e a assimilação de novos conhecimentos muito mais simples.
Alguns exemplos
Considere os princípios do SOLID. Desenvolvidos ao longo de décadas, esses princípios são atemporais e independem da linguagem de programação utilizada. Eles são tão fundamentais que muitos desenvolvedores acabam os adotando naturalmente, mesmo sem nunca ter estudado diretamente sobre o SOLID.
Outro exemplo de princípios fundamentais são os paradigmas de programação, como descrito no livro Clean Architecture. Até hoje, três paradigmas principais se destacam: Orientação a Objetos, Programação Funcional e Programação Estruturada. Todos os outros paradigmas podem ser considerados variações dessas abordagens. Por razões discutidas no livro, é improvável que um novo paradigma fundamental surja, e a principal evidência disso é que, embora esses paradigmas tenham se consolidado entre as décadas de 1950 e 1960, nenhum outro paradigma significativo foi acrescentado desde então.
Mas e agora? Como encontrar os princípios do que estamos aprendendo?
Os princípios pertencem à camada mais profunda do conhecimento, enquanto os detalhes estão na camada mais superficial e perceptível. Tudo o que é detalhe é, na verdade, a implementação de um princípio em um contexto específico.
A melhor maneira de identificar princípios é realizando uma imersão no assunto que desejamos aprender. Muitas vezes, isso inclui praticar, explorar os detalhes perceptíveis, até conseguirmos reconhecer os padrões subjacentes e, por fim, os princípios que os sustentam.