Book Review and Takeaways: ("Modern Software Engineering" + "Software Engineering")

Book Review and Takeaways: ("Modern Software Engineering" + "Software Engineering")


Recent past, I finished reading the book named "Modern Software Engineering" by David Farley and revised "Software Engineering" by Ian Sommerville. So I would love to share the review and takeaways from these books with all of you. So let's start...


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, make it a valuable guide for students, educators, and practitioners alike.


About Authors

David Farley is the author of some well known books called 'Modern Software Engineering', 'Continues Delivery' and 'Modernist Travel Writing'. He is also an youtuber and assistant professor. Also he is an early adapter of Agile Methodology with a vast experience of software development.

Ian F. Sommerville, is a British academic, 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 author of the book named 'Engineering Software Products'.


High Level Overview

Modern Software Engineering:

The book is split into 4 main sections:

  1. 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.
  2. Optimize for learning – Five concepts (working iteratively, feedback, incrementalism, empiricism, experimental) that support learning.
  3. Optimize for managing complexity – Five concepts (modularity, cohesion, separation of concerns, information hiding and abstraction, managing coupling) that help manage complexity.
  4. 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:

  1. Overview – Overview and introduction of software engineering.
  2. Requirements – Discuss the requirements engineering.
  3. Design – How to design a software system based on requirements.
  4. Development – How to develop the software based on design.
  5. Verification and Validation – How to verify and validate the requirements, design and developed system.
  6. Managing People – Manage people, estimate cost, manage quality, process and configuration.
  7. Emerging Technologies – Brief of security engineering and service and aspects 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.


Takeaways

  • 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 iterative approach for development, take feedback, improve and construct incrementally and maintain coupling, modularity, reduce cohesion by separate 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, DDD for Better Design: Embrace test driven development approach for better and quality software design. And Domain Driven Development for maintain separation of concern.
  • CI/CD: Establish better DevOps practice and smooth pipeline for continuous delivery for continues change.
  • Component Based Software Engineering: Focus on component based development like microservice, SOA, AOP etc. Because it gives higher scalability and availability if manage well manner.
  • Critical System Development: Give extra care when you build critical system, because incase of any anomaly it can harms lot.
  • Configuration Management: Try to identify, separate and manage system configuration separately, this will give you flexibility later.


If you want to learn more, please read the followings, my previous written details article about software engineering.

Part 1: All About Software Engineering: Part 1 (Science, Engineering and Mindset Part)

Part 2: All About Software Engineering: Part 2 (Software Development Life Cycle [SDLC] and Process Models)

Part 3: All About Software Engineering: Part 3 (Involved parties at different stages of SDLC)

Part 4: All About Software Engineering: Part 4 (Challenges in Modern Software Engineering)

Part 5: All About Software Engineering: Part 5 (Possible Solutions for Most Faced Software Engineering Challenges)

Part 6: All About Software Engineering: Part 6 (Sum-up : Be an Effective Software Engineer)


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 start point for this. One book gives you the theoretical knowledge of software engineering and on the other hand other book gives you knowledge about the 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."


Happy learning !!!

Happy Coding !!!

Happy Programming !!!

要查看或添加评论,请登录

社区洞察

其他会员也浏览了