- Introduction
- Layered (onion), DDD, Clean architecture
- App structure, Modularity, DI, unittesting
- DTOs, models, race conditions
- Hexagonal Architecture, ports and adapters architecture
- Clustering, Parallel, Distributed systems, CAP, ACID, BASE, Locking, CQRS
- Actor Model
- Databases, data modeling
- Domain Specific Languages: DSL, AST, LISP
- Command, QueryObject, CQS, CQRS, EventSourcing
- Messaging: MQ, Pub/Sub, Pull
- System integration and topology: API, bus, brocker, MQ
- Communication styles: data, call, event, log sync, p2p, blockchain
- Feature-Sliced Design
- Architecture for Web: DDD for Frontend and Backend
- Data access patterns
- Asynchronous programming
- Imperative shell, Functional core
- Multi-paradigm programming in Architecture
- Metaprogramming
- Orchestration and Choreography, SAGA Pattern
- Referential Transparency
- Actor model: https://github.com/HowProgrammingWorks/Actor
- Pattern Actor: https://github.com/HowProgrammingWorks/Actor
- Domain-driven design: https://github.com/HowProgrammingWorks/DDD
- Blockchain: https://github.com/HowProgrammingWorks/Blockchain
- Conflict-free Replicated Data Types: https://github.com/HowProgrammingWorks/CRDT
- Peer-to-Peer with WebRTC: https://github.com/HowProgrammingWorks/WebRTC
- Programming Paradigms Comparison: https://github.com/HowProgrammingWorks/Paradigms
- Metaprogramming: https://github.com/HowProgrammingWorks/Metaprogramming
- Modularity: https://github.com/HowProgrammingWorks/Modularity
- Dependency Injection: https://github.com/HowProgrammingWorks/DependencyInjection
- Unittesting: https://github.com/HowProgrammingWorks/Unittesting
- Abstractions: https://github.com/HowProgrammingWorks/Abstractions
- Project: https://github.com/HowProgrammingWorks/Project
- Abstraction Layers: https://github.com/HowProgrammingWorks/AbstractionLayers
- Sandboxes: https://github.com/HowProgrammingWorks/Sandboxes
- Inversion Of Control: https://github.com/HowProgrammingWorks/InversionOfControl
- Dependency Injection: https://github.com/HowProgrammingWorks/DependencyInjection
- Inter Process Communication: https://github.com/HowProgrammingWorks/InterProcessCommunication
- Data access layer: https://github.com/HowProgrammingWorks/Transaction
- API: https://github.com/HowProgrammingWorks/API
- CQS: https://github.com/HowProgrammingWorks/CQS
- CQRS: https://github.com/HowProgrammingWorks/CQRS
- EventSourcing: https://github.com/HowProgrammingWorks/EventSourcing
- Pattern Command: https://github.com/HowProgrammingWorks/Command
- SAGA Pattern: https://github.com/HowProgrammingWorks/Saga
- Referential Transparency: https://github.com/HowProgrammingWorks/ReferentialTransparency
Timing: 30-60 min + discussion (min 30 min) Requirements: PDF or MD file in github repo, presentation google docs Topic: please propose before call in 3-7 days
- Pipeline architecture
- SOA: web services, microservices, serverless
- One of noSQL db solution
- Task and resource schedulers
- Testing, quality assessments
- Infrastructure, deployment, CI/CD
- DB Migration
- DB Balancing and sharding
- DB replication
- DB Backups and recovery
- API Balancing
- Application and system logging
- Law of Demeter (LoD) // See comments in next section
- DAL (data access layer)
- Dependency injection & Inversion of Control (for your language)
- DDD: Value object, Null object, DTO, Active Record, Data access object, Data mapper
- Blockchain: voting system for decision making and specialist selecting; registers; distributed data storage // Andrii Schavinskyi
- Object-relational mismatch (from Kleppmann)
- Cache strategies
- Indexing structures
- Serialization formats comparison and evolution: binary files, xml, yml, json, protobuf, v8 ser format, etc.
- DB ACID // Fowler
- Locking and offline concurrency patterns // Fowler
- Sessions: session token, JWT token
- «Patterns of Enterprise Application Architecture» Martin Fowler
- «Designing Data-intensive Applications» Martin Kleppmann
- «Clean Architecture: A Craftsman's Guide to Software Structure and Design» Robert C. Martin
- «Refactoring: Improving the Design of Existing Code Edition Unstated» Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts, Erich Gamma
- «Working Effectively with Legacy Code» Robert C. Martin
- «Clean Agile: Back to Basics» Robert C. Martin
- «Clean Craftsmanship: Disciplines, Standards, and Ethics» Robert C. Martin
- «Functional Design: Principles, Patterns, and Practices» Robert C. Martin
- Computation theory: Turing, von Neumann, Curry, Church - Ludwig Wittgenstein
- Avram Noam Chomsky- A Pattern Language: Towns, Buildings, Construction // Christopher W. Alexander
- Cybernetics: Norbert Wiener and Victor Mikhailovich Glushkov
- System approach: Ludwig von Bertalanffy, William Ross Ashby - Stafford Beer
- Pipeline architecture
- SOA: web services, microservices, serverless
- Data warehouses and DBMS: relational, noSQL, columnar, key-value
- API Design
- Corporate integration buses (exchange with external subsystems)
- Task and resource schedulers
- Testing, quality assessments, continuous integration
- Infrastructure, deployment, update, migration, reengineering
- Balancing, replication, sharding, resharding, backups and recovery
- Security, authorization, authentication, application firewall
- Application and system logging, incident investigation
- Analysis and reengineering of business processes
- Law of Demeter (LoD) - Principle of Least Knowledge or Don't Talk to Strangers - Low Coupling (LC): The goal of LoD is to reduce coupling by reducing the knowledge of a class about other classes. - Tell, Don't Ask/Information Expert (TdA/IE): LoD is more specific than TdA/IE because TdA/IE can be applied in a wider context (e.g. for responsibility assignment). Applying TdA leads to solutions which are good according to LoD. Note that the reverse is not true: According to LoD you may get and set values from an object passed as a parameter to a method. - A method of an object should invoke only the methods of the following kinds of objects: - itself - its parameters - any objects it creates/instantiates - its direct component objects