Topic outline

  • Announcements & Discussions

  • Course Presentation

    The primary learning objective of this course is to equip students with advanced software engineering principles and modern practices, enabling them to effectively design, develop, and maintain large-scale, robust, and scalable software systems.

    This section presents a detailed description for this course.

  • Chapter 01 : Reminder

    This chapter serves as a crucial review of the foundational concepts you will need for this course. We will revisit the Unified Modeling Language (UML) as the standard for visualizing and documenting systems, and review common Software Engineering Processes (like Agile and Waterfall) that structure the development lifecycle.

    Learning Objective: 

    The goal is to refresh and solidify your understanding of these core principles to ensure you have a strong base for tackling the advanced topics ahead.


  • Chapter 02 : Clean Code

    This chapter introduces the core principles of professional software development essential for writing clean, high-quality code. We will explore a set of fundamental guidelines—SOLID, KISS (Keep It Simple, Stupid), DRY (Don't Repeat Yourself), and YAGNI (You Ain't Gonna Need It)—that are critical for building software that is maintainable, scalable, and easy to understand.

    Learning Objective: 

    The objective is to enable students to analyze code quality and apply these design principles to write (and refactor) software that is robust, flexible, and resistant to technical debt.


  • Chapter 03 : Design Patterns

    This chapter moves from foundational principles to proven, reusable solutions for common software design problems. We will explore key Design Patterns, such as those cataloged by the "Gang of Four" (GoF). These patterns provide established, well-tested templates for solving recurring structural (e.g., Adapter, Decorator), creational (e.g., Singleton, Factory), and behavioral (e.g., Observer, Strategy) challenges in object-oriented design.

    Learning Objective: 

    The objective is to equip students with the ability to recognize common design challenges, select the most appropriate design pattern, and implement it effectively to create more flexible, reusable, and elegant software systems.


  • Topic 5

  • Topic 6

  • Topic 7

  • Topic 8

  • Topic 9

  • Topic 10

  • Topic 11

  • Topic 12

  • Topic 13

  • Topic 14

  • Topic 15

  • Topic 16

  • Topic 17

  • Topic 18

  • Topic 19

  • Topic 20

  • Topic 21