I get asked a lot by junior developer friends and colleagues:
- how did you learn to write good tests?
- how do know how to structure the application?
- where did you learn to apply that pattern?
- how do you manage your time?
- which books on IT are worth reading?
- what skills are needed to become a true professional?
I was teaching development to friends and colleagues for a while already, telling the same things over and over again and answering the same questions over and over for years. And every time I get to know new beginners or aspiring professionals in new teams the questions get raised again. The answers I give are battle proven and are rarely taught at schools, boot camps and universities.
This repository is an attempt to collect my opinionated wisdom which I gained in about one and a half decades in the industry. It is a living document and I will present it in a structured way. I will provide a path to mastery in form of a study guide. You will have to walk the path yourself but you don't have to walk it alone. Support is always a call or message away. Also connect among each other.
Read on.
You get instant value by focusing on the three skills listed below. They will teach you architecture/design basic which make code easier to change.
- Refactoring.
- Test Driven Development.
- SOLID Principles.
- Mindset.
Book: Refactoring Second Edition, Martin Fowler, O'Reilley link.
- Read and practice the first chapter. Code the example yourself, Tests and Kata Setup.
- Study the code smells and how to resolve them.
- Pick a class or module from your current project and apply what you learned in a feature branch.
- Create a PR and get it merged.
- Read at least till the Refactorings Catalog. Continue if you like and have time. Otherwise move on to second topic.
Book 1: Test Driven Development by Example, Kent Beck, O'Reilley link.
- Read it entirely, its short.
- Practice the example in the first chapter in your language. He uses Java.
- Understand the workflow: red, green, refactor.
Book 2: Clean Craftsmanship by Robert Martin, O'Reilley link., the videos on O'Reilley.
- Watch the videos and read the chapters about TDD und practice all the examples in your language. He uses Java.
- Memorize the rules. Practice the small steps.
- Its hard, I know. Keep on practicing. The reward is big. It will change your code for ever.
The resources here are spread over many books and courses. I will link here a selection which I think is best.
Book 1: Agile Principles, Patterns, and Practices in C# by Micah Martin and Robert C. Martin, O'Reilley link.
- Understand all of the principles.
- I recommend to code each one of them.
- You should recognize some from the Refactoring book and the first chapter.
- Look in your project for code where you can apply them so that you try them in the real world.
Book 2: Clean Architecture by Robert C. Martin, O'Reilley link.
- The book is not for beginners so I recommend only to study the SOLID section linked above.
- It took me reading it twice with two years apart to get all the stuff there.
Course: Clean Code Fundamentals by Robert C. Martin, O'Reilley link.
- The SOLID section is worth watching.
- The entire course is 53h and very comprehensive. Watch it at some point. For now SOLID is enough.
On thing to understand is that the journey to become a true professional is a journey to mastery and mastery takes time, effort and diligence. It's a marathon and not a sprint.
Here is some material I value where the mindset is central.
Article: Teach Yourself Programming in Ten Years by Peter Norvig, blog article.
- Fantastic short read.
- How can you become a pro programmer in any language in 10 days, 21 days, 3 months? You can't. It's a fad.
- Ask yourself if it's possible to learn the violin, piano or any other complex skill in matter of days or months.
Video: The Best Programmer I Know by Daniel Terhorst-North, GOTO 2024 conference talk.
- One thing to keep in mind here is that we are building products.
- The users perspective is to be taken into account and prioritized.
- This does not mean we can release crap or leave out test because the user needs it "yesterday". Be a professional. Communicate, find a balance.
Book 1: Software Craftsmanship: The New Imperative by Pete McBreen, O'Reilley link.
- He defines the term and outlines the journey to mastery for a software developer.
Book 2: Clean Coder, The: A Code of Conduct for Professional Programmers by Robert C. Martin, O'Reilley link.
- An extension of the book above
Architecture is applied on multiple levels of abstractions. You can go from as deep as functions up to dedicated services which work together.
Article: Modularizing React Application with Established UI Patterns
- Great introduction into how to structure a frontend. He uses React and TypeScript but its universal.
- Understand the code. I recommend coding all of his examples.
Book: React Anti-Patterns by Juntao Quo, O'Reilley link.
- Expands on the article above.
- He introduces more concepts and goes over basics in TDD and refactoring of React apps.
Book 1: Fundamentals of Software Architecture by Mark Richards, Neal Ford, O'Reilley link.
Book 2: Patterns of Enterprise Application Architecture by Martin Fowler O'Reilley link.
Book 3: Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, O'Reilley link.
Book 4: Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software
Book 5: Clean Architecture by Robert C. Martin, O'Reilley link.
Becoming really good becomes easier when you live a healthy lifestyle. Here is a compilation of material which will help with that.
Book 1: The Now Habit by Neil Fiore, Thalia link
- Great book on time management, planing, self organization and how to overcome procrastination.
Book 2: Deep Work by Cal Newport, Thalia link
- Short read about what it is, the value of deep work and how to do it.