现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

在十年里学会编程

2012-08-01 03:32 工业·编程 ⁄ 共 1958字 ⁄ 字号 暂无评论

    研究表明 (Hayes,Bloom) 在任何一种领域内,象下棋、作曲、绘画、钢琴演奏、游泳、网球、以及原子物理学和拓扑学,等等,要达到专家水平大约都要化十年时间。没有真正的捷径:即使是莫扎特,4岁时就是音乐神童,13年后才开始写出世界级的作品。在另一方面,披头士似乎在19年的Ed Sullivan表演上一炮走红。但他们从1957年就开始表演,在获得大众青睐后,他们的第一个重大成功,Sgt. Peppers,是1967年发行的。Samuel Johnson 认为要花比十年更长的时间:"在任何领域中出类拔萃都要用毕生的劳作来取得;它不可能用较低的代价获得。" 而Chaucer感叹到:"人生短暂,学海无涯。"

    这是我为编程成功开出的方子:
    1.设法对编程感兴趣,并且因为它有趣而编一些程序。确保编程一直充满足够乐趣,这样你才愿意投入十年宝贵时间。
    2.与其他程序员交流;阅读其它程序。这比任何书本或训练课程都重要。
     3.写程序。最好的学习方式是 从实践中学习。用更技术性的话说,"在一个给定的领域内,个人的最大能力不是自动地由扩展了的经验取得的,但即使是高度有经验的人也可以通过有意识的努力来提高自己的能力" (p. 366) 和 "最有效的学习需要因人而异的适当难度,目标明确的任务,丰富的信息反馈,以及重复的机会和错误修正。" (p. 20-21) 此书 Cognition in Practice: Mind,Mathematics,and Culture in Everyday Life 是阐明此观点的令人感兴趣的参考文献。
    4.如果愿意,在大学里呆上4年或更长(在研究生院里)。你会接触到一些需要学历证明的工作,你会对此领域有更深的理解。如果你不喜欢学校,你可以(通过一些贡献)在工作中获得相似的经验。在任何情况下,光啃书本是不够的。Eric Raymond,The New Hacker's Dictionary一书的作者,说过,"计算机科学不能把任何人变成编程专家,就象光研究刷子和颜料不会使人变成画家一样。" 我雇佣过的最好的程序员之一仅有高中程度;他做出了许多优秀的 软件,有他自己的新闻组,而且通过股票期权,他无疑比我富有的多。
    5.和其他程序员一起做项目。在其中的一些项目中作为最好的程序员;而在另一些项目中是最差的。当你是最好的,你能测试领导项目的能力,用你的观点激发别人。当你是最差的,你学习杰出者是怎么做的,了解他们不喜欢做什么(因为他们吩咐你做事)。
    6.在其他程序员之后接手项目。使自己理解别人写的程序。当程序的原作者不在的时候,研究什么需要理解并且修改它。思考如何设计你的程序以便后来者的维护。
    7.学习至少半打的编程语言。包括一种支持类抽象的语言(象Java 或C++),一种支持函数化抽象的语言(象Lisp或ML),一种支持语法抽象的语言(象 Lisp),一种支持声明规格说明的语言(象Prolog或C++ 的模板),一种支持 coroutine的语言(象Icon或Scheme),一种支持并行的语言(象Sisal)。
    8.请记住"计算机科学"中有"计算机"一词。了解你的计算机要花多长时间执行一条指令,从内存中取一个字(有cache),从磁盘中读取连续的字,和在磁盘中找到新的位置。(答案)
使自己卷入一种语言标准化的工作里。它可以是ANSI C++委员会,也可以是决定你周围小范围内的编程风格是应该两个还是四个空格缩进。通过任何一种方式,你了解到其他人在某种语言中的想法,他们的理解深度,甚至一些他们这样想的原因。
    9.找到适当的理由尽快地从语言标准化的努力中脱身。

    明白了这些,仅从书本中你能得到多少就成了一个问题。在我第一个孩子出生前,我读了所有的(关于育儿的)How to 书籍,仍然感觉是个手足无措的新手。30个月以后,我的第二个孩子快要出生了,我回头温习这些书了吗?没有。相反,我依靠我的个人经验,它比专家写的数千页书更有用和可靠。
Fred Brooks在他的随笔 《没有银弹》 中定出了一个寻找优秀软件设计者的三步计划:
1.        尽可能早地,有系统地识别顶级的设计人员。
2.        为设计人员指派一位职业导师,负责他们技术方面的成长,仔细地为他们规划职业生涯。
3.        为成长中的设计人员提供相互交流和学习的机会。
此计划假设某些人已经具备了杰出设计者的必要才能;要做的只是如何恰当地诱导他们。 Alan Perlis 说得更简明扼要:"每个人都能被教会雕刻:假如米开朗其罗被教成如何不会雕刻。同样的道理也适用于优秀的程序员。"
所以尽管买那本Java的书吧。你可能会从中学到点儿东西。但作为一个程序员,你不会在几天内或24小时内,哪怕是几个月内改变你的人生,或你实际的水平。

给我留言

留言无头像?