About the Specialization: In the Software Design and Architecture Specialization, I mastered the application of design principles, patterns, and architectures to build reusable and flexible software applications and systems. I learned how to express and document software system designs visually, using Unified Modeling Language (UML).
Practical Learning: Engaging in practical examples allowed me to apply my knowledge, developing employable skills and expertise relevant to the software industry.
Capstone Project: Java-based Android Application The culmination of this specialization involved a Java-based Android application. Progressing through the four courses, I evolved the app from a single-user local data storage to a multi-user app with remote data storage. Each course provided a Java codebase as a starting point, challenging me to document and implement new features based on course knowledge.
Tutorials were available to help me understand the starter codebase and grasp the basics of Android development.
Basic Java programming knowledge was expected. The capstone application required the use of Android Studio, an integrated development environment. I explored tutorials for Windows or Mac to familiarize myself with Android Studio.
Course 1: Object-Oriented Design
What I Learned:
- Object-oriented analysis and design principles.
- Creating modular, flexible, and reusable software.
- Expressing designs in Unified Modeling Language (UML).
- Applying Class Responsibility Collaborator (CRC) technique.
- Designing an Android application with corresponding UML documentation.
Skills Gained:
- Object-Oriented Design
- Object-Oriented Analysis and Design
- Unified Modeling Language (UML)
Course 2: Design Patterns
What I Learned:
- Using design patterns for interactive applications.
- Identifying and addressing user interface design issues.
- Applying design principles (e.g., open-closed, dependency inversion).
- Recognizing and refactoring anti-patterns.
- Implementing the model-view-controller architectural pattern.
Course 3: Software Architecture
What I Learned:
- Representation of software architectures using UML.
- Common architectural styles, qualities, and tradeoffs.
- Properties of layered and n-tier architectures.
- Creating UML diagrams to express architectural structure.
- Documenting a multi-application system with layered architecture.
Course 4: Service-Oriented Architecture
What I Learned:
- Architectures for web applications.
- Basics of Service-Oriented Architecture (SOA).
- Web Services (WS*) and Representational State Transfer (REST) architecture.
- Microservices and REST design principles.
- Connecting a Java-based Android application with Elasticsearch using REST.
Skills Gained:
- Web Service
- Microservices
- Representational State Transfer (REST)
- Service-Oriented Architecture
Embarking on this specialization enhanced my software design and architecture skills, contributing to my proficiency in creating robust and scalable software solutions.