Tag Archives: creately.com

Topic 13 – Introduction to Software Design

Why do I need to learn about software design?

What will you do if you are asked to build a house?
You will need to sketch its first and build the house based upon the sketch. Otherwise you may build a house that may collapse in a few weeks or cannot be decorated due to errors.

The situation is similar when you create software. You need to plan how you will build it first by deciding how many components and objects will be used for constructing to solve at least a core problem, what are their responsibility, how they work together, how data will be organized, how data will be flowed within these components, how users will interact with your application, how these components will be deployed.

Software design knowledge will guide you how to do these tasks.

What can I do after finishing learning software design?

You will know how to create a design for an application including static and dynamic structure, data organization, business processing workflows.

Is is really useful? I feel that you can write the code right after having requirements and I am able to refactor my code when needed.

That’s great if you can do it like that. You only need to learn about software design when

(i) you do not know how to write code for a feature or

(ii) you cannot refactor your code because only a small change breaks the whole application or

(iii) you need to write a software system together with 20 other developers and you do NOT know where to begin and how you will integrate results of all the developers into one solution or

(iv) you have a software system that could  serve 20 users simultaneously very well but it stops responding when serving 2,000 users simultaneously and you do not know how to fix it.

Alright! What should I do now?

Software design requires a lot of reading. Each application type (enterprise systems, games, intelligent systems) require specific design knowledge. In this topic, we only focus on basic elements of software design.

In order to get familiar with software design please read
– this Grady Booch et al. (2005). The Unified Modeling Language User Guide. Addison Wesley Professional book, and
– this Craig Larman (2004). Applying UML And Patterns. 3rd Edition. Prentice Hall  book, and
– this Robert C. Martin (2003). Agile Software Development – Principles, Patterns, and Practices. Pearson book in in parallel.

After that please read this Erich Gamma et al (1994). Design Patterns Elements Of Reusable Object Oriented Software. Addison-Wesley Professional book.
Please focus on the Motivation section of each pattern first. You can skip a pattern if the problem presented in the Motivation section is not relevant to your situation or does not interest you.

After that please read
– this Frank Buschmann et al. (1996). Pattern-Oriented Software Architecture: A System Of Patterns. John Wiley & Sons Ltd book, and
– this Deepak Alur, Dan Malks and John Crupi (2003). Core J2EE Patterns: Best Practices And Design Strategies. Prentice Hall PTR book, and
– this Martin Fowler et al. (2002). Patterns Of Enterprise Application Architecture. Addison Wesley book.

After that please read
– this Meilir Page-Jones (1988). The Practical Guide to Structured Systems Design. Pearson Education book, and
– this Bertrand Meyer (1997). Object-Oriented Software Construction. Prentice Hall book, and
– this Grady Booch et al. (2007). Object-Oriented Analysis and Design with Applications. Pearson book, and
– this David Budgen (2003). Software Design. Pearson book and this David Budgen (2020). Software Design. CRC Press book
to learn how to design software systematically.

After that please read this Robert C. Martin (2017). Clean Architecture: A Craftsman’s Guide to Software Structure and Design. Pearson Education book to learn how to create a real world architecture for an enterprise system.

After that please read
– this Len Bass, Paul Clements and Rick Kazman (2021). Software Architecture in Practice. Addison-Wesley book to review software architecture aspects, and
– this Paul Clements et al. (2010). Documenting Software Architectures: Views and Beyond. Pearson book to learn how to document an architecture so that it can be used for communicated, built and maintained, and
– this Humberto Cervantes and Rick Kazman (2016). Designing Software Architectures: A Practical Approach. Addison-Wesley Professional book to learn how to create an architecture systematically, and
– this Nick Rozanski and Eoin Woods (2012). Software Systems Architecture: Working with Stakeholders Using Viewpoints and Perspectives. Addison-Wesley Professional book to learn how to apply theory to create an architecture systematically in real world.

Terminology Review:

  • Software Design.
  • Design Inputs and Outputs.
  • Design Notations.
  • User Interface Design.
  • Database Design.
  • Data Structure Design.
  • Algorithm Design.
  • Object-Oriented Design.
  • Architectures.
  • Architecture Design.
  • Architectural Styles.
  • Architectural Patterns.
  • Design Patterns.
  • Modeling vs. Designing.
  • Analysis Models vs. Design Models.
  • Design Phases.
  • Design Timing.
  • Design Methods.
  • “Good” Design: Modularity, Information Hiding, Data Encapsulation, Low Coupling, High Cohesion.
  • UML.
  • Use Case Diagrams.
  • Class Diagrams.
  • System Sequence Diagrams.
  • Sequence Diagrams.
  • Communication Diagrams.
  • Activity Diagrams.
  • State Diagrams.
  • Static Structure.
  • Dynamic Structure.
  • Design Principles.
  • SOLID Principles.
  • Cohesion.
  • Coupling.
  • Design Patterns.
  • Software Architecture.
  • Architecture Qualities.
  • Package Diagrams.
  • Component Diagrams.
  • Deployment Diagrams.
  • Architectural View.
  • Architectural Viewpoint.
  • Architecture Patterns.
  • Enterprise Patterns.
  • Row Data Gateway.
  • Active Record.
  • Data Mapper.
  • Table Data Gateway.
  • Table Module.
  • Transaction Script.
  • Domain Models.
  • Structured Design.

After finishing learning this topic please click Topic 14 – Software Project Management to continue.