Thursday, February 17, 2011

Black Union Primitive - the basic quality of programmers (sinky original)

 Programmers is a technical work, the development in IT have a very important position, from the underlying hardware communication protocol to establish, to the data transport layer processing, to the operating system, the construction of the building to the database platform, until the application layer marketing platform on a variety of data structures, in which programmers have played a pivotal role and for the IT industry has made tremendous contributions to the development.
China has a lot of people skilled in coding, but China's software industry, especially Misunderstanding is a great web application development, it is difficult to form a large scale software development efforts and product capabilities, not only a far cry than the United States, and India is quite less compared to. The issue is not China's intelligence and hard work of programmers situation, nor is it that people in developing countries and the level of commitment, but a large extent, some of the technology, the program development, the idea of the project design errors, these errors resulted in the software industry's product development skills shortage , the lack of large-scale and large-scale multiplexing systems research and development capabilities, we can say to change the misunderstanding is to solve the software industry, small workshops of individual heroic mode and the limitations posed by the important work.
China has many children, their 18 , 9 years old or 21,2 years old, also wrote a lot through self-study the code, some of them written in code is very beautiful, some technical details of the very superior, but also the spirit of great study, but they are some of the wrong understanding of and views about lack of system, the overall understanding of the process, these people, a very good online friends, they are actually just some Coding fans, are they not qualified as a programmer, but as far as I know, many small Internet companies The CTO is such a coding fans, holding a scary wages, doing scary projects, project outcome is usually pretty scary.
the basic quality of the programmer:
qualified as a real programmer, or is can really do some code work of qualified programmers, should have the quality.
1:
teamwork and collaboration as the basic quality of it, not least, on the contrary, it is the programmer should have the most basic and most important of existence and prosperity. the high level programmers are said to be loners in the nonsense, the power of any individual are limited, even if such a genius as linus also need to form a powerful team to create a miracle, those around the world for the linux master who wrote the core, there is no spirit of collaboration is inconceivable. Lone Ranger could make some money for a small software made little money, but once into the large system development team, enter the business and product of the development tasks, the lack of such qualities completely failed the people.
2: Documents used to
that a high level programmers never write the document must be callow Mao Haizi, good documentation is formal R & D very important part of the process, as the code a programmer, 30% of the working time to write technical documentation is normal, and as a senior programmer and systems analyst, this ratio much higher.
lack of documentation, a software system is the lack of vitality in the future troubleshooting, upgrading and re-use when the module will experience great trouble.
3: standardization of coding habits
well-known software company as the number of foreign rules, code of the variable naming, code formatting in comments, and even nested indented Bank of the length and number of blank lines between functions are clearly defined, good writing habits, not only contribute to the migration and error correction code, also contribute to the collaboration among different technologies.
some coding fans clamoring for high-level programmers to write code that other people do not understand from the point of view, this clamor only prove himself unworthy of their fundamentally programmers. code has good Reading, and is the quality of basic needs of the programmer.
look at the whole linux structures, not standardized, and standardized coding practices, global R & D collaboration is absolutely unthinkable.
4: needs understanding
programmers need to understand the needs of a module, many children are often only concerned with writing a functional program requirements, they all boil down to the performance of hardware, operating system and development environment, the neglect of the performance of the code itself to consider, some people have boasted that Write an ad exchange program is very simple, such people will never know the number in the millions or even tens-level access is a case of how to achieve performance targets, for such a programmer, you give him a dark blue set of systems, he also can not make Tai Chi and visit the chain capabilities. performance needs indicators, stability, and ability to support access and security are important, as the programmer need to evaluate the module in the system environment in which operations will be subject to the load pressure and a variety of potentially dangerous and malicious attacks. On this point, a mature programmer at least 2-3 years experience in project development and tracking is possible with experience.
5: reusability, modular thinking
programmers often hear such complaints, wrote a few programs, become skilled workers, repeated every day without any new ideas to write some code, this is actually the biggest waste of software talents in China where some repetitive work into the main work of skilled programmers, and these, in fact, be avoided entirely.
reusability design, modular thinking is to the programmer to perform any function module or function of a time , to think about many, not limited to the completion of the current thinking on a simple task, think about whether the module out of the system exists, it can be a simple way to modify the parameters in other systems and applications of the direct quote, so that can greatly avoid duplication of development work, if a software development unit and the working group to research and development process in each of these issues are taken into account, then the programmer will not work in the repetitive too much time delay, it will have more time and energy into creative work in the code.
some good code program modules, even if written in the 70s, get into some of the system now as a functional module which can be a good fit , and now I see that a lot of small companies to upgrade or improve the software to rewrite all the code at every turn, most of the repetitive tasks unnecessary waste of time and effort.
programmer should have the qualities
6: Test used to
formalized as some commercial development, the full-time test engineers are essential, but not to say that test engineers have a full-time programmers can not test yourself; software development as a projects is concerned, a very important feature is that the sooner the problem and solve the lower the cost of the programmer in each code, each sub-module after careful tests, you can try some of the potential problems early the discovery and settlement, so that the construction of the overall system efficiency and reliability have the greatest promise.
test actually need to consider two aspects, one is called the normal testing procedures to see whether that is in the normal call to complete the basic function, which is the most basic test functions, but unfortunately in many companies this has become the only test task, in fact, far short of that; the second exception is called the tests, such as under high pressure load stability test, the user inputs a potential case of abnormal test case of partial failure of the overall system, the affected state of the module test, the abnormal frequency of requests for blocking the resources of the module stability tests and so on. Of course, not programmers want to their need for each piece of code that a full test, but the programmer must clearly understand their own code in the overall project task status and a variety of performance requirements, targeted to the relevant test and identify and solve problems as soon as possible, of course, This requires understanding the needs mentioned above.
7: Summary of the ability of learning and talent
programmers can easily be eliminated, it is easy to fall behind the occupation, because a technology may only have a leader in thirty-two years , programmers if you want to settle down, we must continue to follow up on new technology, learning new skills.
good at learning, for any career, for both the forward momentum necessary for the programmer, such a request to more high.
the target, but studies also find that some small coding fans are, and they relish in their ability to learn, one will learn asp, while learned php, while learned jsp, they this as bragging, the blind pursuit of a superficial surface of things and the noun, do not understand communication protocol network program, do not understand the interrupt vector processing applications, so the technical staff, no matter how many so-called master the new language , will never be a qualitative improvement.
good at summing up, but also a reflection of learning, research and development time to complete a task, complete the section of code should have the purpose of tracking the application status of the program and user feedback, at any time summary, to find their own inadequacies, so that gradually increase, a programmer is possible to grow up.
a programmer does not have the growth, even if sight is a master, it is recommended do not use, because when he was out of date soon to .
with the quality of the people all of the above, it should be said to be qualified programmers, please note that the above is not all the qualities determined by the IQ nor the university can learn some of the textbooks, the need is programmer's understanding of their work, is a question of consciousness.
then as a senior programmer, so that systems analysts, that is, a program for the project designers, in addition to the above should have all the qualities of , but also need the following qualities:
First, demand analysis
For programmers, the understanding of the requirements to complete a qualified code, but R & D projects for the organization and management, they not only understand the customer demand, more often have to enact their own needs, Why?
In general, research and development tasks, perhaps the customer needs, and perhaps the market demand and marketing departments, this time for R & D department, they see the demand is not a complete, general, only some of the needs of functional requirements, or something more formal, the user may get a complete view; but it is not enough, because the customer more in non-technical factors They may be difficult to make a full and clear, or the performance of professional needs, but organizers and planners for the project, he must be able to clearly recognize the existence of these requirements and complete the needs analysis in the time is right to ask, but To complete and clear instructions embodied in the design of the inside, so that programmers do not lose these guidelines when encoding.
program designers should understand the environment in which user needs and targeted to make the analysis of demand, for example the words, the same way a software release through and through ASP License rented post, performance requirements may be different, the former stressed that better support the capacity and stability, while the latter may be more emphasis on the universal in a variety of platforms fitness and the simple installation of.
Second, project design and process capabilities
program designers must be able to master at least two or three of the project design methods (such as top-down design methods, such as rapid prototyping, etc.), and the ability to match needs and resources of the project to select the appropriate design of the overall design of the project.
improper selection of design methods, it will delay the development cycle, a waste of R & D resources, and even results of research and development.
designers also need a program with a lot of effort in the design and process flow chart, he needs to be done to establish the data flow diagram data dictionary; he needs to process logic flow diagram to form the overall system process flow .
a process system in question, even if the code is more beautiful, more refined each module, and will not be a good system. of course, good process analysis and choose the good project design, analysis capabilities are required demand have sufficient grasp on.
Third, reuse and modular design decomposition
this seems to be old tune, not the quality of the previous basic problem you have described?
in the module as a the task of programmers, he needs to face his reuse of certain modules to be considered, and as a systems analyst, he has to face the problem more complex, the need for overall system analysis by a modular ability to break down for many reusable function modules and function, and form a separate module for each design needs. For example, is like a car production, the first installed in each car are independent, the amount of each component is a tailored, but then not the same, large-scale production of the machine, started by a car factory assembly line to produce automobiles, beginning with a certain independent component reusability, standardization become a major trend in the later, different models, brands and even different auto parts manufacturers can also be easily facelift and upgrade, this time to maximize the efficiency of automobile production. The same is true of software engineering, a mature software industry in a number of related projects and systems, different components are free to dress, such as many of Microsoft's desktop software, in many operating modes (such as opening files, saving files, etc.) are the same set of reusable modules, which provide the interface but also through a number of libraries to the desktop easy to mount application developers, this is the reuse of the module design was a proof.
a large, complex application system is divided into a number of relatively independent, with a high degree of reusability, and can only rely on several parameters to complete the data link module combination, as a senior programmer and systems analyst one of the most important work, the appropriate method of project design, a clear flow chart is an important guarantee to achieve this goal.
s Fourth, the overall project evaluation capacity
as a system designer must be able to proceed from the overall situation, the project has a clear understanding of the whole, such as the company's resource allocation is reasonable and in place, such as the progress of arrangement can not maximize the efficiency with As can be completed on schedule. assess the overall project and the workload of each module to assess the resources required for the project to assess the projects may encounter difficulties, we need a lot of experience, in other words, this is a constant in order to achieve the cumulative sum state. In some Western leaders in software system design is very old, such as 4.50 years, or even older, their code has been active as far as young people, but to project evaluation, their few years of experience is the most important and valuable asset. lack of such a generation of programmers in China, mainly the kind of age is not the lack of programmers, but that old programmers are basically made to research institutions, are not from a professional software development products to come, they are not able to accumulate the kind of products of R & D experience, there is no way this thing is.
fifth, team organization and management capacity
completion of a project, you need to team together, as a project designer or person in charge of research and development, it should have the ability to maximize the overall strength of team play, technology management because of its professional nature, not common ground personnel management in general, because it was designed there some technical indicators and factors.
first work to quantify, it is difficult to achieve without the right quantify the performance evaluation, and procedures are not easy to quantify the number of lines of code can be calculated, thus requiring technical managers need to really evaluate a module the complexity and workload.
collaborative model, followed by adjustment of the team, in general, program development is usually divided into group collaboration, the group has the main programmer mode, there are democratic ways, according to the programmer of the gap between ability level and needs of research and development of the project, select the appropriate team approach, and members can select the right tasks and closely integrated, so as to maximize the efficiency of the team.
high levels of a code people may not be able to become a qualified director of project development, lack of capacity in this area is often easy to ignore.
sum can be seen as a competent person in charge of research and development, a project designer, the need to have the quality and ability is not the ability to write code, of course, under normal circumstances, a summary of a programmer by continuously improving the quality of the time to achieve this, he has the ability to write code that is quite simple, but please note that there causal relationship, a high level of project designers usually have a very good person writing the code, but not a very good programmers code capable of project design work, which is not inside the existing IQ and textbooks problem, or is that a programmer in the accumulation of experience, and gradually increase the time did not realize what areas should be thinking of things, there is no conscious organization of the project and reuse of design figured out, there is no regular habits and summary documents used to, do not change these, our qualified project designer is still very lacking.
addition, to prevent boredom and I seriously, to add that this target is to make commercial software programs and projects, scientific research institutions of the programming that master, such as the master algorithm, such as image processing expert, whose job is to complete the research rather than direct commercial software (indirectly of course, the ultimate commercial product, such as Microsoft Research's research in making), so they stressed the quality may be other things, these people (experts), and can not be said to be a programmer, the programmer can not be used to measure the standards.
add that the last thing, the design of a software project development process is like? the usual standard design, for example, (but I like the rapid prototyping).
first step is market research, technology and market to combine in order to realize maximum value.
The second step is to demand analysis, this phase requires a three- things, the user views, data dictionary and user manual.
user view is that the software users (including end users and manage user) can see the page style, which contains a number of operational processes and conditions.
specified data dictionary is to collate the data and the logical relationship of the East, completed a data dictionary, database design was completed more than half.
user manual instructions specified in the operating process.
Note , user processes and user view is determined by demand and should therefore be completed before the software design, complete these to provide a constraint for the procedures and criteria developed, unfortunately too many companies are not doing so, cause and effect reversed, the order does not points, development work and practical needs are often so detached from the phenomenon of estrangement.
needs analysis, in addition to the above work, I think that as a project designer to make the project should be complete performance requirements specification, since it is often only understand the technology, performance requirements people can understand, which requires technical experts and the demand side (customers or marketing department) to have real communication and understanding.
The third step is to outline the design, the initial division of the system function modules, and gives reasonable R & D process and resource requirements. as a rapid prototyping method, complete the preliminary design to get into the coding stage, usually because of this approach are involved in new areas of research and development tasks, technical supervisor come on the detailed design can not give clear instructions , but not the detailed design statement that is not important, in fact, the completion of the prototype rapid prototyping code, according to evaluation results and a summary of lessons learned, but also the detailed design of the steps again.
The fourth step is the detailed design This is a test of the importance of technical experts level design thinking, detailed design specification should be specific modules in the most 'clean' way (black box structure) available to the coder, the maximum modularity makes the system as a whole; a good detailed design manual, you can reduce the complexity of the code to a minimum, in fact, strictly speaking the detailed design specification of each function should be defined for each parameter to provide both fine fine thin out, from requirements analysis to outline design to detailed design completed manual, a software project should be finished into half. In other words, a large software system in half the time to complete, in fact, the work has not started a line of code.
those who simply understood as software programmers to write code to fundamentally mistake the.
fifth step is encoded in a standardized development process, the coding process in the whole project up to no more than 1 / 2, usually 1 / 3 of the time, Misfortune tests the sincerity of the so-called, a good design process is completed, will greatly improve the coding efficiency, coding schedule coordination between the different modules are most in need of care and collaboration, perhaps the problem of a small module that may affect the overall progress, so many programmers were forced to stop work to this problem in a lot of R & D process have appeared. encoding the mutual communication and emergency response solutions are important tools for programmers, bug always there, you must always face this problem, the famous Microsoft, is there not issued patches for three consecutive months, when it? never!

sixth step is to test a variety of tests are: < br> in accordance with the test execution side, can be divided into internal testing and external testing
in accordance with the test range, can be divided into modules and the overall joint tune
test in accordance with test conditions, can be divided into normal and abnormal operating conditions test test < br> according to the input range of the test can be divided into full-coverage testing and random testing
above are well understood, not explained.
In short, the test is also a research and development projects in a very important step, for a large software, 3 months to 1 year of external tests are normal, because there are always unexpected problems and.
finish testing, acceptance and completion of some help to complete the final documents, the overall project be considered an end, Of course, ultimately, future upgrades, patches, and so work as long as do not want to get money through the one-shot deal, we must keep track of software patch to upgrade operating conditions and continue to know the software was completely out of date.
write these steps count What is not on the show off because I do tell you the truth is a of, some of them came from the guerrillas, like me, there is no formal learned profession, and some are long enough credits in the mix of these really useful things put back the teacher.
online now is also very impulsive, Some coding fans of voices to confuse the public, in fact, the real roots of technical experts rarely post on the Internet, as I like bragging, in fact, it is hardly a master, but could not understand this kind of technology, misunderstandings and nonsense on the programmer, had to come forward and do things right words, I hope those who have indulged in some wrong coding fans who have been able to seriously think about it, go on the right track, after all, far from the minds of those not smart play its proper value.

No comments:

Post a Comment