95fe76e
|
When executives ask for an "estimate," they're often asking for a commitment or for a plan to meet a target." --
|
|
|
Steve McConnell |
f67a8a2
|
usually more time is spent in making good-looking presentation slides than in improving the quality of the software.
|
|
|
Steve McConnell |
e7c1e7a
|
Try to create modules that depend little on other modules. Make them detached, as business associates are, rather than attached, as Siamese twins are.
|
|
|
Steve McConnell |
d159208
|
Good code is its own best documentation. As you're about to add a comment, ask yourself, 'How can I improve the code so that this comment isn't needed?' Improve the code and then document it to make it even clearer.
|
|
|
Steve McConnell |
4113c3e
|
Copy and paste is a design error
|
|
|
Steve McConnell |
6e28ee2
|
Building software implies various stages of planning, preparation and execution that vary in kind and degree depending on what's being built. [...] Building a four-foot tower requires a steady hand, a level surface, and 10 undamaged beer cans. Building a tower 100 times that size doesn't merely require 100 times as many beer cans.
|
|
software
|
Steve McConnell |
a041e76
|
few people can understand more than three levels of nested ifs
|
|
|
Steve McConnell |
a70f76d
|
complicated code is a sign that you don't understand your program well enough to make it simple.
|
|
|
Steve McConnell |
932b06b
|
As Thomas Hobbes observed in the 17th century, life under mob rule is solitary, poor, nasty, brutish and short. Life on a poorly run software project is solitary, poor, nasty, brutish, and hardly ever short enough.
|
|
|
Steve McConnell |
da5f20a
|
Managers of programming projects aren't always aware that certain programming issues are matters of religion. If you're a manager and you try to require compliance with certain programming practices, you're inviting your programmers' ire. Here's a list of religious issues: # Programming language # Indentation style # Placing of braces # Choice of IDE # Commenting style # Efficiency vs. readability tradeoffs # Choice of methodology--for exam..
|
|
software-development
|
Steve McConnell |
d119d1c
|
People who are effective at developing high-quality software have spent years accumulating dozens of techniques, tricks, and magic incantations. The techniques are not rules; they are analytical tools.
|
|
|
Steve McConnell |
6ee9c95
|
The words available in a programming language for expressing your programming thoughts certainly determine how you express your thoughts and might even determine what thoughts you can express.
|
|
|
Steve McConnell |
5861317
|
You save time when you don't need to have an awards ceremony every time a C statement does what it's supposed to. Moreover,
|
|
|
Steve McConnell |
f6d0880
|
Additional Resources on Data Types These books are good sources of information about data types: Cormen, H. Thomas, Charles E. Leiserson, Ronald L. Rivest. Introduction to Algorithms. New York, NY: McGraw Hill. 1990. Sedgewick, Robert. Algorithms in C++, Parts I-IV, 3d ed. Boston, MA: Addison-Wesley, 1998. Sedgewick, Robert. Algorithms in C++, Part V, 3d ed. Boston, MA: Addison-Wesley, 2002.
|
|
|
Steve McConnell |
156d8c7
|
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. Before the introduction of the Arabic notation, multiplication was difficult, and the division even of integers called into play the highest mathematical faculties. Probably nothing in the modern world would have more astonished a Greek mathematician than to learn that ...
|
|
|
Steve McConnell |
ebfe224
|
In the case of natural languages, the linguists Sapir and Whorf hypothesize a relationship between the expressive power of a language and the ability to think certain thoughts. The Sapir-Whorf hypothesis says that your ability to think a thought depends on knowing words capable of expressing the thought. If you don't know the words, you can't express the thought and
|
|
|
Steve McConnell |
3febd88
|
Favor read-time convenience to write-time convenience. Code
|
|
|
Steve McConnell |
c14f457
|
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.
|
|
|
Steve McConnell |
60857bf
|
Global data is generally subject to two problems: routines operate on global data without knowing that other routines are operating on it, and routines are aware that other routines are operating on the global data but they don't know exactly what they're doing to it.
|
|
|
Steve McConnell |
7817a4c
|
you shouldn't be uneasy about any parts of the architecture. It shouldn't contain anything just to please the boss. It shouldn't contain anything that's hard for you to understand. You're the one who'll implement it; if it doesn't make sense to you, how can you implement it?
|
|
|
Steve McConnell |
553592b
|
The first conclusion is that we now know with certainty that peopleware issues have more impact on software productivity and software quality than any other factor.
|
|
|
Steve McConnell |
fa25ba2
|
it's better to strive for a good solution and avoid disaster rather than trying to find the best solution
|
|
|
Steve McConnell |
b1b3c44
|
Even if you do a few things right, such as making high use of modern programming practices, you might still make a mistake that nullifies your productivity gains.
|
|
|
Steve McConnell |
9bb6595
|
Classes and routines are first and foremost intellectual tools for reducing complexity. If they're not making your job simpler, they're not doing their jobs.
|
|
|
Steve McConnell |
b52b692
|
in the vast majority of systems, efficiency isn't critical.
|
|
|
Steve McConnell |
b359e93
|
defect corrections have more than a 50 percent chance of being wrong the first time
|
|
|
Steve McConnell |
df0c51a
|
Hurrying to solve a problem is one of the most time-ineffective things you can do.
|
|
|
Steve McConnell |
70c23d1
|
There is no code so big, twisted, or complex that maintenance can't make it worse.
|
|
|
Steve McConnell |
398c613
|
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.
|
|
|
Steve McConnell |
15a3475
|
The process is called estimation, not exactimation. --Phillip Armour
|
|
|
Steve McConnell |
8051137
|
The gap between the best software engineering practice and the average practice is very wide--perhaps wider than in any other engineering discipline. A tool that disseminates good practice would be important. -- Fred Brooks
|
|
|
Steve McConnell |
ac17c9e
|
When in doubt, use brute force.
|
|
|
Steve McConnell |
14bc00c
|
Programmers who program "into" a language first decide what thoughts they want to express, and then they determine how to express those thoughts using the tools provided by their specific language."
|
|
|
Steve McConnell |
495474c
|
Eighty percent of the errors are found in 20 percent of a project's classes or routines
|
|
|
Steve McConnell |
91efda6
|
In software, consultants sometimes tell you to buy into certain software-development methods to the exclusion of other methods. That's unfortunate because if you buy into any single methodology 100 percent, you'll see the whole world in terms of that methodology. In some instances, you'll miss opportunities to use other methods better suited to your current problem.
|
|
|
Steve McConnell |
3255303
|
the error rate in manual testing is comparable to the bug rate in the code being tested.
|
|
|
Steve McConnell |
65eff3c
|
One effective approach is to determine a range of accuracy that is acceptable and then use a boolean function to determine whether the values are close enough.
|
|
|
Steve McConnell |
8484f75
|
code reading detected about 80 percent more faults per hour than testing
|
|
|
Steve McConnell |
145aabd
|
An algorithm gives you the instructions directly. A heuristic tells you how to discover the instructions for yourself, or at least where to look for them.
|
|
|
Steve McConnell |
45b0ceb
|
Quicksort a few times, but what are the odds that your custom version will be fully correct on the first try?
|
|
|
Steve McConnell |
701c99a
|
Another good reason to create a class is to model an abstract object--an object that isn't a concrete, real-world object but that provides an abstraction of other concrete objects. A good example is the classic Shape object. Circle and Square really exist, but Shape is an abstraction of other specific shapes.
|
|
|
Steve McConnell |
25f5065
|
Isolate complexity. Complexity in all forms--complicated algorithms, large data sets, intricate communications protocols, and so on--is prone to errors. If an error does occur, it will be easier to find if it isn't spread through the code but is localized within a class. Changes arising from fixing the error won't affect other code because only one class will have to be fixed--other code won't be touched. If you find a better, simpler, or m..
|
|
|
Steve McConnell |
5a8ddcd
|
Hide global data. If you need to use global data, you can hide its implementation details behind a class interface. Working with global data through access routines provides several benefits compared to working with global data directly. You can change the structure of the data without changing your program. You can monitor accesses to the data. The discipline of using access routines also encourages you to think about whether the data is r..
|
|
|
Steve McConnell |
c5f136c
|
Streamline parameter passing. If you're passing a parameter among several routines, that might indicate a need to factor those routines into a class that share the parameter as object data. Streamlining parameter passing isn't a goal, per se, but passing lots of data around suggests that a different class organization might work better.
|
|
|
Steve McConnell |