14 pontos por baeba 3 시간 전 | 2 comentários | Compartilhar no WhatsApp

Índice

Compartilha os principais insights obtidos com a leitura de 45 livros técnicos nos últimos dois anos e revisita como eles influenciaram a formação de uma forma de pensar como engenheiro de software, especialmente em relação à era da IA e a processos de desenvolvimento eficientes.

Introdução ao podcast e retrospectiva do 2º aniversário

Introdução ao Book Overflow

  • É um podcast de livros técnicos para engenheiros de software, com o objetivo de melhorar as habilidades lendo os melhores livros técnicos toda semana.

Planejamento do episódio de 2º aniversário

  • Para celebrar o 2º aniversário do podcast, eles revisitam todos os livros lidos nos últimos dois anos e compartilham o único insight de cada obra que mais ficou marcado e continua influenciando até hoje.

  • O foco vai além de simplesmente lembrar o conteúdo dos livros, concentrando-se em como eles ajudaram a moldar sua forma de pensar como engenheiros de software.

Mudanças nos últimos dois anos

  • Os apresentadores do podcast, Carter e Nathan, passaram por grandes mudanças pessoais nos últimos dois anos.

    • Nathan se mudou para outro país, ambos concluíram a pós-graduação, e Nathan está esperando a chegada de um filho.

    • Também houve mudanças profissionais. Nathan passou para consultoria em tempo integral, e Carter saiu de uma big tech para uma startup.

  • Mesmo com essas mudanças pessoais, eles conseguiram manter o podcast graças ao apoio e interesse dos ouvintes, e expressam sua gratidão por isso.

Principais insights dos principais livros técnicos

The Practice of Programming (Brian Kernighan, Rob Pike)

  • Insight principal: Reúne a filosofia de programação que fundamenta a linguagem Go e, embora algumas partes estejam datadas, as ideias centrais continuam válidas.

    • Como programador Go e fã de Rob Pike, ele se lembra deste livro e relembra que muitas das ideias centrais de uma boa programação vieram daqui.

    • Também é mencionado que algumas partes, como o parser de CSV, estão datadas.

A Philosophy of Software Design (John Ousterhout)

  • Insight principal: O conceito de "Design It Twice" enfatiza que, em vez de tentar criar um design perfeito logo de início, é possível chegar a um design melhor aprendendo e melhorando ao longo da construção do sistema.

    • Na era da IA, o uso de LLMs reduz o esforço necessário para projetar duas vezes, permitindo um design ainda mais eficiente.

    • Mesmo tendo sido publicado em 2018, este livro continua exercendo grande influência e foi citado em muitos outros livros.

  • Insights adicionais

    • Apresenta ideias fortes sobre encapsulamento da complexidade, design de interfaces e tratamento de erros.

    • Por meio de uma entrevista com o autor, John Osterhout, foi possível ouvir sua visão e suas críticas sobre TDD.

Refactoring: Improving the Design of Existing Code (Martin Fowler)

  • Insight principal: Refatoração pode ser interrompida a qualquer momento sem problema; como é um trabalho de melhorar o design sem alterar a saída do código, pode ser feita de forma contínua e em pequenas etapas.

    • Muitas vezes se entende refatoração de forma equivocada como reescrever todo o código, mas a definição de Fowler é muito mais restrita.
  • Caso de aplicação real

    • Recentemente, ao melhorar o uso de Next.js e React para otimizar o desempenho do roborobato.com, foi aplicada uma refatoração de verdade.

    • Sem mudar funcionalidades nem a UI, a estrutura do código foi reorganizada e dividida em 5 commits, o que facilitou a revisão e a aplicação.

What Is ChatGPT Doing and Why Does It Work? (Stephen Wolfram)

  • Insight principal: Ajudou a entender como os LLMs funcionam, especialmente o mecanismo de previsão do próximo token e o conceito de temperatura (temperature).

    • Explica que a aleatoriedade inerente aos LLMs é justamente o que gera seu poder.
  • Valor do livro

    • Oferece uma análise bem estruturada que explica temas complexos de forma fácil de entender.

    • Fornece vocabulário básico e um framework para compreender LLMs, algo que continua sendo conhecimento importante.

Fundamentals of Software Architecture (Mark Richards, Neal Ford)

  • Insight principal: Enfatiza a importância da capacidade de vender a visão de arquitetura para stakeholders técnicos e não técnicos, tratando isso como um elemento fundamental da arquitetura.

    • É preciso se comunicar constantemente e provar o próprio valor; uma postura do tipo "vai ser como eu disser" não é desejável.
  • Princípios adicionais

    • Em vez de ficar em uma torre de marfim, é preciso estar junto do código e da equipe, vivenciar o design na prática e se adiantar alguns passos para prever problemas potenciais.

    • Destaca o papel do ADR (Architectural Design Document), afirmando que é importante registrar e evoluir o processo de tomada de decisão.

    • Registrar e compartilhar decisões é essencial para evitar o "fenômeno do Groundhog Day".

The Clean Coder (Robert C. Martin, "Uncle Bob")

  • Insight principal: Explora o que é o verdadeiro profissionalismo, apresentando em especial as visões radicais do Uncle Bob sobre prazos e estimativas.

    • Na cultura de engenharia, é comum confundir estimativas com prazos, mas para agir com profissionalismo é preciso separar claramente essas duas coisas.
  • Características do livro

    • Traz muitas histórias e permite conhecer mais a fundo a figura do Uncle Bob.

    • O livro é bem escrito e fácil de ler, sendo adequado para leitura de capa a capa.

Working Effectively with Legacy Code (Michael Feathers)

  • Insight principal: Código difícil ou assustador de modificar é código mal projetado, e qualquer pessoa pode torná-lo mais fácil de alterar.

    • Legacy code é definido como código sem cobertura de testes ou cujo funcionamento não é bem compreendido.

    • Oferece orientação sobre como começar quando não se está em um projeto greenfield ou quando se tem pouco controle sobre a base de código.

  • Valor do livro

    • Cada seção é independente, o que o torna ótimo como referência; em vez de ler de capa a capa, é mais eficaz consultar as partes necessárias.

Web Scalability for Startup Engineers (Artur Ejsmont)

  • Insight principal: Nos estágios iniciais de uma startup, é mais importante se mover rápido do que buscar otimização excessiva ou alta disponibilidade, investindo no momento certo.

    • Startups em estágio inicial não devem tentar alcançar tolerância a falhas perfeita ou alta disponibilidade quando ainda têm poucos clientes.
  • Limitações de época e sugestões

    • Os temas tratados no livro eram importantes nos anos 2010, e hoje muitas dessas questões já foram resolvidas por empresas de SaaS e PaaS.

    • Uma versão atualizada precisaria virar um manual para fundadores de primeira viagem ou líderes técnicos.

Recoding America (Jennifer Pahlka)

  • Insight principal: Mostra a ineficiência do software governamental e seu potencial de melhoria, sugerindo que software para governo também pode ser feito com boa qualidade.

    • Software governamental é avaliado pelo cumprimento de checklists, então o fato de realmente funcionar não recebe a devida importância.

    • Enfatiza a importância de aplicar ao desenvolvimento de software governamental os princípios centrais do ágil: "colaboração próxima com o cliente" e "entrega contínua de software funcionando".

Building Evolutionary Architectures (Neal Ford, Rebecca Parsons, Patrick K. Kua, Pramod Sadalage)

  • Insight principal: Por meio do conceito de "Fitness Functions", apresenta uma forma de avaliar objetivamente se o sistema está funcionando como esperado e como construir arquiteturas evolutivas.

    • Fitness Functions são essenciais para acompanhar a evolução do sistema e verificar se as decisões de design estão funcionando como pretendido.

    • É preciso organizar equipes e projetar sistemas levando em conta o impacto que estruturas organizacionais, como a Lei de Conway, têm sobre a arquitetura de software.

Looks Good to Me (Adrian Bergeron)

  • Insight principal: Embora os conselhos específicos do livro não tenham ficado na memória, ele serviu para reforçar mais uma vez a importância dos pull requests (PRs).

  • Ao refletir sobre a migração recente realizada na empresa, percebo que fomos negligentes na revisão de PRs e sinto a necessidade de revisitar este livro.

  • Valor do livro

    • Oferece uma boa orientação sobre contratos sociais e definição de padrões dentro da equipe.

    • Livros técnicos são úteis para revisitar quando necessário e desenvolver ideias.

Slow Productivity (Cal Newport)

  • Insight principal: Com a mensagem de “trabalhe menos e foque no que importa”, o livro alerta contra a pseudo-produtividade (pseudo-productivity) e enfatiza a necessidade de se concentrar em atividades de alto valor.

    • É um livro que mostra a forma profunda de pensar de Cal Newport, que reduziu atividades desnecessárias para focar em trabalhos importantes, como produzir seu podcast.

    • À medida que a carreira avança, é preciso focar nas atividades de maior alavancagem e valor, e a pseudo-produtividade atrapalha isso.

The Unicorn Project (Gene Kim)

  • Insight principal: Explica a importância dos processos de DevOps sob a ótica da engenharia de software e destaca que é preciso resolver problemas fundamentais para acelerar o desenvolvimento.

    • Um sistema que depende de um gerente de release é ineficiente, e qualquer pessoa deveria ser capaz de gerenciar releases por meio de processos automatizados.
  • Estrutura e influência do livro

    • Ao contrário da obra anterior, The Phoenix Project, explica DevOps do ponto de vista da engenharia de software, o que o torna aplicável a mais desenvolvedores.

    • Transmite conteúdos técnicos com facilidade em formato de fábula e ajudou a impulsionar a tendência de combinar narrativa com livros técnicos.

Tidy First (Kent Beck)

  • Insight principal: Enfatiza a “opcionalidade” (Optionality) na estrutura do código, ou seja, o valor da flexibilidade e da extensibilidade, que, assim como o valor do tempo, gera ganhos potenciais no futuro.

    • Como é difícil prever no momento inicial quais funcionalidades serão necessárias no futuro, é importante escrever código de forma que possa ser alterado com flexibilidade.
  • Características e valor do livro

    • É um livro curto e conciso, mas oferece insights profundos e faz sentir o prazer do desenvolvimento de software.

    • Aplicar ao software ideias vindas de outros setores, como negociação de opções, é sinal de desenvolvimento maduro.

Unix: A History and a Memoir

  • Insight principal: Passei a entender o funcionamento e a importância dos “pipes”, um dos blocos fundamentais do Unix.

    • Graças à filosofia Unix, em que cada programa recebe uma entrada e retorna uma saída, é fácil conectar a saída entre programas por meio do operador pipe.
  • O papel de Doug McIlroy

    • Doug McIlroy teve um papel importante na integração das ideias do Unix por meio dos pipes e contribuiu para moldar a filosofia Unix.

The Twelve-Factor App

  • Insight principal: Apresenta 12 princípios para construir aplicações cloud-native, mas destaca que aplicá-los de forma equivocada pode, na verdade, aumentar a complexidade.

    • São princípios criados na época da Heroku, e ao olhar para os fundamentos, é natural concordar com eles.

    • Assim como acontece quando se adota uma tecnologia específica, como Kubernetes, sem entendê-la de fato, esses princípios também podem ser mal utilizados.

The Agile Manifesto

  • Insight principal: O ágil surgiu como reação ao modelo em cascata, com o objetivo de entregar software funcional rapidamente e incorporar o feedback do cliente com agilidade.

    • A essência do ágil é colaborar de perto com clientes e stakeholders para melhorar o software de forma iterativa.
  • Aplicação moderna e críticas

    • A essência do ágil é familiar para muitos desenvolvedores, mas sem esforço consciente seu significado se perde com facilidade.

    • Está tão profundamente enraizado no desenvolvimento moderno de software que, mais do que aprender algo novo, leva a revisitar práticas já existentes.

    • Foi muito eficaz como reação ao modelo em cascata e enfatiza que, por causa da complexidade do software, é importante entregar valor em pequenas partes, em vez de depender de planejamento de longo prazo.

The Software Engineer's Guidebook (Jorge Orozco)

  • Insight principal: Com o avanço da carreira, é preciso focar em trabalhos de alta alavancagem e gerenciar a própria trajetória de forma proativa.

    • Destaca a importância de gestores e patrocinadores: o gestor apoia sua promoção, e você deve se esforçar para corresponder a essas expectativas.
  • Características do livro

    • Assim como a newsletter The Pragmatic Engineer, oferece conselhos práticos sobre gestão de carreira.

    • Fornece frameworks para entender trajetórias profissionais complexas e para se posicionar de forma ativa.

Hypermedia Systems (Carson Gross, et al.)

  • Insight principal: Tecnologias como HTMX mostram que é possível construir aplicações web suficientemente dinâmicas com renderização no servidor, reduzindo a necessidade de clientes JavaScript complexos.

    • Aproveitando as vantagens da ideia original da web como sistema de hipermídia, é possível implementar muita coisa no lado do servidor, independentemente da tecnologia de backend, desde que haja boas especificações.
  • Vantagens e limites do HTMX

    • O código escrito com HTMX é simples, fácil de manter e tem maior chance de durar mais do que frameworks modernos.

    • O HTMX pode não ser o futuro do desenvolvimento web, mas opiniões contrárias como essa ajudam a tomar decisões melhores como engenheiro.

Team Topologies (Matthew Skelton, Manuel Pais)

  • Insight principal: As equipes devem ser organizadas para minimizar as interdependências que exigem coordenação, e a estrutura da equipe influencia diretamente a arquitetura do software.

    • Team Topologies foca em reduzir a coordenação entre equipes para otimizar o fluxo.

    • Como a estrutura da equipe determina a estrutura do software, é preciso ter cuidado ao montar times.

Ace the System Design Interview (Alex Xu)

  • Insight principal: Em entrevistas de system design, é importante usar “back-of-the-napkin math” para estimar escala e requisitos de desempenho.

    • Ao memorizar valores comuns, como tempo e tamanho de dados, e usá-los para concretizar os requisitos do sistema, é possível fazer um design baseado em fundamentos, e não em suposições.

    • Por exemplo, ao precisar processar o número de tweets por hora, se você souber quantos bytes há por tweet e o tamanho de um tweet, pode calcular o armazenamento e a vazão necessários.

  • Como usar em entrevistas

    • Pensar em voz alta junto com o entrevistador e compartilhar o processo de cálculo ajuda a obter feedback e construir um design melhor.

    • Não basta apenas listar tecnologias modernas; é importante apresentar o raciocínio por trás da escolha de cada tecnologia.

The Good News Factory (Kent Beck)

  • Insight principal: Para que uma equipe de software se torne uma “fábrica de boas notícias”, capaz de entregar continuamente resultados positivos, é essencial construir código limpo e sistemas escaláveis.

    • Se a equipe não consegue mostrar resultados positivos com consistência, uma narrativa negativa pode se formar externamente.
  • Características do livro

    • É um livro curto e conciso, em formato de relatório, que transmite sua mensagem central com eficácia.

Thinking in Systems (Donella Meadows)

  • Insight principal: O conceito de “stocks and flows” ajuda a entender a natureza dinâmica dos sistemas e oferece um framework útil para analisar sistemas complexos.

    • Assim como é importante entender a diferença entre PIB (fluxo) e valor de mercado (estoque), também é essencial distinguir o estado atual de um sistema e sua taxa de mudança.
  • Valor do livro

    • Embora seja abstrato, oferece insights de alto nível para o pensamento estratégico e sistêmico.

Grokking Concurrency (Karol Bobrov)

  • Insight principal: É importante fazer o “right-sizing” do modelo de concorrência; tanto fragmentá-lo demais quanto torná-lo amplo demais tem desvantagens.

    • O livro mostra como entender as unidades de trabalho que podem ser paralelizadas ou divididas em tarefas concorrentes e como ajustar o sistema.

Rework (Jason Fried, David Heinemeier Hansson)

  • Insight principal: É possível transformar o fato de ser pequeno e pouco conhecido em vantagem, usando isso para iterar, se reinventar e construir o sucesso.

    • A desvantagem de ainda não ser famoso pode, na verdade, ser uma oportunidade de inovação, e vale a pena aproveitá-la para não perder os benefícios do sucesso.
  • Características e influência do livro

    • É um livro lógico e bem escrito, que inspira quem quer fazer bootstrap ou construir algo fora das noções convencionais de sucesso.
  • Por meio do caso de sucesso da Basecamp e da 37signals, prova que a filosofia deles continua válida mesmo com o passar do tempo.

In the Plex (Steven Levy)

  • Principais insights

    • A capacidade dos engenheiros do Google de reinventar de forma criativa conceitos complexos como teoria dos leilões é o tipo de resultado que se obtém ao contratar pessoas inteligentes e confiar nelas.

    • Como o sucesso de uma startup não é garantido, é preciso se esforçar continuamente e contribuir para o futuro da empresa.

  • Conexão com o autor

    • Steven Levy, o autor, é um excelente escritor, e seu outro livro, 'Crypto', também vale a recomendação.

    • Foi muito interessante ter passado pela experiência de entrevistar para uma empresa cujo CEO atual apareceu no livro.

Thinking Like a Large Language Model (Mukund Sundararajan)

  • Principal insight: Embora a lembrança específica deste livro esteja um pouco vaga, ele ajudou a entender a forma de pensar dos LLMs.

The DevOps Handbook

  • Principais insights

    • Forneceu orientações práticas sobre implementação real de DevOps, como pipelines de CI/CD, rollback automático e observabilidade aprimorada, elevando bastante a capacidade de engenharia de software da equipe.

    • Apresenta a técnica de "shadow traffic", em que, ao implantar um novo recurso como uma "nova funcionalidade de busca", parte do tráfego real é enviada para a nova API para observar os resultados.

    • Enfatiza a importância de separar deployment de release, e como feature flags permitem lidar rapidamente com regressões que possam surgir durante migrações.

  • Autores e valor do livro

    • Conta com autores renomados como Gene Kim, Jess Humble, Patrick Dubois, Nicole Forsgren e John Willis, e traz conteúdo complementar a 'Unicorn Project' e 'The Phoenix Project'.

Just for Fun: How Linus Torvalds Started an Accidental Revolution

  • Principal insight: Linus Torvalds criou o Linux ao se concentrar no que achava divertido, e isso acabou mudando o mundo.

    • Focar no que é divertido é o que mais motiva a trabalhar com intensidade, e isso pode levar a um grande sucesso inesperado.
  • Inovação do software de código aberto

    • Linus Torvalds abriu caminho para uma forma não convencional de gerar receita com software de código aberto sem abrir mão de seus princípios, o que influenciou fortemente a operação de servidores e a forma de fazer commits de código.

Made to Stick

  • Principal insight: Ideias memoráveis seguem certos padrões, e mesmo sem ser um gênio criativo é possível usar esses padrões para comunicar ideias com eficácia.

    • A mensagem "foque no que é divertido e acredite que você vai trabalhar mais duro naquilo que mais te diverte" teve grande influência em decisões pessoais de carreira.

Staff Engineer (Will Larson)

  • Principal insight: No nível de Staff Engineer, é preciso focar em trabalhos de alta prioridade e alto impacto, e isso é um critério importante ao longo de toda a carreira.

    • Não existe um caminho fixo para se tornar Staff Engineer; pessoas com origens diversas resolvem problemas complexos.

Finite and Infinite Games (James P. Carse)

  • Principal insight: O "jogo finito" tem vitória e derrota claras, enquanto o "jogo infinito" tem como objetivo aproveitar o próprio jogo; buscar jogos infinitos na vida é importante.

    • Quando Linus Torvalds criou o Linux, ele perseguia um jogo infinito — criar o melhor sistema operacional e construir uma comunidade — e não o jogo finito de criar o sistema operacional mais popular.

Radical Candor (Kim Scott)

  • Principal insight: Dar feedback direto e honesto é, na verdade, uma forma de se importar com a outra pessoa, e é preciso evitar a "empatia ruinosa (ruinous empathy)".

    • O feedback direto é dado porque há preocupação genuína com o bem-estar da outra pessoa, e isso é diferente de grosseria.

    • Ao dar feedback, é importante considerar os sentimentos da outra pessoa, mas transmitir o ponto central com clareza.

Mastering OpenTelemetry and Observability (Steve Flanders)

  • Principal insight: Deve-se evitar vendor lock-in e usar OpenTelemetry, mas a era da IA levou a repensar como a importância do vendor lock-in pode mudar.

    • A conveniência de ferramentas como DataDog pode tornar o vendor lock-in atraente, mas é preciso considerar riscos como mudanças de preço ou fusões e aquisições.

Beyond Vibe Coding (Addy Osmani) & Advanced React (Nadia Makarevich)

  • Principais insights

    • 'Beyond Vibe Coding' apresenta o conceito de "IA aumentada (augmented AI)", em que engenheiros produtivos escrevem código em colaboração com agentes de codificação.

    • 'Advanced React' é útil como material de referência.

The Tao of Programming (Jeffrey James)

  • Principal insight: Construir um sistema operacional exige apenas precisão técnica, mas modelar o mundo real, como em um sistema de folha de pagamento, é mais difícil porque envolve questões complexas como stakeholders.

    • Isso pode não ser intuitivo para programadores e sugere que modelar o mundo real em software traz uma complexidade inerente.
  • Relação com o ensaio "Worse Is Better"

    • 'The Tao of Programming' e "Worse Is Better" são textos curtos, mas do mesmo tipo que provoca reflexões profundas.

Mastering the Behavioral Interview (Austin McDonald)

  • Principal insight: Em entrevistas técnicas no estilo do Vale do Silício, é possível aprender a contar a própria experiência encaixando-a em arquétipos como o do "hacker solitário".

    • A habilidade de contar histórias de forma eficaz em entrevistas é muito importante, e este livro mostra concretamente como fazer isso.

Designing Data-Intensive Applications (Martin Kleppmann)

  • Principal insight: Aborda em profundidade conceitos fundamentais de sistemas distribuídos, como confiabilidade, latência versus throughput e resiliência versus recuperação rápida.

    • Também trata de temas como privacidade de dados e exploração da atenção, o que leva a uma reflexão mais profunda ao construir sistemas de alta demanda.

Reflections on Trusting Trust (Ken Thompson) & Coding Machines (Lawrence Kesteloot)

  • Principal insight: Na era em que a IA gera código, esses textos levam a pensar profundamente sobre a confiança no código gerado e sobre possíveis intenções maliciosas (por exemplo, esteganografia).

Frictionless (Nicole Forsgren, Abby Noda)

  • Principal insight: Como este livro foca principalmente na implementação de iniciativas de experiência do desenvolvedor (DevEx) voltadas a líderes de grandes empresas, ele não teve grande impacto no estágio atual da carreira.

    • Traz um excelente conteúdo sobre DevEx, mas pode ser mais importante para empresas a partir da Série C.

Project Hail Mary (Andy Weir)

  • Principal insight: O futuro não é algo a ser temido, mas um problema a ser resolvido, e o livro apresenta uma visão otimista sobre o papel da humanidade e da tecnologia.

    • Transmite uma mensagem esperançosa de que, mesmo em situações difíceis, é possível realizar coisas extraordinárias por meio de foco e inovação.

2 comentários

 
laeyoung 6 분 전
  1. O link no índice volta recursivamente para esta página.
  2. Não sei se você resumiu tudo manualmente ou se apenas transcreveu um resumo feito por IA, mas como existe a função Ask no YouTube, acho que não haveria problema mesmo sem resumir todo o conteúdo. Na verdade, o que mais me deixou curioso foi o motivo de você ter compartilhado isso; quanto ao conteúdo, acho que até um resumo em 3 linhas já seria suficiente.
 
baeba 3 시간 전

O endereço do site está abaixo.
https://bookoverflow.io/