System Architecture and Design Using Modern C++ is a training course with programming examples taught by Charley Bay. It is offered online from 09:00 to 15:00 Aurora time (MDT), 11:00 to 17:00 EDT, 17:00 to 23:00 CET, Wednesday, October 20th through Friday, October 22nd, 2021 (before the conference).
C++ developers confront daunting responsibilities: to be familiar with the guarantees and idioms for the C++ language; know data structures and algorithms with intrinsic benefits and constraints explored by Computer Science; and understand the application domain in which the practicing professional is expected to make implementation decisions that manage complexity and resolve edge-cases to effectively solve real-world problems.
And yet, none of these directly address the meta-patterns and system-wide concerns defined by “architecture”, nor the reasoned tradeoffs of “design” that divide responsibilities and ultimately define subsystems and APIs. Often, these higher-order concerns are relegated to senior and experienced engineers charged with balancing business constraints with technical tradeoffs to establish a Theory of Operation for individual systems, and for product families.
This course is intended for intermediate and advanced C++ engineers with experience making architectural and design decisions, or who are evolving into roles that demand proficiency in system-level analysis and decision making. We will focus on Modern C++ and deeply explore successes and failures in projects and systems from a variety of industries. And, we will discover that some crossroads are universal, despite the unique concerns that may present pragmatic challenges and cause technical implications to be ranked differently based on the specific domain to which the solution is applied.
Course participants should:
- Have solid knowledge of C++ and familiarity with common C++ idioms and code patterns
- Be able to deeply explore priorities and constraints for at least one industry domain
- Be prepared to discuss, analyze, and reflect upon past project-level successes and failures (yours or those raised by other participants)
- Be excited to share with and learn from real-world experts facing similar challenges in different domains, but which expose solutions and insight into your domain
Course objectives are for participants to: (1) Increase exposure to architecture and design through a disciplined survey of concerns; (2) Develop a sense for probable paths of exploration most likely to yield solutions for a given domain; and (3) Grow in understanding for the business and technical implications of employing a specific engineering approach.
The course will be a mixture of material review (60-70%), case studies (10-20%), and discussion (10-20%). Focus is on deep investigation into critical system constraints, and the implications of decisions. Participants are expected to be experienced C++ engineers (intermediate to advanced), familiar with common language idioms and programming paradigms; and will be encouraged to share experiences, provide insight, and influence the direction of those topics that will be explored more deeply. Bring your provocative architectural and design scenarios for consideration by the group! It is hoped that participants will challenge assertions and provide critical analysis as we attempt to rank concerns and delve into domain-specific scenarios.
Due to time constraints, not all topics can be explored equally; but the course will probe and examine most of the following:
- Main Reasons for Failure in Modern C++ Systems
- Common “Meta-Patterns” in Modern C++ Systems, and Why
- Practical “Do-This” and “Don’t Do That” To Address Technical Challenges
- Architecture vs. Design
- Business Concerns vs. Technical Concerns
- Managing Complexity at the Design-level, versus Implementation Level
- Categories Of Design Concerns
- Identifying and Leveraging Orthogonal Dependencies
- “Top-Down” vs. “Bottoms-Up”
- The role of the Type System, Symmetry, and Invariants to Simplify Design
- Distinguishing between Abstraction and Artifact
- The Purpose for Levels of Abstraction
- Defining and Identifying “Well-Defined” Behavior
- Data Flows and Object State Lifecycle
- Impedance Mismatch in Design, and the role of Adapters
- Coupling and Complexity in relation to Data Structures, Algorithms, and Side-Effects
- Customization Points and the Role of ADL
- Concurrency, Parallelism, and Threading Models
- Identifying System Constraints and Throughput Limitations
- The role of “Wide” and “Narrow” Contracts
- Identifying Patterns, and Anti-Patterns
- Diagramming and Mapping of Concerns
- The role of “Reuse” versus “Application-specific”
- Models for Development Feedback, and Customer Feedback
- Constrained and Unconstrained Frameworks
- Separating “Research” (i.e., “Feasibility”) from “Development”
- When to embrace new/novel language features and idioms
Join us for two days of discussion among seasoned industry professionals that share their insights (of successes and failures) in Architecture and Design, where wisdom would otherwise be cultivated over decades through hard-fought undertakings.
Charley Bay has over three decades of experience using C++ in multiple regulated and high-performance fields focused on large-scale and distributed systems in performance-sensitive environments including time-sensitive processing of large data sets, performance visualization, real-time processing, low-latency, embedded, and system status and control. He is an internationally recognized technical speaker, is active in the Boost Community (including Review Manager of Boost.Outcome), and active in SG14 (Low Latency) for ISO C++ WG21. He has taught C++ and Computer Science in post-secondary environments for over a decade, and brings broad experience from multiple industry domains.