1
2
3
5
8
12
20
33
52
83
133
213
340
543
867
1384
2208
3346
3522
5443
5619
6074
6075
6076
6077
6078
6757
7581
8098
8422
8625
8752
8832
8882
8913
8932
8945
8953
8957
8960
8962
8963
8964
8965
▲
▼
| Link | Quote | Stars | Tags | Author |
| 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 | ||
| fdca2f3 | NASA's Software Engineering Laboratory studied ten projects that pursued reuse aggressively (McGarry, Waligora, and McDermott 1989). In both the object-oriented and the functionally oriented approaches, the initial projects weren't able to take much of their code from previous projects because previous projects hadn't established a sufficient code base. Subsequently, the projects that used functional design were able to take about 35 percen.. | Steve McConnell | ||
| 4da5f69 | NASA identifies reuse candidates at the ends of their projects. They then perform the work needed to make the classes reusable as a special project at the end of the main project or as the first step in a new project. This approach helps prevent "gold-plating"--creation of functionality that isn't required and that unnecessarily adds complexity." | Steve McConnell | ||
| 996dc08 | Containment is the simple idea that a class contains a primitive data element or object. A lot more is written about inheritance than about containment, but that's because inheritance is more tricky and error-prone, not because it's better. Containment is the work-horse technique in object-oriented programming. | Steve McConnell | ||
| d93d18f | developers' estimates tend to have an optimism factor of 20 to 30 percent | Steve McConnell | ||
| c16e058 | Be critical of classes that contain more than about seven data members. The | Steve McConnell | ||
| 33b8ff5 | If a class contains more than about seven data members, consider whether the class should be decomposed into multiple smaller classes (Riel 1996). You might err more toward the high end of 7+-2 if the data members are primitive data types like integers and strings, more toward the lower end of 7+-2 if the data members are complex objects. | Steve McConnell | ||
| b4d45dc | Inheritance is the idea that one class is a specialization of another class. The purpose of inheritance is to create simpler code by defining a base class that specifies common elements of two or more derived classes. The common elements can be routine interfaces, implementations, data members, or data types. Inheritance helps avoid the need to repeat code and data in multiple locations by centralizing it within a base class. When you decid.. | Steve McConnell | ||
| a38874a | Implement "is a" through public inheritance. When a programmer decides to create a new class by inheriting from an existing class, that programmer is saying that the new class "is a" more specialized version of the older class. The base class sets expectations about how the derived class will operate and imposes constraints on how the derived class can operate (Meyers 1998)." | Steve McConnell | ||
| c7fe5ad | Avoid duplicate code. Undoubtedly the most popular reason for creating a routine is to avoid duplicate code. Indeed, creation of similar code in two routines implies an error in decomposition. Pull the duplicate code from both routines, put a generic version of the common code into a base class, and then move the two specialized routines into subclasses. | Steve McConnell | ||
| db1545c | The underlying message of all these rules is that inheritance tends to work against the primary technical imperative you have as a programmer, which is to manage complexity. For the sake of controlling complexity, you should maintain a heavy bias against inheritance. | Steve McConnell | ||
| fa18b00 | Here's a summary of when to use inheritance and when to use containment: If multiple classes share common data but not behavior, create a common object that those classes can contain. If multiple classes share common behavior but not data, derive them from a common base class that defines the common routines. If multiple classes share common data and behavior, inherit from a common base class that defines the common data and routines. Inher.. | Steve McConnell | ||
| 1b0993f | developer testing should probably take 8 to 25 percent of the total project time. | Steve McConnell | ||
| 59dd2b9 | Immature testing organizations tend to have about five clean tests for every dirty test. | Steve McConnell | ||
| 3678a20 | Mature testing organizations tend to have five dirty tests for every clean test. | Steve McConnell | ||
| 158ab13 | it's done by creating 25 times as many dirty tests | Steve McConnell | ||
| 8ad80fc | Be sure that the names you choose favor read-time convenience over write-time convenience. | Steve McConnell | ||
| afa61f0 | The most challenging part of programming is conceptualizing the problem, and many errors in programming are conceptual errors. Because | Steve McConnell |