Principles of Programming and Software design
SOLID, ac ac ac ac ac ac
Catalog of design patterns
List of software Architecture Styles and patterns
GangOfFour design patterns gof
Examples of GoF design patterns in Java classes
Creational (CategoryCreationalPatterns) Structural (CategoryStructuralPatterns) Behavioral (CategoryBehavioralPatterns) The Importance of Scalability:
Scalability Best Practices: Lessons from eBay The Architecture of Open Source Applications Facebook architecture for 600M users Non Functional Requirements (NFR) "The JavaBeans pattern has serious disadvantages" - Joshua Bloch
Microservices Architecture and its benefit over Monolith Applications Related patterns,
Serverless Architecture. Backend as a Service (BAAS) & Functions as a Service (FAAS) The Twelve-Factor is a methodology for building SAS apps
  • Codebase: One codebase tracked in revision control, many deploys
  • Dependencies: Explicitly declare and isolate dependencies
  • Config: Store config in the environment
  • Baking services: Explicitly declare and isolate dependencies
  • Build, release, run: Strictly separate build and run stages
  • Processes: Execute the app as one or more stateless processes
  • Port binding:Export services via port binding
  • Concurrency: Scale out via the process model
  • Disposability: Maximize robustness with fast startup and graceful shutdown
  • Dev/prod parity: Keep development, staging, and production as similar as possible
  • Logs: Treat logs as event streams
  • Admin processes: One codebase tracked in revision control, many deploys Software Engineering Best Practices for Reliability, Efficiency, Performance and Security
  • Application architecture best practices
  • Coding best practices
  • Complexity of algorithms
  • Compliance with Object-Oriented and structured programming best practices
  • Component or pattern re-use ratio
  • Modules should be Loosely Coupled (fanout, intermediaries)
  • Error & exception handling (for all layers – user interface, logic & data)
  • Multi-layer design compliance
  • Avoid patterns that will lead to unexpected behaviors
  • Compliance with SQL programming best practices
  • Security best practices
    • System functions access, access control to programs
    • Input Validation, SQL Injection, Cross-Site Scripting
  • Manages transaction level data integrity and consistency
  • Appropriate interactions with expensive and/or remote resources
  • Data access performance and data management
  • Memory, network and disk space management
  • Enforce homogeneous naming conventions as per technology stack recommendation
  • Avoidance of Dependency Hell like situations during build and setup Cargo cult programming Reactive menifesto (RREM) ac
  • Responsive
  • Resilient
  • Elastic
  • Message Driven
Software Engineering philosophy
  • Conceptual Integrity
  • Egoless Programming
  • Only Say Things That Can Be Heard
  • Amorphous Blob Of Human Insensitivity ACID is a set of properties of database transactions
  • Atomicity
  • Consistency
  • Isolation
  • Durability Uniform access principle (UAP)
Bertrand Meyer formulated the Uniform Access Principle that states:
"All services offered by a module should be available through a uniform notation,
which does not betray whether they are implemented through storage or through computation."
In Scala, caller of fred.age doesn’t know whether age is implemented through a field or a method Why Domain Specific Language required Software architect road map A curated list of code katas Java Monitor Pattern for Multi-Thread application
Useful to implement more than one Mutexes in your code latch
"Enforce the Singleton Property With a Private Constructor or an Enumerator" - Joshua Bloch "The JavaBeans pattern has serious disadvantages" - Joshua Bloch "Prefer primitives to boxed primitives and watch out for unintentional autoboxing" - Joshua Bloch
The Telescoping Constructor Anti-Pattern. Fix it with Builder Pattern
Inheritance/Composition/Aggregation ac
  • Composition stresses on mutual existence
  • Aggregation does not require mutual existence Lexical/Static and Dynamic/Public scoping Statically typed and Dynamically typed languages
Concurrency vs. Parallelism
Asynchronous vs. Synchronous
Non-blocking vs. Blocking
Deadlock vs. Starvation vs. Live-lock
Data Mapper Pattern
Data Mapper Pattern vs Active Record Pattern External sorting relates to class of sorting algorithms that can handle massive amounts of data Source control for data base Kimball and Inmon Data Warehouse Models Denormalization Is Ok
Command Query Responsibility Segregation (CQRS) Design pattern and Axon framework OLTP: Systems which serve transactions with suppliers, partners and customers, as well as internal
DSS : System which helps in understanding current state and taking facts based informed decisions Comparison of the Top Four Enterprise-Architecture Methodologies How to design large-scale systems Difference between Fine and Coarse grained records Difference in Green Field Projects and Brownfield Projects Reactive Streams Simplified Design Patterns ISO/IEC 9126 Software engineering product quality standard
Product Prioritization Techniques Blue/Green Infrastructure Architecture Slowly Changing Dimensions (SCD) Choosing a suitable open source license Maturity Models What is a Software Architect
Mean Time Between Repair (MTBR) and Mean Time to Data Loss (MTTDL) Awesome Scalability