As a child, the teacher asked me, what is your ideal? I said it was an engineer, so I grew up to be an engineer.
Work for so many years, has been thinking about the meaning of the engineer three words, and finally one day, the original is: the use of technical means to improve the world.
So, in terms of software, what are the problems that need to be addressed in the current world? There are some questions to consider:
Is the information level of the whole world now high or low?
Is the number of programmers enough?
Is the productivity of the software industry high or low?
Are most software systems reliable?
I want to talk about my understanding of these issues.
While our lives have changed dramatically compared to a decade ago, smart handheld devices are already popular and wearable devices are booming. Ten years ago we used mobile phone to send and receive text messages or emails, browsing very simple and old-fashioned WAP page, but now, most people's mobile phones have replaced the computer, become an indispensable tool in daily life.
We use mobile phones to communicate, to shop, enjoy the film and television, reading books, play all kinds of games, especially the booming mobile shopping and payment system, so that we can buy the right items in any occasion, ordering travel services and hotels, called fast food, taxi and so on, life is very beautiful, then, the whole world of information level at what level?
I think, just the equivalent of the second grade of primary school, the whole world of information level is still seriously low. From now on, forward 10, 10, the 20-year period, for the personal information services in the high-speed development period, this area is very eye-catching, because it is closely related to everyone's life. However, there are some areas, but very much needs development, that is the traditional industry information.
Before a lot of traditional industries, carried out a certain degree of information, but this information can only meet the basic requirements of their own operation, when it and the trend of the whole society relative to the time, it appears very backward, slow. For example, in the network shopping system, ordinary users can see is the display of goods, parity, the process of order, but the core behind the link is the distribution and logistics.
When I was in school, a teacher said, now the computer industry is very hot, it is likely to be saturated, you do not have to do this work. Now look back at this sentence, find it very interesting, people really hard to see the future. Last year, when I went to the Suning training, Weimin vice president told a case of decision making mistakes. In the late 90, the company statistics found that the annual sales of air conditioners reached millions of units, feel very terrible, this industry may be saturated, it is estimated to find ways to expand other commodity management, but now, the national air conditioning capacity of 700 million units, even if nothing new, ten years for another round, sold out 70 million each year, What makes you think it's saturated?
So I now look at the situation of programmers, is still in short supply, especially high-end programmers, very sought-after. The background of this problem is that the information process of the whole society is speeding up, before the number of programmers is far behind the demand.
So, how to solve this problem? On the one hand, continue training, to promote more newcomers to the industry, and seriously do, there are other means to consider.
I would like to ask a question: how many people in the world know business, or people who understand technology? Obviously, the people who understand the business are much more, what call business? In fact, the industry common sense, life experience.
For example, an experienced warehouse keeper, may not have a high level of education, can not understand the operation of the software, and so on, but must be very familiar with the flow of the product warehouse warehousing, including a variety of approval process and abnormal conditions, but these, programmers do not understand. If we want to promote the information in this field, it is necessary to find a link between the two, programmers can learn business, business personnel can also try to participate in the software development process, at present, are more than the former, because the programmer is relatively young, learning things faster. But in terms of overall social benefits, this is actually bad, because programmers are more scarce resources, and traditional business people are very many.
I've seen one question before: How to get business people to better participate in the software development process. The fundamental solution to this problem is DSL (Domain Specified Language), where the core solution is two development platforms.
What is DSL and two development platforms, these two words sound high-end, but in fact, we have a lot of commonly used things belong to this category, such as Excel, it provides a variety of formulas, as well as VBA, the use of these things are not the majority of the software industry, Excel is a very successful two development platform, the formula and VBA can be counted DSL.
Many times these things are not intuitive enough we can see a number of graphical programming languages, such as scratch, now many elementary school students interest class will learn, these things relatively easy to learn, we can do some similar abstraction, in a graphical way to enable business people to participate, such as process configuration and so on. Graphical things that are best for non-technical people to understand.
Therefore, to promote the social Information level, it is best to be able to find ways to put the business staff in various industries dragged in together. The specific division of labor is: the technical and business staff define the DSL together, and the technician is responsible for the underlying platform implementation of the DSL, which is used by the business staff to build the business model and business process, and even the business interface.
So is productivity in the software industry high or low? I think it's grossly low. What do you mean, seriously low? In contrast to the changes in mechanical power, the current level of productivity in the software industry precedes the invention of the steam engine. In other words, productivity is far from being liberated, and most of what we do will be mechanized in the future and no longer need so many people to do this repetitive work. Many people may be dissatisfied with this passage, how to repeat the work, you say what I do can be replaced by the machine?
In other words, why do almost all laymen feel that software is expensive? Because the cost of manpower is too high, they feel that so many things, should not need so much time. Why is there so much contrast between the two sides?
I think the key point is that most of the work is a serious lack of abstraction, in addition to a large part of the loss of efficiency in the programming platform or programming language imperfections, such as the Web front-end.
From the first generation to the fourth generation programming language, each generation is losing certain operating efficiency, but greatly improves the writing efficiency. With the development of hardware technology, software programming is bound to be more and more extensive, the big trend is not to pay special attention to detail efficiency, as long as there is no order of magnitude of performance loss.
So we can expect that more and more people will use languages or frameworks that are less efficient, just to increase productivity per unit of time. From the bosses ' point of view, it will also be understood that it is much cheaper to improve the performance of the running machines than to hire a few more programmers. Therefore, from the overall trend, the pursuit of the details of the performance of the program will be more and more distant from their own ideals, unless in some specific areas.
So, most software systems are reliable? I would like to ask: if you are a programmer friend, if you live in the quality of the house and the software you are doing, do you dare to live? Feel everyone laughing, what the meaning of laughter, we all understand.
Why is the quality of the software system not easy to high? I think the main reason is that the process is not perfect. Why isn't it perfect? The demand is easy to change. Why is it easy to change? It's because no matter the programmer or the demand side, the subconscious thinks that what they do is the lower cost of change.
Just imagine why no one is covering the building. Change the demand? Why didn't anyone fix half the bridge and change the demand? Even if you do half the time to change the demand, barber to half change the demand, will be considered unreasonable. But in the software world, it seems to be a common phenomenon.
Because the entire software system implementation, are virtual, can not see touch, do not consume what material, so from this point of view, it is easy to change. But the structure of the software system, in fact, and the entity is not essential difference, change time to consider a lot of related factors, not so isolated to look at a small area, of course, there will be some not affect the overall changes. For example, if you cover the house in half, changing the color of the outer wall is certainly easier than changing the window size. If you want to get too much, you'll have to dismantle it again.
I've seen a lot of companies trying to control quality by stepping up tests, but they don't think it's cost-effective and ineffective. To be able to respond to changes in demand, it is important to not have this software will not change the idea, and then, from the framework to do the split, isolation, component, etc., and strive to do even if you want to change, but only to change a piece of the interior, not to affect other places.
Many software companies, on the one hand, do not pay attention to the architectural design and publicizing, resulting in a lot of changes, programmers can not understand the architectural intent, on the one hand, ignore the whole process of the structure of the control, that the architecture is only the original static diagram.
Any architectural solution requires a good control mechanism. There's no building that's serious. Design drawings, not control the construction process. The structure is in fact strictly related to the construction process, the structure is not a flat picture, but a three-dimensional thing, as the skeleton of the whole system engineering. If you can see in the development of this skeleton gradually established, flesh and blood filling process, the whole system will be successful grasp of a much greater, this is the development process in the framework of the concept of control, concrete implementation to rely on different scenarios.
Therefore, the future of software development programs, must be in several directions to develop:
High productivity, higher unit time production efficiency, common people can also participate in
Highly controllable, the whole production process more complete and reliable
Sometimes looking at the children now, will feel that they are very happy, because by the time they grow up, there's no need to write programs like we do now, when programming has become a common universal skill, and as people now use Office software, the so-called programming is probably no need to knock code, It's graphical, and it's done by setting up a couple of parameters.