Reply: I won't Ooo, I can still xxx
Please indicate the source when reprint: http://blog.csdn.net/absurd
According to the reading method in "dead judge", the title can be read: Answer: I will not circle, still can cross. A ring Cross doesn't refer to anything, but a wildcard. Such as: I do not understand the principle of COM and still call COM components. I do not understand the data structure and can still write programs. I can't remember the common APIs and still use IDE. And so on.
I am a peace-loving person. I do not like to speak with others, and almost never write articles that actively attack others. "I love more teachers and truth," said asistus. Let me apply it as, I love peace, and I love truth. I will not write this article if it is just for personal gain. Here we will clarify some ideas that I personally think are correct and want to discuss with all interested friends. However, it is not necessary to launch personal attacks, and there is no need to initiate a verbal war.
Those friends are also telling the truth. They do not know some knowledge and can still do the relevant work. This reminds me of a small story: when I was a sophomore, I met a professor who opened a appliance repair shop. I want to learn electrical appliance repair from him. He agreed on the condition that I had to stick to the two-year circuit diagram. I found a circuit diagram of Changhong TV. After reading it for a few days, I found it too difficult. After two weeks, I did not understand it.
I found the professor and said, "Why do I have to look at the circuit diagram? Why do primary school students not even know what it is, let alone understand the circuit diagram? Why can they also repair household appliances? If you don't want to teach me, let me look at the circuit diagram for two years. The professor replied: Can Pupils compare with professors? For primary school students, he can repair some cases in the book. If there is a difference with the case, he will be confused. Professor, the circuit inside the electrical appliance is clear, no matter where it is broken, what phenomenon, put a few key points of the voltage and current, find the root cause of the problem.
You do not need to understand the operating system principles when using Windows. You do not need to understand the Document Object Model when using a browser. You do not need to know Ole when embedding excel in word, photoshop users do not need to be familiar with graphics, and VS 2005 users do not need to be proficient in compilation principles. There is no error. for users, they do not need to know what they do not need to know. This is user-friendly and worth advocating. As a software engineer, you should understand the operating system principles, compilation principles, and related things.
I don't want to say that others are impetuous. I am also impetuous. I just want to say that others' impetuousness is only 50 steps. Who is not impetuous in this year? But from a practical point of view, it is not proud to know some knowledge. Is theory useful? Do you want to figure out a principle or remember the most commonly used API. This is a matter of benevolence and wisdom. Some personal experiences are listed later.
From graduation to now, I have been bringing around a book with only one data structure. For the purpose of learning, I wrote most of the data structures and algorithms in it three times, not including those that have been written separately at work. At first, I started to get familiar with its principles. Later I began to think about how to write code more elegantly and make the Organization more reasonable. This actually consumes a lot of my spare time. It turns out that these times are not in vain. Later experiences tell me that almost all programs are combined by these basic algorithms and data structures. Having a solid grasp of these basic algorithms and data structures makes it easier not only to write programs by yourself, but to read other programs. If you still insist that you can still write programs without understanding the data structure. I will say that you will never write fast, no one else writes well, the program does not write fast, and no one else's stability.
Later, I spent a lot of time learning the design model. The design pattern is not fashionable, but practical. There are more than a few concepts. I not only carefully read the book, but always tried to use it for practice. I was afraid that I could write a small program myself, and I did not forget to hook up with the design pattern. Looking at those programs now, it may be ugly, but it is the exercises that allow me to master the design pattern skillfully. Now I will never change, but I will use the design model, because I know where to use and where to use it. In retrospect, the design pattern has helped me a lot in many places. If you are still talking about the design pattern, you can still write programs. I can only feel sorry for you, but you are stubborn to turn a blind eye to such a good thing.
In the past, a company's product was based on Apache. I was only responsible for maintaining the mod_proxy module. My task is to modify it to support HTTPS. I can still do this task without studying the Apache architecture or reading other code. However, I used a lot of time to study the Apache architecture and read the HTTP protocol. I understood its concurrency mode, its configuration mechanism, and its module loading mechanism, understand Its log mechanism, and understand the basic architecture as a server. This is helpful for completing your tasks. More importantly, the knowledge you have learned is helpful for your subsequent work. When I first arrived in Shenzhen, in a new company, my first task was to develop an automatic compilation server. The entire process was automated and it still supported multi-user queuing compilation. Compared with Apache, this is naturally a small dish, including requirement analysis, design code, and user manual, which will be completed in less than ten days.
For some time, I maintained HTML tidy, which is a small tool developed by W3. It is used to fix errors in HTML webpages and output them to An XHTML file. It is equivalent to an HTML Parser that uses the knowledge of compilation principles. I don't know much about the compilation principles. If I try to fix bugs, the problem will not be much. I chose to learn compilation principles, spent at least half a year in my spare time studying relevant theories, and I wrote several microlanguage interpreters. I felt like I was a half Compilation Principle expert. I found this knowledge very useful, especially the state machine, which is very convenient for string processing. I have also written some code generators based on the Compilation Principle and used them to generate similar and different code, which saves me a lot of time. If I stubbornly thought that the theory was useless at the beginning, I would have missed such a powerful weapon. What a pity.
I have maintained an xmltransformer. Its function is to call the xerces function to parse the XML and XSLT files into domtree, and then call the xalan function to convert the two domtree files into an HTML file. In fact, as long as you know the xerces interface and do not understand the internal working mechanism of xerces, you are fully qualified for your work. I still spent a lot of time studying xerces Code. At this time, I have not read the design pattern, but the code of the SAX Parser. I understand the builder mode, and then I tried it again and again, in this way, I write a module for parsing the Apache configuration file, a module for parsing the ini configuration file, a module for parsing the xml configuration file, and an LRC lyrics parser. You see, time is not in vain.
Some time ago, the boss asked me to write the microwindow control test program. I spent a lot of time studying the implementation of microwindow, understanding its message mechanism, and understanding the implementation mechanism of various controls, remember the style, message, and notification of each control, sum up their rules, and write a general test program. Not only did I complete that task in advance, but it also helped me to write programs with Win32 SDK later. Because you are familiar with commonly used controls and APIs, the programming speed is greatly improved, and the error probability is also greatly reduced.
I have also studied wine code, mainly to understand the implementation principle of COM, to satisfy my curiosity. The seemingly insignificant knowledge was then delivered to the big application market. To simplify the inter-process communication mechanism, we implement a set of inter-process communication mechanism in an embedded system, which greatly simplifies process calls between processes and becomes one of the basic architectures of that platform. I also studied the implementation of GDB and ptrace because of my interest. The learned knowledge also came in handy in my later work.
There are also many such examples. I just want to explain the fact that when books are used, they hate less. Knowing a lot of knowledge is better than knowing it. Knowing it at least gives you one more choice, and may even come in handy when you don't expect it.
As a programmer, I choose not to learn, or restrict myself to a small scope because of my views. I personally think it is not wise. In a word, if we know them, we may do better. If we don't know them, we will never do better!