京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2872|回复: 0

Google研究总监用三句话,告诫所有的编程爱好者

[复制链接]

18

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2019-7-1 01:31:54 | 显示全部楼层 |阅读模式 来自 中国
如果你最近想自学编程,或者你是一名程序员,不妨先看看来自Google研究总监Peter Norvig的一篇学习编程的神文。$ ?: G: B5 m0 v3 x* P
1 Z- _) y1 _& H! p1 @1 V; D3 e4 l( B
  _% o! z  |$ [  i) r
· 正 · 文 · 开 · 始 ·' F: {& t) Y' i$ v2 h
为什么每个人都这么着急?. U' c! y9 U. t" N
走进任何一家书店,你会看到很多类似《在24小时内自学Java》,以及在几天或几小时内教会你C、SQL、Ruby,算法等等这样的书籍& r7 `  I4 l* Q& M/ f2 g3 A' v/ k
当我使用亚马逊高级搜索,搜索“教程、自己、小时”这些关键词时,自2000年以来,发现了512本这样类似的书籍。前10名中,有九本是编程相关的书。把“自学”替换为“学习”或者“小时”替换为“天”,都能得到类似的结果。  _8 n2 c8 g5 m" B. n+ K! B
导致这一结果可能有两种原因,要么人们急于学习编程,要么编程在某种程度上比其他任何一种技能,都更容易学习。5 o+ E( g* ?! [, l7 R; Z4 T: P
Felleisen et al.在他的著作《如何设计程序》一书中,说道:“糟糕的编程很容易,白痴都能在21天内学会,哪怕白痴是天生的。”# D2 E  l, C$ j& [/ y4 @2 Z7 C
让我们来看看,所谓的“24小时内学会C++”意味着什么:$ a/ g8 N6 P: l, K! n) S
1* R2 n$ G+ P4 g+ J# Y6 A: y2 \
学会6 N: u1 o! G1 g3 {
在这24小时里,你几乎没有时间去写任何有意义的程序,更不要说感受成功的喜悦,和从失败中汲取教训了。
, @+ v) ~* j% _, S% `你也不可能有时间和有经验的程序员一起工作和交流,也不会体验到使用C++语言工作是什么感觉。
, ~  \( Y$ n, R8 n3 Y% \: b' @' {' \简而言之,你没有足够的时间学习。所以这样一本书只能是一种很肤浅的教程,而不是深刻的理解。正如亚历山大教皇所说:“浅层学习是很危险的。”) G/ v4 ^, J/ S% y
2
; c3 l- ]; i- C" F7 jC++2 T1 V# s6 E$ _
24小时的时间,你可以学习到一些C++的语法,即便你有其他语言的基础,也无法真正学会使用C++。. U, `$ y, {# E  `
简而言之,如果你是一名Basic程序员,你可以写出有Basic风格的C++代码,但无法发挥C++本身的优势。
* a6 O* @7 n: x$ v* U这样学习它又有什么意义呢?Alan Perlis曾经说过:“一种不改变你编程方式的语言,不值得学习。”3 n' Y0 |0 S+ e8 L; ]  ~: M
另外一种可能是,你只需要学习一点C++知识,然后用现有的工具制作应用接口,完成特定的编程任务。但这意味着,你并不会编程,而只是会使用一种工具而已。
8 Z1 L. {7 k" l2 s) y) F/ M至于所谓的24小时是不可能的,这远远不够。
: Q" a+ `$ D0 t. G, w十年学会编程1 w, M- b  ?, Q$ p2 x& n, M+ r( U
研究人员(Bloom (1985)、 Bryan & Harter (1899,见文后参考书目)、Hayes (1989)、Simmon & Chase (1973,见文后参考书目) 的一系列调查研究表明:
& V2 H5 `: [7 E6 H
在任何一个领域,包括国际象棋、音乐、开发专业只是大约需要十年的时间。此项调查领域包括了作曲、发报、绘画、钢琴演奏、有用、网球等。
3 I1 [6 k0 E8 ]8 g8 s/ Y
科学家们从神经心理学和拓扑学的角度对这些领域进行研究,并得出一个结论。; c6 b! T9 M2 Y, V% d# E, b
若要在某一领域内达到专家级的水平,其关键在于“审慎地重复”,也就是说,并非是机械地,一遍又一遍地练习,而是要不断地挑战自我,试图超越自身当前的水平,通过不断的尝试挑战,并在尝试的过程中和尝试之后对自身的表现进行分析和总结,吸取经验,纠正之前犯过的各种错误。把这一“审慎”的过程不断重复,才能取得成功。4 R) f+ ]* T; x' d$ g* e3 q
真正的捷径是不存在的。即使莫扎特在4岁时就表现出了卓越的音乐才华,可是他也花了13年的时间,才真正地写出了世界级的作品。5 R- G6 U6 S6 E7 `# ?6 C5 Q) K
再举个例子,甲壳虫乐队似乎在1964年,凭借一系列热门单曲,以及爱的莎莉文秀艾德沙利文秀上的演出一炮而红。
. n2 J# Z# c# i. U但也许你不知道,早在1957年,他们就在利物浦和汉堡两地进行小规模演出了,而在此之前的演出更是不计其数。甲壳虫乐队的主要成名曲《Sgt. Peppers》,则是1967年才发行的。5 B1 F( N% N/ Z! K# Z% F# s
/ E& r% ^8 X& s1 b/ K! i1 A
Malcolm Gladwell公布了他对柏林音乐学院所作的一项研究的报告,该研究对比了一个班里的学习成绩为上、中下三个档次的学生,并逐一询问他们进行音乐练习的时间。
1 G7 E, u4 t: F! c# L$ ?这三个档次中的所有人,大约都是在5岁的时候开始练习音乐的,一开始的时候大家练习音乐的时间都差不多,大约一周2到3小时。但是到了八岁左右,大家的区别就开始体现了。) u& {# {; j) ^8 O( U( Z0 ~
后来成为班里最好的那一部分学生开始比别的学生练习得更多,大概每周6到9小时,12岁的时候每周8小时,14岁的时候每周16小时,往后则越来越多,直到20岁左右,他们每周练习音乐的时间已经超过30小时了。$ n3 N4 N9 \1 K# e! k  c
在20岁的年纪,那些精英级别的演奏家们都有累计超过10000小时的音乐练习时间。
% R+ K- l5 ]; J3 g, s! E: V相比之下,仅有部分优等生能达到8000小时的累计练习时间,而那些音乐教师级别的学生,他们的累计练习时间只有4000小时左右。0 ~5 d( I) \  M4 i: F
所以,如果你想在某一领域有所建树,至少要10000个小时的时间,而不是10年。Henri Cartier-Bresson说过:“作为摄影师,你所拍摄的头10000张照片都是垃圾。”也是一样道理。" t- Q6 h/ l9 u
如果你想成为一名程序员4 {8 Y5 Q& I4 ~9 x1 E' \6 i
以下是我成功的一些秘诀:
4 x& d. Z  K% c1 y9 l
    + G( }7 q0 }) a/ r* j0 L1 \' O
  • 沉迷
    % j1 ]9 p# o9 B* v$ U- s
沉迷于编程,确保你有足够的热情,以便于你能为其投入十年/10000个小时。
# `$ i- D6 G' J* S, N  r6 t

    1 g: B/ e1 v$ G( @$ |
  • 计划- x# W, l0 z$ u( G# d$ v& S
边学习、边实践。说得专业一些,一个人在某个专业领域达到了最高水平,并不是因为个人经验而自动获得的,而是为了进步,努力之后产生的结果。0 o" N9 h) D6 R/ v
    / }) `3 k. |: ^/ D, Z( L4 k3 @
  • 交流) a; Q  E6 z* r2 |0 W
与其他程序员交流,多阅读其他人写的程序。这些远比你看书或者上培训班重要
; U  k: q8 q' b& k# |

    5 q3 \7 T, t# z7 Z* @
  • 学习- t2 S# T, j" |, |8 b* G# p" @3 k8 V7 @& E
如果有条件,尽量去读一个计算机专业吧,当然能读研更好。如果你能做到这一点,你将更有机会得到要求“计算机相关专业”的岗位,对这个行业,你将有一个更深的理解。
8 N! l% c: R* i% p# T! w不过,如果你不是上学的料,你可以考自学,当然这需要足够的毅力,或者通过工作来积累经验。
5 A* H" f4 G' z& }( B3 X. U; D/ ]3 i
7 `# G5 [2 ]" h; T# D无论你采用哪一种途径,光靠书本是远远不够的。7 f* U; \8 t/ N1 T4 j& X5 n

* C3 ]5 E7 ]* P8 S  \& _
    ' r0 E# t: h! Y: s6 i* v
  • 实践/ G  G+ Q, }8 }& B( {4 c
与其他同行一起做项目,成为当中最好的程序员,或者最糟糕的程序员。当你是团队中最好的程序员时,你的领导能力会得到锻炼。当你是最差的那一个时,你会了解到你的领导不喜欢哪些事。, N, x" n; R3 F8 F7 T
因为领导总是把那些他们自己不喜欢做的杂事,丢给那些他们认为能力很差的人去做。
0 y6 o2 R, |0 |1 S- I! v! H/ |- s' v) \. @# a) W5 m- l

    1 ^8 a6 y6 ~- A1 A" c/ Q* q+ |
  • 理解
    3 z2 ^0 l' s  n1 ^$ ]& i8 s
跟随一些优秀的程序员做项目,理解他们写的代码,如果它们的编写者不在,看看理解和修正他的代码,会付出什么样的代价。并同时思考,如何规划你的代码,让他们更容易被他人理解和维护。
- N. T: R2 f1 Z 要学会更多的编程语言。包括一种支持类抽奖的语言(如Java或C++),一种支持函数抽奖的语言(如Lisp、ML或Haskell),一种支持于法雷抽象的语言(Lisp),一种支持协同程序的语言(例如Icon或者Scheme),一种支持平行并发编程的语言(例如Sial)。
/ \( S3 y9 k, i( ?# r+ z

    ; I$ Y4 ^7 Y0 l. ^7 W
  • 牢记
    - S4 Z% {* e0 T) A2 V
牢记“计算机科学”中包含着“计算机”这个词。了解计算机需要花多长的时间执行一条指令,花多长时间从内存中获取一个字(word)(包括缓存命中和不命中两种情况)。
, U1 w, E5 C- V; ?如果连续从磁盘中获取数据,时间消耗如何?以及需要花多少时间才能再磁盘上定位一个新的位置?
" \! P8 {: M; d' u6 `6 H
    8 R; M% h" k! O0 _2 l: P, L
  • 规范- U+ l8 X: n5 [: B
尽量参与语言的标准化过程。往大了说,你可以试着加入ANSI C++委员会这样的专业组织,往小了讲,你也可以从自己的代码规范入手,限定代码缩进是需要2个空格宽还是4个空格宽。5 L4 f3 E- s6 V( `- x( L# a
无论采用哪种方式,你都需要了解其他人对于语言的喜好,以及他们的喜好的程度,甚至你要知道他们为什么产生这样的喜好的原因。
/ {& a' Z, ^! z" M+ \

    4 t' ?- ^4 C; i4 ]
  • 意识
    3 I3 D5 i4 a8 ]" O4 y/ V; d3 `% n
要掌握上面所说的所有内容,光靠看书学习应该是很难做到的。当我的第一个孩子出生的时候,我几乎阅读了市面上所有的《如何…》指南书籍,但是我读完了以后还是觉得自己是个菜鸟。
1 J7 I( W  \" x+ l' B+ D7 m; S30个月以后,我的第二个孩子快出生时,我难道还要做一个书虫么?不!相反,我此时更依赖我的个人经验,这些经验相比于那些上千页的书籍,则更加有效和让我放心。
, w0 g6 f' [) E9 I! L' ~附录:如何选择语言
! {. ]* Y4 o  B: y- N8 y! g# r" U/ b, {
曾经很多人问我,应该选择什么编程语言作为入门?这个问题很难给出一个确切的回答,但你可以从以下几个方面考虑。: B) W/ T! P# \2 W) R
问问你的朋友
; z) O5 Y- k$ {& w! L/ N) v4 F当我被问及“我应该使用哪一种操作系统,Windows、Unix、Mac?”时,我的回答通常是:“你朋友在用什么,你就用什么。”' i) Q+ _* P/ \1 n/ }
这么做的好处是,有了你朋友的帮助,你就能有效地回避操作系统固有的一些差异,对于选择编程语言来说,也是同样道理。5 o+ a1 c2 O* W- z  c" q5 q) w
同时,你还要有点儿战略眼光:如果选择了一种编程语言,并成为其编程社区的一员,那么你选择的语言和社区是正在不断壮大?还是奄奄一息?如果你有编程方面的问题,能不能从相关的书籍,网站以及在线论坛中得到解答?你是不是跟论坛里的人合得来?这些都是要考虑的。
+ K0 d6 o8 a8 E/ ~, a* F简单实用
/ A# ~+ M1 G( Z: \- i诸如C++以及Java这样的编程语言都是非常专业的开发语言,适用于有经验的大型团队进行开发,需要时常考虑代码的运行效率。所以,这类的编程语言就适合于那样(复杂)的编程环境。如果你是一个初学者,那么就不要搞那么复杂。你所需要的是一种简单易学的编程语言,你靠你自己就可以搞定的语言。" {5 e& A- l2 F( |1 x
交互
# ]/ ?3 s; s8 x' F( [3 H( P+ t给你两种选择去学钢琴:第一种,常规做法,也是互动的做法,也就是你每敲一下琴键就能听到琴音;第二种,批量模式,等你把所有该按的琴键都按了一遍,然后再一次性放给你听。你选择哪一个呢?显然,交互式的方式对于钢琴学习来说更容易,对于编程学习也是如此。那么就坚持使用交互式模式学习编程吧。7 t1 ~3 ^+ V( p& d$ w8 Y
  {6 o, j: U- c+ V) A6 j* Y3 U& m
来源:http://www.yidianzixun.com/article/0MS1fL0b% R% t4 R" a1 @3 b% [8 e
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

帖子地址: 

梦想之都-俊月星空 优酷自频道欢迎您 http://i.youku.com/zhaojun917
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2026-9-16 21:35 , Processed in 0.047439 second(s), 25 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表