Code Complete
Rate it:
Open Preview
3%
Flag icon
Accretion describes the way an oyster makes a pearl, by gradually adding small amounts of calcium carbonate. In geology, "accretion" means a slow addition to land by the deposit of waterborne sediment. In legal terms, "accretion" means an increase of land along the shores of a body of water by the deposit of waterborne sediment.
3%
Flag icon
In incremental development, you first make the simplest possible version of the system that will run. It doesn't have to accept realistic input, it doesn't have to perform realistic manipulations on data, it doesn't have to produce realistic output—it just has to be a skeleton strong enough to hold the real system as it's developed. It might call dummy classes for each of the basic functions you have identified. This basic beginning is like the oyster's beginning a pearl with a small grain of sand.
3%
Flag icon
The anecdotal evidence in favor of this approach is impressive.
3%
Flag icon
the incremental metaphor
3%
Flag icon
the farming metaphor
3%
Flag icon
The image of "building" software is more useful than that of "writing" or "growing" software.
3%
Flag icon
blueprints
3%
Flag icon
you don't waste time fixing mistakes that could have been avoided.
3%
Flag icon
You'll make extensive use of high-level language features rather than writing your own operating-system-level code. You might also use prebuilt libraries of container classes, scientific functions, user interface classes, and database-manipulation classes. It generally doesn't make sense to code things you can buy ready-made.
3%
Flag icon
you're building a first-class software product, you might build your own scientific functions for better speed or accuracy. You might build your own container classes, user interface classes, and database classes to give your system a seamless, perfectly consistent look and feel. Both building construction and software construction benefit from appropriate levels of planning. If you build software in the wrong order, it's hard to code, hard to test, and hard to debug. It can take longer to complete, or the project can fall apart because everyone's work is too complex and therefore too ...more
3%
Flag icon
Many terms common in software development derive from the building metaphor: software architecture, scaffolding, construction, foundation classes, and tearing code apart.
3%
Flag icon
buy into
3%
Flag icon
Key Points Metaphors are heuristics, not algorithms. As such, they tend to be a little sloppy. Metaphors help you understand the software-development process by relating it to other activities you already know about. Some metaphors are better than others. Treating software construction as similar to building construction suggests that careful preparation is needed and illuminates the difference between large and small projects. Thinking of software-development practices as tools in an intellectual toolbox suggests further that every programmer has many tools and that no single tool is right ...more
4%
Flag icon
skyscraper
4%
Flag icon
tailored
4%
Flag icon
This chapter describes the work that must be done to prepare for software construction.
4%
Flag icon
with building construction, much of the success or failure of the project has already been determined before construction begins. If the foundation hasn't been laid well or the planning is inadequate, the best you can do during construction is to keep damage to a minimum.
4%
Flag icon
"Measure twice, c...
This highlight has been truncated due to consecutive passage length restrictions.
4%
Flag icon
accou...
This highlight has been truncated due to consecutive passage length restrictions.
4%
Flag icon
Chapter 5. If you don't like the idea of prerequisites to construction, review Determine the Kind of Software You're Working On, to see how prerequisites apply to your situation, and then take a look at the data in Importance of Prerequisites, which describes the cost of not doing prerequisites. Importance of Prerequisites A common denominator of programmers who build high-quality software is their use of high-quality practices. Such practices emphasize quality at the beginning, middle, and end of a project.
4%
Flag icon
If you emphasize quality at the end of a project, you emphasize system testing.
4%
Flag icon
quality-assurance strategy, and it's not the most influential
4%
Flag icon
If you emphasize quality in the middle of the project, you emphasize construction practices. Such practices are the focus of most of this book.
4%
Flag icon
If you emphasize quality at the beginning of the project, you plan for, require, and design a high-quality product.
4%
Flag icon
In software development, you do such planning when you define the problem, when you specify the solution, and when you design the solution.
4%
Flag icon
Since construction is in the middle of a software project, by the time you get to construction, the earlier parts of the project have already laid some of the groundwork for success or failure.
4%
Flag icon
The rest of this chapter describes in detail why proper preparation is important and tells you how to determine whether you're really ready to begin construction.
4%
Flag icon
The methodology used should be based on choice of the latest and best, and not based on ignorance. It should also be laced liberally with the old and dependable. — Harlan Mills
4%
Flag icon
a good project planner clears major risks out of the way as early as possible so that the bulk of the project can proceed as smoothly as possible.
4%
Flag icon
By far the most common project risks in software development are poor requirements and poor project planning, thus preparation tends to focus on improving requirements and project plans.
4%
Flag icon
A common cause of incomplete preparation is that the developers who are assigned to work on the upstream activities do not have the expertise to carry out their assignments.
4%
Flag icon
When developers don't know how to do upstream work, the recommendation to "do more upstream work" sounds like nonsense: If the work isn't being done well in the first place, doing more of it will not be useful! Explaining how to perform these activities is beyond the scope of this book, but the "Additional Resources" sections at the end of this chapter provide numerous options for gaining that expertise.
4%
Flag icon
Some programmers do know how to perform upstream activities, but they don't prepare because they can't resist the urge to begin coding as soon as possible. If you feed your horse at this trough, I have two suggestions. Suggestion 1: Read the argument in the next
4%
Flag icon
section. It may tell you a few things you haven't thought of. Suggestion 2: Pay attention to the problems you experience. It takes only a few large programs to learn that you can avoid a lot of stress by planning ahead. Let your own experience be your guide.
4%
Flag icon
A final reason that programmers don't prepare is that managers are notoriously unsympathetic to programmers who spend t...
This highlight has been truncated due to consecutive passage length restrictions.
4%
Flag icon
Why Isn't Sam Coding Anything? or Why Isn't Mary Programming?
4%
Flag icon
A second questionable alternative is pretending to be coding when you're not. Put an old program listing on the corner of your desk. Then go right ahead and develop your requirements and architecture, with or without your boss's approval. You'll do the project faster and with higher-quality results.
4%
Flag icon
Third, you can educate your boss in the nuances of technical projects. This is a good approach because it increases the number of enlightened bosses in the world. The next subsection presents an extended rationale for taking the time to do prerequisites before construction.
4%
Flag icon
Finally, you can find another job.
4%
Flag icon
Then you know that before you implement a system, you need to understand what the system is supposed to do and how it's supposed to do it.
4%
Flag icon
Part of your job as a technical employee is to educate the nontechnical people around you about the development process.
4%
Flag icon
preparation is important.
4%
Flag icon
From a management point of view, planning means determining the amount of time, number of people, and number of computers the project will need. From a technical point of view, planning means understanding what you want to build so that you don't waste money building the wrong thing.
4%
Flag icon
The architect consumes the requirements; the designer consumes the architecture; and the coder consumes the design.
4%
Flag icon
In programming, if you have healthy food at each stage in the food chain, the result is healthy code written by happy programmers.
4%
Flag icon
nuclear
4%
Flag icon
programming, if your requirements are contaminated, they contaminate the architecture, and the architecture in turn contaminates construction. This leads to grumpy, malnourished programmers and radioactive, polluted software that's riddled with defects.
4%
Flag icon
builder who is building a housing development doesn't need to know every detail of every house in the development before beginning construction on the first house. But the builder will survey the site, map out sewer and electrical lines, and so on. If the builder doesn't prepare well, construction may be delayed when a sewer line needs to be dug under a house that's already been
4%
Flag icon
constructed.
4%
Flag icon
In general, the principle is to find an error as close as possible to the time at which it was introduced. The longer the defect stays in the software food chain, the more damage it causes further down the chain. Since requirements are done first, requirements defects have the potential to be in the system longer and to be more expensive. Defects inserted into the software upstream also tend to have broader effects than those inserted further downstream. That also makes early defects more expensive.