Development experience Sharing: 10 programming self-taught

Source: Internet
Author: User
Tags date reference
Programming | experience

  Original: Teach yourself programming in Ten Years
Author: Peter Norvig
translation: Guo Xiaogang (foosleeper@163.net)
Last revision date:2004-3-19
A new version of the link was added in 2005-01-12.

The Chinese translation is licensed by Peter Norvig.

Why is everyone impatient?

Walk into any bookstore and you'll see "Teach yourself Java in 7" (7 days Java self-taught) next to a long line of unseen books that teach you visual Basic, Windows, the Internet, and so on, It only takes a few days, even a few hours. I conducted the following search on the Amazon.com :

    Pubdate:after 1992 and Title:days and (Title:learn or title:teach yourself)
(Release date: 1992 years later and title: Days and (title: Institute or title: self-taught))

I've got 248 search results altogether. The first 78 are computer books (the 79th is "Learn Bengaliin", 30 days to learn Bengali). I changed the keyword "days" to "hours" and got very similar results: this time there are 253 books, the first 77 are computer books, the 78th is "Teach yourself grammar and Style in hours" (24 hours to learn grammar and style). Of the first 200 books, 96% are computer books.

The conclusion is that either people are very eager to learn the computer, or they just don't know why the computer is surprisingly simple and easier to learn than anything else. No book is going to teach people to enjoy Beethoven or quantum physics for a few days, or even dress up a dog.

Let's analyze what it means to be like "Learn Pascal in Three" (3 Days of learning Pascal):

• Learn: in 3 days, you don't have enough time to write meaningful programs and learn from their failures and successes. You don't have enough time to work with some experienced programmers, and you don't know what it's like in that environment. In short, there is not enough time for you to learn a lot. So these books are all about superficial mastery, not deep understanding. As Alexander Pope (English poet, writer, 1688-1744) said, a smattering is dangerous (a little learning is a dangerous thing).

• Pascal: You can learn Pascal's grammar in 3 days (if you already have a similar language), but you can't learn how to use these grammars. In short, if you are, say, a basic programmer, you can learn to write basic-style programs in Pascal's syntax, but you can't learn Pascal's true virtues (and flaws). Where's the key? Alan Perlis, the first chairman of ACM, the Turing Prize winner, 1922-1990, once said: "If a language does not affect your idea of programming, it is not worth learning." Another idea is that sometimes you have to learn a little bit about Pascal (more likely Visual Basic and JavaScript), because you need to touch existing tools to accomplish specific tasks. But at this point you are not learning how to program, you are learning how to accomplish the task.

• 3 days: Unfortunately, this is not enough, as the next section says.

10 Programming self-taught

Research by some researchers (Hayes,Bloom) shows that in many areas it takes about 10 years to develop professional skills, including chess, composition, painting, piano, swimming, tennis, and neuropsychological and topological studies. There does not seem to be a real shortcut: Even Mozart, at the age of 4, showed his musical genius and spent more than 13 years before he wrote world-class music. Another representative of the music genre-The Beatles-seemed to have popped up in the Ed Sullivan Show in 1964. But they have been performing since 1957, and even if they have shown great attraction early on, their first real success as "Sgt peppers" will not be released until 1967. Samuel Johnson said that the 10 was not enough: "Excellence in any field can only be achieved through a lifetime of effort; a little lower price will not change." (Excellence in any department can is attained only by the labor of a lifetime; It is isn't purchased at a lesser price. Chaucer (Chaucer, British poet, 1340-1400) also complained: "Life is so short, mastery of art is so long." "(The Lyf so short, the craft so long to Lerne.)
Here's a recipe for success in my programming career:

• Be interested in programming and programming because of fun. Make sure you always have enough fun so that you can devote 10 years of your time to it.

• Talk to other programmers and read other programs. This is more important than any book or training course.

Programming The best way to learn is to learn from practice . In more technical terms, "the highest level of individual performance in a given field is not automatically obtained as a result of long-term experience, but even very experienced individuals can improve their performance through deliberate effort." (p. 366), and "the most effective learning requires the task of making appropriate difficulties for specific individuals, meaningful feedback, and opportunities to repeat and correct errors." "(p. 20-21) "cognition in Practice:mind, mathematics, and Culture in EverydayLife" (Cognition in Practice: mind, Mathematics and the culture of everyday life) is an interesting reference book on this point of view.

If you want, spend 4 years in college (or spend a few years on graduate school). This allows you to get some job entry qualifications and give you a deeper understanding of the field, but if you don't like going to school, you can get similar experiences at work. In any case, it is not enough to learn from books alone. "The Education of computer science does not make anyone an expert programmer, just as research brushes and paints do not make anyone an expert," Eric Raymond, author of the new Hacker's Dictionary. One of the best programmers I've ever hired has only a high school degree, but he's created a lot of great software , even a newsgroup that talks about himself, and stock options let him reach the level of richness I can't achieve. Jamie Zawinski, author of XEmacs and Netscape Navigator).

• Work with other programmers to complete the project. Be the best programmer in some projects, and be the worst in some other projects. When you are the best programmer, test your ability to lead the project and inspire others through your insights. When you are at the bottom of the day, what you learn to do and what they don't like to do (because they ask you to do that for them).

• Take over other programmers to complete the project. Understand the program written by others attentively. See what needs to be done to understand and modify the program without the initial program member present. Think about how you can design your program to make it easier for someone else to take care of your program.

• Learn at least half a dozen programming languages. Includes a language that supports class abstraction (such as Java or C + +), a language that supports functional abstraction (such as lisp or ML), and a functional syntax abstraction (syntactic Abstraction language (such as Lisp), a language (such as a Prolog or C + + template) that supports descriptive protocol (declarative specification), A language that supports coroutine (such as icon or scheme) and a language (such as sisal) that supports parallel processing (parallelism).

• Remember to include the word "computer" in the phrase "computers". Know how long it takes for your computer to execute an instruction, how long it takes to get a word from memory (including cache hits and misses), how long it takes to read continuous data from disk, and how long it will take to locate the new location on the disk. ( here's the answer.) )

• Try to participate in a language standardization effort. Can be the ANSI C + + committee, or it can be the decision of their team's coding style in the end with 2 space indentation or 4. Either way, you can learn exactly what people like in this language, how much they like it, and maybe even a little bit about why they feel that way.

• Have the good sense to withdraw from the language standardization work as soon as possible.

With these thoughts, I wonder how much I can learn from the books. Before my first child was born, I had read all the "How ..." books, but still felt that I was a incomprehensible novice. 30 months later, when my second child was born, did I pick up the books and review them again? No. Instead, I relied on my own experience to be more useful and reliable than the thousands of pages that the expert wrote.

In his short essay "NoSilver Bullets" (no silver Bullet), Fred Brooks has established a three-step plan for discovering outstanding software designers:

1. Identify the best designer groups as early as possible.

2, assign a career mentor responsible for the development of potential objects, and carefully help him maintain a career record.

3, let the growing designers have the opportunity to influence each other and inspire each other.

This is in fact the assumption that some people themselves have the necessary potential to become outstanding designers, to do is to guide them forward. Alan Perlis said more succinctly: "Everyone can be taught how to sculpt, and for Michelangelo, what he can teach him is how to not sculpt." The same with outstanding programmers. "

So even if you buy those Java books, you'll probably find some useful. But your life, or your real expertise as a programmer, doesn't really change in 24 hours, 24 days, or even 24 months.

Reference documents

Bloom, Benjamin (ed.) Developing Talentin young People, Ballantine, 1985.
Brooks, Fred, no Silver bullets, IEEE Computer, vol. 4, 1987, p. 10-19.
Hayes, John R., Complete Problem solver, Lawrence Erlbaum, 1989.
Lave, Jean, cognition in Practice:mind, mathematics, and Culturein the everyday life,
Cambridge University Press, 1988.

Answer

The timing of various operations, completed in the summer of 2001 on a typical 1GHz PC:

Executes a single instruction of 1 nanoseconds = (1/1,000,000,000) seconds
Take a Word 2 nanosecond from the L1 cache
Take a word 10 nanoseconds from the main memory
To take a word 200 nanoseconds from a contiguous disk location
Take a word (address) 8,000,000 nanoseconds = 8 milliseconds from the new disk location

Footnote

T. Capey points out on Amazon'sComplete Problem Solverpage, teach yourself Bengali in the days and teach yourself grammar and S Tyle is listed in the "Buy this book customers also bought the following books" section. I guess a large part of the people who look at these two books are from me.

Translation

Thank the following authors for translating this article into other languages:

  Japanese (Yasushi Murakawa), Chinese (Guo Xiaogang), Traditional Chinese (Jason Chen), Spanish (Carlos Rueda), German (Stefan Ram), French (P. E. Allary), Turkish (Çağıl Uluşahin).

  Peter Norvig (Copyright 2001)



Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.