Skip to content

Latest commit

 

History

History
112 lines (89 loc) · 6.13 KB

README.md

File metadata and controls

112 lines (89 loc) · 6.13 KB

Software Design I

This course is designed to introduce undergraduate students to foundations of design patterns and good practices of software modeling. This is not a course fully focus on software architecture, but it is part of main concepts of software architecture.

Classes will consist of lectures, discussions, practical examples, and workshops. Also, you must take some readings from software architecture. In addition, there will be a semester-long project, as well two exams, five workshops, and twenty additional assignments.

Goals

The main goal of this course is to provide undergraduate students with different models and tools for solving software problems using object-oriented paradigm.

At the end of this course you should be able to create a full software backend solution with a good level of quality metrics. Also, you should be able to design robust software systems in an agnostic way.

Pre-requisites

This is a basic course, so you must have some knowledge in:

  • Programming in Java, Python, or C++.
  • Object-Oriented Programming foundations.
  • UML and Class Diagrams basic concepts.
  • Git basic usage, and GitHub basic usage.
  • Data systems and relational model basic concepts.
  • Use of IDEs like VS Code, Eclipse, or PyCharm.

Tasks

As follows the list of task of the course is described. Be careful with deadlines.

Deadline Task ID Task Description
May 8th T11 What is Continuous Delivery/Deployment in software development lifecycle?
May 8th T12 What is "Segregation of Duties" in Software Development Teams?
May 10th T13 What is the Hexagonal Arquitecture approach in Software Design?
May 10th T14 Why do some software tools make use command-line interfaces (CLI)?
May 15th T15 What is scalability in software design and which ones are the current recommended practices to make pretty scalable software projects?
May 15th T16 What is the Model-Template Controller paradigm in Software Development? How does it is related to MVC?
May 17th T17 What are both Ghosts and Dead Code? What are Code Linters and why are they important in Software Development?
May 17th T18 Which ones are the recommended cases to do not apply patterns design?
May 22th T19 What are the main skills companies are looking for software developers?
May 24th T20 Which ones are traditional questions in technical interviews for software developer positions?

Grading

As follows there is a simple distribution of percentage of grades:

Period Item Percentage
Period I Assignments 10%
Workshops 15%
Project Partial Delivery 10%
Period II Assignments 10%
Workshops 15%
Test 10%
Period III Workshop + Assignments 5%
Final Test 10%
Course Project 15%

Rules

Don't hate the player, hate the game:

  • All assignments must be submitted hand-written on time and in English. Grammar and spelling will not be evaluated.
  • Copying and pasting from the internet is forbidden. Please, develop your own solutions.
  • Class attendance is not mandatory. If you miss classes, you must study by yourself.
  • No cell-phones, no smartwatches, no WhatsApp, no Tinder, no smart anything. Just you and your brain. Pay attention in class.
  • Communications with me must be done by email or by Slack. I will not answer any question by WhatsApp.

Code of Conduct

  • Always be respectful to your classmates and to me. You must be kind with everyone inside (and outside) the classroom.
  • There is no a better programming language, tool, or technology. There are only better or worse solutions.
  • You must be honest with your work. If you don't know something, just ask me. I will be glad to help you.
  • You must be responsible with your work. If you don't submit on time, please don't cry.
  • You must not be annoying, or affect the classroom environment. If you do, I will ask you to leave the classroom.

Bibliography

Recommended bibliography:

  • Design Patterns: Elements of Reusable Object-Oriented Software, by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides.
  • Clean Code: A Handbook of Agile Software Craftsmanship, by Robert C. Martin.
  • Refactoring: Improving the Design of Existing Code, by Martin Fowler.
  • Domain-Driven Design: Tackling Complexity in the Heart of Software, by Eric Evans.
  • Patterns of Enterprise Application Architecture, by Martin Fowler.
  • Construcción de Software Orientado a Objetos, by Bertrand Meyer
  • Thinking Java, by Bruce Eckel
  • Java2 How To Program, by Deitel & Deitel.