The technical ideals of old programmers

The technical ideals of old programmers

[[133852]]

When I was a child, my teacher asked me, what is your ideal? I answered without hesitation that I wanted to be an engineer, and I really became an engineer when I grew up.

After working for so many years, I have been thinking about the meaning of the word "engineer". Finally one day, I suddenly realized that it means: to improve the world with technological means.

So, what problems does the world have in software that need to be solved? Here are some questions to think about:

Is the current level of informatization in the world too high or too low?

Are there enough programmers?

Is productivity in the software industry high or low?

Are most software systems reliable?

I would like to talk about my understanding of these issues.

Although our lives have changed dramatically compared to ten years ago, such as the popularity of smart handheld devices and the booming development of wearable devices, we used mobile phones to send and receive text messages or emails and browse very simple and old-fashioned wap pages ten years ago, but now, mobile phones have replaced computers for most people and become an indispensable tool in daily life.

We use mobile phones to communicate, shop, watch movies and TV, read books, and play various games. In particular, the rapidly developing mobile shopping and payment systems allow us to buy our favorite items in any occasion, order travel services and hotels, order fast food, take taxis, etc. Life is very wonderful. So, what is the level of informatization in the world as a whole?

I think that it is just the second grade of primary school, and the degree of informatization in the world is still seriously low. From now on, 10 years ago, 10 years later, in the next 20 years, the information services for individuals are in a period of rapid development. This field is very eye-catching because it is closely related to everyone's life. However, there are other fields that need to be developed urgently, that is, the informatization of traditional industries.

In the past, many traditional industries have carried out a certain degree of informatization, but this informatization can only meet the basic requirements of their own operations. When it is connected with the trend of the whole society, it seems very backward and slow. For example, in the large system of online shopping, ordinary users can only see the process of product display, price comparison, and ordering, but the core link behind it is the distribution and logistics.

When I was still in school, a teacher said that the computer industry is very hot now and may be saturated. You don't have to work in this field. Looking back at this sentence now, I find it very interesting. It is really difficult for people to have a vision to see the future. When I joined Suning for training last year, Vice President Sun Weimin told me an example of a wrong decision made that year. In the late 1990s, the company found that the annual sales of air conditioners in the country reached millions of units. It was scary and thought that the industry might be saturated. It was estimated that it would have to find ways to expand other products. But now, the number of air conditioners in the country is 700 million. Even if there is no increase at all, it will be replaced every ten years, and 70 million units will be sold every year. Why did you say that this was saturated?

So I see that the programmer situation is still in short supply, especially high-end programmers, who are in great demand. The background of this problem is that the information process of the whole society is accelerating, and the number of programmers before is far from keeping up with the demand.

So, how to solve this problem? On the one hand, we should continue to train more newcomers to enter this industry and make them work seriously. On the other hand, there are some other measures that need to be considered.

I want to ask a follow-up question: Are there more people who understand business or technology in the world? Obviously, there are many more people who understand business. What is business? In fact, it is industry common sense and life experience.

For example, an experienced warehouse keeper may not have a high level of education and may not understand the operating principles of the software, but he must be very familiar with the process of product delivery, including various approval processes and abnormal conditions, but programmers do not understand these. If we want to promote the informatization of this field, we must find a combination point between the two. Programmers can learn business, and business personnel can also try to participate in the software development process. At present, the former is more common because programmers are relatively young and learn things faster. But from the perspective of overall social benefits, this is actually disadvantageous because programmers are a more scarce resource, while traditional business personnel are very numerous.

I have seen a problem before: how to let business personnel better participate in the software development process. The fundamental solution to this problem is DSL (Domain Specific Language), and the core solution is the secondary development platform.

What are DSL and secondary development platform? These two words sound very high-end, but in fact, many commonly used things belong to this category, such as Excel, which provides a variety of formulas and VBA. Most people who use these things are not in the software industry. Excel is a very successful secondary development platform, and formulas and VBA can be considered DSL.

Often these things are not intuitive enough. We can see some graphical programming languages, such as Scratch, which many primary school students learn in their interest classes. These things are relatively easy to learn. We can also make some similar abstractions to allow business personnel to participate in a graphical way, such as process configuration, etc. Graphical things are most suitable for non-technical personnel to understand.

Therefore, to promote the level of social informatization, the best way is to find a way to get business personnel from all industries involved. The specific division of labor is roughly as follows: technical personnel and business personnel define DSL together, technical personnel are responsible for the underlying platform implementation of DSL, and business personnel are responsible for using it to build business models and business processes, and even business interfaces.

So, is the productivity of the software industry high or low? I think it is seriously low. What does seriously low mean? If compared with the transformation of mechanical power, the current productivity level of the software industry is before the invention of the steam engine. In other words, productivity is far from being liberated. Most of the things we do will be mechanized in the future, and we will no longer need so many people to do such repetitive labor. Many people may be dissatisfied with this statement. How can it be repetitive labor? What do I do that can be replaced by machines?

From another perspective, why do almost all laymen think that software is expensive? Because the labor cost is too high. They think that it shouldn't take so much time to make so many things. Why is the contrast between the two sides so great?

I think the key point is that the level of abstraction of most work is seriously insufficient. In addition, a large part of the efficiency is lost due to the imperfection of the programming platform or programming language, such as the Web front-end.

From the first to the fourth generation of programming languages, each generation has lost a certain amount of operating efficiency, but greatly improved the writing efficiency. With the development of hardware technology, software programming is bound to become more and more extensive, and the general trend is not to pay special attention to detail efficiency, as long as there is no order of magnitude performance loss.

Therefore, we can expect that more and more people will use some relatively inefficient languages ​​or frameworks just to improve productivity per unit time. From the perspective of bosses, they will also understand that improving the performance of running machines is much cheaper than hiring more programmers. Therefore, from the overall trend, programmers who pursue detailed performance may be further and further away from their ideals, except in certain specific fields.

So, are most software systems reliable? Let me ask this in another way: Dear programmer friends, if the quality of the house you live in is the same as the software you are working on, would you dare to live there? It seems that everyone is laughing, and we all know what laughing means.

Why is it difficult to improve the quality of software systems? I think the main reason is that the process is not perfect. Why is it not perfect? ​​Requirements are easy to change. Why are they easy to change? Because both programmers and demanders subconsciously believe that what they make is less costly to change.

Just think about it, why doesn't anyone change requirements when they are building a high-rise building? Why doesn't anyone change requirements when they are building a bridge? Even changing requirements when you are making clothes or cutting hair is considered unreasonable. But in the software field, this seems to be a common phenomenon.

Because the entire software system is virtual, invisible and intangible, and does not consume any materials, it is easy to change from this perspective. However, the architecture of the software system is actually no different from the physical one. When making changes, many related factors must be considered, and it is not just a small area in isolation. Of course, there will be some changes that do not affect the overall situation. For example, if you are building a house halfway, it is definitely easier to change the color of the exterior wall than to change the size of the windows. If you want to change too much, you will probably have to tear it down and start over.

I have seen many companies try to control quality by strengthening testing, but I personally think this method is not cost-effective and ineffective. In order to cope with demand changes, it is very important not to think that the software will never change. Then, split, isolate, and componentize the architecture, and strive to make sure that even if changes are made, only the internal part of a certain part is changed without affecting other parts.

Many software companies, on the one hand, do not pay attention to the design and promotion of architecture, which leads to many problems when changes are made and programmers cannot fully understand the architectural intent. On the other hand, they ignore the control of the architecture throughout the entire process and believe that the architecture is just the initial static picture.

Any architecture solution requires a good control mechanism. No one who builds a building only cares about the design drawings and does not control the construction process. The architecture is actually strictly related to the construction process. The architecture is not a flat picture, but a three-dimensional thing, which serves as the skeleton of the entire system engineering. If you can see the process of this skeleton being gradually established and fleshed out during development, you will have a better grasp of the success of the entire system.

This is the concept of architecture control during the development process, and the specific implementation depends on different scenarios.

Therefore, future software development plans will definitely develop in several directions:

High productivity, higher production efficiency per unit time, ordinary people can also participate

High controllability, the entire production process is more complete and reliable

Sometimes when I look at the children today, I feel that they are very happy, because when their generation grows up, they will not need to write programs like we do now. By that time, programming will have become a common skill that people are accustomed to, just like people use Office software now. The so-called programming may no longer require typing code, but will be graphical, and just need to set a few parameters and it will be done.

<<:  Foreign article analysis: iOS and Android on Windows

>>:  iOS 8.4 third beta released: the new music app is further improved

Recommend

Why SwiftUI’s modifier order matters

[[414805]] This article is reprinted from the WeC...

From 0 to 1, play with short video promotion and operation on Tik Tok!

Today we will share the following 5 major section...

How to do new media promotion? Real estate planning case details

Introduction: Interactive content and full networ...

National Fire Fighting Day丨Today, thank them!

The "Chongqing kids" who fight day and ...

How to classify users and design refined operation strategies?

As operations enter a refined stage, how should u...

There is actually a Mars-like area on Earth. Where is it?

Apart from Earth, which planet is most familiar t...

It’s 2023, why haven’t seedless pomegranates been invented yet!

Nowadays, people have higher and higher requireme...

Is Xiaomi worth $40 billion? Is it worth more than Lenovo?

After Xiaomi ranked third in the global smartphon...