Please select random order or first card below to begin studying 🤓
Congratulations! You have finished studying this set of cards
What is the single most important characteristic of well-designed code according to Code Craft?
Simplicity
What does Code Craft note you should not assume about obvious-looking code?
That it was easy to design
What does Code Craft call a measure of how related functionality is gathered together and how well the parts inside a module work as a whole?
Cohesion
What does Code Craft call a measure of the interdependency between modules?
Coupling
What idea does Code Craft mention when saying not to decompose modules based on team organization?
Conway's law
Code Craft: sloppy design is most often due to the commercial pressures of the software factory. The irony is that in almost every case:
The costs of doing it properly are lower
What must you do in order to have a clear design for the problem you are solving?
Fully understand all requirements and motivating principles
What characteristic of well-designed code is not present if it is confusingly clever, overly complex, or riddled with special cases?
Elegance
Each [...] defines an [...] which is the public facade that hides an internal [...]; the set of available operations is often called an [...].
Each module defines an interface which is the public facade that hides an internal implementation; the set of available operations is often called an API.
[...] is a measure of how related functionality is gathered together and how well the parts inside the module work as a whole.
Cohesion is a measure of how related functionality is gathered together and how well the parts inside the module work as a whole.
[...] provide a vocabulary of proven design techniques and are worthy of study.
Design patterns provide a vocabulary of proven design techniques and are worthy of study.
[...] provides a standard way to model and document practically every artifact generated in software development.
UML provides a standard way to model and document practically every artifact generated in software development.
[...] helps split tasks between programmers, but take care to not decompose based on team organization ([...]).
Modular design helps split tasks between programmers, but take care to not decompose based on team organization (Conway's law).
It is natural to divide a design problem into parts, each of which is called a [...] (or component).
It is natural to divide a design problem into parts, each of which is called a module (or component).
[...] has grown to the point that it models more than just software: it can model hardware, business processes, and even organizational structures.
UML has grown to the point that it models more than just software: it can model hardware, business processes, and even organizational structures.
[...] was hailed as the savior of the software design world, largely lived up to the hype, and allowed software to manage the [...] of far larger problems.
Object-oriented programming was hailed as the savior of the software design world, largely lived up to the hype, and allowed software to manage the complexity of far larger problems.
[...] models the software as an interacting set of individual units called objects (How to Design Code).
Object-oriented design models the software as an interacting set of individual units called objects (How to Design Code).
[...] is a measure of the interdependency between modules.
Coupling is a measure of the interdependency between modules.
[...] is the enemy of elegant and simple design and usually is due to [...] or more subtly when programmers do not understand the whole system.
Duplication is the enemy of elegant and simple design and usually is due to cut-and-paste programming or more subtly when programmers do not understand the whole system.
A [...] should be designed to have high [...] and minimal [...].
A module should be designed to have high cohesion and minimal coupling.