In the history of computer, the two most recommended books "Code Daquan" "Mythical Man-Month"
From the program to the programming system product is 9 times the relationship
Le: Create things, keep learning
Bitter: People usually want to converge faster when the project ends, but the result is that the slower the convergence, the more it ends.
Chapter 2 The Myth of Man-Month (Human-month: one person works for one month, three people work for four months is 12 person-months)
Man-month is a dangerous and deceptive myth. The relationship between personnel and time is not necessarily that the shorter the person, the less time it takes to complete the project. Unless it is a completely decomposable task, there is no need for communication between people. Sometimes adding people blindly is only counterproductive.
In scheduling, the system test phase is often prone to errors and uncertainties. The easiest time to estimate during the coding phase
Experience in software scheduling: 1/3 planning, 1/6 coding, 1/4 component testing and early system testing, 1/4 system testing. The test takes half of the time, which is often impossible in practice.
Brooks' rule: adding manpower to projects that are behind schedule will only make the project more backward. The schedule should be modified in time and the project tasks should be reduced
Lack of reasonable schedule is the main reason for project lag
All programmers are optimistic
Chapter 3 Surgery Team ( 10 small teams)
Traditional team: division of work, each person is responsible for a part
Surgery team: surgeons and deputies understand all designs and all codes
Traditional team: everyone is equal, it is not easy to find the best solution when there are differences
Surgery team: there is a relationship between superiors and subordinates, the differences can be judged by the surgeon
In addition, the remaining professional division of human functions
For large teams, you need to have a system architect, be able to clearly divide the boundary between architecture design and implementation, and focus on the architecture
Chapter 4 Aristocratic Autocracy, Democratic Politics and System Design
Architecture design: complete and detailed user interface description
The nobility is authoritarian, the intellectual elite completes the creative work, and other people make the gear (the description of the gear is actually wrong, the realization of the program is also creative work), which helps the conceptual integrity. But the people above don't need to ask the people below how to do it
When designing the architecture team, what do the implementation staff do? If the implementation staff is involved in the plan design phase, it will not speed up and the quality will be even worse. Therefore, large-scale projects can be staged, and the implementation staff can be transferred after the description is written.
The ratio of the complexity of functions to understanding is the ultimate standard of system design, not the rich functions.
Early communication and continuous communication can enable architects to have a better sense of cost, as well as developers to gain confidence in the design, and will not confuse their respective responsibilities.
How the architect successfully influences the implementation: Keep in mind that the developer bears the creative and inventive implementation responsibility, so the architect can only suggest, not control
Always be prepared to suggest a way to achieve the specified instructions, and also be prepared to accept any other method that can achieve the goal
Keep the key to the above suggestions low-key and private
Ready to give up insisting on the changes made
The second system is the most dangerous system designed by people, because it is often added
Even for large projects, the design results should be completed by one or two people
The specification states the degree of precision the author should pursue: while carefully defining what is specified, what is not specified is defined.
The best friend of the project manager is the opponent he faces every day-an independent product testing agency / group
Chapter 7 Why Babylon Tower Fails
Because of the lack of communication, communication is as important as organization and software technology
Have a project work manual, and update it in time
It is impossible to obtain an estimate of the entire task simply by estimating the encoding part and then applying the corresponding coefficients of other parts of the task.
Data for building independent small programs is not suitable for programming system products.
Workload is a power function of scale (not proportional to the scale, the larger the scale, the more work required increases as a power function)
For commonly used programming statements, productivity seems to be fixed. This fixed productivity includes the comments required in programming, and there may be errors.
Using appropriate high-level languages, the productivity of programming can be increased by 5 times.
Cultivating developers from the system as a whole and facing the users is the most important function of software programming managers.
For computer hardware development projects, the key documents are: target, manual, schedule, budget, price
For software projects: goals, user manuals, internal documents, schedules, budgets, organizational charts, work space allocation
In the process of software development, there are often many problems with the first system. It may be too slow, too large, and difficult to use, or both. There is no other way to eliminate all problems except to start over. The discarding and redesign of the system can be completed in one step, or it can be implemented piece by piece. This is a necessary step for all large-scale system development.
Plan for abandonment, you must do it anyway.
Change is inborn, not an anomaly that is out of date and tiresome.
The actual needs and feelings of users will change with the construction, testing and use of the program.
The easy-to-master features and invisibility of software products have caused its builders to face eternal demand changes.
Abandoning the concept of archetypes is itself an acceptance of facts-changing the design as you learn.
For a widely used program, the total maintenance cost is usually 40% or more of the development cost.
A basic problem in program maintenance is that bug fixes will always introduce new bugs with a fixed (20% ~ 50%) chance. The whole process is two steps forward and one step back.
System software development is a process of reducing confusion (reducing entropy), so it is metastable.
Software maintenance is a process of increasing confusion (increasing entropy). Even the most skilled software maintenance work only slows the process of system degradation to unsteady state.
In some applications, the batch system will never be replaced by an interactive system.
Debugging is a very slow and difficult part of system programming, and the long debugging turnaround time is the bane of debugging.
Chapter 14 Wreck the Xiao Wall
Major disasters are relatively easy to deal with. It is often related to major pressures, thorough reorganization, and the emergence of new technologies. The entire project team can usually cope with it. But it is difficult to identify, difficult to prevent, and difficult to make up for the lagging behind schedule.
Everything on the schedule is called a "milestone" and they all have a date. The choice of milestones has only one principle, that is, the milestones must be specific, specific, and measurable events that can be clearly defined.
Self-documented program: Integrate the document into the source program, which is a direct and powerful impetus for correct maintenance, and ensure that programming users can obtain documentation in a convenient and timely manner.
Three ways to minimize the burden of documentation:
The first is to append as much "document" information as possible with the language that must exist because of language requirements.
The second is to use spaces and a consistent format as much as possible to improve the readability of the program, showing subordination and nesting relationships.
Third, insert the necessary narrative text into the program in the form of paragraph notes.
The program flow chart is not very useful, even if it is required, it is not necessary to follow the standard, not too detailed