Como os engenheiros do GitHub aprendem novas bases de código

Para qualquer pessoa na área de programação, seja um veterano ou um novato, aprender novos codebases é um desafio comum. A complexidade dos codebases, com suas camadas de padrões de design, correções de bugs e soluções temporárias, pode tornar o processo demorado e frustrante. Mas, com as estratégias certas, é possível facilitar essa jornada e otimizar o aprendizado.

No ano passado, ao mudar para uma nova equipe no GitHub, compilei diversas dicas de colegas sobre como eles **aprendem novos codebases**. Descobri um conjunto de estratégias eficazes e quero compartilhar com você para tornar a integração em novos projetos um pouco mais fácil.

## Explorando o Código na Prática

Uma das melhores maneiras de começar é mergulhar no código.

* **Comece com “Good First Issues”**: Inicie sua jornada resolvendo tarefas menores e bem definidas. Essas tarefas são selecionadas pelas equipes para ajudar os recém-chegados a entender os componentes principais sem se sentirem sobrecarregados. Elas oferecem pontos de entrada naturais no sistema, enquanto agregam valor imediato à equipe.

* **Aprenda com o GitHub Copilot**: Use o Copilot Chat enquanto explora o código. Faça perguntas e utilize a funcionalidade /explain para entender partes complexas. O GitHub Copilot pode te ajudar a entender melhor o código, resumir métodos e encontrar possíveis falhas nos testes existentes.

* **Analise a telemetria e as métricas**: As aplicações modernas geram muitos dados sobre desempenho e uso. Estude essas métricas para entender como o sistema se comporta em produção, quais padrões surgem durante os picos de uso e quais componentes precisam de mais atenção. Essa abordagem orientada por dados oferece um contexto valioso sobre o comportamento real da aplicação.

* **Explore através de testes**: Faça modificações no código e observe os resultados. Crie novos testes para verificar seu entendimento e quebre o sistema (em ambiente de desenvolvimento) para ver como ele falha. Isso ajuda a construir uma compreensão intuitiva dos limites e dos modos de falha da aplicação.

## Aprendizado Colaborativo

Compartilhar conhecimento é um dos caminhos mais rápidos para o entendimento.

* **Programe em par**: Participe ativamente de sessões de programação em par com membros experientes da equipe. Faça perguntas sobre o fluxo de trabalho deles, observe quais arquivos eles acessam com frequência e aprenda sobre as estratégias de debug. Mesmo que você esteja apenas observando, absorverá um contexto valioso sobre como as diferentes partes se encaixam.

* **Entenda o “porquê”**: Ao receber tarefas, investigue a fundo a motivação por trás delas. Entender o contexto de negócios e o racional técnico ajuda a tomar decisões melhores e auxilia na resolução de problemas futuros. Não tenha medo de fazer perguntas básicas, pois elas podem levar a insights importantes.

* **Monitore as comunicações da equipe**: Participe ativamente dos canais de comunicação da equipe e das discussões sobre incidentes. Preste atenção aos alertas de produção e como a equipe responde a eles. Isso ajuda a entender os padrões de falha comuns e desenvolve a capacidade de lidar com incidentes. Para se manter atualizado, você pode acompanhar as novidades da Microsoft, por exemplo.

## Documentação e Gestão do Conhecimento

Escrever e organizar informações ajuda a consolidar o entendimento.

* **Crie documentação pessoal**: Mantenha um documento vivo de suas descobertas, perguntas e insights. Documente os caminhos de código importantes, as decisões de arquitetura e as interfaces do sistema à medida que os encontra. Isso se tornará uma referência valiosa e ajudará a identificar lacunas em seu entendimento.

* **Construa mapas técnicos**: Crie diagramas da arquitetura do sistema, fluxos de dados e relacionamentos entre entidades. Comece com “caixas pretas” de alto nível e preencha gradualmente os detalhes à medida que seu entendimento cresce. Representações visuais costumam revelar padrões e relacionamentos que não são óbvios no código. Uma ferramenta útil para isso é o Figma. Comece adicionando os blocos básicos que você entende sobre um sistema e como eles interagem e, em seguida, amplie e reduza continuamente o zoom em diferentes partes do sistema para adicionar ao mapa à medida que aprende.

* **Mantenha uma folha de comandos**: Acompanhe os comandos, scripts e fluxos de trabalho úteis que você descobre. Inclua contexto sobre quando e por que usá-los. Isso se torna especialmente valioso ao trabalhar com sistemas de construção complexos ou pipelines de implantação.

* **Reúna informações sobre o domínio**: Uma das chaves para gerenciar seu conhecimento de um codebase é ter um profundo entendimento do domínio. Isso pode ser obtido com os donos do produto, insights do cliente ou das melhores práticas da indústria, se o domínio for generalizável o suficiente. Entender profundamente o domínio e o que os clientes nesse espaço acham mais crítico é fundamental para **aprender novos codebases**.

## Aprendendo Através do Ensino

Uma ótima maneira de verificar seu entendimento sobre um tópico é a capacidade de explicá-lo com precisão para outras pessoas. Se você criou documentação pessoal, como recomendado na seção anterior, pode formalizá-la em guias e documentação oficial para futuros novos membros de sua equipe:

* **Escreva guias internos**: Quando aprender algo novo, documente para a próxima pessoa. Isso força você a organizar o que aprendeu e costuma revelar áreas onde seu entendimento não é tão completo quanto você pensava.

* **Contribua para a documentação oficial**: Ao encontrar lacunas na documentação existente, tome a iniciativa de melhorá-la. Isso não apenas ajuda os futuros membros da equipe, mas também valida seu entendimento com os especialistas atuais.

* Reflita regularmente sobre seu aprendizado respondendo a estas perguntas-chave:
* Você consegue descrever o sistema em poucas frases concisas?
* Como ele interage com os sistemas adjacentes?
* O que mais te surpreendeu durante o processo de aprendizado?
* Quais aspectos permanecem obscuros?

Depois de todas essas recomendações, descobri que minha maneira favorita de aprender um novo codebase é documentá-lo e transformar essa documentação em algo que outras pessoas possam usar no futuro. Escrever as coisas me força a estruturar meus pensamentos e identificar lacunas em meu entendimento.

_Este conteúdo foi auxiliado por Inteligência Artificial, mas escrito e revisado por um humano._

_Via GitHub Blog_

Leave a Comment