`

十年学会程序设计

阅读更多

十年学会程序设计

研究者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小时,几天或者几个月中,这些都不会改变你的人生,你也不能掌握一个真正的程序员应该具备的真正的综合的技能。

分享到:
评论

相关推荐

    《C程序设计》(谭浩强)[PDF]

    C语言是国内外广泛使用的计算机语言,学会使用C语言进行程序设计是计算机工作者的一项基本功。 本书的第一版于1991年出版,第二版于1999年出版。由于本书作者具有丰富的教学经验和编写教材的经验,并针对初学者的...

    计算机程序设计艺术(第一卷清晰版).part4.rar (共4卷)

     本书是国内外业界广泛关注的7 卷本《计算机程序设计艺术》第1卷的最新版,以基本的程序设计概念和技术开始,然后专注于信息结构——计算机内部信息的表示、数据元素之间的结构关系以及如何有效地处理它们,给出了...

    计算机程序设计艺术(第一卷清晰版).part1.rar (共4卷)

     本书是国内外业界广泛关注的7 卷本《计算机程序设计艺术》第1卷的最新版,以基本的程序设计概念和技术开始,然后专注于信息结构——计算机内部信息的表示、数据元素之间的结构关系以及如何有效地处理它们,给出了...

    C程序设计_第三版_谭浩强+课后习题答案.rar

    C语言是国内外广泛使用的计算机语言,学会使用C语言进行程序设计是计算机工作者的一项基本功。  本书的第一版于1991年出版,第二版于1999年出版。由于本书作者具有丰富的教学经验和编写教材的经验,并针对初学者的...

    十天学会易语言教程

    易语言是一门计算机程序设计语言,也通常代指与之对应的集成开发环境,其特点是通过汉语进行编程。 易语言的创始人是吴涛。早期版本的名字为E语言。 易语言最早的版本的发布可追溯至2000年9月16日。 吴涛曾表示,...

    计算机程序设计与解释(英文版word文档)(Structure and interpretation of Computer Programming)

     第2版中大部分重要程序设计系统都重新修改并做过测试,包括各种解释器和编译器。作者根据其后十余年的教学实践,还对其他许多细节做了相应的修改。  本书自出版以来,世界各地已有100多所院校采用本书做...

    c语言练习题当代最优秀的程序设计语

    但是,在《K&R》中并没有定义一个完整的标准C语言,后来由美国国家标准学会在此基础上制定了一个C 语言标准,于一九八三年发表。通常称之为ANSI C。 当代最优秀的程序设计语  早期的C语言主要是用于UNIX系统。由于...

    第十四届中北大学ACM程序设计竞赛.zip

    ACM,全称Association for Computing Machinery,中文名为国际计算机学会,是一个世界性的计算机从业员专业组织,创立于1947年,是世界上第一个科学性及教育性计算机学会,目的是集合计算机工业界、学术界、研究实验...

    郭天祥十天学会单片机

    第二讲 流水灯设计、蜂鸣器发声、继电器控制 简单延时程序、子程序调用、带参数子程序设计、流水灯同时蜂鸣器响、如何驱动蜂鸣器,及如何驱动继电器,集电极开路的概念及应用。 第三讲 数码管显示的原理、 数码管的...

    C程序设计 第三版

    C语言是国内外广泛使用的计算机语言,学会使用C语言进行程序设计是计算机工作者的一项基本功。 本书的第一版于1991年出版,第二版于1999年出版。由于本书作者具有丰富的教学经验和编写教材的经验,并针对初学者的...

    windows环境下32位汇编语言程序设计

    笔者从事汇编编程已经有十几年的历史了,从8086时代的DOS汇编编程开始到当前的Win32汇编编程,从一个初学者到现在能利用Win32汇编来解决大部分编程需求,中间也经过了很长时间的摸索和大量的挫折,所以笔者很清楚...

    基于《funcode程序设计创新命题》.pdf

    2017年10月21日上午9:00,在山东省大学生软件设计大赛组委会、济南计算机学会、中国石油大学以及上海锐格软件有限公司和各高校指导老师、同学们的共同努力下,第十五届山东省大学生软件设计大赛《基于FunCode平台的...

    C++程序设计(谭浩强完整版)

    语言是国内外广泛使用的计算机语言,学会使用C语言进行程序设计是计算机工作者的一项基本功。 本书的第一版于1991年出版,第二版于1999年出版。由于本书作者具有丰富的教学经验和编写教材的经验,并针对初学者的特点...

    计算机程序设计艺术(第二卷清晰版).part3.rar

     本书是国内外业界广泛关注的7 卷本《计算机程序设计艺术》第1卷的最新版,以基本的程序设计概念和技术开始,然后专注于信息结构——计算机内部信息的表示、数据元素之间的结构关系以及如何有效地处理它们,给出了...

    计算机程序设计艺术(第二卷清晰版).part1.rar

     本书是国内外业界广泛关注的7 卷本《计算机程序设计艺术》第1卷的最新版,以基本的程序设计概念和技术开始,然后专注于信息结构——计算机内部信息的表示、数据元素之间的结构关系以及如何有效地处理它们,给出了...

    计算机程序设计艺术(第二卷清晰版).part4.rar 共4卷

     本书是国内外业界广泛关注的7 卷本《计算机程序设计艺术》第1卷的最新版,以基本的程序设计概念和技术开始,然后专注于信息结构——计算机内部信息的表示、数据元素之间的结构关系以及如何有效地处理它们,给出了...

    计算机程序设计艺术(第二卷清晰版).part2.rar (共4卷)

     本书是国内外业界广泛关注的7 卷本《计算机程序设计艺术》第1卷的最新版,以基本的程序设计概念和技术开始,然后专注于信息结构——计算机内部信息的表示、数据元素之间的结构关系以及如何有效地处理它们,给出了...

    计算机程序设计艺术(第一卷清晰版).part2.rar (共4卷)

     本书是国内外业界广泛关注的7 卷本《计算机程序设计艺术》第1卷的最新版,以基本的程序设计概念和技术开始,然后专注于信息结构——计算机内部信息的表示、数据元素之间的结构关系以及如何有效地处理它们,给出了...

    计算机程序设计艺术(第一卷清晰版).part3.rar (共4卷)

     本书是国内外业界广泛关注的7 卷本《计算机程序设计艺术》第1卷的最新版,以基本的程序设计概念和技术开始,然后专注于信息结构——计算机内部信息的表示、数据元素之间的结构关系以及如何有效地处理它们,给出了...

Global site tag (gtag.js) - Google Analytics