It is necessary to become a martial arts master and need a long time. How long does it take to become a master of software development? "Modern C Design" andrei Alexandrescu believes that a person may become a programmed master in 20 years old, but it is necessary to have a design master to get around 35 years old. Graduated with a 23-year-old university, it is necessary to have a long 12 years.
Taking me personal as an example (I still don't dare to be a design master). After graduating from the age of 22, I wrote some small-scale procedures in an 8086 assembly language in a study, and I feel that my heart should be handed. Anyone who can use the flow of flow seems that it does not seem to be below. In the work, the structure of structured programming with colleagues, and consciously used in practice.
Three years later, it undertakes a longitudinal topic: Develop a interactive typesetting system on Windows. Developed with Windows SDK. Excited, naturally, I naturally think of the design of the structured method: use the entire system as a black box (Black Box), the output is of course typography, whether it is format, input is .... I am stuck. Is the user operation input? But there are so many user operations, how can I say? How to paint the system data flow map? How to write the data dictionary? After discussing N times with colleagues, it still does not understand. Smelly, first imitate the QUARK Express to take the interface. Then study the typesetting algorithm. The program structure has passed at least three large-scale modifications, and finally can discharge some layers, and passed the identification two years later (which is of course a bunch of the bunch after identification). I experience the structured development method is not suitable for development of interactive systems. In the early stage of development, you are less likely to draw data flow maps correctly, and the structured design method is completely dependent on the data flow chart. The data flow map changes, and the entire program structure will change.
Later, join a joint venture company, served as a leader of development, five or six group members. At this time, I have read the "object-oriented analysis" and "Object-oriented design" and "Code Complete" translated by Shao Weizhong, Yang Fuqing. Although the programming of the object-oriented object is not known but still a semi-solving.
First, we develop a graphic editing software with MSVC 1.5. I used paper to draw more than 20 object pictograms, and after discussing with colleagues, start programming. Some people are responsible for data models, some people are responsible for user interfaces, some people are responsible for graphic display. A few months later, the boss has been displayed to potential users, and the reaction is good. Boss and developers are covered by an exciting mood. We are constantly adding new features, and the boss does not go to the exhibition from time to time. The function is added and starts to make potential users try. The boss and we are all relieved: there is no mistake, we are the soldiers will stop, water to live, there is not a terrible. Error report is coming. Our confidence starts to check the wrong mistakes. Some mistakes were quickly changed. But in the end we found that the wrong source is constantly. Change a mistake may cause other errors. The software will never be able to use. Finally, the timing is missed. The software has to be cut off. In addition, we did it. Everyone thinks should be made as soon as possible. At the same time, the model is very vaguely sensitive, and the program of the data model and the user interface must be strictly separated, otherwise the program is extremely difficult to modify.
Later, we developed a PDF file browser and editor similar to Adobe Acrobat Exchange (At that time, Acrobat Exchange could not be displayed in Japanese, Japan, Korean). At this time, the boss brings some expired "C / C Uses 'Journal" "Dr. Dobbs' Journal" magazine. From the book review, I was attracted by a few books. A "Object-Oriented Modeling and Design", which is waiting for James Rumbough, one is now famous "Design Patterns", and the "Effective C " and "More Effective C " of Scott Meyers. I advised the boss to buy these books and bought a CASE (Computer Assistive Software Engineering) tool: SELECT OMT. After studying these books carefully, it is quite a sense of Mall. The biggest harvest is to understand the importance of reducing the coupling between classes. The details of a class have changed, and should not affect other types of internal implementations that use this class. Dividing is a lot of Design Pattern to use our software.
I draw some high-level class diagrams, state diagrams and data flow maps, etc. with SELECT OMT software, and let colleagues review. Collents feel better to grasp the overall design of the software through these maps. In the process of writing, we constantly adjust the program structure to minimize the coupling between the classes. The boss has long arranged a full-time tester. Discover the problem, modify it immediately. One year later, our software finally passed the user's trial and sold out. At that time, I can say that I am confident.
Since then, I made a year and a half media programming. It is more interested in the development of system development. So the QUARK software company has developed a CORBA-based file management system. This is the first time I participated in the development and the first large-scale use of STL. I am amazed on the STL design, and I also put it on my confidence. Since then, I read the "UML DISTILED" of Martin Fowler, "Object Oriented Software Construction" such as Bertrand Meyer. And start using Rational Rose. QUARK's technical document management, design review, code review, quality management, and German (QUARK German Branch) rigorous work attitude gave me a deep impression.
The project team is divided into groups and test groups. There is a design team of 4 to 5 people in the development group to be responsible for the overall design of the software, one of which is responsible for technical documentation to ensure that the document reflects the latest design. Regular design review. When reviewing, the members of the project team participate in and may be issued or suggestions. After the conclusion, it is implemented immediately.
Several groups were set up under the development group. The code review is regularly performed in the group. The source file of each group member is selected from the team leader, and other group members are reviewed, try to pick out all the problems. If the code is too time, you want to call back from new. The code review can guarantee software quality and a chance to learn.
One and a half, I left QUARK, joined Sybase, participated in the development of PowerBuilder's maintenance and new version. This is the first time I participated in software maintenance, and I realized the importance of software maintenance, I realized that writing to be maintained code is an important topic of software development. Sybase systematic quality tracking system and user support system make me benefit. During this time, I read "Large-Scale Software Development In C ", "Refectoring", and "Modern C Design", "Modern C Design", HERB SUTTER, "", ", And books such as Kent Beck "Extreme Programming Explained". It has been further understanding for software development and maintenance, but it also recognizes the difficulty of software development. Recall the road that is walking for more than a dozen years, it seems to be a little great. Try summarize for reference:
1) Be proficily grasping at least one programming language. I think it is best to be C . Master C , learn other languages such as Java or C #, etc. Not difficult, because various object-oriented program languages may have great differences in syntax, in semantics.
2) Don't send the software design in a time. In the initial stage of development, try to achieve the most basic functionality as possible so that your software can actually run as soon as possible, don't be too detailed. This way you can get feedback as soon as possible to understand the problems you face more and more fully. The key points you have focused should be Make IT Work, Make It Right, make it it.
3) Software structure is divided into layers. The low-level module does not depend on the upper layer module. A class, an interface or a function should only do one thing. Class or interface without essential contact should not have a coupling relationship. For example, the direct association between the user interface and the data model is cut off with the MVC View Controller Design Pattern.
4) The main task of software design is to assign a class distribution responsibility (responseibilities). Try not to design the class into a controller, and designed to be a coordinator. The controller is doing it yourself, and the coordinator makes others do. The logic of the controller is often very complicated, it is difficult to maintain; the coordinator is logically simple, easy to maintain. To stand outside the user's user's perspective design class's external behavior. To pay attention to a single software aesthetics, simple, clear, consistent, balance, etc.
5) Understand and use UML, Design Patterns, UNIT TEST, Design by Contract, and so on.
6) Use the code management system and quality tracking system.
7) Understand various software development process control methods and find out how to fit your.
8) Read classic books, study classic code, subscribe to magazines, and learn from counterparts.
The longer the software development is difficult. Software development history is still very short, only 50 years, is not a systematic discipline. Some people even think that software design and programming are an art. But the master of software art is still too small, and we have difficulty to enjoy their masterpieces, unless all design documents and code are open. Software is more likely to hide tale. A very beautiful software in a user interface, the internal design and code is likely to be smelling. One floor is tilted, the wall crack, the roof is leaking, no one will buy. A very bad software may sell well. But how long does such software can you?