十年学会程序设计

十年学会程序设计

研究者Hayes,Bloom的研究表明,在几乎所有的各种领域,大约要十年才能培养出专业技能。这些领域包括下西洋棋、音乐作曲、绘画、钢琴、游泳、网 球,及神经心理学和数学拓扑学。似乎没有真正的捷径--即便是莫扎特在四岁就展露出音乐天才,在他写出世界级的音乐之前仍然用了超过十三年的时间。

再看另一种类型的领域。披头士乐团似乎是在1964年的Ed Sullivan剧场表演突然地火起来并成为第一乐队的。但其实他们从1957年开始,就在利物浦、汉堡等地的小型俱乐部表演。虽然他们很早就显现强大的 吸引力,但他们决定性的成功作品Sgt Pepper也到1967年才发行。Samuel Johnson则认为或许还不止十年才行,他说:任何领域的卓越成就都必须用一生的努力才能取得;稍微低一点的代价都是换不到的。Chaucer则感叹 道:“生命如此短促,学习技艺却要这么地长”。

以下是我在编程上成功的秘诀:

对编程产生感兴趣并因为乐趣而写程序。确信你自始至终都能乐在其中,这样你才愿意将十年光阴投入编程事业。与其他程序员交流;阅读别人的代码。这比任何书任何培训都重要。

不断地编写。最好的学习方法是在实践中学习。从技术角度说,“在特定领域的个人最高效率并不因为经验够多就会自动获得;但若有意识的通过努力去提升经验, 个人效率会变高”而“高效的学习一般需要明确的任务和因人而异的适当难度,以及及时的反馈和重复或者修正错误的机会”。

如果你愿意,你可以去读四年大学(或再读研究生)。这可以让你满足一些工作的学历要求,同时也可让你对这个领域有更深的认识。但如你不喜欢上学,你也能 (得有牺牲)通过工作获得类似的经验。无论如何,只读书是不够的。《New Hacker's Dictionary》的作者Eric Raymond 曾经说过:“计算机的教育无法让人成为编程的专家,正如研究画笔与颜料不能让人成为专业画家一样。”一个在我所有招聘过的人中属于最优秀之一的程序员只有 高中毕业,但他写出很多很棒的程序,他甚至有自己的新闻组。他获得的股票期权使得他可以拥有自己的午夜酒吧。

跟其他程序员一起完成项目。在一些项目中成为最好的程序员;在一些中则充当最差的一个。当你是最佳的,你要测试自己领导项目的能力,并以你的能力鼓励他人。当你是最差的,要看看高手做些什么,他们不喜欢做什么(因为他们会叫你去帮他们做)。

接手别的程序员完成项目。全心投入并理解别人的程序。当原作者不在的时候,看看在理解与修改时有什么要注意的。想想如何设计你的程序使得后来维护的人容易上手。

至少学会六门编程语言。一种要支持类/对象(class abstractions)的语言,如Java或C++;一种函数式(functional abstraction)语言,如LISP或ML;一种支持语法抽象(syntactic abstraction)的语言如LISP;一种声明式语言,如Prolog或 C++模版;一种支持协同式(coroutines)编程,如Icon或Scheme; 还有一种支持并行(parallelism)的语言,如Sisal。

记住在“计算机科学”中包括“计算机”这个词。要知道你的计算机执行一条指令需要多久,到内存中取一个字需要多久(缓存是否击中),到磁盘读取连续的字需要多久,而磁盘的定位又需要多久。

进行语言标准化的工作。可以像是由ANSI C++ 委员会,或由你自己的团队,来决定你们的编码风格,譬如说缩排是2或4个空格。不管怎样,你都能学到别人到底喜欢什么,对语言的感受有多深,甚至能了解到一点他们为什么有这样的感觉。

并具备良好的判断力,也别老纠缠在语言标准化上。

谈了上面所有的想法后,我不禁要问究竟能从书上学到多少。在第一个孩子出生前,我读完了所有的“怎样…”的书,仍觉得自己是个一无所知的(照顾孩子的)菜 鸟。30个月后,第二个孩子出世,我要重回这些书好好复习么?不!取而代之的是,我开始相信自己的个人经验。这些难得的经验,比专家写的几千页手册还要有 用,而且让我重新找到了自信。

发掘卓越软件设计者的三部曲:

1.尽早尽可能地以系统化的方式发掘最佳设计人员。
2.给有潜力者指派生涯规划师,并谨慎地规划他们的职业生涯。
3.提供机会给正在成长的程序员,让他们能相互影响,彼此激励。

这里假定了某些人已具备成为卓越设计师的必要潜能;工作只是诱导他们前进。Alan Perlis说得更简洁了,你可以教任何人学雕塑,但对米开朗基罗而言,要教他的反倒是有哪些事不要做,卓越的程序员也一样。

所以,尽管买那些书吧!你或许能从中找到点有用的,但是在24小时,几天或者几个月中,这些都不会改变你的人生,你也不能掌握一个真正的程序员应该具备的真正的综合的技能。

你可能感兴趣的:(编程,Scheme,招聘,音乐,lisp)