Fundamentos da Engenharia de Software

De programador a engenheiro de software

Fundamentos da Engenharia de Software
× Fundamentos da Engenharia de Software

Fundamentos da Engenharia de Software

Compartilhar

Autores: Nathaniel Schutta
Dan Vega

ISBN impresso: 978-85-7522-982-8
ISBN ebook: 978-85-7522-983-5
Ano: 2026
Páginas: 384
Preço impresso: R$ 139,00 O ebook deste livro está disponível na Amazon.

1 opinião | Opine sobre este livro

Descrição do livro

“Neste livro, Dan e Nate ensinam rapidamente os fundamentos que anos de educação formal muitas vezes não abordam. Suas décadas de experiência transparecem nestas páginas, sintetizando, com muita clareza e tato, o que desenvolvedores profissionais devem fazer e o que evitar.” – Dr. Venkat Subramaniam, autor premiado e fundador da Agile Developer, Inc.

“Surpreendentemente, não existe nenhum livro que ofereça uma visão holística do que realmente significa a engenharia de software no mundo moderno… até agora. Preenchendo uma lacuna que, em retrospectiva, parece imensa, este livro oferece uma excelente visão geral das múltiplas facetas da engenharia de software, narrada a partir do ponto de vista de um profissional da área.” – Neal Ford, engenheiro distinguished da Thoughtworks

O que você precisa saber para se tornar um engenheiro de software de sucesso? Os currículos de graduação e de bootcamps podem ensinar algoritmos e programação, mas raramente abordam tópicos essenciais para avançar na carreira. Com este livro prático, você aprenderá as competências necessárias para ter sucesso e se destacar.

Os autores Nathaniel Schutta e Dan Vega guiam sua jornada abordando desde dicas práticas até análises aprofundadas de tópicos específicos, ajudando você a desenvolver as habilidades que realmente importam para um engenheiro de software.

• Entenda o que é engenharia de software — e por que comunicação e outras habilidades interpessoais são importantes

• Aprenda os fundamentos da arquitetura de software e seus drivers arquiteturais

• Conheça técnicas comprovadas para ler e refatorar bases de código

• Compreenda a importância dos testes e como criar um conjunto de testes eficaz

• Aprenda a implantar software de forma confiável e repetível

• Saiba avaliar e escolher a ferramenta ou solução certa para cada problema

Ver menos ▲

Sumário

  • Prefácio
  • CAPÍTULO 1: De programador a engenheiro
  • Um engenheiro com qualquer outro nome
  • Os fundamentos importam
  • Os diversos caminhos para se tornar um engenheiro de software
  • O que lhe ensinaram versus o que você precisa saber
  • Abrace a filosofia do programador preguiçoso
  • Valor de um novo olhar
  • Não busque soluções muito rapidamente
  • Aplique a regra de ouro ao software
  • Concluindo
  • Colocando em prática
  • Recursos adicionais
  • CAPÍTULO 2: Lendo código
  • Desafio de trabalhar com código existente
  • Vieses cognitivos
  • Abordando código desconhecido
  • Arqueologia de software
  • Estratégias eficazes de leitura de código
    • Aproveitando os recursos do IDE
    • Ler os testes para obter insights
  • A prática leva à perfeição
  • Concluindo
  • Colocando em prática
  • Recursos adicionais
  • CAPÍTULO 3: Escrevendo código
  • Não reinvente a roda
  • O que é um bom código?
  • Menos é mais
    • A lei zero da ciência da computação
    • Cuidado com o código repetitivo
    • Dê preferência à composição em vez da herança
    • Prefira métodos curtos
  • Escreva código para ser lido
  • O problema com os comentários no código
  • Testes como documentação
  • Evite escrever código inteligente
  • Revisões de código
  • Evite a revisão de código de fachada
  • É difícil ser criticado
  • Fomentando a confiança
  • Aprendendo novas linguagens
  • Concluindo
  • Colocando em prática
  • Recursos adicionais
  • CAPÍTULO 4: Modelagem
  • O que é modelagem de software e por que utilizá-la?
  • De quais diagramas você precisa?
    • Diagramas de contexto
    • Diagramas de componentes
    • Diagramas de classes
    • Diagramas de sequência
    • Diagramas de implantação
    • Modelos de dados
    • Diagramas adicionais
  • Melhores práticas de modelagem
    • Mantenha a simplicidade
    • Conheça seu público-alvo
    • Cuidado com suas escolhas de cores
    • Estabeleça padrões e modelos
  • Ferramentas
  • Concluindo
  • Colocando em prática
  • Recursos adicionais
  • CAPÍTULO 5: Testes automatizados
  • Benefícios dos testes automatizados
    • Serve como documentação
    • Melhora a facilidade de manutenção
    • Aumenta sua autoconfiança
    • Leva à consistência e repetibilidade
  • Tipos de testes automatizados
    • Testes unitários
    • Testes de integração
    • Testes de ponta a ponta
    • Que tipo de testes você deve escrever?
    • O que você não deve testar
  • Cobertura de código
  • Escrevendo testes
    • Começando
    • Asserções
    • Escrevendo testes unitários
    • Mocking
    • Escrevendo testes de integração
    • Escrevendo testes de ponta a ponta
  • Concluindo
  • Colocando em prática
  • Recursos adicionais
  • CAPÍTULO 6: Explorando e modificando sistemas desconhecidos
  • Compreendendo bases de código desconhecidas
    • Comece com a visão geral
    • Compreender o fluxo de execução
    • Construa modelos mentais incrementalmente
  • Um exemplo de processo
  • Fazendo alterações com segurança
    • Refatorar com segurança
    • A regra do escoteiro
    • Pequenas mudanças reversíveis
  • Concluindo
  • Colocando em prática
  • Recursos adicionais
  • CAPÍTULO 7: Design de interface do usuário
  • Projetando para todos
    • O que é usabilidade?
    • O que é acessibilidade?
    • O que são localização e internacionalização?
  • Conheça seu usuário
    • Usuários secundários
    • Você não é seu próprio usuário
    • Impacto da cultura
  • Maximizando a usabilidade
  • Princípios de projeto
    • Contraste
    • Repetição
    • Alinhamento
    • Proximidade
  • Aplicando os princípios de projeto
  • Faça da coisa certa a coisa óbvia
  • A importância de boas mensagens de erro
  • Ações destrutivas
  • Concluindo
  • Colocando em prática
  • Recursos adicionais
  • CAPÍTULO 8: Trabalhando com dados
  • Compreender os tipos e formatos de dados
    • Dados estruturados versus dados não estruturados
    • Formatos de dados comuns
    • Considerações sobre dados especializados
  • Armazenando seus dados de forma eficaz
    • Tipos de banco de dados e seus casos de uso
    • Persistência e gestão de dados
    • Conexões e transações de banco de dados
    • Modelos de consistência e estratégias de cache
    • Planejando o crescimento de dados
  • Desempenho de consulta e da gestão de dados
    • Escrever consultas eficientes
    • Ferramentas e melhores práticas
  • Migração e transformação de dados
    • Entender os fundamentos da movimentação de dados
    • Gestão de alterações de esquema
  • Concluindo
  • Colocando em prática
  • Recursos adicionais
  • CAPÍTULO 9: Arquitetura de software
  • O que é arquitetura?
  • Trade-Offs
  • Arquitetura versus projeto
  • Atributos de qualidade
    • Identificar atributos de qualidade
    • Obter o alinhamento com os stakeholders
  • Estilos de arquitetura
  • O arquiteto ágil
  • Funções de aptidão
  • Diagramas de arquitetura
  • Registros de Decisões Arquiteturais
  • Concluindo
  • Colocando em prática
  • Recursos adicionais
  • CAPÍTULO 10: Para a produção
  • As complexidades dos ambientes de produção
    • Os usuários são imprevisíveis
    • “Mas funciona na minha máquina”
  • Criando código pronto para produção
    • Otimização de desempenho
    • Configurações específicas do ambiente
    • Tratamento de erros e logs
    • Fundamentos de segurança
  • Pipeline de implantação
    • Ambientes de implantação
    • Estratégias de controle de versão
    • Automação de implantação
    • Estratégias de implantação
    • Integração contínua e implantação contínua
  • Monitoramento e manutenção do sistema de produção
    • Monitoramento
    • Manutenção do sistema
  • Concluindo
  • Colocando em prática
  • Recursos adicionais
  • CAPÍTULO 11: Aumente sua produtividade
  • Otimizando seu ambiente de desenvolvimento
    • Conheça suas ferramentas de desenvolvimento
    • Construa seu próprio sabre de luz
    • Aproveite o poder da linha de comando
    • Aproveite o poder dos atalhos de teclado
  • Automação estratégica
  • A busca perpétua por hábitos produtivos
    • Aprendizado colaborativo
    • Gestão de conhecimento pessoal
  • Concluindo
  • Colocando em prática
  • Recursos adicionais
  • CAPÍTULO 12: Aprendendo a aprender
  • Estudar de última hora não funciona
  • Aquisição de habilidades
  • Hábito de aprendizado
  • Aprendizado por meio da IA
  • Medo de perder algo
  • Em que você deve investir seu tempo?
  • Pratique a inovação
  • Briefings de arquitetura
  • Pratique a paciência
  • Concluindo
  • Colocando em prática
  • Recursos adicionais
  • CAPÍTULO 13: Dominando as habilidades interpessoais no mundo da tecnologia
  • Comunicação colaborativa
    • Canais de comunicação
    • Telefone sem fio corporativo
    • Conheça seu público
  • Praticando a influência
    • Compreender e articular o valor
    • Abordagens estratégicas para influenciar
    • Gestão de stakeholders
  • Gestão do tempo
    • Agenda do criador
    • Manter-se focado na tarefa
  • Concluindo
  • Colocando em prática
  • Recursos adicionais
  • CAPÍTULO 14: Gestão de carreira
  • Planeje sua trajetória profissional
    • Descubra sua paixão
    • Explorando suas opções de carreira
    • Caminhando no sentido inverso em relação aos seus objetivos
    • Aquisição deliberada de habilidades
    • Alinhando as escolhas de carreira com as fases da vida
  • Trilhando seu caminho profissional
    • Comemore e registre suas vitórias
    • Superar a síndrome do impostor
    • Construir sua comunidade profissional
    • Cultivando seus relacionamentos profissionais
    • Como arrasar na sua próxima entrevista
    • Criar equilíbrio entre vida profissional e pessoal
  • Concluindo
  • Colocando em prática
  • Recursos adicionais
  • CAPÍTULO 15: Utilização de IA pelo engenheiro de software
  • O que é realmente a IA?
    • Desmistificando a terminologia de IA
    • Entendendo as capacidades e limitações da IA
  • IA como seu programador em par
    • Assistentes de chatbot independentes
    • Assistentes embutidos no IDE
    • Ambientes IDE com IA agêntica
  • Fundamentos da engenharia de prompts
    • O que é engenharia de prompts?
    • Técnicas essenciais de engenharia de prompts
    • Técnicas avançadas de engenharia de prompts
  • Como a IA pode moldar a engenharia de software
    • Será que a IA vai tirar meu emprego?
    • Revisões de código gerado pela intuição (vibe code)
    • IA como multiplicador de forças: da programação à resolução de problemas
  • Concluindo
  • Colocando em prática
  • Recursos adicionais
  • Índice remissivo
Ver sumário completo ▼

Sobre os autores

Nathaniel Schutta

Nathaniel T. Schutta é arquiteto de software da Thoughtworks com foco em computação em nuvem. É coautor de Presentation Patterns, escreveu Thinking Architecturally e Responsible Microservices e dá aulas na Universidade de Minnesota. Ele também é um palestrante experiente que se apresenta regularmente em conferências internacionais.… Ver perfil completo ▶

Dan Vega

Dan Vega é defensor do desenvolvimento Spring na Broadcom e Java Champion, com mais de 20 anos de experiência em desenvolvimento de software. Um solucionador de problemas apaixonado, compartilha ativamente conhecimento como blogueiro, YouTuber, criador de cursos e palestrante, inspirando desenvolvedores por meio do aprendizado contínuo.… Ver perfil completo ▶

Opinião dos leitores

Ailton T

O livro “Fundamentos da Engenharia de Software” apresenta uma visão bem abrangente dos principais conceitos da área, mostrando que engenharia de software vai muito além da programação. O conteúdo aborda temas importantes como requisitos, arquitetura, qualidade, testes, manutenção e processos de desenvolvimento de forma organizada e acessível. Achei interessante a forma como o livro conecta fundamentos teóricos com situações próximas da realidade de projetos de software, sem ficar excessivamente acadêmico. A leitura é fluida e ajuda bastante a construir uma visão mais completa sobre o ciclo de vida do desenvolvimento. Como sugestão, acredito que alguns pontos poderiam trazer mais exemplos ligados a práticas modernas, como DevOps, cloud e arquiteturas distribuídas, aproximando ainda mais o conteúdo do cenário atual do mercado. No geral, considero uma leitura muito válida para quem deseja fortalecer a base conceitual em engenharia de software e entender melhor as boas práticas da área.

Ver todas ▼