Transferred from the CJSDN a post worth thinking.
There are many children in China, they are 18, 9 years old or 21, 2 years old, have written a lot of code through self-study, and their code is very beautiful. Some technical details are quite outstanding, and they are also very drilled, but they are some The wrong understanding and opinion, lack of system, the overall understanding of the program, these people, a friend on an online friend is very good, they are actually only some Coding Fans, the turbine is not qualified to be a programmer, but according to my Knowing that many small networks' CTO is such a Coding Fans, holding a scary wage, making a scary project, and the project's ending is usually very scary.
Programmer's basic quality:
As a truly qualified programmer, or you should have a programs that can really complete some code work.
1: Team spirit and collaborative ability use it as basic quality, it is not important. It is the opposite, which is the most basic and most important thing to make the programmer. The high-level programmers said that they are all in the words. Any individual's power is limited, even if the genius like Linus, it also needs to create a miracle through the composition of the powerful team, and those who write core around the world. Masters, there is no collaborative spirit is unimaginable. Salers can make some small software to make money, but once entering some large-scale R & D teams, entering commercial and product development tasks, people who lack this quality are completely unqualified.
2: Document habits say that the high-level programmer has never written the document is definitely a bad child. Good document is a very important part of the formal R & D process. As a code programmer, 30% of working hours write technical documentation is normal. And as senior programmers and system analysts, this ratio is much higher. Lack of documentation, a software system lacks vitality, in the future, the upgrade, upgrade, and multiplexing of the module will encounter great trouble.
3: Standardized, standardized code preparation habits As some foreign famous software companies, the code variable name, code within the code, and even the length of the nesting in the nesting, the number of spaces between the function and the function between the function is clearly defined, good Writing habits, not only helps the transplantation and error correction, but also helps cooperation between different technicians.
Some coding fans screamed high-level programmers wrote that people never understand, this clam can only prove that they do not match the programmer. The code has good readability and is the basic quality needs of the programmer.
Look at the entire Linux construction, there is no normalized and standardized code habit, and global research and development collaboration is absolutely unimaginable.
4: Demand understanding
The programmer needs to understand the needs of a module. Many children write programs often only pay attention to a functional demand. They all overcome the performance indicators in the hardware, operating system, and development environment, and ignore the performance consideration of their own code. Some people have said to write An advertising exchange program is very simple. This person never know how performance indicators in millions or even ten levels are implemented. For such programmers, you give him a deep blue system, he does not do Out of the Taiji chain and visits. In the performance demand indicators, stability, and access to support capabilities, and security are important. As a programmer needs to assess the environment in which the module is in system operation, the load pressure and various potential dangers and malicious attacks. possibility. At this point, a mature programmer requires at least 2 to 3 years of project research and tracking experience, it may have experience.
5: Retrieval, modular thinking ability can often hear some programmers have such complaints, wrote a few years, become a skilled worker, and repeat some new code, this is China Software talents are most wasteful, some repetitive work has become the main work of skilled programmers, and these are actually avoidable. Multiplexing design, modular thinking is to do more about any functional module or function, do not limit whether the module can be separated from this system without limitation. Can you directly reference it in other systems and applications by simple modification parameters, so you can greatly avoid the development of repetitiveness. If a software R & D unit and the working group can take into account every development process. These problems, then programmers will not delay too much time in repetitive work, there will be more time and effort to put into innovative code work.
Some good program module code, even if it is written in the 70s, get it in some system as a function module, and now I see, many small company software is upgraded or improved. All code rewrites, most repetitive work is unfortunately waste time and energy.
6: Test habits As some commercial formalization development, the full-time test engineer is indispensable, but it is not to say that there is a full-time test engineer programmer can not self-test; software research and development as a project Words, a very important feature is the earlier the problem, the lower the cost of solving, the programmer is in each code, and each sub-module is completed, you can try to make some potential problems earlier and Solve, this is the greatest guarantee for the efficiency and reliability of the overall system construction.
The test work actually needs to consider both aspects. On the one hand, it is the test of normal calls, which means to complete basic functions in normal calls, which is the most basic test responsibility, but unfortunately, in many companies, this has become the only test task. It is actually far behind; the second aspect is the test of abnormal calls, such as stability testing under high pressure load, the test in the case of user potential anomaly input, the overall system is subject to affected situation Test, frequent unusual abnormal requests to block the module stabilization test, etc. Of course, it is not a programmer to make this complete test on each code of your own, but the programmer must clearly know his code task in the overall project and various performance requirements, targetedly related tests. As soon as possible, I found and solve the problem, of course, this requires the needs of the needs mentioned above.
7: The ability to learn and summarize the programmer is very easy to be eliminated, and it is easy to lose, because a technology may only have leader in three or two years, and the programmer must constantly follow up new technology. Learn new skills.
Good at learning, for any career, is the driving force necessary for advancement, for programmers, this requirement is higher. But learning is also looking for a target, some small Coding fans, they also listen to their learning ability, I will learn ASP, I will learn PHP for a while, and I will learn JSP for a while, they will show this capital, blindly Chasing some superficial, surface things and nouns, doing network programs, do not understand communication transfer agreements, doing applications do not understand interrupt vector processing, such technicians, no matter how many so-called new languages have been mastered, never have quality improve.
Good at summary, it is also an embodiment of learning ability. Each time a R & D task is completed, complete a code, it should be purposeful to track the application status and user feedback, always summarize, find your own shortcomings, this is gradually improved, one Programmers can grow up. A programmer who does not have growth, even if it looks at it, it is recommended to use it, because he is still arrived.
People with all the top quality should be said to be enough programmers. Please note that the above qualities are not determined by IQ, nor is it possible to learn from some of the university. It is only a programmer to himself. The understanding of work is a matter of consciousness.
Then
Advanced programmers, so that the system analyst, that is, for the designer of a program project, in addition to the above full qualities, the following quality is required:
First, demand analysis capabilities, for programmers, understand demand, can complete qualified code, but for the organization and managers of R & D projects, they must not only understand customer needs, but also have some need to make some needs, why so Saying?
In general, the R & D task is performed, perhaps the customer's demand, perhaps the demand proposed by the market and marketing department, this time for the R & D department, they are not a complete demand, usually, this demand is only some of the functions The requirements, or more or more, it is possible to get a complete user view; but this is not enough, because the customer may make it difficult to make complete and clear, or professional performance requirements due to non-technical factors, but Project organizers and planners, he must be able to recognize the existence of these needs and appropriate proposals when completing the needs analysis report, while the complete and clear reflection is in the design manual, so that the programmer is not lost when the programmer encodes These guidelines.
The program designer must correctly understand the environment in which the user needs, and the analysis of demand, for example, the same software issued and released through the ASP lease, and the performance requirements may be different, the former emphasizes It is better support capabilities and stability, and the latter may emphasize the universal and installation use of universality and installation in a variety of platforms.
Second, project design methods and process processing capability programming must be able to master a project design method of not less than two to three (such as design methods, such as rapid prototyping, etc.), and can be based on project requirements And resource matching to select a suitable design method for overall design. Improper design methods will delay the R & D cycle, waste R & D resources, and even affect the research and development effect.
A program designer also needs to use a lot of effort to use the flowchart design and processing, and he needs to do data flow diagrams to establish a data dictionary; he needs processing logic flow diagrams to form an overall system processing process. A system with a problem with a problem, even if the code is more beautiful, each module is exquisite, and it will not become a good system. Of course, do process analysis and choose a good project design method, you need to have sufficient grasp on demand analysis capabilities.
Third, reuse design and modular decomposition capabilities seem to be old-tonghua, do you have explained this problem in front of the basic quality?
As a programmer engaged in module tasks, he needs to consider the reuse of the specific function module he faced, and as a system analyst, he has to face more complicated, need to follow the whole system according to one Modular analysis capability is broken down into many reused functional modules and functions and forms an independent design requirement for each module. For example, it is like automobile production. The earliest installation is installed independently, and each component is tailored, but it will not be the same, the machine is produced, and a bus factory begins to produce a car. The independent component begins with certain reuse. In the later standardization, the automotive parts of different models, brands, and even different manufacturers can also perform convenient dressing and upgrading, this time, the efficiency of automotive production maximizes. Software engineering is also the same, a mature software industry, in some related projects and systems, different components can be discouraged, such as Many desktop software of Microsoft, in many operating modules (such as opening files, saving files, etc. Wait, it is a multiplexed function module, and these interfaces are provided to desktop application developers convenient to hook through some class libraries, which is a significant agreement for multiplexing module design. Decompose a large, intricate application system into some relatively independent, highly reused, and can only rely on several parameters to complete the data connection module combination, is the most important as senior programmer and system analyst Work, suitable project design methods, clear flow charts, is an important guarantee for achieving this goal.
Fourth, the overall project assessment capability is a system designer, must be able to start from the whole, clear understanding of the project, such as whether the company's resource allocation is reasonable and in place, such as whether the project schedule can maximize the efficiency and not Complete on schedule. Evaluate the overall workload of the project and various modules, assess the resources required for the project, and the difficulties may encounter in the assessment project, it requires a lot of experience accumulation, in other words, this is a realm of continuous summing. The leaders in the Western software system design are very old, such as 4, 50 years old, even older, they are far less than the young people in the coding, but for the project assessment, they decades The experience accumulation is the most important and valuable wealth. China lacks such a series of programmers, mainly not lacking the programmer, but that aged programmer is basically the research unit, it is not from professional product software research and development, they There is no experience that can accumulate the product development, this is also something that there is no way.
Fifth, the team organizes management capabilities to complete a project project, need to work together, as a leader of the project designer or R & D, should have the ability to maximize the overall strength of the team, technical management due to its professional nature, not big General personnel management, because this is designed to design some technical indicators and factors.
The first is the quantization of work, it is difficult to do a suitable performance appraisal without quantifying, and the program quantization is not a simple code line number, so technical managers need to truly assess the complexity and workload of a module.
Secondly, the adjustment of teamwork, generally, the cooperation of procedural development is usually divided into a group, and the team has the main program, and there is a democratic approach. According to the ability to level between programmers, and according to project development Demand, choose the right team method, and can closely combine the job task of the responsibility and members, so that you can maximize the efficiency of the team.
A person with high code level, may not be a qualified project research and development supervisor, which is often easily ignored by the ability. In summary, as a person in charge of a competent research and development, a project designer, the quality and ability need to have the ability to prepare the program code, of course, a programmer has improved this through a constant summary When the quality, the ability of his code has also been quite uncommon, but please pay attention to the causal relationship in this, a high-level project designer is usually the code to write a prestigious person, but is not a code. Pretty excellent programmers can be competent for project design, and there is no IQ and textbook, or it is that a programmer has accumulated experience and gradually improved, there is no consciousness. The organization and multiplexing design of the project is triggered, and there is no regular documentation and summary habits. Do not change these, our qualified project designers are still very lacking.
In addition, in order to prevent boring people from being true, supplementary, this paper is a commercial software project and project, and those scientific research masters, such as algorithms, such as image processing masters, their work is research Questions instead of direct completion of commercial software (of course, the final indirectly became commercial products, such as the research topics in Microsoft Research Institute), so they emphasize the quality may be another thing, these people (experts), do not say to be programmers, You cannot use the programmer's standard to measure.
Finally, what is the design process developed by a software project? Take the usual standard design method as an example, but the author likes a rapid prototype method).
The first step is that market research, technology and market are combined to reflect the biggest value.
The second step is a demand analysis, which requires three things, user views, data dictionary and user operating manuals. The user view is the page style that the software user (including end users and managing users), which contains many operations and conditions. Data dictionary is a stupid data logic relationship and organized in Dongdong, completed data dictionary, and the database is designed to complete more than half. User Operation Manual is a manual indicating the operational process. Note that user operation procedures and user views are determined by demand, so they should be completed before software design, completing this, providing constraints and gauges for program research and development, regretting too many companies do not do this, because they faded, The order is not divided, and development work and actual needs are often generated in the phenomenon of separation.
Demand analysis, in addition to the above work, the author thinks the project designer should complete the performance requirements instructions for the project, because often performance needs can only understand the technology, this requires technical experts and demanders (customers or corporate market departments) ) It can have real communication and understanding.
The third step is an overview to initiate the system function module, and give a reasonable R & D process and resource requirements. As a rapid prototype design method, you can enter the coding phase, usually use this method because the R & D task involved is in the new field, and the technical executives cannot give a clear detailed design manual, but not to say detailed. The design manual is not important. In fact, after the final prototype method is completed by the prototype code, according to the evaluation results and lessons, it is necessary to re-detail the steps.
The fourth step is a detailed design. This is an important level of test technology expert design thinking. The detailed design manual should provide the specific module to the codec in the most 'clean' method (black box structure), so that the overall modularity of the system reaches the maximum A good detailed design manual, which can reduce the complexity of the encoding to the lowest, in fact, strictly speaking detailed design instructions should provide refinement of each parameter of each function fine, from demand analysis To the summary design to complete the detailed design manual, a software project should say halfway. In other words, a large software system has not started a line of code. Those who make the programmer are simply understood as writing code, and it has been mistaken from the root. The fifth step is to encode. In the standardized R & D process, the coding work will not exceed 1/2 in the entire project process, usually in 1/3 of time, the so-called grinding knife is not mishering, the design process is completed. Ok, the encoding efficiency will greatly improve, the progress coordination and collaboration between different modules when encoding is the most careful, maybe a small module may affect the overall progress, so that many programmers are forced to stop work. Waiting, this problem has appeared in many research and development. Mutual communication and emergency resolution when encoding is quite important. For programmers, Bug always exists, you must face this problem forever, the big name is Ding Microsoft, it has been doing patch for three consecutive months. ? there has never been!
The sixth step is to test
There are many types of test: according to the test executor, it can be divided into internal testing and external testing; according to the test range, it can be divided into module testing and overall coordination; according to test conditions, it can be divided into normal operating conditions test and abnormal conditions; The input range of the test can be divided into full coverage testing and sampling test. All above understand, no longer explained.
In summary, testing is also a considerable step in project development, for a large software, external tests for 3 months to 1 year are normal, because they will never be expected.
After completing the test, complete the acceptance and complete some of the final help documents, the overall project will only pay a paragraph, of course, there is still less upgrade, repair, etc. Work, as long as you don't want to buy and sell money through a hammer, you must keep track of the software. The status and continuous repair upgrade, knowing this software is completely eliminated.
Write these steps, nothing, because of the truth, I am a "software engineering" in my hand, this is a compute course in the University, but I know that many programmers seem to be just passionate about "30 days proficiency" VC ", they have some guerrillas like me, there is no formal studying this major, and some have long, I have given these truly useful things and give teachers after making credits.
Online is now very impetuous, some Coding fans are mood, confused, actually real technical experts rarely send posts online, such as the author, do not know the sky, it is really a master, but nothing It is used to this kind of technology, misunderstanding of programmers, I have to come forward, do it anygately, I hope that Coding fans who still add some wrong people can think about it, go forward, after all, those smart The mind is still far from playing value.