I'm a self-taught developer with about four months of experience, and I've been relying on AI tools quite a bit. Lately, I've started feeling overwhelmed. While I can create working prototypes, my projects become fragile when complexity increases, and I realize I'm missing some key knowledge about software architecture and planning.
What books would you suggest for the following topics:
- The fundamentals of software architecture
- Understanding design patterns and when to use them
- Planning and designing before starting to code
- Database design principles
- Development methodologies like Test-Driven Development (TDD)
I'm looking for foundational concepts that aren't tied to any specific framework, and I would prefer books instead of video content.
4 Answers
For architecture fundamentals, consider reading "Fundamentals of Software Architecture" by Neal Ford and Mark Richards. It’s a comprehensive guide that covers essential concepts and could help you plan your next project more effectively. Give it a try!
Just keep coding and get hands-on experience. Read documentation and practice writing your code. Remember, when you commit code, it's your responsibility to ensure its quality. Knowing how to make design decisions comes from experience, so code a lot, scale your projects, and learn from mistakes. Start with basic algorithms and data structures, as those are crucial skills for any developer. Once you have that in place, look into design patterns like GoF patterns for more complex projects.
Thanks for the advice. I'm definitely learning a ton as I go and appreciate you taking the time to comment.
I recommend a hands-on learning approach. Don’t let AI do the heavy lifting; ask it questions like "what's the idiomatic way to do this?" Some of my favorite books include "Domain-Driven Design" and "Refactoring". The "Effective" series is also fantastic, particularly "Effective TypeScript". They really help when leveling up your skills.
This is great advice! The idea of learning as I go fits well with me, as I can continue working while I learn about the most relevant topics.
You should definitely check out "Working Effectively with Legacy Code". It really helps make sense of the challenges you’re facing as your projects grow in complexity. Another great resource is a paper called "On the Criteria to be Used in Decomposing Systems into Modules" which dives into architectural concepts. Overall, starting with fundamental architecture materials can set a solid foundation for your future work. Also, take a glance at the Software Architecture Megathread for more ideas!
This is fantastic, thank you! I checked out "Working Effectively with Legacy Code" and it's exactly what I needed. This is the first book I've seen that seems to addresses my current problems!

Thanks for the link! I looked into this, and it seems like the perfect book for planning my next project. Hopefully I can start avoiding the problems I keep running into.