一起学习,一起进步!
分类: LINUX
2017-10-31 23:02:45
走进任何一家书店,你都能看到诸如《24小时自学Java》这样的书,可能书名中的Java会变成C、SQL、Ruby、算法等,然后24小时会变成n天或n小时。在亚马逊高级搜索[title: teach, yourself, hours, since: 2000 ,你会发现有512种这样的书籍。排在前10位的,9个是编程类的书(还有一个是关于财务会计的)。还有多种变化,例如“学习”替换“自学”,“天”替换“小时”。
结论:要么大家都特别匆忙地在学习编程,要么编程在某种程度上令人难以置信地比其他任何东西都更容易学习。Felleisen等人在他们《How to Design Programs》这本书中对这种趋势表示了赞同——“写出不好的程序很容易。傻瓜也可以在21天时间内学习编程。即使他们毫无基础。”
让我们来分析一下,类似于《24小时自学C++》这样的书意味着:
研究人员(Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) 表明,我们大约需要10年的时间来发展任何一种广泛领域的专业知识,例如国际象棋,音乐作曲,电报操作,绘画,钢琴,游泳,网球,以及神经心理学和拓扑学等。思考性的实践是关键:不要只是一遍又一遍地做,而是要用超出你现有能力的任务挑战自己,尝试它,在你做的时候和做完之后分析自己的表现,并纠正错误。然后重复,再重复。这里没有真正的捷径:即使是4岁时就已经享誉为音乐神童的莫扎特,也依然花了13年的时间才开始做出世界一流的音乐。
Malcolm Gladwell通俗化了这个思想观点,虽然他专注编程10,000小时,而不是10年。Henri Cartier-Bresson (1908-2004)还有另外一个指标:“你的前一万张照片正是你最糟糕的作品。”(他没有考虑到数码相机,拥有数码相机使人在一周内达到这一标准。)真正的专业化可能需要一生的时间:Samuel Johnson (1709-1784)说,“只有通过一生的努力才能在某一学科取得卓越成就:打了折扣的就学不到家。”以及Chaucer (1340-1400)曾抱怨说:“生之有限,学也无涯。”Hippocrates (c. 400BC)更是以“生命短暂,艺术长远”的语录而闻名。因此,假设所有技能(如编程,下棋,玩跳棋,玩音乐)都可以在相同量的时间内掌握,是不合理的,而且每个人所需的时间也不会完全相同。正如 K. Anders Ericsson教授所说的那样,“在大多数领域中,表明即使是最有才华的人也需要多少的时间才能达到最高的性能水平的言论,是值得关注的。10000个小时这个数值只是给你一个概念而已,因为每个人的学习能力也不尽相同。“
所以,你想成为一个程序员吗?
下面是我编程成功秘诀:
知道了上面这些,你会质疑书本学习究竟能帮助我们走多远。在我第一个孩子出生前,我阅读了所有《如何……》的书籍,但仍然感觉自己像个手足无措的新手。30个月后,当我第二个孩子出生的时候,我又再次回到书本中复习了吗?不,相反,我依赖的是我的个人经验,而这其实比那些专家撰写的成千上万页的书本更为有用的多,也更让我放心。
Fred Brooks,在他的随笔《No Silver Bullet》制定了一个三步走的计划,用来寻找优秀的软件设计师:
这是假定一些人已经具备了成为一个伟大的设计师所需要的品质;工作不过是引导他们前进。Alan Perlis说得更简洁:“我们可以教每一个人去雕刻:米开朗基罗也曾被教导不要怎么样。伟大的程序员也是如此。”Perlis的意思是说,伟人所拥有的一些内在品质,超越了训练。但是,这些品质从何而来?它是与生俱来的?亦或者是通过勤奋而开发的?正如Auguste Gusteau(《Ratatouille》电影中的虚构厨师)所说的那样,“任何人都可以做饭,但只有无畏者才能成就伟大。”我觉得这里的无畏更像是愿意奉献自己生活中很大的一部分时间到思考实践中的意思。可能无畏是对此的总结。或者,正如Gusteau的评论员,Anton Ego说的那样说:“不是每个人都能成为伟大的艺术家,但是伟大的艺术家可以来自任何地方。”
所以尽管去买那些Java / Ruby/Javascript / PHP的书;你可能将会从中得到一些用处。但它们改变不了你的生活,你也不可能在24小时或21天内成长为一个真正全面化的"专业程序员" 。千里之行始于足下,从现在开始努力吧……