I. Central Ideology
This article analyzes the gap between theory and practice in the software industry from the perspective of theory and practice, and focuses on the role and significance of improving practice in the entire software industry; however, this article will not deliberately belittle the value of the theory, and the theory is also very important.
2. Software Industry theories are closely dependent on practices
The software industry seems to be more relevant in theory and practice than in other industries, because it is used too much, regardless of national defense, technology, education, Internet, and daily life. Therefore, there are many examples to analyze the theory and practice of the software industry. It is also because of frequent contact that the degree of integration of theory and practice becomes more important.
At this moment, there are already many theories that can guide how to practice them. However, it is undeniable that this situation often occurs, and I think it should be the case. However, after practice, it seems that there is a problem and the cause of the problem may be inexplicable, or it's strange.
Why are there such inexplicable situations? First, it is because of incorrect theoretical understanding, incomplete understanding, personal understanding, and incorrect use of practice. Second, the practical environment is not common, or the sub-modules in the environment are not common, as a result, the code generated by the theory is improperly applied to practice.
For the software industry, due to different hardware, different operating systems, different supporting software on the operating system, application compatibility, different user use scenarios, and other reasons, the practice is too different from the so-called theory. This also proves that the software industry theory is closely dependent on practice.
III. The majority of Theories
This theory cannot be understood at will; some have tried several times, some have been proven after years of practice, and of course cannot be regarded as a permanent truth, at least in this period, we can see the truth as a matter of fact.
For theory, textbooks have already been mentioned enough. If more is said, it is easy to come up with an idea that is accepted by default. Although this is fine, it may also lead us to a wrong understanding: after reading this theory, we have understood it from several or more practices, I assume that I have fully or basically understood this theory. Of course, compared with those theoretical creators, the learner is indeed far and far behind.
Just like, for example, one of the functions of a compiler in a broad sense is to compile the source code into a target file and finally generate an executable file for use. Theoretically described, including preprocessing, compiling source code as the target file, and linking to the target executable file. To be specific, preprocessing is like text replacement. Compiling the source code as the target file seems to be the most important task, the link process creates different files based on the executable file formats of the target platform;
For example, can we simply understand text Replacement Through preprocessing? How is text replaced? Which texts need to be replaced? If the header file contains the file, will it disrupt the previous Code after replacement? If the original code is disrupted, how can we restore it?
Compile the source code as the target code process. If an error occurs, how can the error location be accurately located? If the source code is too long or the variables and expressions are too long, how can we reasonably store them? How to optimize the syntax tree? How can we improve the compiler efficiency?
How does one record the location of different target file segments during the link process? Where is the final Executable File dependent dynamic library information stored?
Imagine how much help the original theories would have to do with this?
For example, if you find that data is garbled somewhere, why? Of course, in general, it is likely to be a code error. There are a bunch of problems. Is the encoding of the data used by the current application incorrect? Or is the code supporting the software incorrect? Or does the operating system use the default processing to cause garbled characters? Or is the imported data wrong? Or is this error caused by virus error interference?
If a module (in a broad sense) has an error, can you tell us why other modules are correct internally?
What is the meaning of the encoding used by an application at the binary level? How can I know the encoding on the UI? What is encoding used for written code?
For interface display, what is the dependency of character display? Where is the library? How do they work?
How does the operating system load applications? What is the application loaded? What is the so-called virtual address when an application is executed?
What symbols are contained in the library? How can I split a database into different target files? Is the address used by each function or variable in the Library a virtual address? How is the address used for calculation? How is the actual address converted during runtime?
How is an operating system scheduled? Is the clock necessary for the operating system? How does the operating system manage virtual memory? How can I notify the operating system of hardware exceptions?
......
......
In short, there are far more things encountered in practice than in theory. After several practices, it is often far from understanding theory; there may be many problems to explain or try to prove how the practice should be done.
Iv. Low software development requirements lead to an increasing gap in Theory and Practice
China is not the birthplace of software. More technologies are introduced from abroad, and more convenient ide tools are emerging. A large number of supporting software, class libraries, and a large number of ready-made sample code or open-source code are available, it may be a psychological implication that more developers do not have time or even want to further understand the relationship between practice and theory.
It is undeniable that this situation will only lead to a further increase in the gap between theory and practice. In other words, developers develop software like a user.
It is also undeniable that the solution to the problems in practice is indeed a way to improve the theoretical understanding. However, it is undeniable that there are countless development programs in China that have gone through this process, or even repeat the painful process of re-understanding the theory over and over again, it is difficult to change.
5. What does the gap mean?
The gap between theory and practice means that China's software is still very low-level. On the other hand, it means that the reality makes China's software very messy. So many theories have to be abandoned to follow the world trend, on the last hand, it also means that China's software industry is still very impetuous.
If they do the right thing from the perspective of money, but from the perspective of whether or not the software is finally created, of course, it also creates an undeniable fact, it is not conducive to improving the overall level of Chinese software in the world.
Xichen
2012-6-1 17:08:47