qualified programmer

There are many children in China. They are 18, 9 or 21, 2 years old. They have also written a lot of code through self-study. Some of their code is beautifully written, some technical details are quite outstanding, and they are also very inquisitive, but they are being studied by some Wrong understandings and opinions, lack of overall understanding of the system and program, these people, an online friend said it very well, they are actually just some Coding  fans, they are not qualified to be called programmers at all, but according to my opinion I know that the CTOs of many small Internet companies are such coding  fans, with terrifying salaries, doing terrifying projects, and the endings of the projects are usually terrifying. Basic qualities of programmers: qualities 

that should be possessed by a truly qualified programmer, or a programmer who can truly qualify to complete some code work. 

1: It is not unimportant that it is regarded as the basic quality of team spirit and collaboration ability  . On the contrary, this is the most basic and most important foundation for a programmer to have a life. Those who call high-level programmers a lone ranger are raving. The power of any individual is limited. Even a genius like Linus needs to create a miracle by forming a strong team. Those who write cores for linux all over the world It is unimaginable without the spirit of collaboration. Lone Rangers can make a small fortune by making small money-making software, but once they enter the R&D team of some large systems and enter the development tasks of commercialization and productization, those who lack this quality are completely unqualified. 

2: Documentation habit  It is said that high-level programmers who never write documentation must be young children. Good documentation is a very important part of the formal R&D process. As a code programmer, it is normal to write technical documentation 30% of the working time. , and as senior programmers and systems analysts, the proportion is much higher. Without documentation, a software system lacks vitality, and will encounter great troubles in future error checking, upgrades, and module reuse. 

3: Normalized, standardized code writing habits As the rules of some well-known foreign software companies, the naming of variables in the code, the format of comments in the code, and even the length of indentation in nested lines and the number of blank lines between functions are clearly defined. Good writing habits are not only helpful for code improvement Porting and error correction also facilitates collaboration between different technicians. Some coding  fans clamor that the code written by high-level programmers can never be understood by others. This clamor can only prove that they are not worthy of calling themselves programmers at all. Code has good readability, which is the basic quality requirement of programmers. Looking at the entire linux construction, without standardized and standardized code habits, global R&D cooperation is absolutely unimaginable. 4: Requirement understanding ability  Programmers need to understand the requirements of a module. Many children write programs often only focus on one functional requirement. They attribute all performance indicators to hardware, operating system and development environment, while ignoring the performance considerations of their own code. Someone once said that it is easy to write an advertisement exchange program. This kind of person never knows how to achieve the performance index in the case of millions or even tens of millions of visits. For such a programmer, you give him the deep blue system , he also can't make the Taiji chain's ability to visit concurrently. Among the performance requirement indicators, stability, concurrent access support capability and security are very important. As a programmer, you need to evaluate the environment in which the module is operating in the system, the load pressure it will be subjected to, and the potential for various potential dangers and malicious attacks. possibility. At this point, a mature programmer needs at least 2 to 3 years of project development and tracking experience to have experience. 

5: Reusability, modular thinking ability.  You can often hear some programmers have such complaints. After writing programs for a few years, they become skilled workers, and they repeatedly write some codes without any new ideas every day. This is actually China The biggest waste of software talents is that some repetitive work has become the main work of skilled programmers, and these are actually completely avoidable. Reusable design, modular thinking is to ask programmers to think more when completing any functional module or function, not limited to the simple idea of ​​completing the current task, think about whether the module can exist away from this system , whether it can be directly referenced in other systems and application environments by simply modifying the parameters, so that repetitive development work can be greatly avoided, if a software development unit and working group can take into account in each development process With these problems, programmers will not waste too much time in repetitive work, and will have more time and energy to devote to innovative code work. Some good program module codes, even if they were written in the 1970s, can be used as functional modules in some systems. What I see now is that many small companies will easily upgrade or improve their software. All the code is rewritten, and most of the repetitive work is a waste of time and energy. 

6: Testing habits  As for some commercial and regular development, full-time test engineers are indispensable, but it does not mean that with full-time test engineers and programmers, self-testing is not necessary; software development is a project. In other words, a very important feature is that the earlier the problem is discovered, the lower the cost of solving it. The programmer can carefully test each piece of code and each sub-module after completion, so that some potential problems can be discovered and solved as early as possible. solve, so that the efficiency and reliability of the overall system construction have the greatest guarantee. The testing work actually needs to consider two aspects. On the one hand, it is the test of the normal call, that is, to see whether the program can complete the basic functions under the normal call. This is the most basic test responsibility. Unfortunately, in many companies, this has become the only test task. In fact, it is still far from that; the second aspect is the test of abnormal calls, such as the stability test under high pressure load, the test under the potential abnormal input of the user, and the impact of the module in the case of a partial failure of the overall system. Testing, module stability testing when frequent abnormal requests block resources, etc. Of course, it is not necessary for programmers to perform such a complete test on every piece of their code, but programmers must clearly understand the status of their code tasks in the overall project and various performance requirements, and conduct relevant tests in a targeted manner. Identifying and solving problems early, of course, requires the understanding of the needs mentioned above. 

7: Ability to learn and summarize Programmers are a profession in which talents are easily eliminated and outdated, because a technology may only take the lead in three or two years. If programmers want to settle down, they must constantly follow up with new technologies and learn new skills. Being good at learning is a necessary driving force for any career, and for programmers, this requirement is even higher. But learning also needs to find the right goal. Some small coding  fans, they also talk about their learning ability. They have learned asp, php, and jsp. They use this as a capital to show off blindly. chasing some superficial and superficial things and nouns, do not understand communication transmission protocols when working on network programs, and do not understand interrupt vector processing when working on application programs. Such technicians, no matter how many so-called new languages ​​they have mastered, will never have quality improve. Being good at summarizing is also a manifestation of learning ability. Every time you complete a research and development task or a piece of code, you should purposely track the application status of the program and user feedback, summarize at any time, and find your own shortcomings, so as to gradually improve, a Programmers can grow up. A programmer who does not have the growth potential, even if he looks like a master, it is recommended not to use it, because the time when he is outdated will come soon. A person with all the above qualities should be said to be a qualified programmer. Please note that the above qualities are not determined by IQ, nor can they be learned in some university textbooks. Awareness of work is a matter of consciousness. 

Then, as a senior programmer, so that a system analyst, that is, a designer of a program project, in addition to all the above qualities, you also need to have the following qualities: 

First, the ability to analyze requirements is  for programmers , you can complete the qualified code by understanding the requirements, but for the organizations and managers of R&D projects, they not only need to understand the needs of customers, but also need to formulate some requirements by themselves. Why do you say this? Generally speaking, when conducting R&D tasks, it may be the needs of customers, or the needs of marketing and marketing departments. At this time, for the R&D department, what they see is not a complete demand. Generally speaking, the demand is only some functions. The above requirements, or more formally, may obtain a complete user view; but this is not enough, because customers may have more non-technical factors, it may be difficult for them to put forward complete and clear, or professional performance requirements, but for Project organizers and planners must be able to clearly recognize the existence of these requirements and put them forward appropriately when completing the requirements analysis report. At the same time, they must be fully and clearly reflected in the design specification, so that programmers will not lose them when coding. these guidelines. The programmer must correctly understand the environment in which the user's needs are located, and analyze the needs in a targeted manner. For example, if the same software is released through ASP rental and released through a license, the performance requirements may be different. The former emphasizes It is better support ability and stability, while the latter may emphasize the universality under various platforms and the simplicity of installation and use. 

Second, project design methods and process processing capabilities  . Programmers must be able to master no less than two or three project design methods (such as top-down design methods, such as rapid prototyping, etc.), and be able to adapt to project requirements. Matching with resources to select a suitable design method for the overall design of the project. Improper selection of the design method will delay the R&D cycle, waste R&D resources, and even affect the R&D effect. A programmer also needs to devote a lot of effort to the design and processing of flowcharts. He needs to make data flow diagrams to establish a data dictionary; he needs to process logic flow diagrams to form an overall system processing flow. A system with problematic processes will not be a good system, no matter how beautiful the code is and how delicate each module is. Of course, to do a good job in process analysis and choose a good project design method, it is necessary to have sufficient grasp of the requirements analysis ability. 

Third, reuse design and modular decomposition ability  seems to be an old tune. Didn’t the previous basic qualities already explain this problem? As a programmer engaged in module tasks, he needs to consider the reusability of the specific functional modules he faces, while as a system analyst, the problems he has to face are much more complicated, and he needs to analyze the overall system according to a kind of The modular analysis capability is decomposed into many reusable functional modules and functions, and an independent design requirement is formed for each module. For example, it is like car production. At first, each car was installed independently, and each component was tailor-made, but later on, it was different. Machined production began, and a car factory began to produce cars through assembly lines. , Independent components began to have a certain degree of reusability, and later standardization became a major trend. Different models, brands and even different manufacturers of auto parts can also be easily replaced and upgraded. At this time, the efficiency of automobile production is maximized. The same is true for software engineering. In a mature software industry, in some related projects and systems, different components can be replaced at will, such as many desktop software of Microsoft, in many operation modules (such as opening files, saving files, etc. etc.) are the same set of functional modules that are reused, and these interfaces are provided to desktop application developers for easy hooking through some class libraries, which is an obvious proof of the reused module design. Decomposing a large, intricate application system into some relatively independent, highly reusable modules that can complete data connection only by relying on a few parameters is the most important thing for senior programmers and system analysts. Good work, a suitable project design method, and a clear flow chart are important guarantees to achieve this goal. 

Fourth, the overall project evaluation ability As a system designer, you must be able to start from the overall situation and have a clear understanding of the project as a whole, such as whether the company's resource allocation is reasonable and in place, such as whether the project schedule can maximize efficiency without failing to complete it on time. Evaluating the workload of the whole project and each module, evaluating the resources required by the project, and evaluating the difficulties that the project may encounter requires a lot of experience accumulation. Some of the leaders of software system design in the West are very old, such as 4, 50 years old, or even older. They are far less active in coding than young people, but in terms of project evaluation, they are decades old. The accumulation of experience is the most important and valuable wealth. The lack of such a generation of programmers in China is mainly not the lack of programmers of that age, but the programmers of that age are basically made by research institutes, not from the research and development of professional productized software. There is no way to accumulate that kind of experience in product R&D. Fifth, the ability of team organization and management to  complete a project requires the concerted efforts of the team. As a project designer or R&D supervisor, you should be able to maximize the overall strength of the team. Due to its professional nature, technical management is not different from General personnel management, because some technical indicators and factors are designed here. The first is the quantification of work. Without quantification, it is difficult to achieve proper performance appraisal, and program quantification cannot be calculated simply by the number of lines of code. Therefore, technical managers are required to be able to truly evaluate the complexity and workload of a module. The second is the adjustment of the team collaboration model. Generally speaking, the collaboration of program development is usually divided into groups. The group has the main programmer method and the democratic method. According to the ability level gap between programmers, and according to the project development To meet the needs of the team, choose the appropriate team formation method, and closely combine the responsibilities and the work tasks of the members, so as to maximize the efficiency of the team formation. A person with a high level of coding may not be able to become a qualified project R&D supervisor. The lack of ability in this area is often easily overlooked. 

To sum up, it can be seen that as a person in charge of research and development, a project designer, the qualities and abilities that you need to have are not the ability to write program codes. Of course, under normal circumstances, a programmer can achieve this through continuous summarization and improvement. At the time of this quality, his ability to write code is not simple, but please pay attention to the causal relationship. A high-level project designer is usually a very good code writer, but not a code Very good programmers can be competent for project design work. The problem here is not about IQ and textbooks, but because a programmer does not realize what to think about when he accumulates experience and gradually improves, and he is not conscious. There is no regular document habit and summary habit. If we do not change these, our qualified project designers are still very lacking. 

In addition, in order to prevent boring people from being serious with me, I will add that this article is aimed at software projects and projects that are aimed at commercialization. Those programming experts in scientific research institutions, such as algorithm experts, such as image processing experts, their work is research Projects rather than directly completing commercial software (of course, eventually become commercial products indirectly, such as the research projects being done by Microsoft Research), so the quality they emphasize may be something else. These people (experts) cannot be said to be programmers. Can't be measured by programmer's standards. 

Finally, add something, what is the design process of a software project development? Take the usual standard design approach, for example (though I like rapid prototyping). 

The first step is market research. Technology and market must be combined to reflect maximum value. 

The second step is requirement analysis, which requires three things, user view, data dictionary and user operation manual. The user view is the page style that the software users (including end users and administrative users) can see, which contains many operational processes and conditions. The data dictionary is the stuff that specifies and organizes the logical relationship of the data. After the data dictionary is completed, the design of the database is more than half completed. The User's Manual is a manual that specifies the operation procedure. Please note that the user operation process and user view are determined by requirements, so they should be completed before software design. Completing these provides constraints and guidelines for program development. Unfortunately, too many companies do not do this. Cause and effect are reversed. The sequence is not divided, and the development work and the actual needs often have a gap between them. Demand analysis, in addition to the above work, the author thinks that as a project designer, a complete performance requirements specification for the project should be made, because often the performance requirements can only be understood by people who understand technology, which requires technical experts and demanders (customers or company marketing departments) ) to be able to have genuine communication and understanding. 

The third step is the outline design, which preliminarily divides the functional modules of the system, and gives a reasonable R&D process and resource requirements. As a rapid prototyping method, the coding stage can be entered after the outline design is completed. This method is usually adopted because the R&D tasks involved belong to a new field, and the technical supervisor cannot give a clear detailed design specification, but it does not mean the detailed design. The design specification is not important. In fact, after completing the prototype code, the rapid prototyping method needs to re-design the steps according to the evaluation results and the summary of lessons learned. The fourth step is detailed design, which is an important stage to test the design thinking of technical experts. The detailed design specification should provide the coders with specific modules in the most 'clean' way (black box structure), so as to maximize the overall modularity of the system. ; A good detailed design specification can minimize the complexity of coding. In fact, strictly speaking, the detailed design specification should provide the definition of each parameter of each function in detail, from the requirements analysis. A software project should be said to be half-finished by the time the outline design is completed to the detailed design specification. In other words, a large software system is halfway through without actually starting a line of code work. Those who think that programmers who make software simply understand that they write code are fundamentally wrong. 
publicityThere are many children in China. They are 18, 9 or 21, 2 years old. They have also written a lot of code through self-study. Some of their code is beautifully written, some technical details are quite outstanding, and they are also very inquisitive, but they are being studied by some Wrong understandings and opinions, lack of overall understanding of the system and program, these people, an online friend said it very well, they are actually just some Coding  fans, they are not qualified to be called programmers at all, but according to my opinion I know that the CTOs of many small Internet companies are such coding  fans, with terrifying salaries, doing terrifying projects, and the endings of the projects are usually terrifying. Basic qualities of programmers: qualities 

that should be possessed by a truly qualified programmer, or a programmer who can truly qualify to complete some code work. 

1: It is not unimportant that it is regarded as the basic quality of team spirit and collaboration ability  . On the contrary, this is the most basic and most important foundation for a programmer to have a life. Those who call high-level programmers a lone ranger are raving. The power of any individual is limited. Even a genius like Linus needs to create a miracle by forming a strong team. Those who write cores for linux all over the world It is unimaginable without the spirit of collaboration. Lone Rangers can make a small fortune by making small money-making software, but once they enter the R&D team of some large systems and enter the development tasks of commercialization and productization, those who lack this quality are completely unqualified. 

2: Documentation habit  It is said that high-level programmers who never write documentation must be young children. Good documentation is a very important part of the formal R&D process. As a code programmer, it is normal to write technical documentation 30% of the working time. , and as senior programmers and systems analysts, the proportion is much higher. Without documentation, a software system lacks vitality, and will encounter great troubles in future error checking, upgrades, and module reuse. 

3: Normalized, standardized code writing habits As the rules of some well-known foreign software companies, the naming of variables in the code, the format of comments in the code, and even the length of indentation in nested lines and the number of blank lines between functions are clearly defined. Good writing habits are not only helpful for code improvement Porting and error correction also facilitates collaboration between different technicians. Some coding  fans clamor that the code written by high-level programmers can never be understood by others. This clamor can only prove that they are not worthy of calling themselves programmers at all. Code has good readability, which is the basic quality requirement of programmers. Looking at the entire linux construction, without standardized and standardized code habits, global R&D cooperation is absolutely unimaginable. 4: Requirement understanding ability  Programmers need to understand the requirements of a module. Many children write programs often only focus on one functional requirement. They attribute all performance indicators to hardware, operating system and development environment, while ignoring the performance considerations of their own code. Someone once said that it is easy to write an advertisement exchange program. This kind of person never knows how to achieve the performance index in the case of millions or even tens of millions of visits. For such a programmer, you give him the deep blue system , he also can't make the Taiji chain's ability to visit concurrently. Among the performance requirement indicators, stability, concurrent access support capability and security are very important. As a programmer, you need to evaluate the environment in which the module is operating in the system, the load pressure it will be subjected to, and the potential for various potential dangers and malicious attacks. possibility. At this point, a mature programmer needs at least 2 to 3 years of project development and tracking experience to have experience. 

5: Reusability, modular thinking ability.  You can often hear some programmers have such complaints. After writing programs for a few years, they become skilled workers, and they repeatedly write some codes without any new ideas every day. This is actually China The biggest waste of software talents is that some repetitive work has become the main work of skilled programmers, and these are actually completely avoidable. Reusable design, modular thinking is to ask programmers to think more when completing any functional module or function, not limited to the simple idea of ​​completing the current task, think about whether the module can exist away from this system , whether it can be directly referenced in other systems and application environments by simply modifying the parameters, so that repetitive development work can be greatly avoided, if a software development unit and working group can take into account in each development process With these problems, programmers will not waste too much time in repetitive work, and will have more time and energy to devote to innovative code work. Some good program module codes, even if they were written in the 1970s, can be used as functional modules in some systems. What I see now is that many small companies will easily upgrade or improve their software. All the code is rewritten, and most of the repetitive work is a waste of time and energy. 

6: Testing habits  As for some commercial and regular development, full-time test engineers are indispensable, but it does not mean that with full-time test engineers and programmers, self-testing is not necessary; software development is a project. In other words, a very important feature is that the earlier the problem is discovered, the lower the cost of solving it. The programmer can carefully test each piece of code and each sub-module after completion, so that some potential problems can be discovered and solved as early as possible. solve, so that the efficiency and reliability of the overall system construction have the greatest guarantee. The testing work actually needs to consider two aspects. On the one hand, it is the test of the normal call, that is, to see whether the program can complete the basic functions under the normal call. This is the most basic test responsibility. Unfortunately, in many companies, this has become the only test task. In fact, it is still far from that; the second aspect is the test of abnormal calls, such as the stability test under high pressure load, the test under the potential abnormal input of the user, and the impact of the module in the case of a partial failure of the overall system. Testing, module stability testing when frequent abnormal requests block resources, etc. Of course, it is not necessary for programmers to perform such a complete test on every piece of their code, but programmers must clearly understand the status of their code tasks in the overall project and various performance requirements, and conduct relevant tests in a targeted manner. Identifying and solving problems early, of course, requires the understanding of the needs mentioned above. 

7: Ability to learn and summarize Programmers are a profession in which talents are easily eliminated and outdated, because a technology may only take the lead in three or two years. If programmers want to settle down, they must constantly follow up with new technologies and learn new skills. Being good at learning is a necessary driving force for any career, and for programmers, this requirement is even higher. But learning also needs to find the right goal. Some small coding  fans, they also talk about their learning ability. They have learned asp, php, and jsp. They use this as a capital to show off blindly. chasing some superficial and superficial things and nouns, do not understand communication transmission protocols when working on network programs, and do not understand interrupt vector processing when working on application programs. Such technicians, no matter how many so-called new languages ​​they have mastered, will never have quality improve. Being good at summarizing is also a manifestation of learning ability. Every time you complete a research and development task or a piece of code, you should purposely track the application status of the program and user feedback, summarize at any time, and find your own shortcomings, so as to gradually improve, a Programmers can grow up. A programmer who does not have the growth potential, even if he looks like a master, it is recommended not to use it, because the time when he is outdated will come soon. A person with all the above qualities should be said to be a qualified programmer. Please note that the above qualities are not determined by IQ, nor can they be learned in some university textbooks. Awareness of work is a matter of consciousness. 

Then, as a senior programmer, so that a system analyst, that is, a designer of a program project, in addition to all the above qualities, you also need to have the following qualities: 

First, the ability to analyze requirements is  for programmers , you can complete the qualified code by understanding the requirements, but for the organizations and managers of R&D projects, they not only need to understand the needs of customers, but also need to formulate some requirements by themselves. Why do you say this? Generally speaking, when conducting R&D tasks, it may be the needs of customers, or the needs of marketing and marketing departments. At this time, for the R&D department, what they see is not a complete demand. Generally speaking, the demand is only some functions. The above requirements, or more formally, may obtain a complete user view; but this is not enough, because customers may have more non-technical factors, it may be difficult for them to put forward complete and clear, or professional performance requirements, but for Project organizers and planners must be able to clearly recognize the existence of these requirements and put them forward appropriately when completing the requirements analysis report. At the same time, they must be fully and clearly reflected in the design specification, so that programmers will not lose them when coding. these guidelines. The programmer must correctly understand the environment in which the user's needs are located, and analyze the needs in a targeted manner. For example, if the same software is released through ASP rental and released through a license, the performance requirements may be different. The former emphasizes It is better support ability and stability, while the latter may emphasize the universality under various platforms and the simplicity of installation and use. 

Second, project design methods and process processing capabilities  . Programmers must be able to master no less than two or three project design methods (such as top-down design methods, such as rapid prototyping, etc.), and be able to adapt to project requirements. Matching with resources to select a suitable design method for the overall design of the project. Improper selection of the design method will delay the R&D cycle, waste R&D resources, and even affect the R&D effect. A programmer also needs to devote a lot of effort to the design and processing of flowcharts. He needs to make data flow diagrams to establish a data dictionary; he needs to process logic flow diagrams to form an overall system processing flow. A system with problematic processes will not be a good system, no matter how beautiful the code is and how delicate each module is. Of course, to do a good job in process analysis and choose a good project design method, it is necessary to have sufficient grasp of the requirements analysis ability. 

Third, reuse design and modular decomposition ability  seems to be an old tune. Didn’t the previous basic qualities already explain this problem? As a programmer engaged in module tasks, he needs to consider the reusability of the specific functional modules he faces, while as a system analyst, the problems he has to face are much more complicated, and he needs to analyze the overall system according to a kind of The modular analysis capability is decomposed into many reusable functional modules and functions, and an independent design requirement is formed for each module. For example, it is like car production. At first, each car was installed independently, and each component was tailor-made, but later on, it was different. Machined production began, and a car factory began to produce cars through assembly lines. , Independent components began to have a certain degree of reusability, and later standardization became a major trend. Different models, brands and even different manufacturers of auto parts can also be easily replaced and upgraded. At this time, the efficiency of automobile production is maximized. The same is true for software engineering. In a mature software industry, in some related projects and systems, different components can be replaced at will, such as many desktop software of Microsoft, in many operation modules (such as opening files, saving files, etc. etc.) are the same set of functional modules that are reused, and these interfaces are provided to desktop application developers for easy hooking through some class libraries, which is an obvious proof of the reused module design. Decomposing a large, intricate application system into some relatively independent, highly reusable modules that can complete data connection only by relying on a few parameters is the most important thing for senior programmers and system analysts. Good work, a suitable project design method, and a clear flow chart are important guarantees to achieve this goal. 

Fourth, the overall project evaluation ability As a system designer, you must be able to start from the overall situation and have a clear understanding of the project as a whole, such as whether the company's resource allocation is reasonable and in place, such as whether the project schedule can maximize efficiency without failing to complete it on time. Evaluating the workload of the whole project and each module, evaluating the resources required by the project, and evaluating the difficulties that the project may encounter requires a lot of experience accumulation. Some of the leaders of software system design in the West are very old, such as 4, 50 years old, or even older. They are far less active in coding than young people, but in terms of project evaluation, they are decades old. The accumulation of experience is the most important and valuable wealth. The lack of such a generation of programmers in China is mainly not the lack of programmers of that age, but the programmers of that age are basically made by research institutes, not from the research and development of professional productized software. There is no way to accumulate that kind of experience in product R&D. Fifth, the ability of team organization and management to  complete a project requires the concerted efforts of the team. As a project designer or R&D supervisor, you should be able to maximize the overall strength of the team. Due to its professional nature, technical management is not different from General personnel management, because some technical indicators and factors are designed here. The first is the quantification of work. Without quantification, it is difficult to achieve proper performance appraisal, and program quantification cannot be calculated simply by the number of lines of code. Therefore, technical managers are required to be able to truly evaluate the complexity and workload of a module. The second is the adjustment of the team collaboration model. Generally speaking, the collaboration of program development is usually divided into groups. The group has the main programmer method and the democratic method. According to the ability level gap between programmers, and according to the project development To meet the needs of the team, choose the appropriate team formation method, and closely combine the responsibilities and the work tasks of the members, so as to maximize the efficiency of the team formation. A person with a high level of coding may not be able to become a qualified project R&D supervisor. The lack of ability in this area is often easily overlooked. 

To sum up, it can be seen that as a person in charge of research and development, a project designer, the qualities and abilities that you need to have are not the ability to write program codes. Of course, under normal circumstances, a programmer can achieve this through continuous summarization and improvement. At the time of this quality, his ability to write code is not simple, but please pay attention to the causal relationship. A high-level project designer is usually a very good code writer, but not a code Very good programmers can be competent for project design work. The problem here is not about IQ and textbooks, but because a programmer does not realize what to think about when he accumulates experience and gradually improves, and he is not conscious. There is no regular document habit and summary habit. If we do not change these, our qualified project designers are still very lacking. 

In addition, in order to prevent boring people from being serious with me, I will add that this article is aimed at software projects and projects that are aimed at commercialization. Those programming experts in scientific research institutions, such as algorithm experts, such as image processing experts, their work is research Projects rather than directly completing commercial software (of course, eventually become commercial products indirectly, such as the research projects being done by Microsoft Research), so the quality they emphasize may be something else. These people (experts) cannot be said to be programmers. Can't be measured by programmer's standards. 

Finally, add something, what is the design process of a software project development? Take the usual standard design approach, for example (though I like rapid prototyping). 

The first step is market research. Technology and market must be combined to reflect maximum value. 

The second step is requirement analysis, which requires three things, user view, data dictionary and user operation manual. The user view is the page style that the software users (including end users and administrative users) can see, which contains many operational processes and conditions. The data dictionary is the stuff that specifies and organizes the logical relationship of the data. After the data dictionary is completed, the design of the database is more than half completed. The User's Manual is a manual that specifies the operation procedure. Please note that the user operation process and user view are determined by requirements, so they should be completed before software design. Completing these provides constraints and guidelines for program development. Unfortunately, too many companies do not do this. Cause and effect are reversed. The sequence is not divided, and the development work and the actual needs often have a gap between them. Demand analysis, in addition to the above work, the author thinks that as a project designer, a complete performance requirements specification for the project should be made, because often the performance requirements can only be understood by people who understand technology, which requires technical experts and demanders (customers or company marketing departments) ) to be able to have genuine communication and understanding. 

The third step is the outline design, which preliminarily divides the functional modules of the system, and gives a reasonable R&D process and resource requirements. As a rapid prototyping method, the coding stage can be entered after the outline design is completed. This method is usually adopted because the R&D tasks involved belong to a new field, and the technical supervisor cannot give a clear detailed design specification, but it does not mean the detailed design. The design specification is not important. In fact, after completing the prototype code, the rapid prototyping method needs to re-design the steps according to the evaluation results and the summary of lessons learned. The fourth step is detailed design, which is an important stage to test the design thinking of technical experts. The detailed design specification should provide the coders with specific modules in the most 'clean' way (black box structure), so as to maximize the overall modularity of the system. ; A good detailed design specification can minimize the complexity of coding. In fact, strictly speaking, the detailed design specification should provide the definition of each parameter of each function in detail, from the requirements analysis. A software project should be said to be half-finished by the time the outline design is completed to the detailed design specification. In other words, a large software system is halfway through without actually starting a line of code work. Those who think that programmers who make software simply understand that they write code are fundamentally wrong. 

The fifth step is coding. In the standardized R&D process, the coding work will not exceed 1/2 of the entire project process at most, usually in 1/3 of the time. Well, the coding efficiency will be greatly improved. The coordination and cooperation of the progress between different modules during coding is the most important thing. Maybe a small module problem may affect the overall progress, so many programmers are forced to stop working. Wait, this kind of problem has appeared in many R&D processes. Mutual communication during coding and emergency solutions are very important. For programmers, bugs will always exist, and you must always face this problem. The famous Microsoft has not issued patches for three consecutive months. ? there has never been! 

The sixth step is that  there are many kinds of test tests: according to the test executor, it can be divided into internal test and external test; according to the test scope, it can be divided into module test and overall joint debugging; according to test conditions, it can be divided into normal operation test and abnormal test; according to the input range of the test, it can be divided into full coverage test and sampling test. The above is well understood and will not be explained again. In short, testing is also a very important step in project development. For a large-scale software, external testing of 3 months to 1 year is normal, because there will always be unforeseen problems. After completing the test, completing the acceptance and completing the final help documents, the overall project will come to an end. Of course, upgrades, repairs, etc. will be indispensable in the future. As long as you don’t want to cheat money through one-shot trading, you must keep tracking the operation of the software. status and continue to patch and upgrade until the software is completely phased out.
The fifth step is coding. In the standardized R&D process, the coding work will not exceed 1/2 of the entire project process at most, usually in 1/3 of the time. Well, the coding efficiency will be greatly improved. The coordination and cooperation of the progress between different modules during coding is the most important thing. Maybe a small module problem may affect the overall progress, so many programmers are forced to stop working. Wait, this kind of problem has appeared in many R&D processes. Mutual communication during coding and emergency solutions are very important. For programmers, bugs will always exist, and you must always face this problem. The famous Microsoft has not issued patches for three consecutive months. ? there has never been! 

The sixth step is that  there are many kinds of test tests: according to the test executor, it can be divided into internal test and external test; according to the test scope, it can be divided into module test and overall joint debugging; according to test conditions, it can be divided into normal operation test and abnormal test; according to the input range of the test, it can be divided into full coverage test and sampling test. The above is well understood and will not be explained again. In short, testing is also a very important step in project development. For a large-scale software, external testing for 3 months to 1 year is normal, because there will always be unforeseen problems. After completing the test, completing the acceptance and completing the final help documents, the overall project will come to an end. Of course, upgrades, repairs, etc. will be indispensable in the future. As long as you don’t want to cheat money through one-shot trading, you must keep tracking the operation of the software. status and continue to patch and upgrade until the software is completely phased out.

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=327101105&siteId=291194637
Recommended