Melhor resposta
Todos obviamente têm suas próprias preferências. Eu mesmo incluído. Como a sobreposição é limitada, deve-se perguntar o quão “leitura obrigatória” são os livros. 🙂 No entanto, é sempre divertido produzir uma lista.
- O Mítico Homem-Mês
- Codificação segura em C e C ++, segunda edição (aplicável apenas a desenvolvedores C e C ++, embora haja uma versão para Java – com Ada, geralmente você só precisa de John Manual de Barnes: Amazon.co.uk: John Barnes: 9781107424814: Livros )
- Program Logics for Certified Compilers: Andrew W. Appel, Robert Dockins, Aquinas Hobor, Lennart Beringer, Josiah Dodds, Gordon Stewart, Sandrine Blazy, Xavier Leroy: 9781107048010: Amazon.com: Books
- The Art of Computer Programming, Vol. 1: Fundamental Algorithms, 3rd Edition: 9780201896831: Computer Science Books @ Amazon.com
- Art of Computer Programming, Volume 2: Seminumerical Algorithms (3ª edição): Donald E. Knuth: 0785342896848: Amazon.com: Livros
- The Art of Computer Programming: Volume 3: Sorting and Searching (2ª edição): Donald E. Knuth: 9780201896855: Amazon.com: Books
- Redes de Petri coloridas – modelagem e validação de Simultâneo | Kurt Jensen | Springer
- TCP / IP ilustrado, Volume 1: os protocolos
- Unix Network Programming, Volume 1: The Sockets Networking API (3ª edição): W. Richard Stevens, Bill Fenner, Andrew M. Rudoff: 9780131411555: Amazon.com: Livros
- Programação com threads POSIX: David R. Butenhof: 0785342633924: Amazon.com: Livros
Obviamente, nem todos esses livros se aplicam a todas as pessoas. Sou louco o suficiente para lidar com o campo como um todo, então tenho tudo isso e muitos mais. No entanto, esta seleção é suficiente para obter um domínio sólido de programação robusta, algoritmos, redes, modelagem de sistemas e vários modelos de desenvolvimento de software. Áreas que são significativas o suficiente para que os engenheiros de software devam prestar atenção a elas.
Resposta
Vou supor que estamos falando de um engenheiro de software que alcançou proficiência técnica na escola, bootcamp ou qualquer outra oportunidade de aprendizagem.
Algoritmos são realmente importantes e o livro “ Introdução aos algoritmos ” é uma leitura obrigatória. Acredito que ter um forte entendimento de design de software e design orientado a objetos também é crítico, e minha bíblia ainda é o livro “ Design Patterns: Elements of Reusable Object-Oriented Software . ” Seus exemplos em Smalltalk não o tornam mais fácil de ler hoje em dia, mas não conheço nenhum outro livro com tanta profundidade e amplitude sobre o assunto.
Conheci muitos engenheiros começando no local de trabalho , e percebi algumas lacunas ao longo dos anos, então gostaria de sugerir livros para cada uma dessas áreas.
Novos engenheiros tendem a não entender a simultaneidade, independentemente do idioma. O conceito de executar vários threads em paralelo enquanto fornece o nível certo de sincronização entre eles não é fácil de entender. Eu pessoalmente aprendi muito lendo “ Java Concurrency in Practice ” vindo de uma experiência em Java. Há também uma boa seção sobre simultaneidade em “ Java eficaz ,” a leitura obrigatória sobre como codificar apropriadamente em Java.
Cyber -segurança é finalmente um tema quente hoje em dia. Infelizmente, os engenheiros juniores tendem a não estar cientes dos conceitos de segurança aplicáveis ao seu código. Um bom lugar para começar é lendo a lista dos 10 principais OWASP e detalhando cada vulnerabilidade de aplicativo. Sou um grande fã de “ 24 Pecados Capitais da Segurança de Software: Falhas de Programação e como corrigi-las .”
Novos engenheiros tendem a foco na codificação. Eles acreditam que a codificação é o que importa e desejam produzir um bom código rapidamente, às vezes contando com códigos difíceis de ler porque podem digitá-los de forma mais concisa. Existem apenas dois problemas com esse pensamento: todo engenheiro de software cria bugs e os engenheiros de software trabalham melhor em equipe! A qualidade é importante e a capacidade de manutenção também é importante. Pessoalmente, gosto dos livros “Working Effectively with Legacy Code” que falam sobre testes e a necessidade de testes para tornar o código melhor. “ Clean Code: A Handbook of Agile Software Craftsmanship ” aborda o tópico de sustentabilidade, às vezes com um ponto de vista extremo, o que o torna um ótimo livro para ler e discutir em equipe.
Novos engenheiros, especialmente os recém-formados, podem ter dificuldade em se ajustar ao local de trabalho e ao novo emprego. Isso também é verdade para qualquer engenheiro, na verdade qualquer pessoa, que esteja começando um novo emprego. Existe este ótimo livro “ Os primeiros 90 dias: estratégias comprovadas para aumentar a velocidade mais rapidamente e de maneira mais inteligente ” que me ensinou vários conceitos sobre como começar em um novo emprego e, em particular, a necessidade de estrutura. A estrutura é ótima. É reconfortante, especialmente em um novo ambiente. Obtenho resultados consistentes aplicando a mesma receita, como quando faço um bolo com minha filha. Quando comecei na Wayfair, onze meses atrás, no Native App Team, escolhi fazer perguntas bastante genéricas, mas consistentes, quando cheguei para obter a configuração do terreno. Essas perguntas não apenas me deram uma noção do que estava acontecendo, mas também me disseram muito sobre as pessoas com quem eu estava me encontrando. Cumpri minha missão de averiguação por cerca de um mês usando o mesmo questionário a cada 1: 1 e comecei a listar minhas áreas de foco no primeiro dia.
Estou no desenvolvimento de software há mais de vinte anos, lendo livros de liderança nos últimos dez anos, então sinta-se à vontade para me perguntar sobre livros de liderança se preferir leituras mais recentes!