2017/06/18 version 0.1
原文地址:致未来的程序猿
故事应该从2002年说起,那时我正在思考如何教人们学习编程的事,一种堪称伟大的计算机语言Ruby正好适合去教如何学习编程。我是想说那时整个IT界都为Ruby这门强大、优雅却又不失趣味性的语言所振奋,同时在我看来Ruby也不失为学习编程的入门语言。
不过有一丝不便的是,那时还没有太多为新手入门的Ruby相关资料,我们计算机团队中一些组员就在讨论想做些入门指导所需的参考书,同时这样更有便于关于编程知识的教学。我想得很多关于入门指导资料的事,所以讨论的时候我说的也越来越多,一个组员就向我提议,“克里斯,与其你说了那么多想法,为什么不直接写个入门指导出来?” 因此我还真就这样做了。
但现实是没那么丰满的。理论上那些好的想法我都有,但实际上对我这类已经会编程的人来说很容易,但为一点从未没学过程序的新人做一个指导书的确是个比我以为大得多的挑战。
所幸有一点帮助了我,那些编程新人很容易联系到我,同时我也经常在他们编程遇到难题的时候帮助他们。我发现有许多新手都卡在了同一个问题上,我都要向他们再解释一遍,重复工作很大,但值得欣慰的是那些新人编程能力变得越来越好。
几年之后,我为新手们写的入门指导资料逐步完善,所以今天我可以很开心得宣布这个任务已经完成,之后我可以继续把重点转移到其他事情上去。不久遇到一个能将我所做的这些入门资料编成书籍出版的机会,我考虑到指导资料已经基本上齐全了,应该没有什么问题了。稍后我修改了几处瑕疵,增加了更多练习内容和教学例题,增加了几个章节,最后还发给50多个组员审核……
修编过程又经过了一年,现在我认为这个指导资料可谓相当完善了,我想主要是因为在写这本资料期间帮助过我的几百个无私的人们……
这个网页上的指导资料是最原始的版本,自从2004年没有再变动,如果想找最新和最完善的,你可以去查询已经出版的书籍。
—————————————————————————————————————
致教师们的教学思考
这里有几个我一直坚持的指导原则,这些原则使得学习编程的过程更加自然顺畅,尽管学习编程本身有一定难度。如果你们正在教育或者指导一些学生学习编程,下面这些原则可能会帮助到你们。
第一个原则是:我试着尽可能区分各种不同的概念和定义,这样学生们将每次只需要记住一个概念。这种方法起初是挺困难的,但是当我做过几次练习后开始慢慢变的容易。有些概念必须在教其他学习内容之前就要提前告诉学生,当然我也知道这些概念的优先差异有多么小。我的原则是提前编排好教学概念的顺序,所以指导资料里每个新章节都会和之前的章节相关联。
另一个我一直谨记于心的原则是只教一种解决某个问题的办法。做为一个给从未学过编程的指导书来说这是一个明显的好处。某种程度上只学会做一件事情的一种方法比学会两种方法要简单得多,可能另外一个更重要的好处是你教给新手越少的东西,他们越会在编程过程中更加有创造性和更聪明。本来编程就是为了解决某个问题,能够在每个阶段鼓励他们想出更多解决问题的方法是很重要的。
我已经强调了新手学习编程过程中了解不同概念的重要性,让学生们用他们的直觉来引导你想表述的想法,而不只是靠这本指导书。面向对象的编程为此提供一个好的途径。我在指导书前面几章以“对象”和不同“种类的对象”来开始介绍,跳过那些无用的习惯用语。我不会说类似“Ruby中所有东西都是一个对象”或“数字和字符串是某种对象”,因为这些说法对一个新手来说没任何意义。相反的,我会说成“字符串”(而不说成是“字符串对象”),而有时我更偏于将程序中某个类型说成“对象”。因此鉴于Ruby中所有类型都是对象,这使得我的一些工作方便了许多。
尽管我尽可能避免类似“00”(Object-Oriented)这样术语的使用,我只是想确保如果新手们的确需要学一个新的术语,他们应该学习正确的那个(我不想让他们再学一回,是吧?),因此我会使用“字符串”来称呼相应的对象,而不是用“文本”,做到正确地称呼相应的对象。
就指导书中的练习内容而言,我自认为我能想到的就已经是一些不错的练习内容了,但是这些练习越多越好。老实得说,我用了一半的时间试着想出这些有趣好玩的练习资料,令人厌烦的练习完全会扼杀掉任何对于编程的欲望,相应的好的练习资料会引发新手难以抑制的热情。简而言之,教师们在思考好的习题方面花费再多的时间也是值得的。
—————————————————————————————————————
关于本书原始资料
本指导资料的页面(甚至包括本页面)都是由一个大的Ruby程序自动生成的,所有代码示例是自动运行的,而且显示的输出也是自动生成的。我想这是最好最简单同时也是最酷的方式确保所有我呈现的代码示例就是我所演示的那样。你不需要担心我可能只是复制了某个错误的示例的输出,或者忘了测试某些代码,所有代码都已经测试过了。
—————————————————————————————————————
致谢
最后我想感谢在Ruby讨论组内每个人贡献的想法和对我的鼓励,所有使得本书更加完善的审核者,我亲爱的妻子,特别要感谢的是我主要的审核人,创造了这么优秀语言的作者Matz(松本行弘),以及Pragmatic程序出版社!
如果你发现任何错误或拼写问题,或者有评论、建议以及好的程序示例,请联系我。