Advanced Software Engineering and Modern Architecture
2020 Cohort - Project Alo
Goal: Gain the necessary knowledge and skills to become a world-class software engineer and solution architect capable of architecting and developing robust, scalable, highly-available, flexible, extensible and maintainable frameworks, platforms and custom solutions.
LEVEL 1: FOUNDATIONS OF MODERN SOFTWARE ENGINEERING
-
Software Engineering - Basics (Evolution, Concepts and Principles)
-
Real OOP and Alan Kay's approach
-
State-Process Protection
-
Smalltalk language - basics
-
Actor Model and Carl Hewitt's approach
-
Location Transparency
-
DbC (Design-by-Contract) - Bertrand Meyer
-
Functional Programming
-
Object-Oriented Design Principles (Abstraction, Cohesion, Coupling, Compartmentalization, SOLID, etc.)
-
Fundamentals of Object-Oriented Analysis and Design (body of work of Martin Fowler, Ivar Jacobson, Bertrand Meyer, Grady Booch, James Rumbaugh, Rebecca Wirfs-Brock, Ed Yourdon, Peter Coad, Craig Larman, Scott Ambler)
LEVEL 2: DOMAIN MODELING AND DESIGN
- DDD - Domain-Driven Design (Eric Evans and Vaughn Vernon)
- Ubiquitous Language
- Entities, Value Objects, Rules, Specifications and Services
- Aggregates
- Factories and Repositories
- Modules
- Design Refactoring
- Analysis Patterns
- Design Patterns
- Strategic Design
- Bounded Contexts
- Context Mapping
- Core Domain and Subdomains
- Responsibility Layers
- Pluggable Component Framework
- Event Storming vs Workflow Analysis
LEVEL 3: MODERN SOFTWARE ARCHITECTURE
-
Software Architecture - Basics (Evolution, Concepts and Principles)
-
Evolutionary Architecture (Rebecca Parson and Neal Ford)
-
Hexagonal Architecture (Alistair Cockburn)
-
Dependency Inversion and Injection
-
Onion Architecture (Jeffrey Palermo)
-
Clean Architecture (Ivar Jacobson and Robert Martin)
-
DCI Architecture (Trygve Reenskaug and Jim Coplien)
-
Vertical Slice Architecture (Jimmy Bogard)
-
Client-side architectures like MVC, MVP, MVI, PAC, VIPER, Uber RIB, Netflix Componentized, AirBnB's architecture, etc.
-
Leading client-side frameworks Flutter, iOS, Android, Angular, React, Vue, Svelte etc.
-
Workflows / LRPs - Long-Running Processes (BPMN, Camunda and Zeebe)
-
Task-based UIs
-
Feature Modularization
-
Micro-Frontends
-
Statechart-based Robust Ix (Interaction) Model (David Harel and Ian Horrocks)
-
Plug-ins, Extensions and Add-ons
-
Information Architecture
-
Architecture Patterns (Martin Fowler)
LEVEL 4: DISTRIBUTED COMPUTING - PROBLEMS AND SOLUTIONS
- Distributed Computing - Basics (Evolution, Concepts and Principles)
- Coupling and Cohesion in Distributed context
- Synchronous vs Asynchronous
- Blocking vs Non-Blocking
- Mutability vs Immutability
- Concurrency and Parallelization (age of 1000-core computing)
- Fault Tolerance and Self-Healing
- Design for Failure - "Let it Crash" - how actor model enables it
- CAP Theorem
- Consistency models (Strong vs Read-after-Write vs Eventual)
- CRDTs (Conflict-free Replicated Data Types)
- Idempotency
- Distributed Transactions (2PC, 3PC, Sagas, Compensation, etc.)
- Stateless vs Stateful Processes
LEVEL 5: DISTRIBUTED SYSTEMS ARCHITECTURE
-
SOA (Service-Oriented Architecture)
-
Microservice Architecture (the mainstream wrong approach vs correct original approach)
-
Reactive Systems (Event-driven systems and Reactive Manifesto)
-
Event Sourced Systems
-
CQRS - Command Query Responsibility Segregation
-
Command-side and Query-side
-
Information Models and role of GraphQL
-
Optimistic UX
-
RPC Approaches
-
CORBA, RMI, Thrift, Finagle, gRPC
-
Serialization Formats: Avro, Protobuf, BSON, etc.
-
Transport Protocols: Web Socket, MQTT, QUIC, TSN, etc.
-
Reactive Streams and RSocket
-
Integration Patterns (Gregor Hohpe)
-
Apache Camel
-
Alpakka
-
Stream Processing (Kappa vs Lambda Architecture, using Kafka Streams and Akka Streams)
-
Kafka
-
Pulsar, Pravega, etc.
-
Memory Image
-
In-Memory Caches/Databases (Riak, Redis, Geode, RocksDB, etc.)
-
Akka DData (Distributed Data - CRDT-based)
-
Observability (Open Tracing, Jaegar, In-App Analytics, Prometheus, Grafana, etc.)
-
Performance Analysis (Latency, RPS, 99-percentile, etc.)
-
SaaS Considerations
-
Multi-tenancy Approaches
LEVEL 6: CLOUD COMPUTING
-
Kubernetes ecosystem (includes Knative, Istio, CNCF projects)
-
Polyglot options on JVM and beyond JVM, in GraalVM
-
AWS Services
-
GCP Services
-
Firebase Services
LEVEL 7: ACTOR-FRAMEWORKS AND SYSTEMS
- Erlang, BEAM, OTP basics and Joe Armstrong's approach
- Akka Actor Toolkit
- Microsoft Azure Service Fabric (and other MS projects)
- Actor programming in other languages (Pony, Dart, Rust, C++, Go, etc.)
- IBM/Lightbend Reactive Platform
- Case Studies
LEVEL 8: SECURITY
-
Trust
-
Identity
-
Authentication
-
PLP (Principle of Least Privilege) and POLA (Principle of Least Authority)
-
Authorization
-
Object-Capabilities -based Security
-
Cryptography
-
Public Key Infrastructure
-
Key Management
-
Secrets Management
-
Auto-Remediation of Threats
-
RIG (Reactive Interaction Gateway)
-
Casbin (AuthZ)
-
KeyCloak (AuthN)
LEVEL 9: WORLD-CLASS CODING
-
SICP (Structure and Interpretation of Computer Programs)
-
Practically Useful Data Structures
-
Practically Useful Algorithms
-
Clean Code
-
Refactoring
-
Fluent APIs and DSLs
-
Feature Toggles
-
Trunk based development
-
Monorepo
-
Unit Testing
-
Behavior-based Testing (BDD)
-
Actor-based Real OOP Coding
-
Reactive Programming
-
Scala - Language and Idioms
-
Dart - Language and Idioms
LEVEL 10: CICD
-
Configuration Management
-
Feature Toggles
-
Automated Testing
-
CICD Pipeline
-
Automated Rollout (Canary, Blue-Green, etc.)
-
Automated Rollback
-
Jenkins and Jenkins-X
-
Spinnaker
-
AWS CICD tools
-
GCP CICD tools
LEVEL 11: ALO PLATFORM
- REACT Architecture
- Alo Framework
- Alo Platform
- Comparison with State-of-the-Art Frameworks and Platforms
LEVEL 12: REAL-LIFE DEVELOPMENT
A small or part of a real-life project applying all knowledge and skills gained from the program.