Thoughts on Good Programs and Good Products

I have been in touch with computers since I was a child, started to systematically study software engineering in college, and continued to code after working. I have compiled so much code. I am thinking about the meaning of everything I do. I also ask fellow farmers to think with me about how much the crops we cultivate can contribute to others, the society, and ourselves. Sometimes I wonder what we have learned so much, what is the point, what is it for? We have learned composition principles, data structures and algorithms, various languages, design patterns, various architectures, software engineering, agile development, project management, cloud computing, big data, etc., then what is the ultimate purpose of these things? Woolen cloth? I think the purpose is to make a good product. The premise of a good product is a good program. Most of the knowledge we learn is to write a good program. I think a good program is nothing more than three points: 1. Excellent performance, performance is a very important feature of the program, whether it is office software, antivirus software, games or almost all programs on the web are very concerned about performance, no one likes slowness. software, we learn computer principles, algorithms, data structures, various xx performance optimizations, various xx tuning, various high-performance xxx, various xx programming arts, various architectures, distributed or parallel computing. What is the ultimate purpose? It is for good performance, and to put it bluntly, it is for program efficiency. 2. Easy maintenance: programs are not static, and maintainability is also very important. What is the way to clean code, programmer quality, simplicity, software engineering, design Patterns, refactoring, REST, AOP, IOC, object-oriented, UML, document-driven development, and other concepts of various methods, in fact, the purpose is to make the program code more beautiful, more reasonable in structure, more convenient to change, and more in the future. Well maintained. 3. Good robustness: As a good program, there must be fewer bugs, which is a must. There must be a good response plan for various reasonable and unreasonable operations of users. We learn various testing techniques and various programming. Ideas, security technology, cryptography, various high availability, various master-slave architectures, various backup technologies, etc. are all to ensure that our programs run in a good state, whether it is a user's misoperation or malicious attack, whether it is Whether natural disasters or man-made disasters, our programs can face them calmly.

做到上述3点我觉得就是好程序了,当然,写好程序的前提是得会写程序,所以还有些基础知识是我们必须学习的,比如各种语言啊,操作系统啊,计算机网络啊等等基础的东西,这些东西可以让我们可以开发程序,但不足以开发好的程序。这也是区分初级程序员和高级程序员及架构师的标准。

Knowing how to write programs can only be regarded as a programmer or a junior engineer. If you meet one of the criteria for a good program, you can be called a senior engineer. For example, if you can write high-performance programs, no one will say you are a junior engineer. For example, The program you wrote has no bugs, and it is certainly not something that a junior programmer can do. If you meet more than two of the above three points, you can reach the level of an architect. For example, some architects are good at high-performance architecture, and some architects are good at process management and development specifications. Usually, there are very few personnel who satisfy all three points, because in fact, from the perspective of growth routes, there are actually three different development routes. Those who meet the first point, that is, write high-performance programs, are usually computer science and technology or related majors. These people have good logic, good mathematical algorithm skills, and a deep understanding of the underlying computer. They tend to be theory-oriented. During their training Most of the focus is on algorithms and theory, and the concept of engineering is diluted, usually they are used to process-oriented development, and the code usually looks unorganized. Those who satisfy the second point are usually those who study software engineering. These people do not like mathematics, do not refine algorithms, and do not have much contact with theory. They are more concerned with actual engineering development, and are better at design patterns, development processes, UML modeling, and data construction. Models, they pay more attention to language and code, and they do not have too high IQ to write programs that are not easy to understand, so the programs they write are easier to maintain and readable. Those who meet the third point are usually partial testing or information security. They focus on software vulnerabilities, attacks and prevention. These people usually do not write algorithms or develop programs on a large scale. They are more looking at other people's code and discovering Problem finding bugs, and trying someone else's program. For example, the professions such as mages and warriors in the game have different development directions, and it is somewhat difficult to think about specialization. It is precisely because of this that writing a good program is usually not something that can be done by one person, and requires the cooperation of a team. So don't say that the program you wrote is good, your algorithm is good and efficient, maybe the code is like a piece of flying, his code is very beautiful The high design is good, but there are a lot of bugs. . So it is difficult to say on the one hand who has written a good program. So having a good program is equivalent to having a good product, of course not. A good program is only the premise of a good product, and it is a necessary but not sufficient condition. You say that your product has a lot of bugs, it runs slowly, and the scalability is not good. Do you dare to say that your product is a good product? Of course not. Is that a good program is a good product? No, many software and product programs are very good, with few bugs, fast running, and beautiful code, but they still fail. Why? Because its interface is huge and ugly, the user experience is not good, it is not easy to use, and the most fatal thing is that it does not touch the pain points of users, has no features, and has no advantages over other products. What is a good product? I think there are three points: 1. Innovative, that is to say, this product is unique, it can touch the pain points of users, and help users solve problems that could not be solved before. In other words, users use After this product is inseparable, it has become a part of life. This is the core competitiveness of the product. Review all successful products, windows, office, email, google, Baidu, Taobao, QQ, etc., The success of these products lies in the fact that his innovation has changed the way of life of our people. The bigger the change, the more successful the product will be. Why did Microsoft succeed? He made the world enter the computer age and made a huge change in the world. Linux is also successful. product, but why there is no success with windows, that is, his influence is not as big as windows, he only changed the server market. Looking at QQ, more than 10 years ago, people's communication was still based on pagers, mobile phones, and text messages. QQ has changed the way people communicate, and its influence in China is too huge. Almost everyone has at least one QQ account, including middle-aged and elderly people. This is where he succeeded. Conversely, if you find something that can change people's lives, do it (don't forget to call me), if someone is already doing it, join them or invest in them, if someone is already doing it , then you can only curse them, just like you are now scolding Tencent. 2. Fully understand the user, which is also indispensable for a successful product. You must pay attention to the user experience. It is actually very difficult to achieve this. Many times you are imagining the needs of users. In fact, users do not want that. There is too much knowledge here. What is needed is not only the knowledge of computer science, but also the comprehensive knowledge of psychology, art, philosophy, mathematics and other disciplines to fully understand users. Now the hot big data is making a bang Yes, for what purpose? It is to fully understand the user, understand the status of the product, analyze and mine the user's needs, so if the user's psychological thoughts cannot be tapped, let alone engage in big data, at best engage in report statistics or something. In fact, it is not necessary to engage in big data to fully understand users. There are many ways to understand users. I think the most direct and most effective one is that you are the user yourself. Of course, this also has limitations. After all, you do not represent the majority. However, before doing such a large-scale analysis, your product must first be satisfied with your own use and be comfortable. I just said that the success of qq has changed the way people communicate. Some people will ask, why is qq successful when there are so many chat tools? In addition, qq meets the standard of good program, other software may not reach the stage of good program, some are slow, and some have many bugs. In addition, after you fully understand the user, you will know what the user needs and what the user's habits are. Then your product must conform to the user's habits, and at the same time, you must cultivate the user's habits. Just like engaging with objects, you will be inseparable after a long time. Open, your product is successful, and you have money. . . 3. Good appearance: Needless to say, people are more perceptive, and the pursuit of beauty is instinctive, and software is no exception. Good-looking always has advantages, there is no way. Of course, it satisfies the previous premise, because of course it is not good if it is not suitable for use, but it is normal to use the good-looking one under the premise that it is equally easy to use. 3. Good appearance: Needless to say, people are more perceptive, and the pursuit of beauty is instinctive, and software is no exception. Good-looking always has advantages, there is no way. Of course, it satisfies the previous premise, because of course it is not good if it is not suitable for use, but it is normal to use the good-looking one under the premise that it is equally easy to use. 3. Good appearance: Needless to say, people are more perceptive, and the pursuit of beauty is instinctive, and software is no exception. Good-looking always has advantages, there is no way. Of course, it satisfies the previous premise, because of course it is not good if it is not suitable for use, but it is normal to use the good-looking one under the premise that it is equally easy to use.

The above are some of my thoughts on good programs and good products. Following this trajectory, if these points are achieved, I think there is no reason for failure. Just imagine, one can change life, make life more convenient, and have a good operating experience. , The interface is beautiful, there are no bugs, the response speed is fast, and the products that are updated frequently, will no one use it? It is impossible. Failure to succeed is definitely a bad life. But having said that, it is not a long-term effort to create such a product, let's encourage it with you. .

{{o.name}}
{{m.name}}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324217305&siteId=291194637