Answer the question
In order to leave comments, you need to log in
What book to start learning design software?
I have development experience in Laravel and Java(Swing, JDBC, Hibernate). Which book is better to choose for studying software design:
1) Design Patterns (Eric Freeman)
2) Introduction to Object-Oriented Analysis, Design and Iterative Development (Craig Larman)
Answer the question
In order to leave comments, you need to log in
Application design can be conditionally divided into 2 levels:
1. Project level.
This includes understanding how the application should look like as a whole and what components it should consist of, as well as how it is going to interact with the outside world (if necessary). The components depend on the chosen architecture - in the case of a monolithic application, you need to understand how to break it into layers and what is the responsibility of each layer; in the case of microservices, you also need to understand how to delineate areas of responsibility and define communication protocols between them.
Books on how to design applications at a general level:
1. Robert Martin. Clean Architecture is a very short and simple book, I recommend starting with it.
2. Eric Evans. Domain-oriented design (principles + strategic patterns).
3. Martin Fowler. Architecture of enterprise applications (part 1).
Level 2. The level of modules (classes).
Once you've designed the components that make up your application, it's time to design their internals—that is, break them down into smaller, more specific modules. This is where object-oriented design principles, SOLID principles, and patterns come in handy.
Level 2 books.
1. Gang of Four. Techniques of object-oriented design. Design patterns. Here it is important not only the patterns themselves, but the principles by which they are built. Focus on principles.
2. Robert Martin. Principles, patterns and techniques of agile development in C#. It takes a closer look at object-oriented design and the principles of SOLID in comparison to its "Clean Architecture".
3. Eric Evans. Domain-oriented design (tactical patterns).
4. Martin Fowler. Architecture of enterprise applications (part 2).
5. Stephen McConnell. Perfect code (concentrate on understanding the Main Technical Imperative!).
These books will be enough for you to navigate in the design of applications, everything else is decided by practice. Draw diagrams, focus on the responsibility of components and their interfaces, and learn to discard unnecessary implementation details.
Hey! Both books from the topic are excellent and well translated. As for the patterns - their problem is that many examples are sucked from the finger (and there is no other way). When studying patterns, beginners usually have two problems: 1) oh, I understand how it works, I need to shove this pattern here, here, there 2) I don’t understand where it can be used at all. Both problems arise from a lack of real experience. Personally, I read this book three times at intervals of a year. And each time the above problems became less and less. About Craig Larman: I think this book is a must read if you decide to step to the next level, already having at least 3+ years of experience. If I were you, I would, of course, study all sorts of abstract techniques and patterns in the background, but the main emphasis would be on studying the best practices in your area of development,
Do not confuse patterns and design. Yes, patterns are used in systems design, but they are not design in and of themselves. Very often people will read a couple of books on patterns and start using them where necessary and where not necessary and believe that their entire system has a good architecture - but as a result, such an "architecture" causes more problems than good. Therefore, my advice to you is to postpone the patterns for later: read something about design, and its principles. At least the same Robert Martin. Undoubtedly, both books are worth reading, but in my opinion they should be read with already certain skills.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question