Many software industry colleagues are just cfans -------------- Repost
There are many children, they are 18-9 or 21-2 years old, and they also wrote a lot of code through self-study. Their code is very beautiful. Some technical details are quite distinct, but they are also very wrong, but they are mistaken The awareness and opinion, lack of the system, the overall understanding of the program, these people, a friend on an online friend is very good, they actually fans, the pressure is not qualified to be a programmer, but according to what I know, a lot of small The network company's CFANs, holding a scary wage, making a scary project, and the project's ending is usually very scary.
Programmer's basic quality: make a truly qualified programmer, or you can really pass programmers who have completed some code work, should have the quality.
1, team spirit and collaborative ability
As a basic quality, it is not important. It is the opposite of it. This is the most basic and most important thing for programmers. 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
It is definitely a high-level programmer who never writes a document. Good document is a very important link in a regular research and development process. As a programmer, 30% of working hours write technical documentation is normal, and as a senior Programmer 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 the rules of some foreign well-known software companies, the variables of the code, the code within the code, even the length of the nesting, the length of the nesting, and the number of spaces between the function and the function of the function are clearly stated, and good writing habits, not only helps the code. Transplantation and error correction also helps cooperation between different technicians. Fans 叫 高 水 高 水 程序 程序 程序 程序 写 人 人 人 人 人. 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 嚣 程序 嚣 嚣 程序 程序 称 程序 程序 程序 称 程序 程序 程序 程序 程序 程序 程序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, reuse, modular thinking ability
I can often hear some programmers have such complaints, I have written a few years, turned into a skilled worker, and I repeatedly write some code without any new intentions. This is actually the largest waste of Chinese software talents, some repeatability The work has become the main job 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 a result of some commercial formalization, 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 an engineering, one is very Important Features is that the earlier the problem, the lower the cost of solving, the programmer is in each code, after each submodule is complete, you can try to discover and solve some potential problems, so The efficiency and reliability of the overall system construction have the greatest guarantee.
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 above to mention the needs of demand.
7, ability to learn and summarize
Programmers are very easy to be eliminated, and it is easy to lose their profits, because a technique may only have leadership within three or two years, and the programmer must constantly follow up new technologies and 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 the goal, some small coding some CodingTo is like some cfans, they also listen to their learning skills. I will learn ASP for a while, I will learn PHP, I will learn JSP for a while. They put this kind of capital, blindly chasing some superficial, surface things and nouns, doing network procedures, do not understand communication transfer agreement, doing applications do not understand interrupt vector processing, such technicians, regardless of how many so-called New language will never have quality improvement.
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.
So as a senior programmer, the system analyst, that is, for the designer of a program project, in addition to the above, the following quality is required:
First, demand analysis capabilities
For programmers, understanding requirements 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 needs, why do you say this?
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 capabilities
The programming designer must be able to master a project design method for not less than two to three (such as design methods, such as rapid prototyping, etc.), and can choose the appropriate design method according to project requirements and resource matching. The overall design of the project. 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, multiplexing design and modular decomposition capabilities
This seems to be old-tonghua, do you have explained this problem in the first 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, overall project evaluation capabilities
As a system designer, it must be able to start from the whole, and the overall clear understanding of the project is, such as whether the company's resource allocation is reasonable and in place. If the project schedule can maximize the efficiency, it is not possible to complete. Evaluate the overall workload of the project, the resources required by each module, the resources needed to assess the project, need a lot of experience, 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, team organization management capabilities
Complete a project engineering, need to work together, as the competent personnel 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, because of this Some technical indicators and factors are designed inside.
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 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.
Fans are muttered, confused, actually real technical experts rarely in the online chaos, such as the author, don't know how the sky is thick, in fact, there is a master, but I don't see this kind of technology, the procedure The misunderstanding and Hu said, I have to come forward, make a mistake, I have to think about the fans, I can think about it. After all, the smart mind is far from playing the value.
From programmers to engineers
From programmers to upgrade to engineers, most of me have a strong interest in software. After graduation, I have entered the company, and I started a programmer's career. At that time, we were obsessed with "Daquan", "Cheats", and only code in your heart. When I saw a row of boring code became an apparatus who was able to call, it became a beautiful table on the screen, turned into a beautiful music, accomplishing a sense of accomplishment. I feel that I am also an excellent programmer. In the user's computer room, I have a BUG that works in software in the software room, and has become a qualifications that can boast. One day before five years ago, I came to Huawei after a lot of code and less proud of the proud document. Here are more young people, I have a fish to get water, you can give full play to your own imagination. It is still the code, still rushing down the inspiration of the fleeting in the paper (we call it as a document), still endless and BUG struggle. When one day, a new colleague took the documentation with my name, carefully asked me, I found that I didn't know it. I am a little frustrating, look at the code, and find that some of the inspirations recorded in the document are not unrecognizable. I didn't know how the new colleague felt, but I started from then, as I realized what. Now, there are many things that are time. I also saw my project manager, a child, thin young man, is said that I have just been working back from the United States, I have worked five or six years. I am very happy to hear my heart, this time I have to learn two hands. The time of demand analysis is one month, the project manager and us (actually on behalf of the customer) discuss the content in Proposal, and determine that each item is needed. Then he roughly divided the module and started to enter the planned learning phase. Everyone should write the film in the learning phase, explain to others, unconsciously, all of the project group has a whole understanding of the project.
He also arranged some training, such as the software development model of their company, the definition of each role in the project group, and the timely training in time, as long as there is a need in the project team, he always invites QA or related people, training very profession. After the demand analysis is completed, a four0-page document is submitted. When I saw that I wrote in this English document, my feelings are very complicated, some joy, but more It is bitter, how did I have never doing this need for analysis?
During my writing documents, QA has trained us about SRS writing template. Later, I still didn't worry, let them write a piece of experience, we wrote it again. Although this SRS is more written, the style is consistent, the content is detailed. What is more valuable is, until the end, this demand analysis has not been changed, so that we have no chance to take the requirements of their needs.
Demand analysis is the first phase of the project, and the development time of the second phase should be determined based on the results of the demand analysis. When the other party's chief technology officer (equivalent to the overall group of our business) comes with our discussion plan, they have listed the prediction of the number of lines of the code to each module and may exist. According to their company's productivity - 300 rows / month, he has drawn how many weeks in the second phase of the project.
We have proposed objection: 1) The company is very urgent; 2) Is 300 lines per month too little; 3) We also have downloaded source code reference. He explained that 300 rows / monthly month is the experience of the project to meet their quality standards, taking into account the active code reference, the productivity can not exceed 350 rows / month.
When he asked our company's productivity, I turned three circles in my head, I didn't dare to say, about six or seven hundred lines. He was silent for a while, then firmly said that our plan is based on ensuring quality, I think you go to India to develop software, first look at the quality assurance of our Indian company. I know that you don't lack software developers, why don't you choose to download software? In a few words, my pain now, now the brothers in China are still rushing for products that use the download software transplantation! Subsequent development activities are in an orderly manner, and we are old and true. System test plan, use case, summary design, integrated test plan, use case, detailed design, unit test plan, use case, code, unit test, integrated test, system test. A complete V model development process, each process has a review. When we didn't understand some of the design methods, the project manager sent us related information. I don't know what he thinks, some basic analysis, design method is ten years, or even twenty years ago. In the software engineering book, India's professional personnel are compulsory. And in addition to the code of some specific protocols, we seem to have nothing to know. I feel some shame, go straight to the bookstore, I found out the book he opened to me, lying in bed at night, carefully studying, I seem to have encountered a good teacher who can give me guidance. India has now formed a strong learning atmosphere. After I came back, more than 700 books were also promoted, and these books teach us how to develop software with engineering methods, which is the information necessary to read by software engineers.
Our project manager's plan control has strong program control, when there is anything affected by the project plan, if the person resigns, the laboratory moves, a module is not allowed (this module is our forecast), he always takes The necessary measures, reduce post-extension, adjust the plan. Just beginning, we have a little opinion to the coffee in the next day, 4 o'clock in the afternoon, and later followed it. It turns out that the communication when drinking coffee is very rich, from the project management to the design method, from the development of technology The customs of the customs, all incompetence, understanding our mutual understanding, is very helpful to the atmosphere of the team. The QA of our project also appeared in front of us when appropriate, and we only have some sense of sensibility to her work. Each time she takes the meeting, she often holds a check list, the project manager prepares the corresponding information, answers some questions, she hooks, or writes the explanation of the project manager. When she is training us, she is also very patient, reflecting a good professionalism, I still miss her help.
I have been engaged in software development, I haven't said that I am a qualified software engineer, but I don't need to talk about any qualified manager. I saw a report that Swiss Lausani authoritative agencies have adjusted some assessment criteria from the original three-year-old competitiveness. The reason is that they have adjusted some assessment criteria. One is China's qualified engineers. The availability is very low. Thinking of the eyes of the brethren, the tired shadow of the rush to upgrade, I have a strong desire: I will upgrade our own way of qualified engineers!