Original: Teach Yourself Programming in Ten Years Author: Peter Norvig translation: Guo Xiaogang (foosleeper@163.net) Last Revision Date: 2004-3-19 This Chinese translation was Peter Norvig's license.
Why do everyone are in a hurry?
Entering any bookstore, you will see the "TEACH YOURSELF JAVA IN 7 Days" (7 days Java no post-Tong) is a long-awaited similar book, they want to teach you Visual Basic, Windows, Internet Wait, but only a few days or even hours. I have downloaded the following in Amazon.com: Pubdate: after 1992 and Title: days and (title: Learn Or Title: Teach Yourself) (Date of publication) (NTD Name: Day And (Title: Society Orket " Name: Normal Universities)) I got 248 search results. The previous 78 is computer books (79th is "Learn Bengali In 30 Days", 30 days to learn Bangladesh). I changed the keyword "days" to "Hours", I got a very similar result: this time 253 books, head 77 is a computer book, the 78th is "Teach YourSelf Grammar and Style in 24 Hours" (24 Hours learned Chinese law and style). In the first 200 book, 96% is computer books. Conclusion, either people are very eager to learn to learn computers, or do not know why computers are amazing and simple, easier than anything. No book is to teach people in a few days to appreciate Beethoven or quantum physics, and even how to dress up. Let us analyze what the title like "Learn Pascal in Three Day" (3 days Learn Pascal) is meaningful:
Learn: In 3 days, you can't write some meaningful procedures for time, and learn from their failure and success. You can't work with some experienced programmers, you won't know what the taste is in that environment. In short, there is not enough time to let you learn a lot. So these books talk about only the proficiency on the surface, rather than in-depth understanding. As far as Alexander Pope (Translation: British poet, writer, 1688-1744) is a little learning is a dangerous thing. Pascal: You can learn the syntax of Pascal in 3 days (if you have a similar language), but you can't learn how to use these syntax. In short, if you are, for example, a Basic programmer, you can learn to write Basic style programs with Pascal syntax, but you can't learn the true advantages (and shortcomings) of Pascal. Where is the key? Alan Perlis (Translation: ACM First Chair, Tu La Prize Winner, 1922-1990) I have said: "If a language can't affect your idea of programming, it is not worth learning." Another point is that sometimes you have to learn a pestle that Pascal (more likely to be Visual Basic and JavaScript), because you need to contact existing tools to complete specific tasks. But at this time, you are not learning how to program, you are learning how to complete the task. 3 days: Unfortunately, this is not enough, just as the following section. 10 years of programming no teacher
Some researchers (Hayes, Bloom) have shown that in many areas, it takes approximately 10 years to cultivate professional skills, including chess, composing, painting, piano, swimming, tennis, and neuropsychology and topology. the study. There seems to be no real shortcut: even Mozart, he revealed the music genius at the age of 4, which still used more than 13 years before he wrote world-class music. Representatives of another music type, they seemed to be suddenly taken in the 1964 ED Sullivan program. However, in fact, they started to perform since 1957, even if they have shown great appeal very early, their first real success is "sgt. Peppers" will be released from 1967. Samuel Johnson (translation: British poet) believes that 10 years is still not enough: "Excellence in any field can only be obtained through a lifetime; a little low price will not change." (Excellent in Any Department Can Be attained ONLY by the labor of a lifetime; it is not to be purchased at a lesser price.) Joe (translation: chaucer, British poet, 1340-1400) also complained: "Life is so short, the skill is so long. (The Craft So Long To Lerne.) Below is the prescription that I have successfully programmed this line:
Interested in programming, because of fun and programming. Determine It is always enough to stay enough to put 10 years of investment. Talk to other programmers; read other programs. This is more important than any book or training course. Program. The best learning is to learn from practice. In a more technical language, "The highest level of individuals in a particular field is not automatically obtained as the result of long-term experience, but even very experienced individuals can improve their performance levels through deliberate efforts." (P.366), and "The most effective learning requires a specific individual to formulate appropriate difficult tasks, meaningful feedback, and opportunities for repeating and correcting errors." (P.20-21) "Cognition in Practice: Mind, Mathematics, And Culture In Everyday Life (Cognition in practice: the culture of mind, mathematics, and daily life) is an interesting reference book about this point of view. If you are willing, spend 4 years in college (or spend a few years to study graduate students). This allows you to get some work. It can make you more in-depth understanding of this area, but if you don't like to enter the school, you can also get similar experience in your work. In any case, it is not enough to learn from the book. "Computer science education will not make anyone become a programmer, just like researching brush and pigment will not let anyone become a painter", Eric raymond, "The New Hacker's Dictionary" (new hack dictionary) author is . One of the best programmers I have hired have only high school education; but he created many great software, and even discussed him himself, and the stock option made him reach the degree of richness I can't enter. Refers to the author of Jamie Zawinski, Xemacs, and Netscape Navigator. Complete the project with other programmers. Be the best programmers in some projects; in other projects is the worst one. When you are the best programmers, you have to test your ability to lead your project and encourage others through your cave. When you are the worst, you learn what your masters are doing, and what they don't like to do (because they let you do those things). Each other programmer completes the project. Understand the procedures written by others. Look at what is needed to understand and modify the program when there is no initial programmer. Think of how to design your procedure can make someone else to maintain your programs. Learn at least half of the programming language. Including a language (such as Java or C ), a language that supports functional abstract (such as LISP or ML), a language that supports syntactic abstract (eg LISP), a language that supports Declarative Specification (such as ProPog or C Modules), a language of the Corordine (such as Icon or Scheme), and a parallelism Language (such as sisal). Remember the word "computer" in the phrase "Computer Science".
Understand how long your computer executes a directive, take a word from memory (including cache hgyet summation), how long it takes from disk to read continuous data, positioning to disk How long is the new location. (The answer is here.) Attempts to participate in a language standardization work. It can be an ANSI C committee, or it can be determined that the coding style of your team is indent still 4. No matter which kind, you can learn what people like in this language, they like, and even if they can have this feeling. It has a good judgment from the language standardization work as soon as possible. Holding these ideas, I am very suspicious to learn how much things from the book. Before I was born in my first child, I finished reading all the books of "how ...", but still feeling that I am a novice. After 30 months, when I was born in the second child, did I repay those books? Do not. On the contrary, I rely on my own experience, and the result is more useful to live more than thousands of pages written in experts. Fred brooks established three-step planning of outstanding software designers in his short text "No Silver Bullets" (no silver):
The best designer group is identified as soon as possible. Assign a business tutor responsible for the development of potential objects, carefully helping him keep your career history. Let the growing designers have the opportunity to influence each other, motivate each other.
This is actually assumed that some people themselves have the necessary potential to become outstanding designers; they must only guide them to advance. Alan Perlis is more concise: "Everyone can be taught to sculpture; and how to teach him how to teach him how to sculpt it. Outstanding programmer is the same." So even if you buy those Java books; you are likely to find some uses. But your life, or your true expertise as a programmer, it will not have a real change within 24 hours and 24 days or even 24 months.
references
Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.Brooks, Fred, NO Silver Bullets, IEEE Computer, Vol. 20, NO. 4, 1987, P. 10-19.Hayes, John R., Complete Problem Solver, Lawrence Erlbaum, 1989.lave, Jean, Cognition in Practice: Mind, Mathematics, And Culture In Everyday Life, Cambridge University Press, 1988.
answer
Timing of various operations, completed on a typical 1GHz PC in 2001: Perform a single instruction 1 nanosecond = (1 / 1,000,000,000) seconds from the L1 cache to take a Word 2 nanosecond from the main memory 1 Word 10 Nanoseconds take a Word 200 nanose from a continuous disk location to take a Word from the new disk location 8,000,000 nanosecond = 8 milliseconds
footnote