A Free Trial That Lets You Build Big!
Start building with 50+ products and up to 12 months usage for Elastic Compute Service
Original link: http://blog.sina.com.cn/s/blog_7d5a09f90102v341.html
Feelings of students in the University of how to learn computer technology some sense, my book (old code to know the way) in the preface, and supplemented some later ideas, such as what is a new understanding of the system concept.
If you want to be a senior programmer or architect, what is the core competency in technology? Is it just knowledge? It seems to have become very inexpensive at a time when Google is readily available. And the loss of youth can not leave us with technical wealth, it seems to be just turning us into self-deprecating "code slaves." Where is the core competency? The author thinks that one of its key elements is "system View", which is the essential quality of advanced software talents. system view is wonderful, it can self-grow, self-improvement, you have it to have a growth of the original nucleus. It is a complex of the core knowledge structure and the way of thinking that is formed by their continuous application .
In short, I think the key is to train the system view, grasp the bottom core of things, status quo, to be able to do, the foundation is reliable.
Learn what, less is more: System view
Learn what? Remember that the Internet has not yet become the mainstream of the era, there is a master of communication in the IP router has been plagued by a problem for more than a week. The author's best friend, learning aerodynamics, he played the more than 10-year DOS system. Never actually contacted the network, just "see" a copy of the information, not IP network, only two days to solve the problem. Why is it that someone who has learned a lot of skills and language is not as good as someone who has not studied it? The other question is, "What is the most we need to master?" ”。
The author's view is: "Less is more, will this less become more." The next foot Kung fu will be "less" do deep, do thick, become more, is the future of the ever-changing rudder. This "little" is the computer system view. Take a look at the above example, the friend of Dos familiarity has reached any part of the role of address space is well-known to the point, he also achieved a Chinese DOS. This undoubtedly establishes a solid system view. This system view directs him to think in the "logical" way of the computer, and the router is just an example of this way of thinking. With a systematic view, it is a quick way to use it to guess the possible ways of conceiving learning objects and to empirically analyze them when learning new things. This is the case when the author deals with the SaaS software in the same way that hibernate stores the same persisted object in different libraries, although it is not used hibernate, but through guessing and debugging, it took about half a day to solve the problem (search is not silver bullet, the issue was not found in English and Chinese online).
In writing the old code, I am still in a relatively vague stage, that thing know where, but that is not clear. Some friends agree with this view, but they can't convince me of their definition. So on the way to old code, I was the pragmatist's view:
"What exactly is a system view?" Some things are more tacit, difficult to teach, and a matter of opinion. At this time, the tangled meaning can be used. Poetry is like a systematic view of the mood, the poet itself may be said not clear its connotation, but he can use this artistic conception, the use of the king. In fact, we just have to build a system view. How to build? One way is to write a system-level software (even experimental) from scratch, such as an embedded database, a small operating system, or a compiler. This is very effective, the friend benefited from writing a Chinese-made DOS experience, in the absence of learning embedded in the case, January time to decrypt a single-chip microcomputer solar system, and Chinese. However, this method takes a long time to be fully invested, and it is difficult. In view of these problems, the old code to identify a way to give another method. ”
Later, before a meeting, and colleagues talk about, suddenly have awareness, slowly thinking to go, there is the following point:
Computer system view is a complex of the core knowledge structure and the way of thinking which is formed by the continuous application of computers, which cannot be fragmented. Simple general thinking training and only ingesting knowledge information can not form a systematic view. It is the nucleus of self-growth, self-improvement and growth. It has a strong ability to analyze, explore and learn when it comes to ingesting new technologies and facing black boxes. This gives high-end computer talent the most important qualities.
The Core knowledge architecture covers the most essential parts of the computer field, which I think should include: computer composition principle, system structure, operating system, compiling and linking, algorithm, database principle and realization.
Why does the system view have the characteristic of "beat" and "one Labor Long Yi" in learning technology and solving problems? The following author tries from the system view of three functional analysis: analogy, construction and simplification.
Analogy because the system view contains the core knowledge structure, it covers the computer domain essential law in all computer application domain can draw lessons from and extrapolate. There are no new things in the sun, and many of the technologies in the field of application are constantly packaged, combined and abstracted in old technology. The CTO of a cloud computing company told me that when he was dealing with storage or concurrency problems, he was accustomed to finding the earliest algorithmic article of the 670 (because it described the fundamental issues very clearly), and it was easy to fit into the current problem. The author of a friend many years ago to do a Chinese dos, and then he first to do a single-chip machine to crack, only spent the January will be cracked and Chinese. He clearly pointed out that the experience of the DOS is a great help. The first time I face the Linux-driven C programming problem, but the use of object-oriented experience, spend a few minutes to solve the students due to callback semantic error caused by the bug. Because the idea of interface-based programming is consistent throughout the software and even hardware, the object-oriented is virtual, and the kernel is a callback function. These three examples all use the basic pattern and knowledge existing in the system concept to solve the first problem, which embodies the characteristics of the system view "less namely more, the old is new, the foundation is advanced, unchanged should change".
The construction system view thinking has the characteristic of the construction style. The image says, "What am I going to do?" "This way of thinking, when learning a new system or technology, can be first analyzed from the perspective of construction, which raises questions about the key points. Learning with doubt is a high efficiency. The author once looking for hibernate to manipulate the same structure multi-database scheme, from the perspective of the construction of the analysis if you do how to make the expansion, fake think of possible extension points, and then with these assumptions with debugging to test, although the first contact hibernate, with a half-day to solve. I have used the "I do how to do" mode of thinking training graduate students, some people reflect that this is the most valuable thing learned during the postgraduate.
Simplifying the face of complex unknown, at the same time facing too many unknown points, people must be at a loss, difficult to start. If you can quickly make a simple, active "ignore" filter out the details of temporary an overall picture, then you can find the crux of the problem, so quickly solve problems. The underlying features of the system concept make it have the bottom view, plus the analytic ability of its repeated quenching, so that it can accomplish this simplification and neglect task. The most direct example of simplifying and ignoring features is reverse engineering. In the face of high-level language source code often people have to find out the point is at a loss, not to mention the face of the disassembly code? To complete a task you must quickly find the key and break it with a single blow. This is also the case with an analysis of the object-oriented framework in high-level applications, often starting with key virtual functions, finding their invocation relationships through debugging, and eventually finding possible assembly logic.
To sum up, because the system view covers the mastery and application of the computer's essential law, and has the analogy, the construction and the simplification function, therefore has the very strong self-learning, the expansion, the exploration and the long-term nature characteristic. This allows students to develop a systematic view that can play a key role in their career. And the simplicity of its covering essence law makes its training cost relatively economical and cost-effective.
Two methods of constructing system view
Forward-built (training with system-view construction and analogy characteristics)
The core of this method is to build, not to build a simple application software, but to build system-level software. is to compose the operating system, compiler, linker, and database (non-database application software). For example, build the CPU on the implementation operating system, compiler. The biggest advantage of the scheme is to completely get through the hardware and software, and form the most complete and solid system view. Its limitations lie in time and individual ability. Even in 985 of colleges and universities, can only be completed by excellent students. But this excellent is not your grade rankings, as long as you are interested, have perseverance, you can complete. Believe me, I've met a girl who has been writing the OS for several months. The reason is that the girl will be more determined
Inverse destructor (training with the simplified characteristics of the system concept)
It provides a way to pifo the sword: bottom-up, reverse-disassemble the humanely, through the machine code to the framework of learning. Because, the reverse is a dagger, small, but can split the black box straight to see the fundamental, is an empirical weapon. It not only gives us a more ability, but also the OS, compiler and other related knowledge from the bottom of the press to turn to the table, and by reverse effective integration. You will find that these original seemingly abstract knowledge completely penetrated into our doubts. The inverse of this is not a narrow-sense crack, such as the bottom of the attack and defense (such as the overflow attacks and its defensive code writing), analysis of the bug, reverse analysis of the working principle and to solve the problem (this is particularly useful, with me, the reverse from the beginning to the present is the meaning, and cracked only recently did a play)
This method is used in the old code of knowledge.
My Code path: three-step chopping "code" knife
The system of cultivation is not a simple knowledge accumulation, it needs a way. The author's "Tao" is: guessing -- Empirical --- build .
"Guess" let's take the initiative to think and find the problem. Such learning is no longer a step-by-step, but a "search", the right choice to absorb, quickly and directly to the crux of the problem. If the old code 1.3.1 to learn the call instruction, not directly read the explanation, but first analyze the machine code, guess which part may contain the jump address. Finally, after many guesses to understand the evidence. In this way, the general passive receptive learning becomes an active research type of the suspect. Simply said is to learn any technology or framework do not understand, first not anxious to see how it does, and think about how to do, to think of the details can be empirical, otherwise meaningless!
"Evidence" is embodied in each point of knowledge can be touched: or debugging, or programming, or use, can be verified. Many people speculate that some things are "obviously" rather than verified. Often, "Truth" slips away from the fingers. such as the old code to identify the 2.9.3 bar guessing state preservation, the subdivision of local variables, parameters, and consider optimization. evidence and speculation contradict the forward momentum: we often lament the poor question, and the evidence is the best questioner . Empirical evidence often involves a lot of complex factors, it seems almost impossible to empirical. At this point, the key is "the essence of understanding, then complex simple." The old code, the 3rd chapter shows how to find out how to clarify the key logic of the link to build a 2-3-day completion of the linker core applet.
"Build" requires that you try to imitate the knowledge you have learned by writing a program. This is very helpful in thinking about the problem in a systematic sense. And there will be unexpected problems in the construction, they are the ladder of progress. For example, when I learned about memory access APIs in Windows core programming many years ago, I put aside examples of books and wrote game modifiers with these APIs. And then there's the problem: it takes too long to traverse the entire linear address space to find an integer, and the speed is simply not comparable to a real modifier. Finally, based on the most basic alignment principle, it is not necessary to search by byte. The basic knowledge is in the construction, the accident and the debugging solves to be through, finally becomes the system view .
In fact, the most important way of code is "happy". With it you have your own "Tao". When traveling in the maze of the reverse, a disappointment and surprise swept through the heart, clear sunlight through the fog of 0-1bit sun to the skin, this is the taste of life.
Reproduced for future consideration
Code path----The core competency based on System view-by-Han Hong Teacher
Start building with 50+ products and up to 12 months usage for Elastic Compute Service