To become a martial arts master, it takes a long time to Qinxuekulian. How long will it take to become a master of software development? "Modern C + + design" author Andrei Alexandrescu that: a person may be at the age of 20 to become a programming master, but to become a master of design but need to endure to 35 years old. It takes a long 12 years to graduate from a 23-year-old university. To me as an example (I still dare not think of myself as a Design Master), 22 years old after graduating from university, in a research institute with 8086 Assembly language to write a number of small-scale procedures, quite handy. All the problems that can be expressed by a circulated map seem to be a cinch. Work, and colleagues to discuss structured programming, and can be consciously used in practice. Three years later, to undertake a longitudinal task: the development of an interactive typesetting system on Windows. Developed with the Windows SDK. Excited, naturally think of the structure of the design: the whole system as a black box (negro box), the output is of course the result of typesetting, no matter what format, input is ... I'm stuck here. Is the user action input? But there are so many user operations, how to say it. How to draw the system data Flow diagram. How to write the data dictionary. After discussing N times with colleagues, we still cannot solve them. In frustration, first imitate Quark express to build an interface bar. Then study the typesetting algorithm. Program structure after at least three large-scale modification, finally can discharge some layout, and after two years passed the appraisal (of course, after the appraisal is to put it on the shelf). I learned from this that structured development methods are not suitable for developing interactive systems. In the early stages of development, you are unlikely to be able to draw data flow diagrams correctly, and structured design methods rely entirely on data flow diagrams. Data flow diagram changes, the entire structure of the program will change. Later, joined a joint venture company, as development leader, there are six team members. At this time I have read the Shao Weizhong such as "object-oriented analysis", Yang Fuqing and other compiled "object-oriented design" and "code Complete" in the translation. The object-oriented programming is understood but is still a smattering of knowledge. First, we develop a graphics editing software with MSVC 1.5. I used paper to draw 20 of objects, after discussion with colleagues to start programming. Someone is responsible for the data model, someone is responsible for the user interface, and someone is responsible for graphic display. A few months later, the boss has been able to show the potential users, a good response. Both the boss and the developer were enveloped in an excited mood. We constantly add new features, and the boss often shows up at the exhibition. Feature is added, and start to try out the potential user. The boss and we are relieved: the rest is wrong, we are soldiers to the block, water to the earth, nothing terrible. The error report is coming. We began to check the error with confidence. Some mistakes were quickly changed. But in the end we found the errorConstantly. The modification of an error may cause other errors. Software never reaches the point where it can be used. Finally, the time was missed. The software had to be cut off. In frustration, we did a reflection. Everyone thinks that the mistake should be corrected as soon as possible. At the same time vaguely feel that the data model and user interface procedures must be strictly separate, otherwise the program is extremely difficult to modify. Later, we developed a PDF file browser-and-editor similar to Adobe Acrobat Exchange (when Acrobat exchange did not show Chinese, Japanese, or Korean). At this point, the boss brought some outdated "c/Journal", "Dr Dobbs ' Journal" magazine. From the book review, I was fascinated by several books. One is James Rumbough wait for "object-oriented Modeling and Design", one is now the famous "design Patterns", there is Scott Meyers, "effective c+ + "and more effective C + +". I persuaded my boss to buy these books, and I egged him on to buy a case (computer-aided software Engineering) tool: Select OMT. After careful study of these books, quite clicked feeling. The biggest gain is in understanding the importance of reducing the coupling between classes. The implementation details of a class change and should not affect the internal implementation of other classes that use the class. Even better, there are a lot of design pattern that can be used in our software right away. I used the Select OMT software to draw high-level class diagrams, state diagrams, and data flow diagrams, and let colleagues review them. Colleagues feel that they have a better grasp of the overall design of the software through these graphs. In the process of writing a program, we constantly adjust the program structure to minimize the coupling between classes. The boss arranged the full-time tester very early. Find the problem and revise it immediately. A year later, our software finally passed the user's trial, sold out. At that time, I could say that I was full of confidence. Since then, I have done 1.5 multimedia programming. Discover or be more interested in system development. So I joined the Quark software company to develop a file management system based on CORBA. This is my first time to participate in remote development, but also the first large-scale use of STL. I marvel at the design of the STL, but also a discount on their confidence. After that, I read books such as Martin Fowler's UML distilled, Bertrand Meyer's Object oriented Software construction. and started using rational Rose. Quark Company's technical documentationManagement, design Review, code review, quality management and the German (quark company Germany Branch) rigorous work attitude has impressed me. The project group is divided into development groups and test groups. A design team of 4 to 5 people in the development Group is responsible for the overall design of the software, one of whom is responsible for the technical documentation to ensure that the document reflects the latest design. Perform regular design reviews. All members of the project team participate in the review and may ask questions or suggestions. When you reach a conclusion, put it into practice immediately. A number of groups have been set up under the development group. Regular code review within the group. The team leader selects each member's source document, the other team member review, tries to pick out all the problem. If the code is too much, you have to write it back. Code review can guarantee the quality of software, but also a chance for everyone to learn. After 1.5, I left Quark, joined Sybase, participated in PowerBuilder maintenance and new version of the development. This is the first time I have been involved in software maintenance, which makes me realize the importance of software maintenance, recognizing that writing maintainable code is an important topic in software development. Sybase's systematic quality tracking system and user support system have benefited me greatly. In the meantime, I read "Large-scale Software Development in C + +", "refectoring" by Martin Fowler, Andrei Alexandrescu "Modern C + + Design, Herb Sutter's "exceptional C + +" and "more exceptional C + +", and Kent Beck's "Extreme programming Explained" and other books. Further understanding of software development and maintenance, but also more aware of the difficulties of software development. Looking back on the faltering path of more than 10 years seems to have been somewhat enlightened. Try to sum up for reference: 1 to master at least one programming language. I think it's better to be C + +. Mastering C + +, learning other languages such as Java or C # is not difficult, because a variety of object-oriented programming languages may differ in syntax and are semantically similar. 2 Don't expect to design the software at once. In the early stages of development, try to use the simplest design to achieve the most basic functions, so that your software can actually run as early as possible, not too rigidly adhere to the details. So that you can get feedback as early as possible, to be more intuitive and more comprehensive understanding of the problems you face. Your focus should be, in turn, make it work to make it right and make it fast. 3) Software structure should be divided into blocks and layers. Lower-level modules do not rely on upper-level modules. A class, an interfaceOr a function should do just one thing. A class or interface without an essential connection should not have a coupling relationship. For example, the direct association between the user interface and the data model is cut off using MVC (model View Controller) Design patterns. 4 The main task of software design is to assign responsibility to class (responsibilities). Try not to design the class as a controller (Controller), but as a coordinator (coordinator). The controller does everything by himself and the coordinator lets others do it. The logic of the controller is often complex and difficult to maintain; the coordinator is simple and easy to maintain. The external behavior of the class is designed to stand at the consumer angle of the class. To pay attention to a little software aesthetics, that is, simple, clear, consistent, balanced and so on. 5 Understand and use UML, design Patterns, Unit Test, design by contract, etc. 6 Use of code management system and quality tracking system. 7 Understand various software development process control methods, and find the right way for you. 8 Reading Classics, studying classics, subscribing to magazines, and exchanging with peers. The longer it is in this line, the more difficult it is to develop software. Software development history is still very short, only 50 years, is not a systematic subject. Some people even think that software design and programming is an art. But there are so few software artists, and it's hard for us to directly appreciate their masterpieces unless all the design documents and code are open. Software is more prone to filth. A very beautiful user interface software, internal design and code is likely to stink. No one would buy a house with a floor tilt, a wall crack, and a leaky roof. A poorly designed software may sell well. But how long can such software last? Software design and programming has been difficult, and this is only one aspect of software development, software development process Control is difficult, perhaps more difficult. Become a software development master to go a long way, what day can Shangjian walk the horizon.
The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion;
products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the
content of the page makes you feel confusing, please write us an email, we will handle the problem
within 5 days after receiving your email.
If you find any instances of plagiarism from the community, please send an email to:
info-contact@alibabacloud.com
and provide relevant evidence. A staff member will contact you within 5 working days.