Books on Software Design | Matthias Friedrich's Blog



Ranging on the border between coding style and design, there are two candidates: Refactoring and Clean Code. Refactoring by Martin Fowler is a widely recognized classic that had a huge impact on the industry. It provides a catalog of refactorings, many of which have been integrated into IDEs like Eclipse. Clean Code by Robert C. Martin on the other hand focuses on coding style in a slightly wider context. Personally, I think Refactoring is a better read but if you’re looking for ways to improve your coding style and design, Clean Code probably offers more bang for your buck.

Next is the undying classic, Design Patterns: Elements of Reusable Object-Oriented Software by Gamma, Helm, Johnson, and Vlissides, also known as the Gang of Four. The book contains a rather large catalog of patterns that every software developer should be familiar with. This is a must-have if you’re serious about your craft. Being from 1995, the book is rather old with examples in C++ and Smalltalk and diagrams in OMT (one of the UML predecessors). A friend of mine suggested Design Patterns Explained as a more modern way to learn the classic patterns. Others prefer Head First Design Patterns, a good book certainly, but much too verbose for my taste.

Another good one is Patterns of Enterprise Application Architecture by Martin Fowler. The book shows how to structure your application (layering, organizing domain logic, database access, etc.) and is essential if you build larger business applications.

Domain Driven Design by Eric Evans is a great book that received its fair share of hype. It’s one of the few books that focuses entirely on creating expressive, flexible domain models. The book is rather long but extremely well written and one of the best technical books I’ve read. If you want to try before you buy you can watch some conference videos to get a first impression.

A rather new addition to my collection is Agile Principles, Patterns, and Practices in C# by Robert C. Martin. Usually, I wouldn’t read anything with C# in the title, but even as a Java guy, you can understand the book without problems. I bought it because it’s one of the few books to discuss package design, an area where many developers (including me) seem to struggle. The book is very practical and, like the title suggests, touches a lot of bases.


Read full article from Books on Software Design | Matthias Friedrich's Blog


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts