INSTRUCTOR: Dr. Brian Mitchell - twitter
This course provides fundamental knowledge of software architecture needed by modern software architects. Topics include basic concepts and knowledge, software architecture styles, architecture modeling and analysis techniques, architecture documentation, architecture quality attributes, architecture in open source, cloud native, and industrial projects, etc. The course strikes a balance between teaching principles of software architecture and introducing cutting-edge techniques and concepts, using open source projects as case studies.
In this course, students will learn to analyze, express, and evaluate the architectural characteristics of modern systems. The course will focus on the understanding the architectural needs of modern systems:
- That must run at scale,
- Require deployment flexibility (cloud, containers, etc),
- Are highly distributed,
- Run in potentially hostile or untrusted environments,
- Promote design flexibility that enables rapid adoption of user-driven changes.
The course will not use a textbook - lectures will be formulated from material developed in academia and industry on Software Architecture and Software Design. References to all course materials will be provided by the instructor. We will be investigating architecture best practices though a number of modules that dive into many aspects of modern software design:
- Introduction to Software Architecture - Definition, Scope, Significance & Role
- Requirements for Software Architecure - Requirments, Constraints & Quality Attributes
- Architecture Styles
- Software Architecture Modeling and Documentation (Informal, UML, C4) - Components, Connectors & Documentation
- Service-Oriented, Microservice, and API Architectures
- Modern Web Architectures
- Reactive Architectures
- Cloud Native Architectures (including cloud native runtimes such as docker/kubernetes)
- DDD to Discover Architecture Components; Data Mesh Architectures
- Real world software architecture considerations
This is an 11 week graduate course, weekly lectures will be provided via my GitHub site @ArchitectingSoftware. Course assignments and deliverables will be managed on Drexel's Learn Blackboard site. In addition to the course lectures, student participation and deliverables will include:
- Independent review of research papers that will be posted on the class internal discussion board
- I will be selecting several YouTube accessible videos from some of my favorite speakers and ask students to create a short writeup critiquing the talk. The student will be expected to integrate learnings in the class with the talk to structure a virtual feedback email.
- Individual and Group Homework assignments
- Final project is to construct a non-trivial implementation of a project demonstrating your ability to apply some of the foundational concepts that we covered in class. This project will demonstrate your ability to:
- Design, analyze and implement software architectures
- Effectively document and communicate software architecture concepts
- Apply appropriate architecture patterns against identified quality attributes
- Effectively motivate architecture decisions via a group presentation
In order to be successful in this course:
- Students are expected to have some previous software engineering experience, either from a recent undergraduate course or from practical work experience.
- Students are also expected to have the ability to write source code in a modern programming language, including surrounding skills working with a git-based SCM repository and build/dependency tools. Examples: Java, modern Javascript, Python, C#, GitHub, git, gradle, maven, npm, etc.
- Students must be comfortable being exposed to source code in programming languages that they might not know. I will be reinforcing course concepts by showing and explaining sample code in a variety of programming languages (Rust, Kotlin, GoLang, TypeScript, modern JavaScript, etc) throughout this course. While I dont expect students to know all of these languages, I do expect that they can follow examples in multiple programming languages when explained.
- Students should also have a basic knowledge of working with web technologies such as HTML, and Javascript. While only a limited basic working knowledge is required, I use web architectures a good bit in this course to highlight key modern software design and architecture concepts.
Student final grades will be derived by the approximate scale:
| Course Component | Approximate Weight |
|---|---|
| Individual assignments based on research papers, video reviews, etc | 40% |
| Individual Project with Multiple Deliverables | 50% |
| Class Participation | 10% |
Note that all course deliverables will be submitted via the course Blackboard site and not email.