Agile code design
Most of the time, when we talk about doing code design, or software design, the first thing that pops up is drawing UML diagrams. UML diagrams are part of a design, but it is not the design. So, what is code design exactly?
What is code design?
Robert C. Martin said the following in his book, Agile Software Development: Principles, Patterns, and Practices (Martin, 2002):
The design of a software project is an abstract concept. It has to do with the overall shape and structure of the program as well as the detailed shape and structure of each module, class, and method. It can be represented by many different media, but its final embodiment is source code. In the end, the source code is the design.
Wait for a second, how can the source code be the design? This doesn't make sense, does it? The source code is part of the final software product itself. If source code were the design, we wouldn't need to do design anymore because we just need to write code. This seems absurd, right...