2018-08-23 16:28:52 +0000   |     others programming language   |   Viewed times   |    

下面的观点,提炼自Peter Norvig著名的文章【Teach Yourself Programming in Ten Years】

“计算机科学的教育不会让任何人成为内行的程序员,正如研究画笔和颜料不会让任何人成为内行的画家”.
– 【Eric Raymond】

我想成为的是画家,不是研究画笔和颜料的人。这是我在计算机硕士毕业之后,对自己的客观定位。但编程是否像弹钢琴一样,能通过长期有意识的训练培养成一门技艺,还是一个开放的问题。因为能够证明这个问题的第一代程序员还不够老。我就只好以自己十年的实践去探讨这个问题的答案。

做事前有必要先粗略了解一下方法论,我认为以下几点对我完成这次实践是有帮助的(以重要性降序排列,序号越小越重要),

  1. 跟好的程序员一起完成项目,多和他们交谈。在我不如他们的时候我要观察高手在做什么,以及他们不喜欢做什么(交给我做的活)。当我比他们优秀一点的时候,要测试自己领导项目的能力,并通过我的洞见鼓舞其他人。

  2. 阅读优秀的代码比读书和训练课程更有效。

  3. 编程,编程,编程。最好的学习是从实践中学习。并且任务的难度最好适中,过程中最好有有意义的反馈,以及重复及改正错误的机会。

  4. 学会至少半打编程语言。原话如下,但我觉得在新时代背景下,部分语言的具体种类可以微调,

包括一门支持类抽象(class abstraction)的语言(如Java或C++),一门支持函数抽象(functional abstraction)的语言(如Lisp或ML),一门支持句法抽象(syntactic abstraction)的语言(如Lisp),一门支持说明性规约(declarative specification)的语言(如Prolog或C++模版),一门支持协程(coroutine)的语言(如Icon或Scheme),以及一门支持并行处理(parallelism)的语言(如Sisal)。

  1. 接手别的程序员完成项目。用心理解别人编写的程序。看看在没有最初的程序员在场的时候理解和修改程序需要些什么。想一想怎样设计你的程序才能让别人接手维护你的程序时更容易一些。

  2. 尝试参与到一项语言标准化工作中。这样可以学到在这门语言中到底人们喜欢些什么,他们有多喜欢,甚至有可能稍微了解为什么他们会有这样的感觉。

  3. 拥有尽快从语言标准化工作中抽身的良好判断力(当前还不理解,但仍然保留)。

  4. 对编程感兴趣,因为乐趣而去编程。

并且Fred Brooks从一个管理者的角度,认为编程技艺的长进,更适用于 师徒式的传帮带,以及多个学徒间的化学反应

所以我认为,

  1. 给自己找一个好的师傅可能是最重要的。

人生几十年,虽如梦似幻,但仍是由每一个实实在在的当下组成。于诸君共勉。