More on this book
Community
Kindle Notes & Highlights
Second is the pleasure of making things that are useful to other people. Deep within, we want others to use our work and to find it helpful.
Fourth is the joy of always learning, which springs from the nonrepeating nature of the task. In one way or another the problem is ever new, and its solver learns something: sometimes practical, sometimes theoretical, and sometimes both.
The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination.
Programming then is fun because it gratifies creative longings built deep within us and delights sensibilities we have in common with all men.
The obsolescence of an implementation must be measured against other existing implementations, not against unrealized concepts. The challenge and the mission are to find real solutions to real problems on actual schedules with available resources.
The challenge and the mission are to find real solutions to real problems on actual schedules with available resources.
For the human makers of things, the incompletenesses and inconsistencies of our ideas become clear only during implementation. Thus
The conclusion is simple: if a 200-man project has 25 managers who are the most competent and experienced programmers, fire the 175 troops and put the managers back to programming.
I will contend that conceptual integrity is the most important consideration in system design. It is better to have a system omit certain anomalous features and improvements, but to reflect one set of design ideas, than to have one that contains many good but independent and uncoordinated ideas.
Good features and ideas that do not integrate with a system's basic concepts are best left out.
The opportunity to be creative and inventive in implementation is not significantly diminished by working within a given external specification, and the order of creativity may even be enhanced by that discipline.
Conceptual integrity does require that a system reflect a single philosophy and that the specification as seen by the user flow from a few minds.
A good information system both exposes interface errors and stimulates their correction.
Thinkers are rare; doers are rarer; and thinker-doers are rarest.
No amount of space budgeting and control can make a program small. That requires invention and craftsmanship.
Beyond craftsmanship lies invention, and it is here that lean, spare, fast programs are born. Almost always these are the result of strategic breakthrough rather than tactical cleverness.
Representation is the essence of programming.
It is common sense to take a method and try it. If it fails, admit it frankly and try another. But above all, try something. —FRANKLIN D. ROOSEVELT
The management question, therefore, is not whether to build a pilot system and throw it away. You will do that. The only question is whether to plan in advance to build a throwaway, or to promise to deliver the throwaway to customers.
Cosgrove has perceptively pointed out that the programmer delivers satisfaction of a user need rather than any tangible product. And both the actual need and the user's perception of that need will change as programs are built, tested, and used.
"By documenting a design, the designer exposes himself to the criticisms of everyone, and he must be able to defend everything he writes. If the organizational structure is threatening in any way, nothing is going to be documented until it is completely defensible."
The total cost of maintaining a widely used program is typically 40 percent or more of the cost of developing it. Surprisingly, this cost is strongly affected by the number of users. More users find more bugs.
Many poor systems come from an attempt to salvage a bad basic design and patch it with all kinds of cosmetic relief.
For picking the milestones there is only one relevant rule. Milestones must be concrete, specific, measurable events, defined with knife-edge sharpness.
This whole process is helped if the boss labels meetings, reviews, conferences, as status-review meetings versus problem-action meetings, and controls himself accordingly.
A computer program is a message from a man to a machine. The rigidly marshaled syntax and the scrupulous definitions all exist to make intention clear to the dumb engine.
I believe the hard part of building software to be the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity of the representation.
The essential prerequisite for building an expert system is to have an expert.
The gap between the best software engineering practice and the average practice is very wide—perhaps wider than in any other engineering discipline.
software is very difficult to visualize.
No other part of the conceptual work is so difficult as establishing the detailed technical requirements, including all the interfaces to people, to machines, and to other software systems. No other part of the work so cripples the resulting system if done wrong. No other part is more difficult to rectify later.
For the truth is, the clients do not know what they want. They usually do not know what questions must be answered, and they almost never have thought of the problem in the detail that must be specified.
Harlan Mills proposed that any software system should be grown by incremental development.
Study after study shows that the very best designers produce structures that are faster, smaller, simpler, cleaner, and produced with less effort. The differences between the great and the average approach an order of magnitude.
Good managers, scarce though they be, are no scarcer than good designers. Great designers and great managers are both very rare.
complexity is the most serious inherent difficulty, but not all complexity is inevitable.
The purpose of organization is to reduce the amount of communication and coordination necessary.
"The manager's function is not to make people work, it is to make it possible for people to work."
To only a fraction of the human race does God give the privilege of earning one's bread doing what one would have gladly pursued free, for passion.