绝想首页

十年学会编程

熊超 [其他] 2013-03-07 04:34:06 星期四 晴天 查看:142 回复:0 发消息给作者
Why is everyone in such a rush?
Walk into any bookstore, and you'll see how to Teach Yourself Java in 7 Days
  
alongside endless  

variations offering to teach Visual Basic, Windows, the Internet, and so on

in a few days or hours. I  

did the following power search at Amazon.com:  
pubdate: after 1992 and title: days and
(title: learn or title: teach yourself)
and got back 248 hits. The first 78 were computer books (number 79 was  
Learn Bengali in 30 days). I  

replaced "days" with "hours" and got remarkably similar
results: 253 more  
books, with 77 computer books  

followed by Teach Yourself Grammar and Style in 24 Hours at number 78. Out  

of the top 200 total, 96%  

were computer books.  
The conclusion is that either people are in a big rush to learn about  
computers, or that computers are  

somehow fabulously easier to learn than anything else. There are no books  
on how to learn Beethoven, or  

Quantum Physics, or even Dog Grooming in a few days.  

Let's analyze what a title like Learn Pascal in Three Days could mean:  

Learn: In 3 days you won't have time to write several significant programs,

and learn from your  

successes and failures with them. You won't have time to work with an  
experienced programmer and  

understand what it is like to live in that environment. In short, you won't

have time to learn much. So  

they can only be talking about a superficial familiarity, not a deep  
understanding. As Alexander Pope  

said, a little learning is a dangerous thing.

Pascal: In 3 days you might be able to learn the syntax of Pascal (if you  
already knew a similar  

language), but you couldn't learn much about how to use the syntax. In  
short, if you were, say, a Basic  

programmer, you could learn to write programs in the style of Basic using  
Pascal syntax, but you  

couldn't learn what Pascal is actually good (and bad) for. So what's the  
point? Alan Perlis once said:  

"A language that doesn't affect the way you think about programming, is
not  
worth knowing". One  

possible point is that you have to learn a tiny bit of Pascal (or more  
likely, something like Visual  

Basic or ) because you need to interface with an existing tool to

accomplish a specific task.  

But then you're not learning how to program; you're learning to accomplish  

that task.

in Three Days: Unfortunately, this is not enough, as the next section  
shows.  
Teach Yourself Programming in Ten Years
Researchers (Hayes, Bloom) have shown it takes about ten years to develop  
expertise in any of a wide  

variety of areas, including chess playing, music composition, painting,  
piano playing, swimming,  

tennis, and research in neuropsychology and topology. There appear to be no

real shortcuts: even  

Mozart, who was a musical prodigy at age 4, took 13 more years before he  
began to produce world-class  

music. In another genre, the Beatles seemed to burst onto the scene,  
appearing on the Ed Sullivan show  

in 1964. But they had been playing since 1957, and while they had mass  
appeal early on, their first  

great critical success, Sgt. Peppers, was released in 1967. Samuel Johnson  

thought it took longer than  

ten years: "Excellence in any department can be attained only by the la
bor  
of a lifetime; it is not to  

be purchased at a lesser price." And Chaucer complained "the lyf s
o short,  
the craft so long to lerne."  
Here's my recipe for programming success:  

Get interested in programming, and do some because it is fun. Make sure  
that it keeps being enough fun  

so that you will be willing to put in ten years.

Talk to other programmers; read other programs. This is more important than

any book or training  

course.

Program. The best kind of learning is learning by doing. To put it more  
technically, "the maximal level  

of performance for individuals in a given domain is not attained  
automatically as a function of  

extended experience, but the level of performance can be increased even by  

highly experienced  

individuals as a result of deliberate efforts to improve." (p. 366) and
  
"the most effective learning  

requires a well-defined task with an appropriate difficulty level for the  
particular individual,  

informative feedback, and opportunities for repetition and corrections of  
errors." (p. 20-21) The book  

Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life is  
an interesting reference for  

this viewpoint.

If you want, put in four years at a college (or more at a graduate school).

This will give you access  

to some jobs that require credentials, and it will give you a deeper  
understanding of the field, but if  

you don't enjoy school, you can (with some dedication) get similar  
experience on the job. In any case,  

book learning alone won't be enough. "Computer science education cannot
  
make anybody an expert  

programmer any more than studying brushes and pigment can make somebody an  

expert painter" says Eric  

Raymond, author of The New Hacker's Dictionary. One of the best programmers

I ever hired had only a  

High School degree; he's produced a lot of great software, has his own news

group, and through stock  

options is no doubt much richer than I'll ever be.

Work on projects with other programmers. Be the best programmer on some  
projects; be the worst on some  

others. When you're the best, you get to test your abilities to lead a  
project, and to inspire others  

with your vision. When you're the worst, you learn what the masters do, and

you learn what they don't  

like to do (because they make you do it for them).

Work on projects after other programmers. Be involved in understanding a  
program written by someone  

else. See what it takes to understand and fix it when the original  
programmers are not around. Think  

about how to design your programs to make it easier for those who will  
maintain it after you.

Learn at least a half dozen programming languages. Include one language  
that supports class  

abstractions (like Java or C++), one that supports functional abstraction  
(like Lisp or ML), one that  

supports syntactic abstraction (like Lisp), one that supports declarative  
specifications (like Prolog  

or C++ templates), one that supports coroutines (like Icon or Scheme), and  

one that supports  

parallelism (like Sisal).  

Remember that there is a "computer" in "computer science"
;. Know how long it  
takes your computer to  

execute an instruction, fetch a word from memory (with and without a cache  

miss), read consecutive  

words from disk, and seek to a new loca tion  on disk. (Answers here.)  

Get involved in a language standardization effort. It could be the ANSI C++

committee, or it could be  

deciding if your local coding style will have 2 or 4 space indentation  
levels. Either way, you learn  

about what other people like in a language, how deeply they feel so, and  
perhaps even a little about  

why they feel so.

Have the good sense to get off the language standardization effort as  
quickly as possible.  
With all that in mind, its questionable how far you can get just by book  
learning. Before my first  

child was born, I read all the How To books, and still felt like a clueless

novice. 30 Months later,  

when my second child was due, did I go back to the books for a refresher?  
No. Instead, I relied on my  

personal experience, which turned out to be far more useful and reassuring  

to me than the thousands of  

pages written by experts.  
Fred Brooks, in his essay No Silver Bullets identified a three-part plan  
for finding great software  

designers:  

Systematically identify top designers as early as possible.

Assign a career mentor to be responsible for the development of the  
prospect and carefully keep a  

career file.

Provide opportunities for growing designers to interact and stimulate each  

other.

This assumes that some people already have the qualities necessary for  
being a great designer; the job  

is to properly coax them along. Alan Perlis put it more succinctly:  
"Everyone can be taught to sculpt:  

Michelangelo would have had to be taught how not to. So it is with the  
great programmers".  
So go ahead and buy that Java book; you'll probably get some use out of it.

But you won't change your  

life, or your real overall expertise as a programmer in 24 hours, days, or  

even months. 
顶一下(33 写日记 1169137 226908
分享排行

 

 

留住已经逝去的峥嵘岁月 记住曾经绽现的万种风情 在记忆即将淡漠的时候 来把这些重新回味

Copyright (C) 2008-2014 www.juexiang.com, All Rights Reserved.

京ICP备2023001011号-3   京公网安备11010802011908号

客服QQ 1017160561 违法和不良信息举报电话 13148464312 邮箱 1017160561@qq.com