Reprinted from the Meng Yan blog.
The development work now requires us to master a language quickly. In general, there are two ways to deal with this challenge: one is to look at the grammar, to roll up the sleeves, to study Google, and to spend a lot of time learning the whole language thoroughly, to be confident, and then to start doing the actual work. However, both approaches have drawbacks. The problem of the second approach, of course, is obviously not only wasting time, deviating from the goal, but also inefficient in learning. Because there is no practical problem-driven language learning is usually not firm and deep. Some people learn to become a language expert, but forget that they are originally to solve the problem. The first way is also problematic, in the language of temperament has not yet understood the situation of the bold patchwork of code, write out something definitely not into the stream. Said wearing new shoes usual, new bottle of old wine, that is a small problem, the real serious is that such a programmer can accumulate a lot of defective garbage code in a short time. As a result of the general development phase of a limited degree of testing, these garbage code can often pass through this stage, thus lurking down, in the late become the whole project cancer, repeatedly let later defenders into Sisyphus predicament.
In fact, there are certain rules of language learning, for the developers who have mastered a language, for the general language, can be the fastest speed, in a few days to a week to master its most commonly used 50%, and to ensure that the basic path is authentic, no deviation of the ills. In fact, really write the program is not afraid of completely not, the most afraid of smattering to save the solution. Because you do not, will naturally go to study the book carefully, if the ability to learn, write out the code quality is not bad. And smattering, his own hands-on steel-making, it is basically scrap metal. such as error handling and serialization, many people do not understand the "positive path", but by virtue of their own smattering to save the wild path, this is the most dangerous. Therefore, even if the time is more tense, the content must first be fully understood again. After mastering these content into the actual development, even if there is a problem, it will not hurt the overall project in general. And the developer himself can using vehicular transport, slowly in practice to improve themselves.
Here is an outline of the study, mainly for experienced people, not suitable for beginners. This outline can only be used in the general Vulgar programming language learning, currently ranked in the popular programming language ranking of the top 20 is basically vulgar language. If you're learning a non-vulgar language like Lisp, or a two-time development language in a software, the advice may not be appropriate. Or that sentence, for reference only.
1. First understand the basic data types of the language, basic grammar and main language constructs , the main mathematical operators and the use of the print function, to be able to write rectification programming books after the degree of mathematics exercises;
2. second, the use of arrays and other sets of classes , there are basic words can understand the generic, if not understand the problem is not big, the back can be mended;
3. Simple string processing. The so-called simple, is the regex and parser the following content, what to find and replace, truncate the word string and so on. However, this stage has a difficult point, is the character encoding problem. If you can't understand it, you can skip it first, otherwise it's best to take care of the problem at this time and avoid Liu.
4. basic object-oriented or functional programming features , nothing more than inheritance, polymorphism, lambda functions and so on, if there is experience, soon understand;
5. exception, error handling, assertion, log and debug support, support for unit tests . You don't have to use TDD, but at this point you should master the basic skills of TDD in this language;
6. program code and executable code organization mechanism, run-time module loading, symbol lookup mechanism , this is a difficult point when beginners, because most of the books are not too much attention to introduce this extremely important content;
7. basic input and output and file processing, input and output stream class organization , this is usually a more cumbersome part, you can sketchy learn, make clear concepts, when used to check it. At this stage, most of the console applications can be written;
8. How the language makes callback method calls, and how to support the event-driven programming model. in the modern programming environment, this problem is a core issue involving the development of ideas, almost every language here will be full of kung Fu. NET Delegate,java anonymous inner Class,java 7 Closure,c++ox Tr1::function/bind, a variety of. If the problem can be thoroughly understood, not only the program will not be too distorted, and the language of the design of ideas can also have a better understanding;
9. If necessary, you can study the regex and XML processing problems at this time, if not necessary to skip;
serialization and deserialization, the default mechanism can be mastered;
11. If necessary, to understand the threading, concurrency and asynchronous invocation mechanism, mainly to read someone else's code, if you want to write this kind of code, you have to devote time to serious and systematic study, prohibit half a bucket of water to battle;
12. Dynamic programming, reflection and meta-data programming, the mechanism of inter-transformation between data and programs, the mechanism of Runtime compilation and execution, and the ability of aspiring developers to make more effort in this piece, to give you a level of understanding of the language;
13. If necessary, consider the language's support for generics, which does not take much time, as long as you can use ready-made generic sets and generic functions, and then take the time system to learn at a later leisure. It should be noted that the generic technology and multi-threaded technology, the use of bad become the root of all evils, must be systematic learning, use caution, or better than not to learn;
14. If there is time, it is best to consult an experienced person to see what the more commonly used features of this language are features, and if you have not learned it before, you should make a supplement. For example, the block interator of Ruby, Java's dynamic proxy,c# 3 LINQ and extension method. No time, I think I can do while learning, no big problem.
15. If necessary, in the leisure time of work, we can focus on two questions, first, what idioms and patterns are used in the language, and secondly, the compiler/interpreter implementation mechanism for the language.
So that the basic part of the language can be said to master, after the database, network or do graphics, can be based on specific needs to engage, find the appropriate mature framework or library, while doing learning, deepen understanding. For a vulgar language, I have to go over the contents of the above for about 2-3 weeks, not very fast, but also delay too many things, after all, not every month to learn new language. Master the above content, to practice martial arts to play a good basic skills, although not necessarily how excellent, but certainly is the root is red, in the future do not have to go around the Big Bend. Even the temporary use of the language, the above outline to streamline, only look at the blue weight of the parts, roughly in a few days to a week to fix, not too time-consuming, and the code is not too unreliable.
The above outline is not set and the memory model. This is a very important issue for C + +, and should be considered prominently, but for other languages, the problem is transparent, unless you want to do a hardcore project, you don't have to be too concerned.
Quickly master a language the most commonly used 50% (reprint)