China's 5,000-year culture has created many of our personalities, one of which is greatness. This is particularly reflected in the software industry in China.
Not bad. We do have a huge number of netizens, with unparalleled market and user needs, but this is not enough to get us into the world first. In the huge market advantage often let us somewhat blurred, some on the ground, some blindly national pride, shouting such as "catch the Premiership beauty" slogan. However, objectively speaking, we are now in a very big gap.
Maybe you think I'm a little xenophilia, but I'm going to have a careful analysis of the software we've designed. Do we focus on software quality? Do we do every design on thin ice? are each of our systems writing high-quality code? Maybe the first version number of each project we did. But along with the software life cycle continuation, and the software requirement unceasing change. It's really getting harder for us to pat the chest and say, I did it. This is the current Chinese software: There is no high-quality software design. Where is the high-quality software system?
So, as a member of the Chinese software industry. You should reflect on it carefully.
The following article, a true story, may be able to give you a lot of sentiment:
In 2012, I received a mission to conduct a research project on a 10-year-old software system that enables it to be centrally operated by existing provinces. To the national centralized operating model.
It is no doubt that the original, each province one server operating mode, instead of all the business is focused on one server to operate. This is a performance issue. By increasing the cache, distributed processing, database partitioning, and read/write separation techniques to solve large concurrent access to large data processing, the problem is overcome.
Initially. I feel the same way. But I really dig into the program code of this software system and find out. The problem is not as simple as it might seem.
Although I've heard about it before, I was shocked when I really went into the code.
The entire project, a class of hundreds of methods. A method of thousands of lines of code where. Abound.
When you walk in hundreds of ways. or thousands of lines of code. Even if I've worked as a veteran for more than 10 years, it's pretty hard to read, not to mention the new students who just graduated. At this point, I realized that assuming that the existing code structure was not changed, the system really could not carry the technological transformation of whatever.
I made a visit to the old staff who have been involved with this system for years, the "veterans". They told me. This system is actually very good in the initially design. However. Experience is a ten-year maintenance. Various functional requirements. Gaga minus. Constantly updated, the version number of the upgrade hundreds of times, the problem becomes more and more large.
As people flow, some code becomes blind. No one is sure what it means, at the same time no one dares to go to it, no matter what changes, unless forced. Each new employee joins. Do not easily change the original code, no matter what, but on the basis of the original code to constantly add code. In this way, as the functionality changes, the new code expands to the same extent as the tumour, and finally expands from hundreds of lines of code into thousands of lines of code, extending from dozens of methods to hundreds of methods, and the quality of the code continues to decrease.
and slowly. Program apes are getting more and more ignorant of the code, but they have to finish their work, so the development work becomes an adventure. So how can companies guarantee that the new program is correct every time they go online? That's the test, the great effort and the time. Because the program is getting more complex. The cost of testing each change has become huge. And then, because the developers think. The total number of test personnel can detect problems, so they are only responsible for development can be. All the verification work is given to the test personnel. No doubt. The project has plunged into a vicious circle that is hard to extricate itself from. The maintenance of the status quo is already exhausted. What about any technical transformation?
However, I feel that this is not a case, but a common phenomenon. Let's think about it. Which software company did not operate a legacy system for several years? Which system is not experiencing frequent changes? After dozens of changes in these systems, who dares to clap their breasts and say, our design is still very clear. Our code is still very good, I'm afraid not.
"That's it." Better to die than to live! "Perhaps most people will think so, but they don't include me. I've been a firefighter for decades, to rescue software systems that can't be executed anymore. I rarely develop new systems, and I always take over an old system halfway. These systems initially have very messy code and are difficult to maintain. But as I took over, things started to get better. I'm always changing them, optimizing their code. Make them easier to read, easy to maintain, easily change.
Slowly, our maintenance work became more and more relaxed, we started drinking coffee, listening to music, enjoying the programming life.
The method I use is called "refactoring".
Refactoring is not a fancy term for high-end atmospheres. It's not too sick to take out the ultimate kill trick.
It is not to change the original system beyond recognition, not to take the code a blind change of reckless.
It is a scientific and robust continuous improvement. After years of work practice, I deeply feel that such a method is the most effective way to solve the Chinese software, because:
If you are maintaining the legacy system itself, the design of the legacy system itself is not good, the code quality problems, then you can use such a method, continuous and steady transformation, and finally the maintenance of software into a virtuous cycle.
If you are a designer, you are designing a new system. But your design ability is not good enough, do not know how to adapt to future changes, then no matter, think about today's design. With refactoring, we don't have to worry about future changes. So that each person can write high-quality program code;
If you are a legacy system maintainer, you find that the original program can not adapt to the new requirements, then there is no relationship, through the reconstruction of the original system to adapt to new requirements, and then add new requirements. By doing this, you will find that you are very easy to design high-quality code, so that the addition of new features will not reduce the quality of the original system.
When all the software companies have done this. Then the quality of Chinese software starts to improve. China's software industry can really take off.
This article Fan Gang. System Architect. participated in dozens of large-scale software development projects in China.
Author of a book on "Big Talk Refactoring".
The Chinese software industry really is the time to rethink.