There are many books you can read as a software engineer to improve your skills and philosophy. These books will teach you how to write code that is maintainable, readable, and scalable.
1. Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin
Clean Code is divided into three parts: principles and patterns of writing clean code, case studies of code bases with problems, and a list of heuristics and "smells."
You will be reading code and thinking about what is right and wrong with it. There will also be a challenge to reassess professional values and commitment to the chosen profession.
Clean Code will teach readers how to write good code, how to format code for maximum readability, how to implement complete error handling, how to unit test, and how to practice test-driven development.
2. The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt and David Thomas
The Pragmatic Programmer is a book that examines the core process of software development and how to produce working, maintainable code that delights its users. It covers topics ranging from personal responsibility and career development to architectural techniques for keeping your code flexible and easy to adapt and reuse.
You will learn practical techniques for building quality software, from the initial planning stages through to delivery and maintenance. The book also includes a wide range of topics that are not always given the attention they deserve, such as debugging, testing, and working effectively with others.
Throughout the book, the authors share their experiences and insights gained from years of professional software development. This wealth of experience makes The Pragmatic Programmer an invaluable resource for anyone who wants to produce high-quality code.
3. Cracking the Coding Interview by Gayle Laakmann McDowell
Cracking the Coding Interview is a book that will help you learn what you need to know to perform well in coding interviews, through the advice of someone who has experience coaching and interviewing hundreds of software engineers.
This book will teach you how to think like a computer scientist for your next technical interview. You will find 189 programming questions, ranging from basics to trickier algorithm problems, along with walk-throughs of how to derive each solution, hints on solving each question, and five proven strategies to tackle algorithm questions.
In addition, there is extensive coverage of essential topics, such as big O time, data structures, and core algorithms. Finally, there is a look at the soft side of the interview process and what makes a good interview question.
4. Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, John Vlissides, Ralph Johnson, and Richard Helm
Design Patterns has a catalog of 23 simple and elegant solutions to common design problems in object-oriented software design, as captured by experience from four top-notch designers.
You will learn about common design patterns and how to use them to create more efficient and reliable object-oriented software, and how these patterns fit into the software development process.
Each pattern describes when it is applicable given other design constraints, the trade-offs of using the pattern, and how it may be implemented in an object-oriented programming language.
It's a must-read if you want to learn how to design object-oriented software.
5. Refactoring: Improving the Design of Existing Code by Martin Fowler
Martin Fowler’s Refactoring has been relied on by experienced programmers worldwide for over twenty years to improve the design of existing code, enhance software maintainability, and make existing code easier to understand.
Refactoring is the process of improving the design of existing code. The main goals of refactoring are to improve code readability and maintainability, and to make the code easier to change.
This book explains what refactoring is, why you should do it, how to refactor code, and what obstacles you may encounter.
6. Mythical Man-Month, The: Essays on Software Engineering by Frederick Brooks Jr.
The Mythical Man-Month is a must-read for anyone managing complex projects.
It's considered influential and timeless, with a blend of software engineering facts and thought-provoking opinions. It is based on Brooks' experience as project manager for the IBM System/360 computer family and then for OS/360, its massive software system.
7. Test Driven Development: By Example by Kent Beck
Test-driven development is a development methodology meant to eliminate fear in application development. It encourages team communication and collaboration, and teaches programmers to seek out constructive criticism.
This book is a great resource for learning about this development methodology. It provides clear and concise explanations of the concepts, and includes real-world examples to illustrate how they can be applied in practice. If you're looking to learn more about TDD, or want to improve your skills in this area, this book is a great place to start.
8. Software Engineering at Google: Lessons Learned from Programming Over Time by Titus Winters
This book covers how Google's engineering culture, processes, and tools contribute to the effectiveness of an engineering organization.
Software engineers at Google manage a living codebase that evolves and responds to changing requirements and demands over the length of its life. They do this by using a combination of engineering culture, processes, and tools that allow them to effectively manage change.
There are three principles that software organizations should keep in mind when designing, architecting, writing, and maintaining code: time, scale, and trade-offs.
You'll learn about Google's engineering culture and how it contributes to the effectiveness of an engineering organization. The book covers the company's processes and tools, and how they help manage change. You will also learn about the three principles that software organizations should keep in mind when designing, architecting, writing, and maintaining code: time, scale, and trade-offs.
David Farley's Modern Software Engineering helps software professionals improve the quality of their applications, their lives, and the lives of their colleagues. The book distills the discipline into two core exercises: learning and exploration and managing complexity. For each, Farley defines principles that can help readers improve everything from their mindset to the quality of their code, and describes approaches proven to promote success.
Farley's approach to software engineering is a comprehensive, unified, and practical approach to solving software development problems within realistic economic constraints. It offers deeper insight into what software developers do every day, helping them create better software, faster, with more pleasure and personal fulfillment.
This book is a great resource for software developers who want to improve their craft and become more efficient and effective at their jobs.