Detailed Software Engineering Series:

Software Engineering Books (Photo Credit: Myself)
Book introduction
“Modern Software Engineering” by David Farley is a comprehensive guide aimed at helping software engineers adopt best practices and methodologies to enhance their development processes. The book is divided into several parts, each focusing on a different aspect of modern software engineering. Each chapter builds on the previous ones, gradually introducing more complex concepts and practices. By combining timeless engineering principles with modern tools and methodologies, Farley provides a roadmap for building better software faster and more efficiently.
“Software Engineering” (8th edition) by Ian Sommerville is a classic book and widely used textbook that covers a broad range of topics in the field of software engineering. The book is organized into 32 chapters, each focusing on a specific aspect of software engineering. It is structured to be used both as a textbook for students and a reference for professionals. Each chapter includes case studies, examples, exercises, and further reading to reinforce the concepts discussed. Its thorough coverage of the subject, coupled with practical insights and real-world examples, makes it a valuable guide for students, educators, and practitioners alike.
About Author
David Farley is the author of some well-known books called ‘Modern Software Engineering,’ ‘Continuous Delivery,’ and ‘Modernist Travel Writing.’ He is also a YouTuber and assistant professor. Also, he is an early adopter of Agile Methodology with vast experience in software development.
Ian F. Sommerville is a British academic and researcher. He is the author of a popular student textbook on ‘Software Engineering,’ as well as a number of other books and papers. Besides this, he is also the author of the book named ‘Engineering Software Products.’
High-level Overview
Modern Software Engineering:
The book is split into 4 main sections:
- What is software engineering? – A closer look at engineering as a discipline, the misconceptions and variety of engineering fields, and what it means for software.
- Optimize for learning — Five concepts (working iteratively, feedback, incrementalism, empiricism, and experimental) that support learning.
- Optimize for managing complexity — Five concepts (modularity, cohesion, separation of concerns, information hiding and abstraction, and managing coupling) that help manage complexity.
- Tools to support engineering in software — Concrete tools that a modern software engineer draws upon and what it means to work as a modern software engineer.
Structure of the book:
- Introduction: Sets the stage by discussing the need for a new approach to software engineering.
- Principles: Lays out the fundamental principles that underpin modern software engineering, including evidence-based decision-making and continuous improvement.
- Practices: Detailed exploration of various practices, such as test-driven development, continuous integration, and deployment.
- Processes: Discusses the processes that support these practices, including Agile methodologies and Lean thinking.
- Architecture: Examines how to design and build systems that are robust, scalable, and maintainable.
- Culture: Looks at the human and organizational factors that influence the success of software engineering efforts.
- Conclusion: Summarizes the key takeaways and provides a roadmap for implementing modern software engineering practices in real-world projects.
Software Engineering:
The book is split into 7 main sections:
- Overview – Overview and introduction of software engineering.
- Requirements – Discuss the requirements engineering.
- Design — How to design a software system based on requirements.
- Development — How to develop the software based on design.
- Verification and Validation — How to verify and validate the requirements, design, and developed system.
- Managing People – Manage people, estimate cost, manage quality, and process and configuration.
- Emerging Technologies – Brief of security engineering and service and aspect-oriented software development.
Structure of the book:
- Introduction to Software Engineering: Covers the basics of software engineering and introduces key concepts and terminologies.
- Software Engineering Processes: Discusses various software processes and models.
- Requirements and Specification: Focuses on techniques and practices for gathering and specifying requirements.
- System Modeling: Explores different modeling techniques and their applications.
- Design and Implementation: Covers software design principles, coding practices, and implementation strategies.
- Software Testing and Quality: Details various testing methodologies and quality assurance practices.
- Software Management: Discusses project management, configuration management, and software maintenance.
- Software Engineering Ethics: Addresses ethical issues and professional responsibilities.
- Advanced Topics: Includes discussions on advanced and emerging topics in software engineering.
Insights and Learning
- Adopt a Scientific Approach: Treat software development as an empirical discipline where experimentation, measurement, and learning are integral parts.
- Focus on Quality: Invest in practices that ensure high-quality code, such as automated testing, code reviews, and continuous integration.
- Embrace Change: Use agile and lean methodologies to remain flexible and responsive to changing requirements.
- Software Design: Choose an iterative approach for development, take feedback, improve and construct incrementally, and maintain coupling and modularity and reduce cohesion by separating the concern.
- Collaborate Effectively: Foster a culture of collaboration and shared responsibility between development and operations teams.
- Automate Repetitive Tasks: Leverage automation to reduce manual effort, minimize errors, and accelerate the delivery pipeline.
- Embrace TDD and DDD for Better Design: Embrace the test-driven development approach for better and higher-quality software design. And Domain Driven Development for maintaining separation of concern.
- CI/CD: Establish better DevOps practices and a smooth pipeline for continuous delivery for continuous change.
- Component-Based Software Engineering: Focus on component-based development like microservices, SOA, AOP, etc. Because it gives higher scalability and availability if managed in a good manner.
- Critical System Development: Give extra care when you build critical systems, because in case of any anomaly, it can do a lot of harm.
- Configuration Management: Try to identify, separate, and manage system configuration separately; this will give you flexibility later.
Conclusion
Software engineering is a complex topic. For building better, reusable, and maintainable software faster, we need to know, feel, and understand the pros, cons, and different aspects of classical and modern software engineering. These 2 books can be a good starting point for this. One book gives you the theoretical knowledge of software engineering, and on the other hand, the other book gives you knowledge about modern software engineering.
But always remember, “Whatever software engineering is, if it doesn’t help us create better software faster, it doesn’t count as engineering.”