Other learning resources
Creating software is a craft. It requires creativity, ingenuity, critical thinking and problem solving skills. And, like most crafts, the more experience you have, the better crafst-person you become.
Another key aspect about software development is that it requires constant learning. There are so many concepts and ideas from which to draw inspiration, as well as a continuous innovation in technology, patterns and methodologies, that the only way to continue improving your craftsmanship is through continuos learning.
Therefore, we have compiled a list of resources we believe are invaluable, and will help any software engineer become a better developer, designer, lead and manager
Books
Below is a comprehensive list of books that are highly regarding in the software engineering world. Several of these books were published over 10 years ago, but remain as valid today as they were 10 years ago. Those books in particular deserve even more credit and attention.
Please email us if you believe we've missed a book from this list!
Domain-Driven Design: Tackling Complexity in the Heart of Software – Eric Evans
Implementing Domain-Driven Design – Vaughn Vernon
Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions – Gregor Hohpe, Bobby Wolf
Clean Architecture: A Craftsman's Guide to Software Structure and Design - Robert C. Martin (Uncle Bob)
A Philosophy of Software Design - John Ousterhout
Clean Code: A Handbook of Agile Software Craftsmanship – Robert C. Martin (Uncle Bob)
Patterns, Principles, and Practices of Domain-Driven Design – Scott Millett, Nick Tune
Patterns of Enterprise Application Architecture – Martin Fowler
Agile Principles, Patterns, and Practices in C# – Robert C. Martin (Uncle Bob), Micah Martin
SOLID - Introduction to Software Design and Architecture with TypeScript - Khalil Stemmler
The Pragmatic Programmer: From Journeyman to Master – Andrew Hunt
The Effective Engineer - Edmon Lau
Software Architecture in Practice – Len Bass, Paul Clements, Rick Kazman
Design Patterns: Elements of Reusable Object-Oriented Software – Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
Domain-Driven Design Reference: Definitions and Pattern Summaries - Eric Evans
UML Distilled: A Brief Guide to the Standard Object Modeling Language – Martin Fowler
Code Complete: A Practical Handbook of Software Construction – Steve McConnell
The Clean Coder: A Code of Conduct for Professional Programmers – Robert C. Martin (Uncle Bob)
Refactoring: Improving the Design of Existing Code – Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts
Version Control with Git: Powerful tools and techniques for collaborative software development – John Loeliger, Matthew McCullough
Systems Analysis and Design – Alan Dennis, Barbara Haley Wixom, Roberta M. Roth
Working Effectively with Legacy Code - Michael Feathers
Videos, Tutorials & Presentations
The internet (in particularly YouTube and TED) has provided the world with access to knowledge and information that is unparalled. One of the most interesting ways to learn (and be entertained) is with the many interesting and engaging videos about software development.
Clean Code - Uncle Bob / Lesson 1 - Coding Better World Together, Robet C. Martin "Uncle Bob"
Clean Code - Uncle Bob / Lesson 2 - Coding Better World Together, Robet C. Martin "Uncle Bob"
Clean Code - Uncle Bob / Lesson 3 - Coding Better World Together, Robet C. Martin "Uncle Bob"
Clean Code - Uncle Bob / Lesson 4 - Coding Better World Together, Robet C. Martin "Uncle Bob"
Clean Code - Uncle Bob / Lesson 5 - Coding Better World Together, Robet C. Martin "Uncle Bob"
Clean Code - Uncle Bob / Lesson 6 - Coding Better World Together, Robet C. Martin "Uncle Bob"
Crunching 'real-life stories' with DDD & Event Storming - Kenny Baas-Schwegler
Microservices and Domain Driven Design - Vaughn Vernon
A practical introduction to DDD, CQRS & Event Sourcing - Dennis Doomen
Bounded Contexts - Eric Evans, DDD Europe 2020
How to Test Code Coupled to APIs & Databases - Khalil Stemmler
Expert Talk: DevOps & Software Architecture - Simon Brown, Dave Farley & Hannes Lowette, GOTO 2021
Modern Software Engineering - Dave Farley & Steve Smith, GOTO 2022
If (domain logic) then CQRS, or Saga? - Udi Dahan, DDD Europe 2017
TDD, Where Did It All Go Wrong - Ian Cooper, DevTernity Conference
Expecting Professionalism - Robert C. Martin "Uncle Bob", Kuppelsalen, Copenhagen
What is DDD - Eric Evans, DDD Europe 2019
Clean Architecture - Robert C. Martin "Uncle Bob", NDC 2012
7 Years of DDD: Tackling Complexity in Large-Scale Marketing Systems - Vladik Khononov, NDC {Sydney} 2018
STOP Over Engineering Software. Focus on what matters! - Derek Comartin, CodeOpinion
Introduction to DRY software, Coupling and Microservices - Dave Farley
5 Event Driven Architecture Pitfalls! - Derek Comartin, CodeOpinion
Aggregate Design: Using Invariants as a Guide - Derek Comartin, CodeOpinion
How to Use Aggregates for Tactical Design - Vaughn Vernon
Getting modules right with Domain-driven Design - Michael Plöd - Spring I/O 2022 Sessions
Domain Layer Structure & Skeleton | Clean Architecture & DDD From Scratch - Amichai Mantinband
Domain Language throughout Tests, combining DDD and BDD - Kenny Baas, DDD Europe 2018
This is the Only Right Way to Write React clean-code - SOLID - Islem Maboud, CoderOne
Pitching DDD to the management - Michael Plöd, KanDDDinsky 2019
Why Event Sourced Systems Fail - Greg Young, fwdays 2020
How to Write Software Architecture Tests? | Clean Architecture - Milan Jovanović
Domain Driven Design with BDD - Dave Farley, Continous Delivery(https://www.youtube.com/@ContinuousDelivery)
Blogs & Newsletters
There are several interesting blogs and newsletters that software engineers can subscribe to for continous learning. There are many available resources online, each presenting a great opportunity to learn.
Clean Coder - by Robert C. Martin (Uncle Bob)
martinFowler.com - Martin Fowler
Khalilstemmler.com - by Khalil Stemmler
@hgraca - Herberto Graça
Alok Mishra - Alok Mishra
Nicolò Pignatelli - Nicolò Pignatelli
bassie.com - Kenny Baas-Schwegler
CODE SIMPLE{} - Satjinder Bath
Val's Tech Blog - Valerii Udodov
Kevin Vogel - Kevin Vogel
Vladikk - Vladik Khononov
FullStackMarket.com - Mark Macneil
Special Mention Articles
Below is a list of specific articles (many from the list of blogs mentioned above) that are particularly insightful and worth of a read. Add these to your favorites today and aim to read 1 every 2 days!
The Clean Architecture - Robert C. Martin (Uncle Bog)
Better Software Design with Clean Architecture - FullStackMark
Implementing the SOLID and the onion architecture in Node.js - Remo Jansen
NodeJS and Good Practices - The Miners
Clean Domain-Driven Design - George
https://vladikk.com/2018/01/21/bounded-contexts-vs-microservices/ - Vladikk
Non-Functional Requirements(with Examples) - Khalilstemmler.com
Deep Dive into CQRS — A Great Microservices Pattern - LevelUp
Snapshot - A view of an object at a point in time - Marting Fowler
Clean Event-Driven Architecture - Val's Tech Blog
How to Design & Persist Aggregates - Domain-Driven Design w/ TypeScript - Khalilstemmler.com
Introduction to Test-Driven Development (TDD) with Classic TDD Example - Khalilstemmler.com
Clean Architecture with TypeScript: DDD, ONION - bazaglia.com
Comparison of Domain-Driven Design and Clean Architecture Concepts - Khalilstemmler.com
Anemic Domain Model - Khalilstemmler.com
Events: Fat or Thin - CODE SIMPLE{}
CQRS Software Architecture Pattern: The Good, the Bad, and the Ugly - Jawad Margieh
https://medium.com/@nicolopigna/value-objects-like-a-pro-f1bfc1548c72 - Nicolò Pignatelli
Combining Domain Driven Design and Behaviour Driven Development - baasie.com
This could be the biggest post about Big Picture Event Storming ever! And with examples! - Mr. Picky
Event Modeling Cheat Sheet - Event Modeling
CQRS - Marting Fowler
Domain events: Design and implementation - Microsoft
Domains, Sub-Domains and Bounded Contexts: Explained with example from industry - Alok Mishra
DDD, Hexagonal, Onion, Clean, CQRS, … How I put it all together - herbertograca.com
Never Stop Learning
Software engineering is a craft that requires constant learning and experience. Moreover, there is simply so much being developed and improved on a daily basis, that continuous learning is becoming a key necessity, not simply a nice to have.
The Bitloops team was fortunate to have spent several months devouring many of these resources, then creating mental and actual frameworks of how they all work together.
The output is Bitloops, which we hope will inspire and enable many more developers to write clean, well-structured code and design high-quality software that can stand the test of time and complexity!