Programmers are a technical work and play an important role in the development of IT, from the establishment of underlying hardware communication protocols, to the processing of the data transmission layer, to the construction of operating systems, to the construction of the database platform and the establishment of various data marketing platforms on the application layer, programmers play an important role in IT and have made great contributions to the development of the IT industry.
There are many coders in China, but the software industry in China, especially the network application development, has many misunderstandings and is difficult
The formation of a large-scale software development force and product capabilities is not only far from the United States, but also quite different from India
For example. These problems do not lie in the IQ and hard work of Chinese programmers, nor in the development of national and civil programs.
To a large extent, there are some misunderstandings about technology, program development, and project design.
These misunderstandings have led to insufficient productization capabilities in the software industry and lack of R & D capabilities for large-scale and large-scale reusable systems.
It can be said that changing the misunderstanding is an important task to solve the limitations brought by the small workshop model and the individual Hero Model in the software industry.
There are many children in China who are 18, 9 or years old. They have also written a lot of code through self-study.
They are very beautiful, some technical details are quite outstanding, and they are also very research-oriented, but they are wrong about some ideas and opinions left
Right, lack of ability to understand the system and program as a whole. These people and friends on the Internet speak well. They are actually just Coding
Fans is not qualified as a programmer, but as far as I know, many small network companies have such coding CTO.
Fans, working on scary projects with scary wages, the project's ending is usually scary.
Basic Qualities of programmers:
As a truly qualified programmer, or a programmer who can truly complete some code work, it should have some qualities.
1: team spirit and collaboration Ability
Taking it as a basic quality is not unimportant. On the contrary, it is the most basic and most essential for programmers.
An important foundation for life. The High Level programmers are talking about being a lone hero, and the power of any individual is
Limitations, even if such a genius like linus, you also need to build a strong team to create a miracle, those all over the world
Linux Write core experts, without collaboration spirit is unimaginable. The Lone Ranger can make some small profit
Small fortune, but once you enter the R & D teams of some major systems and enter the commercial and productized development tasks, the lack of such quality will be completely unqualified.
2: Document habits
A high-level programmer never writes a document, but it must be a cool child. A good document is a very important part of the formal R & D process. As a code programmer, it is normal to write technical documents for 30% of the work time, and as a Senior Programmer and system analyst, this proportion is much higher.
If there is no document, a software system lacks vitality. In the future, troubleshooting, upgrading, and re-use of modules will cause a lot of trouble.
3: standardized and standardized coding habits
As a rule of some well-known foreign software companies, code variable naming, code annotation formats, and even the length of nested rows and empty row numbers between functions are clearly defined, good writing habits not only help code porting and error correction, but also help different technical personnel to collaborate.
Some coding fans complain that code written by high-level programmers is never understood by others. Such complaints can only prove that they are not worthy of self-proclaimed programmers. The Code has good readability and is a basic quality requirement for programmers.
Looking at the establishment of linux, there is no standardized and standardized code habits, and global R & D collaboration is absolutely unimaginable.
4: requirement understanding
Programmers need to understand the needs of a module. Many children write programs only focus on one functional requirement.
Performance indicators all come down to hardware, operating systems, and development environments, while ignoring the performance considerations of your code.
It is said that writing an advertising exchange program is very simple, and such people never know the access situation in millions or even tens of millions of orders of magnitude.
How is the performance indicator achieved under the circumstances, for such a programmer, you give him deep blue that system, he can not do too much
The ability to send and access polar links. In performance requirement indicators, stability, access support, and security are all important.
The sequencer needs to assess the environment of the module in system operation, load pressure to be subjected to, and various potential risks.
And the possibility of malicious attacks. In this regard, it may take at least two to three years of project R & D and tracking experience for a mature programmer.
5: reusability and modular Thinking Ability
I often hear such complaints from programmers who have been writing programs for several years and become skilled workers. Every day, I repeatedly write code without any new ideas. This is actually the biggest waste of Chinese software talents, some repetitive work has become the main work of skilled programmers, which can be completely avoided.
In reusability design, the modular thinking means that programmers should think too much when completing any function module or function.
Some, don't be limited to the simple idea of completing the current task, think about whether the module can be detached from the system,
Whether the parameter can be directly referenced in other systems and application environments by simply modifying the parameters, which can greatly avoid
No repetitive development work. If a software development organization and working group can consider
With these problems, programmers will not delay too much time in repetitive work, so they will have more time and energy to invest in innovative code work.
Some good program module code, even written in 1970s, can be well applied to some systems as function modules. What I see now is, many small companies tend to rewrite all their code as soon as software is upgraded or improved. Most repetitive work wastes time and effort.
The quality that programmers should possess
6: Test habits
As for the development of commercialization and regularization, full-time test engineers are indispensable, but it does not mean that they have specialized
Testing engineers can not perform self-testing. Software development is an important feature of a project.
The point is that the earlier the problem is discovered, the lower the solution cost. After each code segment and each sub-module is complete, the programmer performs
After careful testing, we can try to discover and solve some potential problems as early as possible, which guarantees the maximum efficiency and reliability of the overall system construction.
In actual testing, we need to consider two aspects: on the one hand, testing of normal calls, that is, checking whether the program is normal.
It is the most basic test responsibility to complete the basic functions under the call. Unfortunately, it has become the only test task in many companies,
In fact, the difference is far away. The second aspect is the test of abnormal calls, such as the stability test under high load.
User testing in the case of potential Abnormal Input, testing in the affected condition of the module in the case of local failure of the overall system, frequency
Module stability tests when abnormal requests are sent to block resources. Of course, not programmers need
This complete test is required, but the programmer must be aware of the status and
Various performance requirements, targeted tests, and early identification and resolution of problems, of course, this requires the above-mentioned requirement understanding capabilities.
7: ability to learn and summarize
Programmers are easy to get rid of and fall behind in their careers, because a technology may be disruptive in just three or two years. If programmers want to live up, they must keep following up on new technologies, learn new skills.
Good at learning. For any profession, it is an essential motive force for advancing. For programmers, this requirement is even higher.
However, you need to find the right learning target. Some small coding fans also relish their learning ability.
I will learn asp, php, and jsp later. They will use this as the capital to show off and blindly
The pursuit of some superficial, superficial things and terms, do not understand the network program communication protocol, do not understand the application program
Interrupt vector processing, such a technician, no matter how many so-called new languages are mastered, will never improve the quality.
Being good at summarization is also a manifestation of learning ability. Every time you complete a R & D task and a piece of code, you should track the application status and user feedback of the program, and summarize it at any time, find your own shortcomings so that a programmer can grow up gradually.
A programmer who does not have growth is recommended not to use it even if he is a good player, because he will arrive immediately when he is out of date.
Those who have all of the above qualities should be qualified programmers. Please note that none of the above qualities are determined by IQ or can be learned from some university textbooks, it only requires the programmer's understanding of his work and is a matter of consciousness.
As a Senior Programmer, as a system analyst, that is, the designer of a program project, in addition to all the above qualities, the following qualities are also required:
1. Requirement analysis capability
Programmers can complete qualified code by understanding the requirements. However, for the organization and managers of R & D projects, they must not only understand the customer requirements, but also develop their own requirements more often, why?
Average
In terms of R & D tasks, it may be the requirement raised by the customer or by the marketing and marketing departments.
What they see for R & D departments is not a complete requirement. Generally, this requirement is only a few functions.
Or more formal, you may obtain a complete user view. However, this is not enough because
There are many non-technical factors, and it may be difficult for them to propose complete and clear, or professional performance requirements, but
The project organizer and planners must be aware of the existence of these requirements and complete the requirement analysis report.
When appropriate, and should be fully and clearly reflected in the design specification, so that programmers do not lose these standards in coding.
The program designer must correctly understand the environment where the user needs are located and analyze the needs accordingly. For example
For example, if a software is released in ASP leasing mode and License mode, the performance requirements may be different,
The former emphasizes better support and stability, while the latter may emphasize the simplicity of universality and installation on various platforms.
2. project design methods and process processing capabilities
Programmers must be able to master at least two or three project design methods (such as top-to-bottom design methods, such as quick prototyping ), you can select an appropriate design method based on your project requirements and resources.
Improper selection of design methods will delay the R & D cycle, waste of R & D resources, and even affect the R & D effect.
A programmer also needs to design and process flowcharts. He needs to create a data flow chart to establish a data dictionary. He needs to process a logical flow chart to form an overall system processing flow.
A system with problematic processes, even if the code is more beautiful and each module is more refined, will not become a good system. Of course, to do a good job of Process Analysis and select a good project design method, you must have sufficient skills in requirement analysis.
Third, reuse design and modular decomposition capabilities
This seems to be an old-fashioned re-discussion. Isn't the problem already explained in the basic quality?
As a programmer engaged in module tasks, he needs to consider the reusability of specific functional modules he faces,
As a system analyst, he has to deal with a lot of complicated problems and need to adopt a modular
The analysis capability is divided into many reusable functional modules and functions, and an independent design requirement is formed for each module.
. For example, in automobile production, each automobile was first installed independently and each component was customized.
But later it was different. machine-based production started. An automobile factory began to produce automobiles through the assembly line.
Components are reusable at the beginning, and standardization becomes a general trend in the future.
Auto Parts can also be easily updated and upgraded. At this time, the efficiency of auto production is maximized. Software Engineering
The same is true for a mature software industry. In some related projects and systems, different components can be
For example, many of Microsoft's desktop software, in many operation modules (such as opening files and saving files)
Is the same set of functional modules reused, and these interfaces are provided to desktop application developers through some class libraries for convenient mounting. This is an obvious evidence of the reusable module design.
A large and complex application system is divided into some relatively independent and highly reusable modules that can only rely on a few parameters to complete data contact combinations, it is the most important task for senior programmers and system analysts. A proper project design method and a clear flowchart are important to achieve this goal.
Iv. Overall project evaluation capability
As a system designer, you must be able to get a clear understanding of the entire project, such as the company's resource allocation.
Whether the configuration is reasonable and in place, such as whether the project schedule can maximize the efficiency and will not be completed on schedule. Rating
Estimate the overall workload of the project and the workload of each module, evaluate the resources required by the project, and evaluate the difficulties that the project may encounter.
A large amount of experience is required. In other words, this is a kind of accumulation that can be achieved. Some Western Software
The leaders of system design are very old, such as 4, 50 years old or even older. They are far from coding.
It is as active as young people, but in terms of project evaluation, their decades of experience are the most important and valuable financial resources.
Rich. The lack of such a generation of programmers in China is not the lack of programmers of that age, but the foundation of programmers of that age.
This was made by research institutions, not from professional product software R & D. They did not have the experience of product R & D, which is also impossible.
Fifth, team organization and management capabilities
To complete a project, the team must work together. As a project designer or R & D supervisor, the team should be able to maximize the overall strength of the team. Due to its professional nature, Technical Management, it is not the same as 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 a suitable performance appraisal. Program quantification is not a simple calculation of the number of lines of code, therefore, technical management personnel must be able to assess the complexity and workload of a module.
The second is the adjustment of the team collaboration model. Generally, the program development collaboration is divided into groups.
There are also democratic ways for programmers, based on the gap in the ability level between programmers, and based on the project R & D
Select a proper team-up mode and closely combine duties and permissions with the work tasks of members so that the team-up efficiency can be maximized.
A person with a high level of Code may not be able to become a qualified project R & D Director. The lack of such capabilities is often overlooked.
In summary, we can see the qualities and capabilities required by a project designer, as the person in charge of R & D.
It is not the ability to write program code. Of course, a programmer can achieve this through continuous summarization and improvement.
It is not easy to write the code, but pay attention to the cause and effect.
Relationship, a high-level project designer is already a very good person in code writing, but not a substitute
Programmers with excellent codes can be competent in project design, and there is no question about IQ or textbooks.
The problem is that when a programmer accumulates experience and gradually increases, He does not realize what needs to be considered.
In the West, there is no conscious understanding of the project's organization and reuse design, there is no regular document habits and summary habits, and without changing these, our qualified project designers are still very lacking.
In addition, in order to prevent people from being bored from being honest with me, this article aims at commercial software projects and work
Cheng, the programming masters of those scientific research institutions, such as algorithm masters and image processing masters, their jobs are research courses
Questions rather than directly completing commercial software (of course, it eventually becomes a commercial product, for example, the research courses conducted by Microsoft Research Institute
Therefore, the quality they emphasize may be something else. These people (experts) cannot be said to be programmers and cannot be measured by the standards of programmers.
Finally, what is the design process of a software project R & D? Take the standard design method as an example (but I like the quick prototyping method ).
The first step is market research. The combination of technology and market can reflect the greatest value.
The second step is requirement analysis. At this stage, three things are required: User View, data dictionary, and user operation manual.
The user view is a page style that can be seen by the software user (including end users and management users). There are a lot of operational procedures and conditions.
A data dictionary is a collection of data dictionaries that specify and organize data logical relationships. After the data dictionary is completed, more than half of the database design is completed.
The User Manual specifies the instructions for the operation process.
Note that user operation procedures and user views are determined by requirements. Therefore, you should complete these steps before the software design, which provides constraints and guidelines for program development, it is a pity that many companies do not do this. The cause and effect are reversed and the order is not divided. The development work and actual needs are often separated.
In addition to the above work, I think that as a project designer, we should provide a complete description of the project's performance requirements, because performance requirements can only be understood by technical personnel, this requires that technical experts and demanders (customers or marketing departments of the company) have real communication and understanding.
The third step is the outline design. The system function modules are preliminarily divided and reasonable R & D processes and resource requirements are given.
As a quick prototype design method, you can enter the encoding stage after completing the outline design. This method is usually used because
The R & D tasks involved are in a new field, and the technical supervisor cannot provide a clear detailed design instruction at the beginning,
It does not mean that the detailed design instruction is not important. In fact, after the prototype method completes the prototype code, the detailed design steps should be re-performed based on the summary of the evaluation results and lessons learned.
The fourth step is detailed design, which is an important level to test the design thinking of technical experts.
The specific module is provided to the coders in the most 'clean' mode (black box structure), so that the overall modularization of the system is achieved
Large; a good detailed design specification can minimize the complexity of coding. In fact, it is strictly detailed.
The design specification should provide the definition of each parameter of each function in detail, from Requirement Analysis to summary.
From the design to the completion of the detailed design specification, a software project should be said to be half done. In other words, when a large software system completes half of the work, it has not yet started a line of code.
Programmers who write software simply understand it as code, and then make mistakes from the root.
The fifth step is coding. In the standardized R & D process, coding cannot exceed 1/
2. Generally, in 1/3 of the time, the so-called sharpening of the knife will not mistakenly cut back the firewood, the design process is completed well, the encoding efficiency will be greatly improved
High, it is the most important thing to be careful about the progress coordination and collaboration between different modules during encoding. Maybe a problem with a small module can be solved.
This problem affects the overall progress and forces many programmers to stop working.
Appeared. Communication during coding and emergency solutions are both important. For programmers, bug always occurs.
Long-standing, you must always face this problem. Did the well-known Microsoft fail to issue patches for three consecutive months? Never!
Step 6 is test
There are many types of tests:
The testing implementers can be divided into internal tests and external tests.
According to the test scope, it can be divided into module test and overall joint debugging.
The test conditions can be divided into normal operation test and exception test.
According to the test input range, it can be divided into full coverage test and sample test.
The above is easy to understand and will not be explained.
In short, testing is also a very important step in project R & D. For a large software, external testing from three months to one year is normal, because there will always be unpredictable problems.
After the test is completed, the acceptance is completed, and some final help documents are completed. The overall project will come to an end. Of course, you will not be able to upgrade or repair the project in the future, we need to keep track of the operation status of the software and continuously repair and upgrade the software until it is completely eliminated.
Writing these steps is not easy, because to tell the truth, I have a software engineering book at hand. In college, this is computing.
Machine majors are required courses, but I know that many programmers have always been keen on
Class, some of them are from the same guerrilla group as me. They have not studied this major in a regular way, and some of them have returned these useful things to their teachers after they have been mixed up.
The Internet is also very impetuous, and some coding fans are clamoring and confusing. In fact, few real technical experts are
Posts are posted on the Internet in disorder. For example, I don't know how powerful it is, but I just can't read it.
I am used to this kind of technology, misunderstanding and nonsense about programmers, so I have to stand up and talk about it. I also hope that coding will indulge some people who are addicted to mistakes.
Fans can think about it and go on the right path. After all, those smart minds are far from realizing their value.