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!