This article is published in the "Programmer's Weapons Talk" edition of the No. 2007.03 edition of Programmers Magazine."Programmer": please talk about the skills of the good programmers you are positioning. How do you understand the programmer's seven kinds of weapons. ==============Zhou:In general, swordsman with sword, knife passenger knife, so the so-called seven kinds of weapons, used in the hands, perhaps a two pieces. But if the skill, technique, but not a two pieces of weapons can win the lake. For example, a swordsman who does not know how to stab a knife when he encounters a knife. It is because of the length of the prophet that we can avoid the strong and the weak. The swordsman who does not know the sword and does not know the blade of swords to fight up, probably will be like a dance general, each practice each of the moves. Therefore, the excellent programmer or program Master is not proficient in seven kinds of weapons versatile, must be proficient in one, and know other. Unlike the rivers and lakes, we do not actually use a weapon to fight against those who take another weapon. Our object is a software, or a project. We want the enemy to win, but the enemy is dead, not the living. In other words, we understand the purpose of these technical methods, not to stand in the ring to compare who knows more, or who is proficient in what. We just want to do a software or a specific project, then the so-called technical methods, as long as the software or project effective. Therefore, the people who write the kernel by sinks do not have to look at the C-write protocol layer, use C + + to write platform applications, and do not have to look at the SQL scripting people. In a team, the Assembly, C, C + +, and SQL may have their own use in a project, and it is necessary to let these people out, and ultimately the project failure. Any kind of tool has the realm of using it. Many people do not see this and despise other languages or tools. For example, SQL, almost all of which use advanced languages (I'm not saying that it's better than other languages, but only one of them) thinks that SQL is "a fairly simple script." But in fact, my friends have the ability to use SQL to the Acme of success, he can be written to infer the database design failure, or, conversely, for a specific database system to write the most optimized SQL. Importantly, the friend will design a specific database and SQL for the different access environment, the network structure, to achieve the best. A good programmer is a person who is unbiased in the tools and adaptable to the occasion, while the program Master is based on this premise and specializes in one, and then a person of ten.Programmer: What do you think is the basic skill of a programmer? Which is the most important. ==============Zhou:In "Seven weapons", data structures are the basis for real programmers, and object-oriented thinking is the gateway. The ability of a programmer to go down the path of software development depends largely on his knowledge of the data structure. Any new language, or the appearance of any new architecture, can be found in the data structure of the relevant interpretation. As a result, programmers who are proficient in data structures are equivalent to having "status quo" capital. In this respect, the "human Moon myth" in a word pointed out the key: "Data representation is the fundamental programming." Object is a kind of data structure abstraction, but it is not the only one. From this perspective, objects are not the only way to program. I have said that satellites are also the days of the process-oriented era. In other words, process-oriented processes can also organize complex enough programs. None of this, however, denies the object-oriented value. Object-oriented is a highly abstract of the ontology and behavioral characteristics of things, which transform the data structure from "dead memory" into "living object". Object-oriented thinking enables us to enhance the ability to express the reality of the same time, to avoid the complex data structure brought about by the coupling. The concept of object-oriented, information hiding and interface abstraction are three interrelated, which constitute the theoretical foundation of the whole software system design. In these three concepts, object-oriented is the most closely related to software developers and the easiest to understand, so it is the best way to make you a real programmer and to move from a programmer to a program designer."Programmer": If you use a question to test whether a person is a program master, how would you ask. ==============Zhou:My question is: what kind of open source project have you participated in or organized, how to evaluate it. In the program master this level, can stand out is that kind of cooperative ability, open-minded talents, but not the simple distinction of technical superiority. It's a good way to watch his experience and interest in open source projects. This is not to say "open source code" is open source project. I'm talking about a truly organized, ongoing, Open-source project operation. So many qualifications are made because now many people have accepted the idea of "Open-source", but this only shows that the person has the spirit of sharing, does not mean that he has the ability to organize and manage the project. The vitality of the open source project is sustained by the project manager during the long period of maintenance, and the project manager has experienced his own skill and disposition in the process. And these, is the master in the growth of indispensable elements.programmer: In the process of becoming a good developer, which phases are the most memorable. ==============Zhou: I do the beginning of the program, just like it, in fact, is really leng head green. At this stage, the code is not standard, the interface is arbitrary, and often will overturn. "Code is not standard" is a common problem for non-professional professionals, I have in a long time, have "their own style", so also specifically for this with the former department manager argued: I agree with the format ah, but why to the format you say it. "Interface at random" is not designed to start writing code performance, and "often overturned" is its consequences. Non-professional professionals are usually initially a person to start practicing, write their own code, interface how to write themselves can understand, so specialized to design is trouble. But in the team, too "unique" program interface is a disaster, because you have to give everyone to explain the use of the interface, to persuade them to use this interface. This is often followed by a strong principle: you either succumb to the "more standard interface Design" or the team abandons your code. Do the procedure again skilled, cannot pass above this stage to be far from cooperation, also not to design. A person writes a program without much design effort. But a team work, no design can not. So I think the second stage of writing a program is team development and professional design. And these two points, it is from the project management and technology to achieve the organization of large-scale development of the begotten. So what I'm actually trying to say here is that team development is a higher level of technology than individual development. It's not difficult to settle down in a business when you learn to work in a team, be able to collaborate with people easily, or organize small development teams. As for which language, because you are a "good programmer", the choice of language is required for the project, so it is not the key issue to be discussed next. The third stage is the key to your ability to stand out in the industry. But this key has nothing to do with technology, but a person's character and personality problem. On the one hand, we will be very ah Q said "The wine is not afraid of the alley deep", on the other hand said "Maxima often and bole not often." The problem is, the horse can not take the initiative to find Bole, and why not people. Horse trapped in the stables and show the secular, people stand in the world can not be apparent group. Have to express their extraordinary quality of space and do not display, fundamentally speaking or capacity problems. So learning to communicate, to interact, and not to indulge in code, may be an important bottleneck in the third phase. In the third phase, you may face a lot of choices. such as technical Director, Project manager or designer, analyst, etc. But you should find that all of these choices will get you pushed to the front of the team, you have to face the whole team, and the project stakeholders (such as customers). The ability to do this depends on your overall quality, not on a single software development skill. Finally you have to remember one thing, the above process, not overnight, not a year or two, but five years 10 years of time. In this process, all successful people must have, is a serious attitude and professional spirit. Programmer: Give developers a few practical instructions. ==============Zhou:The language as "the weapon of the hand", then the basic skills are equivalent to the home to fix. Practicing stone lock can also practice a Zu pa, this shows that rely on "constantly write program", is also able to write a master. However, if a start to give a thousands of pounds of the big stone Lock, zu bully did not practice the first sacrifice. So everything has a gradual, followed by this "preface", does not require everyone is the same, other people's experience, is probably suitable for a reference. And I can not say what the guidance of things, so the above talk, we can do as experience, when the reference to use. It's practice, but it's not a guide."Programmer": please talk about how to do game development and general software development, in the technical requirements of what is different. ==============Zhou: Game development involves a more complex area. For example, for interface interaction, there is usability testing in general software development, while the game is called the testability test. Usable and can play, it is already two kinds of different interface interaction design idea. General software development rarely applies ergonomics knowledge to the interface, but this knowledge is often used in game interface interaction design. But the same example, if you do the network of game development or server-side, it does not involve ergonomics. So here's the thing to say, now that the game development process is broken down very thin, different skills can be found in the field of game development, but do not expect to be proficient in any skills, and then one or two people to play a complete set of games. Most of the areas of game development can be covered in general software development as well. For example, a database, many people think that the database is irrelevant to the game. But in fact, in the game development, backstage database's access efficiency, the distribution characteristic and so on is the serious influence game experience. So the skills you do well in traditional software development are used in game development. However, the differences are still there, and some of the highlights are manifested in visual effects, interaction characteristics and network performance. In general software development, we will follow the practice of operating system to provide users with an interactive experience, but the game is just the desire to give users a unique experience, so there are often different interaction characteristics. This may be small to the design of a button, large to the entire operation of the process. This interaction is related to the nature of the input, for example, the screen of a cell phone and the keyboard are not the same as the PC. So the game to the whole system of input and output research, and operating system and the general software is not the same, the root is that it to provide uniqueness. The game on the network layer of research, and traditional software is not the same, but this is not the result of unique characteristics, but the user-level problem. In systems such as banks and telecommunications, the efficiency of people's data transmission is usually ensured by database systems and hardware systems, so you only need to study the optimization of data and libraries. But we can not let users pay to buy MSSQL, the end of the line to play the game, so the game development in a very high order of magnitude, their own to solve the data transmission and database use problems. However, the game is a multi-user, strong interactive system, so the problem that erupts quickly is distributed problem, parallel problem and so on. The problems that were originally assigned to a particular domain in other developments need to be solved in the game in their own way. We rarely emphasize how game development differs from the development of general application systems in the direction of skills. The fundamental reason is that there is commonality between software technology and other knowledge. Any specialized technology can play its unique role in a field, and any extensive knowledge will help developers find a more reasonable solution. In addition to these, I think more important interests and attitudes, such as game development need you to find and find fun, and the development of the bottom of the system requires you to have a more tenacious perseverance and deep Foundation. This, not the skills that can be made up.