The qualities that a programmer should have--a piece of chaos

Source: Internet
Author: User
Tags continue manual documentation functions require requires resource linux
Programmer | Quality programmer is a kind of technical work, in the development of it has a very important position, from the foundation of the Hardware communication protocol, to the data transmission layer processing, to the construction of the operating system, to the database platform construction, all the way to the application layer of various data marketing platform to build, The programmer plays an important role in it and makes a great contribution to the development of it enterprise.

China has a lot of people who are good at coding, but the Chinese software industry, especially the development of network applications is very large, it is difficult to form a scale of software development power and product capabilities, not only than the United States far from the gap, compared with India is quite inferior. These problems are not the IQ of Chinese programmers and work hard, nor is the state and private investment in the development of the degree, but to a large extent, some of the technology, the development of the program, the project design aspects of the misunderstanding, these misunderstandings, leading to the software industry's lack of product capacity, The lack of large-scale and large-scale reuse system research and development capabilities, can be said that the change of understanding misunderstanding, is to solve the software industry small workshop model and individual hero model of the limitations of the important work.

There are many children in China, they are 18, 9 years old or 21, 2 years old, through Self-Study also wrote a lot of code, they have some code to write very beautiful, some technical details quite outstanding, also very delve into the spirit, but they are some wrong understanding and opinion, lack of the system, the overall understanding of the program, these people, An online friend is very good, they are actually just some codingfans, not at all qualified as a programmer, but as far as I know, many Small network company CTO is such a codingfans, with scary wages, doing scary projects, the outcome of the project is usually very scary.
Basic quality of programmers:

To be a truly qualified programmer, or can be truly qualified to complete some code work programmer, should have the quality.

1: Team spirit and cooperation ability
As the basic quality, it is not unimportant, on the contrary, this is the most basic programmer should have, but also the most important to settle in this. The high-level programmer as a lone Ranger is in the raving, any individual power is limited, even if such as Linus Genius, but also through the formation of a strong team to create miracles, those around the world for Linux to write the core of the Masters, no collaboration is inconceivable. The Lone Ranger can make some small money to make a small fortune, but once into some large system of research and development team, into the commercialization and production of development tasks, the lack of this quality of people are completely unqualified.

2: Document Habits
That high level programmers never write documents is certainly a kid, good documentation is a very important part of the formal development process, as a code programmer, 30% of the working time to write technical documents is very normal, and as senior programmers and system analysts, this proportion is much higher. Lack of documentation, a software system is a lack of vitality, in the future of error, upgrades and the reuse of modules will encounter great trouble.

3: Standardized, standardized code-writing habits
As a foreign well-known software company's rules, the code variable naming, code annotation format, or even the length of the nested line indentation and the number of empty lines between functions are clearly defined, good writing habits, not only to facilitate the code transplant and error correction, but also to facilitate the collaboration between different technical personnel.
Some Codingfans clamoring for code written by high level programmers who have never been able to understand such a clamor can only prove that they do not deserve to claim to be programmers at all. The code has the good readability, is the programmer basic quality demand.
Then look at the entire Linux build, there is no standardized and standardized code habits, global research and development collaboration is absolutely unimaginable.
4: The need to understand the ability
Programmers need to understand the needs of a module, many children write programs are often focused only on a functional requirements, they are all the performance indicators to the hardware, operating system and development environment, while ignoring the performance of their own code considerations, someone once said to write an ad exchange program is very simple, This kind of people never know how to achieve the performance metrics in millions or even millions of orders of magnitude, for such a programmer, you give him the system of deep blue, he can not do the Tai Chi chain and interview ability. Performance requirements indicators, stability, and the ability to visit support and security are important, as programmers need to assess the module in the system operation of the environment, will be subjected to load pressure and a variety of potential risk and malicious attack possibilities. At this point, a mature programmer will need at least 2-3 years of project development and tracking experience to be able to have a lesson.

5: reusability, modular thinking ability
You can often hear some programmers have such complaints, wrote a few years of procedures, become skilled workers, every day is repeated to write some no new code, which is actually the biggest waste of Chinese software talent, some repetitive work into a skilled programmer's main work, and these, in fact, can be completely avoided.
Reuse design, modular thinking is to the programmer in the completion of any function modules or functions, to think more, do not confine yourself to the simple idea of completing the current task, and consider whether the module can be detached from the system and whether it can be referenced directly in other systems and applications by simply modifying the parameters. This can greatly avoid repetitive development work, if a software research and development Unit and a workgroup are able to take these issues into account in every development process, programmers will not spend too much time on repetitive work, and will have more time and energy to work on innovative code.
Some good program module code, even if it is written in the 70 's, get now put into some systems as a function module can be suitable for the good, and now I see that many small companies to upgrade or improve the software is often all code rewrite, most of the repetitive work wasted time and energy.

6: Test habits
As a commercial formalization of development, the full-time test engineer is indispensable, but it does not mean that there is a full-time test engineer programmer can not be self-test; Software development as a project, a very important feature is that the sooner the problem is discovered, the lower the cost of the solution, the programmer in each piece of code, After the completion of each sub-module for serious testing, you can try to put some potential problems as early as possible to find and solve, so the overall system construction efficiency and reliability has the greatest guarantee.
The test work actually needs to be considered in two ways, on the one hand is the normal call test, that is, see if the program can be under normal call to complete the basic functions, this is the most basic test responsibility, unfortunately in many companies this has become the only test task, in fact, far from that; the second aspect is the test of abnormal invocation, For example, under the high pressure load stability test, the user potential abnormal input condition test, the whole system partial fault condition This module affected condition test, the frequency sends the unusual request to block the resource the module stability test and so on. Of course, it is not necessary for programmers to have this complete test for each piece of code, but the programmer must be aware of the status of their own code tasks in the overall project and various performance requirements, targeted testing and early detection and resolution of the problem, of course, this requires the above mentioned needs to understand the ability.

7: Ability to learn and summarize
Programmers are easy to get out of the job, it is easy to fall behind the occupation, because a technology may only in three or two years of leading, if the programmer want to settle down, they must continue to follow the new technology, learning new skills.
Good at learning, for any profession, is necessary to advance the driving force, for programmers, this request is even higher. But learning to find the target, some small codingfans, they also relish their ability to learn, one will learn the ASP, and then learn the PHP, and then learn the JSP, they take this as a show of capital, blindly chasing some superficial, superficial things and nouns, Do not understand the network Program Communication Transmission protocol, do not understand the application of interrupt vector processing, such technicians, no matter how much the so-called new language, will never improve quality.
Good at summarizing, is also a manifestation of learning ability, each completed a research and development task, complete a piece of code, should have the purpose of tracking the application of the program and user feedback, at any time to sum up, to find their own shortcomings, so gradually improve, a programmer may grow up.
A programmer does not have the growth, even if the immediate look is a master, the proposal also don't choose, because he is behind the time is coming.
With all of the above quality of people, should be said to be qualified programmers, please note that the above various qualities are not determined by IQ, nor is it possible to learn some textbooks in universities, the need is only the programmer's understanding of their work, is a matter of consciousness.

So as a senior programmer, so that the system analyst, that is, for a program project designers, in addition to the above all the quality, but also need to have the following qualities:

First, the demand analysis ability
For programmers, understanding the requirements can complete qualified code, but for the organization and management of research and development projects, they should not only understand the needs of customers, more often have to make their own needs, why do you say so?
In general, research and development tasks, perhaps the customer demand, it may be the demands of the marketing and marketing departments that, at this point, are not a complete requirement for the research and development department, which is typically simply a functional requirement or, more formally, a full user view; but that's not enough. Because customers may have difficulty in presenting completeness and clarity, or professional performance requirements, because of more than technical factors, but for the project organizers and planners, he must be able to be aware of the existence of these requirements and be appropriately presented when the requirements analysis report is completed. At the same time to be complete and clear in the design manual, so that the programmer code will not lose these guidelines.
The programmer must correctly understand the user needs of the environment, and to make the needs of analysis, for example, the same software through ASP leasing way to publish and through the license way of publishing, performance requirements may be different, the former emphasis is better support capacity and stability, The latter may emphasize the universality of the various platforms and the simplicity of installation and use.

Second, the project design method and process processing capacity
Programmers must be able to master not less than two to three kinds of project design methods (such as Top-down design methods, such as the rapid prototyping method, etc.), and can be based on the project needs and resource collocation to choose the appropriate design methods for the overall design of the project. Improper design methods, will delay the research and development cycle, waste research and development resources, and even affect the results of research and development.
A program designer also needs to put a lot of effort into the design and processing of flowcharts, and he needs to do a data flow diagram to establish the dictionary; he needs to process the logic stream graph to form the whole system process. A system with problems in the process, even if the code is beautiful, each module more exquisite, will not become a good system. Of course, to do the process analysis and choose a good project design method, need to be in demand analysis ability to have enough grasp.

Third, reuse design and modular decomposition capability
This seems to be the same old song again, the basic quality of the front is not already explained this problem?
As a programmer engaged in modular tasks, he needs to consider the reusability of the specific functional modules he faces, and as a system analyst, he faces a much more complex problem that needs to be decomposed into a number of reusable functional modules and functions for the overall system in accordance with a modular analysis capability, and for each module to form an independent design requirements. For example, it's like car production, the earliest cars are individually installed, each part is tailor-made, but then different, machine production, a car factory began to produce cars through the assembly line, independent parts began to have a certain degree of reuse, in the later standardization became a major trend, different models, Brands and even different manufacturers of car parts can be easily installed and upgraded, this time, the efficiency of automotive production to maximize. Software engineering is also the same truth, a mature industry, in some related projects and systems, different parts can be arbitrarily installed, such as Microsoft's many desktop software, in many operating modules (such as open files, save files, etc.) are reused the same set of functional modules, These interfaces are provided by some class libraries to the desktop application developers to facilitate the hook, which is the reusable modular design of a clear evidence.
A large, intricate application system is decomposed into relatively independent, a highly reusable modular combination that relies on just a few parameters to complete data connections is the most important work for senior programmers and system analysts, the right project design approach, and a clear flowchart, which is an important guarantee for achieving this goal.

The overall project evaluation capacity
As a system design personnel, must be able to start from the overall situation, the whole of the project's sober understanding, such as the company's resource allocation is reasonable and in place, such as whether the project schedule can maximize the efficiency and not can not be completed on schedule. Evaluating the workload of the project as a whole and each module, assessing the resources required for the project, and assessing the potential difficulties of the project require a great deal of experience accumulation, in other words, a cumulative sum that is constantly being summed up. In the West some software system design leaders are very old, such as 4, 50 years old, and even older, they are far less than the young people in coding, but in terms of project evaluation, their decades of experience accumulation is the most important and valuable wealth. China lacks such a generation of programmers, mainly not the age of the programmer, but the age of the programmers are basically the research units, are not from the professional product development of the software, they do not have the experience to accumulate that product development, this is no way to do things.
Team organization and management ability
To complete a project project, need teamwork, as a project designer or director of research and Development, should have the ability to maximize the overall strength of the team, technical management due to its professional nature, not in common with the general personnel management, because it has designed some technical indicators and factors.
The first is the quantification of the work, it is difficult to achieve appropriate performance evaluation without quantification, and the program quantification is not a simple line of code can be calculated, so require technical managers to be able to truly assess the complexity of a module and workload.
The second is the adjustment of Team collaboration mode, generally speaking, the collaboration of program development is usually divided into groups, the group has the main programmer way, also has the democratic way, according to the ability level disparity between the programmer, and according to the project research and development demand, chooses the suitable team way, and can combine the responsibility power and the member's work task tightly, In order to maximize the efficiency of the team.
A person with high code level may not be able to become a qualified project development supervisor, and the lack of capacity in this area is often easily overlooked.

As you can see, as a director of research and Development, a project Designer, the required quality and ability is not the ability to write code, of course, in general, a programmer through continuous summing up to achieve this quality, he has the ability to write code has been quite not easy, But notice the causal relationship here, a High level Project Designer is usually a pretty good person for coding, but not a very good programmer can do the job of project design, which is not the problem of IQ and textbook, or whether a programmer is accumulating experience, Progressive Ascension is not aware of what should be considered, not consciously on the project's organization and reuse design, no regular document habits and summary habits, do not change these, our qualified project designers are very deficient.

In addition, in order to prevent the boring people and I seriously, to add, this article aims to be a commercial software project and engineering, those scientific research institutions, such as the master of programming, such as image processing experts, their work is to research topics rather than directly complete commercial software (of course, eventually indirectly become commercial products, For example, the research project of Microsoft Studies), so their emphasis on the quality may be something else, these people (experts), and can not be said to be programmers, can not be measured by the programmer's standards.

Finally, what is the design process for a software project development? Take the usual standard design method for example (but I like the quick prototyping method).

The first step is market research, technology and market to combine to reflect the greatest value.

The second step is requirements analysis, which requires three things, user views, data dictionaries, and user action manuals. The user view is the page style that the software user (including end user and administrative user) can see, which contains many operational processes and conditions. Data dictionary is to specify the logical relationship of data and to organize the Dongdong, completed the data dictionary, database design is completed more than half. User Operation manual is a specification indicating the operation process. Note that user action processes and user views are determined by requirements, therefore, it should be completed before the software design, complete these, for the program research and development to provide the constraints and criteria, it is regrettable that too many companies do not do, causal reversal, the order is not divided, the development of work and the actual demand often resulting in a gap between the phenomenon.
Requirements analysis, in addition to the above work, I think as a project designer should complete the performance requirements of the project specification, because often performance requirements only people who understand the technology can understand, this requires technical experts and demand side (customer or company marketing department) can have real communication and understanding.

The third step is the outline design, the primary division of the system function module, and give a reasonable development process and resource requirements. As a rapid prototyping design method, the completion of the outline design can be entered into the coding phase, usually because the research and development tasks involved in the new area, the technical executives can not give a clear detailed design instructions, but not that the detailed design instructions are not important, in fact, the rapid prototyping method after the completion of the prototype code, Based on the results of the evaluation and lessons learned summary, but also to the detailed design steps.
The fourth step is detailed design, this is the test technical expert design thought important level, detailed design instructions should be specific modules in the most ' clean ' way (black box structure) to the encoder, so that the overall system to achieve maximum modular; a good detailed design manual, can reduce the complexity of coding to the minimum, in fact , strict detailed design instructions should be each function of the definition of each parameter is fine and thin to provide, from the requirements analysis to the outline design to complete the detailed design instructions, a software project should say half completed. In other words, when a large software system is halfway through, it doesn't actually start a line of code work. Those who make the software as a simple understanding of the programmer to write code, from the root of the mistakes made.


The fifth step is coding, in the standardized research and development process, coding work in the entire project flow of up to no more than 1/2, usually in 1/3 of the time, the so-called grinding work, the design process is completed, coding efficiency will be greatly improved, coding the progress between the different modules coordination and collaboration is the most need to be careful, Perhaps a problem with a small module may have affected the overall progress, so many programmers are forced to stop and wait, a problem that has been seen in many research and development processes. Coding when the mutual communication and emergency solutions are very important, for programmers, Bugs will always exist, you must always face this problem, the famous Microsoft, ever have three consecutive months without a patch? Never did!

The sixth step is to test
There are many kinds of tests: according to the test execution, can be divided into internal and external testing, according to the test scope, can be divided into modular testing and overall integration, according to test conditions, can be divided into normal operating conditions and abnormal conditions test, according to the test input range, can be divided into full coverage testing and sampling testing. All these are well understood and no longer explained.
In short, testing is also a very important step in project development, for a large software, 3 months to 1 years of external testing is normal, because there will always be unexpected problems.
After the completion of the test, complete the acceptance and completion of some of the final help documents, the overall project will be completed, of course, there will be no upgrade, repair and so on, as long as not to pass opportunistic one money, it is necessary to keep track of the operation of the software and continue to repair upgrades, know that


Writing these steps is not showing off anything, because the truth is that I am at hand is a "software engineering" in the university this is a compulsory course in computer science, but I know many programmers seem to have always been interested in what "30 days proficient in VC" and so on, they have some like me guerrilla origin, no formal study of this profession, Others have returned to the teacher a long time ago after earning enough credits to get the really useful stuff.

Online now is also very impetuous, some codingfans noisy, confusing, in fact, the real technical experts rarely hair on the internet posts, such as the author of such uppity, in fact, is not a master, but not to the technology, the programmer misunderstanding and nonsense, had to stand up, Do to correct the words, also hope that those who are still addicted to some of the wrong people Codingfans can seriously think about, go to the right, after all, those smart mind is far from playing its due value.




Contact Us

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.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.