Skip to content

This course is designed to provide an initial understanding of various programming principles, agile development methodologies, quality attributes, software architectural patterns, styles, tactics, and, software design patterns. Additional learnings like Docker, code review, and infrastructure are included too.

Notifications You must be signed in to change notification settings

zahydo/software_engineering_II_lessons

Repository files navigation

Software Engineering II

Welcome to Software Engineering II.

This course is designed to provide an initial understanding of various programming principles, agile development methodologies, quality attributes, software architectural patterns, styles, tactics, and, software design patterns. Additional learnings like Docker, code review, and infrastructure are included too.

Throughout the course, you will learn about:

  • General programming principles such as YAGNI, Separation of Concerns, KISS, DRY, Do The Simplest Thing That Could Possibly Work, Composition Over Inheritance, Code For Maintainer, Boy-Scout Rule, Avoid Premature Optimization, etc.
  • SOLID Design Principles: Single Responsibility Principle, Open/Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, and Dependency Injection
  • Design patterns such as Factory, Singleton, Observer, and more
  • Agile development practices including continuous integration/continuous deployment (CI/CD)
  • Code versioning and refactoring
  • Code review and testing
  • Docker
  • AWS Cloud
  • SSH

We want to provide you with hands-on experience in software development using modern software engineering practices. You will work on individual and group projects throughout the semester, applying what you learn in the classroom to real-world software development problems.

Course Structure

The course consists of lectures, in-class exercises, and individual/group assignments. You will also be required to complete a final project that demonstrates your understanding of the concepts covered in the course.

Prerequisites

Before taking this course, it is recommended that you have a strong foundation in programming fundamentals and have completed Software Engineering 1 or an equivalent course.

Course Goals

Upon completion of this course, you should be able to:

  • Apply modern software engineering practices to real-world software development problems
  • Understand agile development methodologies, including continuous integration/continuous deployment (CI/CD)
  • Understand SOLID Design Principles and use them to design modular, scalable, and maintainable software systems
  • Understand and apply common software design patterns
  • Use code versioning and refactoring techniques to improve the quality and maintainability of software
  • Participate in code review and testing processes to ensure high-quality software development
  • Use Docker to containerize and deploy software applications
  • Deploy applications in different infrastructure focusses

Online resources:

Lessons

How to Contribute

If you want to contribute to this Repo, you must follow the next steps:

  1. Request access to the owner @zahydo.
  2. Clone the repo: git clone https://github.com/zahydo/software_engineering_II_lessons
  3. Create a new branch with your contributions: git checkout -b feature/name_lastName/solid
  4. Commit your changes in the new branch: git add ., git commit -m "descriptive commit message"
  5. Always pull the last changes from the main branch: git pull --rebase origin main
  6. Resolve possible conflicts.
  7. Push your branch to the remote: git push -f origin feature/name_lastName/solid
  8. Create a PR with your new branch in the remote. Follow the next steps: Tutorial
  9. Add the owner as a Reviewer @zahydo
  10. Wait for comments. Update the branch with the requested changes (if there are).

Author

@sahydo

About

This course is designed to provide an initial understanding of various programming principles, agile development methodologies, quality attributes, software architectural patterns, styles, tactics, and, software design patterns. Additional learnings like Docker, code review, and infrastructure are included too.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published