Code Complete
Rate it:
Open Preview
Started reading November 29, 2024
6%
Flag icon
Fault tolerance is a collection of techniques that increase a system's reliability by detecting errors, recovering from them if possible, and containing their bad effects if not.
6%
Flag icon
The architecture should demonstrate that the system is technically feasible.
6%
Flag icon
Robustness is the ability of a system to continue to run after it detects an error.
6%
Flag icon
Design bugs are often subtle and occur by evolution with early assumptions being forgotten as new features or uses are added to a system.
6%
Flag icon
The architecture should be a polished conceptual whole with few ad hoc additions.
6%
Flag icon
Good software architecture is largely machine- and language-independent.
6%
Flag icon
The architecture should tread the line between underspecifying and overspecifying the system.
7%
Flag icon
Are the most critical classes described and justified?
7%
Flag icon
Is the data design described and justified?
7%
Flag icon
Are all key business rules identified and their impact on the system described?
7%
Flag icon
Is the architecture designed to accommodate likely changes?
7%
Flag icon
Does the architecture account for all the requirements?
7%
Flag icon
Are the motivations for all major decisions provided?
7%
Flag icon
By relieving the brain of all unnecessary work, a good notation sets it free to concentrate on more advanced problems, and in effect increases the mental power of the race.
7%
Flag icon
Programmers working with high-level languages achieve better productivity and quality than those working with lower-level languages.
7%
Flag icon
Fortran was the first high-level computer language, introducing the ideas of variables and high-level loops.
7%
Flag icon
Fortran is used mainly in scientific and engineering applications.
8%
Flag icon
Without a unifying discipline, your creation will be a jumble of sloppy variations in style.
8%
Flag icon
One key to successful programming is avoiding arbitrary variations so that your brain can be free to focus on the variations that are really needed.
8%
Flag icon
Coding-convention details are at such a level of precision that they're nearly impossible to retrofit into software after it's written.
8%
Flag icon
IsFormCompleted() was the only public routine that forms were allowed to have.
8%
Flag icon
Most of the important programming principles depend not on specific languages but on the way you use them.
8%
Flag icon
Have you defined how much design will be done up front and how much will be done at the keyboard, while the code is being written?
8%
Flag icon
Remember to program into the language, rather than programming in it.
8%
Flag icon
Design is the activity that links requirements to coding and debugging.
8%
Flag icon
The picture of the software designer deriving his design in a rational, error-free way from a statement of requirements is quite unrealistic.
8%
Flag icon
Design is sloppy because a good solution is often only subtly different from a poor one.
8%
Flag icon
The point of design is partly to create possibilities and partly to restrict possibilities.
8%
Flag icon
Design involves trial and error.
8%
Flag icon
Designs don't spring fully formed directly from someone's brain. They evolve and improve through design reviews, informal discussions, experience writing the code itself, and experience revising the code.
8%
Flag icon
In philosophy, the essential properties are the properties that a thing must have in order to be that thing.
8%
Flag icon
Accidental properties are the properties a thing just happens to have, properties that don't really bear on whether the thing is what it is.
8%
Flag icon
Accidental difficulties are more prominent in early-wave development than in late-wave development.
8%
Flag icon
Projects fail most often because of poor requirements, poor planning, or poor management.
8%
Flag icon
When a project reaches the point at which no one completely understands the impact that code changes in one area will have on other areas, progress grinds to a halt.
9%
Flag icon
The goal is to minimize the amount of a program you have to think about at any one time.
9%
Flag icon
The goal of all software-design techniques is to break a complicated problem into simple pieces.
9%
Flag icon
Loose coupling means designing so that you hold connections among different parts of a program to a minimum.
9%
Flag icon
Extensibility means that you can enhance a system without causing violence to the underlying structure.
9%
Flag icon
If all subsystems can communicate with all other subsystems, you lose the benefit of separating them at all.
9%
Flag icon
The more hoses you have to disconnect and reconnect, the more wet you're going to get.
9%
Flag icon
Business rules are the laws, regulations, policies, and procedures that you encode into a computer system.
9%
Flag icon
An object is any specific entity that exists in your program at run time.
9%
Flag icon
A class is the static thing you look at in the program listing.
9%
Flag icon
Because design is nondeterministic, skillful application of an effective set of heuristics is the core activity in good software design.
9%
Flag icon
Determine what can be done to each object.
9%
Flag icon
Determine what each object is allowed to do to other objects.
9%
Flag icon
The two generic things objects can do to each other are containment and inheritance.
9%
Flag icon
Abstraction allows you to take a simpler view of a complex concept
10%
Flag icon
Encapsulation says that, not only are you allowed to take a simpler view of a complex concept, you are not allowed to look at any of the details of the complex concept.