A importância da multidisciplinaridade no desenvolvimento de software
Olá!
Hoje eu gostaria de abordar um assunto que está na minha cabeça por semanas e resolvi escalar a discussão para a internet ao invés de mantê-la somente em um escopo controlado (A.K.A meu cérebro).
Dito isso, eu gostaria de começar com o seguinte questionamento: você, pessoa desenvolvedora que escreve código regularmente, ou você, líder de equipe que pensa e/ou arquiteta sistemas regularmente já se questionou se somente a ciência da computação que pode resolver problemas de computação?
Me refiro a estudar hard skills: aprender as idiossincrasias de uma linguagem especifica ou aprender um novo framework. Ou até mesmo aprender alguma ferramenta relacionada a infraestrutura ou DevOps que vai ser a solução para a vida, o universo e tudo mais…
Eu to falando de olhar para fora do seu mundo.
Olhar para fora do mundo de algoritmos, estrutura de dados, tecnologias, agilidade e afins. Aqui vale um disclaimer: eu sou 100% a favor de estudar esses tópicos, porém, essas coisas são o básico do que alguém que se propõe a ser uma pessoa desenvolvedora profissional precisa saber para conseguir entregar features que realmente agreguem valor para alguém.
Eu to dizendo de olhar para fora do escopo da ciência da computação e procurar técnicas advindas de outras áreas do conhecimento.
Deixe-me ilustrar com dois exemplos: um bem antigo e um recente.
Vamos começar falando de Alan Curtis Kay. Deixe-me poupar o seu clique no link para ir até a Wikipedia e fazer uma breve resumo de quem ele é:
Ele foi um dos pais do que conhecemos como desenvolvimento orientado a objetos, criador da linguagem de programação SmallTalk (que é considerada como uma das linguagens que usam o paradigma da orientação a objetos de forma mais pura) e ganhador do prêmio Turing (o nobel da computação, na minha opinião).
E sabe de onde ele se inspirou para tudo isso? Na Biologia.
Células interagindo entre si através de uma espécie de troca de mensagens e sem expor o conteúdo que há dentro delas (Encapsulamento), com a mesma célula podendo ter diferentes comportamentos em diferentes cenários (Polimorfismo) e obviamente, se replicando e passando código genético para frente (Herança). Ao modelar o sistema orgânico em modelos computacionais temos… Abstração.
O termos em negrito se referem aos 4 pilares da orientação a objetos. Conceito que todo mundo vê na faculdade de computação e está presente como paradigma fundamental em várias linguagens que usamos hoje como C# e Java. Se você é autodidata e aprendeu a programar sem curso superior (a propósito, parabéns), agora você sabe o academicismo daquilo que você provavelmente entende de forma intuitiva.
Por fim, mas não menos importante, gostaria de mencionar uma ferramenta chamada code-maat, uma ferramenta de linha de comando super útil feita em Clojure que faz análise de código usando somente o log do Git e encontra “ofensores” do seu código com uma certa facilidade. Para mais informações, recomendo que vejam essa talk do seu criador (Adam Tornhill) aqui. Para uma abordagem mais amigável e em português de como atacar dividas técnicas, recomendo esse vídeo do ElemarJr aqui, que se baseia no trabalho do Adam também.
Mas porque eu mencionei tudo isso?
Simplesmente porque o Adam tirou todas as ideias de análise do code-maat e consequentemente do seu produto CodeScene da psicologia forense. Ele encontrou similaridades no método de encontrar a área de atuação de criminosos usando data mining e aplicou o mesmo conceito a análise de dívidas técnicas.
Resultado?
O CodeScene é o programa mais informativo relacionado a dívida técnica que eu já usei na minha carreira. Ele é pago, mas você pode utilizar o code-maat que faz coisas semelhantes e está disponível no github. E não, o Adam não me pagou para dizer isso. Eu só estou espalhando a palavra de uma tecnologia útil.
Você pode se perguntar, mas qual a mágica disso? Ele só usou Git e Clojure!
Porém, ele só conseguiu juntar tudo e fazer um produto útil olhando de fora da computação. Até esse produto surgir, a unica ideia “intuitiva” de atacar dívidas técnicas era atacar o backlog do SonarQube, sem priorização, sem encontrar clusters de ofensores (A.K.A arquivos que são mais alterados ou que tem entropia maior) e sem usar qualquer técnica de análise melhor. Yeah Mr. White, Yeah Science.
Com isso dito, gostaria de convidar você a traçar um paralelo com computação, artes marciais e caligrafia. Mas isso fica para o próximo post.
Até!
Você gostou do conteúdo e gostaria de fazer mentoria comigo? Clique aqui e descubra como.