The Advanced Software Architecture training course is intended to help working software engineers build larger, higher quality software systems using various structures and systems and teach learners what it takes to architect that software. Software architecture serves as a blueprint upon which applications are developed using structures and systems that enable for more efficient software development.
The course begins a historical introduction and deep dive into the major technologies of this course including Test Drive Design (TDD), Design Patterns, Design for Scalability, and The Clean Architecture. Next, students will explore the building and refactoring large systems with an eye to reconciling the different approaches and building high-quality software. Students will learn how to identify how to consolidate services OR to break down services when necessary. Finally, the course concludes with education about how to refactor databases, data flows, and analytics to improve the scalability and performance of applications.
This course assumes general software engineering maturity and hands-on coding experience. Ideally, students will be familiar with one of C++, C#, Scala, Java, or Python.
Purpose
|
Learn how to apply design patterns in order to architect large, internet-scale applications. |
Audience
|
Software Engineers that want to learn how to architect large, internet-scale applications and apply design patterns to build those applications. |
Role
| Software Developer |
Skill Level
| Advanced |
Style
| Workshops |
Duration
| 4 Days |
Related Technologies
| C# | C++ | Java | Scala | Python |
Productivity Objectives
- Gain an in-depth understanding of key software architecture concepts and methodologies: Design Patterns, Refactoring, Tests Driven Development, Scalable Design, and Clean Architecture.
- Grasp how to refactor complex systems to achieve test coverage and scalability.
- Recognize the tradeoffs between alternate designs depending upon staffing, time to market, and scalability constraints.
- Master the skills towards designing and managing the development of large software systems.