Write to impetuous software peers!

Source: Internet
Author: User
Wang Hui @ 05-17 11: 41


There are many children, who are 18-9 or 21-2 years old. They have also written a lot of code through self-study. Some of their code is very beautiful, some technical details are quite outstanding, and they are also very diligent, however, they are influenced by some wrong understandings and opinions and lack the ability to understand the system and the program as a whole. These people and friends on the Internet speak very well. They are actually fans, I am not qualified to be a programmer at all, but as far as I know, cfans from many small network companies are working on scary projects with scary wages, and the project's ending is usually quite scary.

Basic Qualities of programmers:

As a truly qualified programmer, or a programmer who can truly complete some code work, it should be qualified.

1: team spirit and collaboration Ability

Taking it as a basic quality is not unimportant. On the contrary, this is the most basic and important foundation that programmers should possess. The high-level programmers are talking about being a hero, and the power of any individual is limited. Even a genius like Linus needs to create a miracle by forming a strong team, those who write core for Linux all over the world cannot imagine the lack of collaboration spirit. Lone Ranger can make some small software to make money, but once they enter the R & D teams of some major systems and enter the commercial and productized development tasks, those who lack 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 comment format, and even nested line indent length and empty line 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. Fans clamored for high-level programmers to write code that no one else can understand. Such complaints can only prove that they do not deserve to call themselves a programmer. 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. They attribute all performance indicators to hardware, operating systems, and development environments, while ignoring the performance considerations of the Code itself, some people once said that writing a notification exchange program is very simple, this kind of person never knows how the performance indicators are implemented in the case of millions or even tens of millions of accesses. For such a programmer, you give him a deep blue system, he can't do the same thing with the access capability of the Taiji chain. Stability, access support, and security are all important in performance requirement indicators. As a programmer, we need to evaluate the environment of this module in system operation, the load pressure to be subjected and the possibility of various potential dangers and malicious attacks. In this regard, a mature programmer must have at least two to three years of project R & D and tracking experience.

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, modular thinking means that programmers should think more about every functional module or function, rather than simply thinking about how to complete the current task, think about whether the module can be detached from the system, and whether it can be directly referenced in other systems and application environments by simply modifying parameters, which can greatly avoid repetitive development work, if a software R & D organization and working group can consider these issues during every R & D process, programmers will not delay too much time in repetitive work, more time and energy will be invested 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.

6: Test habits

As a commercial and formal development, full-time test engineers are indispensable, but it does not mean that programmers with full-time test engineers can not perform self-testing. As a project, software development, A very important feature is that the earlier the problem is discovered, the lower the cost of solution. The programmer performs a serious test after each code segment and each sub-module is complete, we can try to discover and solve some potential problems as early as possible, which guarantees the efficiency and reliability of the overall system construction.

In practice, two aspects need to be considered for testing. On the one hand, testing of normal calls is to check whether the program can complete basic functions under normal calls. This is the most basic test responsibility, unfortunately, this is the only test task in many companies, but it is actually far behind. The second is the test of abnormal calls, such as the stability test under high load, testing of potential user Abnormal Input, testing of the module affected by local system faults, and testing of module stability when frequent abnormal requests block resources. Of course, not programmers need to perform such a complete test on each piece of code, but programmers must be aware of their position in the overall project and various performance requirements, conduct relevant tests and discover and solve problems as soon as possible. Of course, this requires the requirement understanding ability mentioned above.

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 also need to find the target for learning. Some small coding and some codingto are just cfans on such coding. They also talk about their learning ability. They will learn ASP and PHP later, I learned JSP later. They used it as a show-off capital and blindly pursued some superficial things and terms. network programs do not understand communication and transmission protocols, if an application does not understand interrupt vector processing, such a technician will never improve the quality of the so-called new language.

Being good at summing up is also a manifestation of learning ability. Every time a R & D task is completed and a piece of code is completed, the application status and user feedback of the program should be tracked purposefully and summarized 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. People with all the above qualities should be qualified programmers. Please note that none of the above qualities is 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:

First, demand 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?

In general, the R & D task may be a requirement from the customer, or from the marketing and marketing departments. At this time, the R & D department does not see a complete requirement. Generally, this requirement is only functional or more formal, and may obtain a complete user view. However, this is not enough because the customer has many non-technical factors, they may have difficulty proposing complete and clear, or professional performance requirements, but for project organizers and planners, he must be aware of the existence of these needs and make appropriate suggestions when completing the requirement analysis report. At the same time, they must be complete and clear in the Design Manual, so that programmers do not lose these coding rules.

The program designer must correctly understand the environment where the user needs are located and analyze the requirements accordingly. For example, the same software is released by ASP leasing and by license, performance requirements may be different. The former emphasizes better support and stability, while the latter may emphasize the universality of various platforms and the simplicity of installation and use.

Second, 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 analyze the process and select a proper project design method, you must have sufficient grasp of the requirement analysis capability.

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, the overall system should be divided into many reusable functional modules and functions according to a modular analysis capability, and an independent design requirement should be 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, an automobile factory began to produce automobiles through pipelines, and independent components began to be reusable. In the future, standardization became a general trend, with different models, brands and even Auto Parts of different manufacturers can also be easily updated and upgraded. At this time, the efficiency of auto production is maximized.

The same is true for Software Engineering. In a mature software industry, different components can be changed at will in some related projects and systems. For example, many desktop software of Microsoft, many operation modules (such as opening files and saving files) use the same set of function modules. 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 several relatively independent and highly reusable modules that can be combined with data contact by just a few parameters, 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.

Fourth, overall project evaluation capability

As a system designer, you must be able to get a clear understanding of the entire project, such as whether the company's resource configuration is reasonable and in place, for example, whether the project schedule can maximize the efficiency will not be completed on schedule. The overall workload of evaluation items and various modules, the resources required by the evaluation project, and the difficulties that the evaluation project may encounter require a lot of experience, in other words, this is a kind of realm that can be achieved through continuous summarization. Some leaders in Software System Design in the West are very old, such as 4, 50, or even older. They are far less active in coding than young people, but in terms of project evaluation, their decades of experience are the most important and valuable wealth. The lack of such a generation of programmers in China is not the lack of programmers of that age, but the programmers of that age are basically made by research units, not from professional product software development, they have no experience in product-based R & D. This 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. The group has the primary programmer and the democratic mode, based on the gap in the ability level between programmers and the needs of project R & D, select an appropriate team-up method and closely combine duties and permissions with the work tasks of members, in this way, the team formation efficiency can be maximized.

A person with a high level of Code may not be able to become a qualified project R & D Director. Lack of ability in this area is often overlooked.

In summary, we can see that, as the person in charge of R & D, a project designer, the qualities and capabilities required are not the ability to write program code. Of course, in general, when a programmer reaches this quality through continuous summarization, his coding capability is quite simple, but pay attention to the causal relationship, A high-level project designer is already a very good person in code writing, but not a programmer with very good code can be competent in project design, this is not a question of IQ and textbooks. It is also because a programmer is not aware of what to think about when accumulating experience and gradually improving, there is no conscious understanding of the project organization and reuse design, no regular document habits and summary habits, and without changing these, our qualified project designers are still very lacking.

In addition, to prevent bored people from being honest with me, this article aims at commercial software projects and projects, as well as programming experts from scientific research institutions, such as algorithm experts, compared with image processing experts, they work on research topics rather than directly completing commercial software (of course, they eventually become commercial products, such as Microsoft Research Institute's research topics ), therefore, the quality they emphasize may be something else. These people (experts) cannot be called programmers, nor can they 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 determined. The development work and actual needs are often separated.

Demand analysis, in addition to the above work, I think that as a project designer, the project performance requirement specification should be complete, because often 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 rapid prototype design method, you can enter the coding stage after completing the outline design. This method is usually used because the R & D tasks involved are in a new field, the Technical Director was unable to provide a clear detailed design specification at the first time, but it does not mean that the detailed design specification is not important. In fact, the Rapid Prototyping Method summarizes the evaluation results and lessons learned after the prototype code is completed, we also need to re-design the detailed steps.

The fourth step is the detailed design, which is a critical level to test the design thinking of technical experts. The detailed design instructions should adopt the most 'clean' method (black box structure) for specific modules) provided to the coders to maximize the overall modularization of the system. A good detailed design instruction can minimize the complexity of coding. In fact, strictly speaking, the detailed design instruction documents should provide the definition of each parameter of each function in detail, from Requirement Analysis to outline design to completion of detailed design instruction documents, A software project is half done. In other words, when a large software system is half done, 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, the coding process will not exceed 1/2 in the entire project process. Generally, at 1/3 of the time, the so-called sharpening of the Code is good, and the design process is complete, the encoding efficiency will be greatly improved. During encoding, the Progress coordination and collaboration between different modules are the most important thing. Maybe a problem with a small module may affect the overall progress, so many programmers are forced to stop their work and wait. This problem has occurred in many R & D processes. Communication during coding and emergency solutions are very important. For programmers, bugs always exist and you must always face this problem. The well-known Microsoft, was there a time when no patch was released for three consecutive months? Never!

The sixth step is testing.

There are many types of tests: they can be divided into internal tests and external tests according to the test scope. They can be divided into module tests and integrated debugging according to the test scope, it 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 development. 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, and the overall project will come to an end. Of course, the upgrade, repair, and so on will be indispensable in the future, as long as you do not want to use a hammer to cheat money, 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 be honest, I have a software engineering book at hand. In college, this is a required course for computer science, however, I know that many programmers have always been keen on such topics as "30 days proficient in VC". Some of them, like me, are from guerrilla groups and have never been a regular professional, there are some other useful things that have long been mixed into credits and are returned to the teacher.

In fact, the real technical experts seldom post posts on the Internet. For example, if I do not know the depth of the world, I am really not a master, but I am not familiar with this kind of technology, the misunderstanding and nonsense of programmers have to stand up and make all sorts of arguments. I also hope that those who are still fans can seriously think about it and go to the right path, after all, those smart minds are far from making full use of their values.

From programmers to engineers

From the programmer's upgrade to the engineer's majority of people who are very interested in software like me, after graduation, I entered the enterprise without hesitation and started the programmer's career. At that time, we were obsessed with books such as "Daquan" and "Cheats", with only code in mind. When I saw a line of boring code turned into a device that could call, a beautiful form on the screen, and a beautiful music, my sense of accomplishment came into being. I think I am also a good programmer. Software bug fixing in the user's machine room after three days has become a high level. One day five years ago, I handed over a large amount of code and poor documentation that I was once excited and proud of, and then came to . There are more young people who can give full play to their imagination. It's still code, it's still a rush to write down the fleeting inspiration on paper (we call it a document), and it's still an endless battle against bugs. One day, when a new colleague carefully asked me about my big name document, I found myself a little unfamiliar with it. I was a little frustrated. I looked at the code and found that some of the inspiration recorded in the document was beyond my imagination. I didn't know how the new colleague felt at the time, but since then, I seem to realize something. Now, a lot of things at that time were just as successful.

I also met my project manager, who was a tall and thin young man. It is said that I have been working in the United States for five or six years. I am very happy to hear that, this time I have to learn both hands. The requirement analysis takes one month. The Project Manager discusses the content in proposal with US (actually representing the customer) and determines that each item is required. Then he roughly divided the modules and started to enter the learning stage in the plan. At the learning stage, everyone should write Functional Descriptions and explain them to others. Without knowing it, all the members of the project team have an overall understanding of the project.

He also arranged some trainings, such as the software development model of their company, the definition of various roles in the project team, and the timely training in the future, as long as there is a demand in the project team, he always invites QA or related personnel for professional training. After the requirement analysis is complete, I submitted a document with more than 40 pages. When I saw that the part I wrote in this English document was neatly listed in it, I felt very complicated, some joy, but more bitter, I have never done such a demand analysis before.

During my document writing process, QA trained SRS writing templates for us. Later, I was not at ease and asked an experienced engineer to write a piece, let's try again. Although this SRS is written by multiple people, the style is consistent and the content is detailed. Even more valuable, the demand analysis content has not been changed until the end, so that we have no chance to go through their demand change process.

Requirement analysis is the first stage of the project. The development time of the second stage should be determined based on the results of requirement analysis. When the other's chief technology officer (equivalent to the head of our business department) came to discuss the plan with us, they had listed the predictions for the number of lines of code in each module, which could be risky. According to their company's productivity-300 rows/person-month, he figured out how many weeks the second phase of the project would take.

At that time, we raised an objection: 1) the company was in urgent need of the project; 2) whether there were too few 300 lines per month; 3) We still have source code references for downloading. He explained that 300 rows/person-month is the empirical data that enables the project to meet their quality standards. Considering the source code reference, the productivity cannot exceed 350 rows/person-month at most.

When he asked us about the productivity of our company, I turned around three circles in my head. I didn't dare to say that, maybe six or seven hundred rows. He kept silence for a while, and then firmly said that our plan is based on ensuring quality. I think you will develop software in India. First of all, we should look at our Indian company.
Quality assurance. I know you don't lack software developers. Why don't you choose to download the software. My pain points have been mentioned in a few words. Now, Chinese brethren are still running around for products that use the software to be transplanted!

The subsequent development activities were well organized and we followed them honestly. System Test Plan, use case, summary design, integration test plan, use case, detailed design, unit test plan, use case, code, unit test, integration test, system test. A complete V model development process, in which each process has a review. When we were not quite familiar with some design methods, the Project Manager sent us relevant information and I don't know what he thought at the time, some basic analysis and design methods are described in the software engineering book ten or even two decades ago. Every computer specialist in India is required. In addition to the code of some specific protocols, we seem to have no idea about these common methods. I felt a little ashamed. I went straight to the bookstore and found out the books he had written for me. I was lying in bed at night and studied them carefully, I suddenly met another mentor who gave me some advice. Now India has formed a strong learning ethos. After I came back, I also promoted more than 700 books, which taught us how to develop software using engineering methods. They are what a software engineer must read.

Our project manager has strong plan control capabilities. When something affects the project plan, for example, personnel resign, lab migration, and inaccurate prediction of a certain module (this module is predicted by US), he always takes necessary measures to reduce the delay and adjust the plan. At the beginning, we had some comments on them going downstairs for coffee at eleven o'clock A.M. every day and then following them. It turned out that there were a great variety of coffee conversations, from project management to design methods, from technological development to customs, we are all at a Glance. Our understanding of each other is very helpful to the atmosphere of our team. Our project QA also appeared in front of us when appropriate, and we only had some perceptual knowledge of her work. Every time she attended a meeting, she often held a check list in her hand. The Project Manager prepared the relevant materials and answered some questions. She checked or wrote the explanation of the Project Manager. She was very patient during her training and showed her excellent professionalism. I still miss the help she gave us.

I have been engaged in software development for nine years, but I still cannot say that I am a qualified software engineer, let alone a qualified manager. I saw a report saying that an authority in Lausanne, Switzerland, has changed the overall competitiveness of Chinese science and technology from 13th to more than 20 because they have adjusted some evaluation criteria, one of them is the low availability of qualified Chinese engineers. Thinking of the red eyes of the brothers and the tired figure of upgrading around, I have a strong desire: upgrade ourselves to a qualified engineer! (End)

 

Related Article

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.