软件开发者路线图 ——从学徒到高手
尝试自学Java,并慢慢地做各种练习,创建Java applet。结果我感觉自己真的成了个傻瓜,一切看起来都是那么难,我因此又放弃。直到26岁时,我找到了两位指导者,我的第一门语言才算学会了。那是在伊利诺伊州斯科基市,在"dot-com"泡沫的浪尖上,我在Edventions有限责任公司遇到了这两位指导者。公司的创始人Irv Shapiro知道我想成为一名程序员(他当时雇我做在线内容编辑)而且需要让我学习Perl,扑通一声,他把一本《Programming Perl》(http://oreilly.com/catalog/9780596000271/)(Perl语言编程)放在我的桌子上,并描述了一个“质脆玩具”作为我的练习作业。接下来的几天里,我啃完了《Programming Perl》,虽然对于像我这样的新手来说,这是本相当厚的书。为了继续探究Perl,我从自己的阅读列表中挑了一本消化起来更容易的可视化快速入门指导(Visual QuickStart Guide)系列的书。我的另一位指导者是Steve Bunes,Edventions公司的CTO,他时常坐下来与我“密切交往”,为我演示一些强大的调试技术,直到今天我还使用这些技术。在我完成第一版“质脆玩具”的过程中,最难运用的一个模式就是向旁边工作间中的那些有经验的Perl程序员和系统管理员“暴露无知”。但收起自己的面子是值得的,因为他们给了我一些快速的指导,使我弄清了程序中的一些问题,并理解了UNIX文件权限,这使我很快地完成了“质脆玩具”,让Irv和Steve大吃了一惊。
两年之后,我开始寻找一些机会,让自己的职业生涯超越我心爱的(但也越来越无法升值的)Perl并学习一些新技术。我一头扎进了极限编程(Extreme Programming,XP)和敏捷开发(Agile Development)中,让自己“提高带宽”,那时,极限编程和敏捷开发还处在宣传周期(Hype Cycle)的高潮中。我花了几天时间参加附近一所大学的XP/敏捷讨论会,从那里吸收新的信息。会见和聆听像Ron Jeffries[4]、Martin Fowler[5]、Bob Martin“大叔”、Alistair Cockburn[6]和Kent Beck[7]面对这样的人,简直是一种令人陶醉的享受,我从讨论会中出来后便成了正式的面向对象和极限编程的超级崇拜者。我发现Joshua Kerievsky正在写作《Refactoring to Patterns》(重构与模式),这听起来真让人钦佩,于是我找了个“同道中人”一起学习。很快,我们发现我们都跑在自己前头了,因为我们甚至还不知道重构和模式是什么。于是我开始寻找更适合自己经验水平的书。最终找到了《Object-Oriented Software Construction》(影印版《面向对象软件构造》,机械工业出版社引进)和《A Pattern Language》(建筑模式语言)。我还是想以后再回过头来再看看《Refactoring to Patterns》,于是把它加到了我的阅读列表中。
还是跟那个“同道中人”一起,我从2002年开始学习Ruby,但我无法找到很多在日常工作中使用Ruby的途径,直到出现了Ruby on Rails。2005年,我再次拾起Ruby,努力寻找一些在日常工作中使用它的方法。我开始用它构建一个“质脆玩具”,却发现自己的思维方式太像Perl程序员。对于任何一个精通其“入门语言”的程序员来说,当他学习一门新的语言时,都会遇到求助于已有语言的标准和惯用法的诱惑。Ruby拥有优雅、简洁的美誉,而我所写的代码让人感觉既丑陋又蹩脚,这让我觉得自己是在做错误的事情。我刻意决定系上“白色腰带”,于是把自己的Perl经验丢在一边,开始深入钻研Ruby文档。之后,我很快明白了我需要的是什么,并将那些费解的代码重构成精良、标准的函数调用(Ruby程序员们好奇了?就是String#scan那样的)。为了让所有这些新知识留在我的大脑中,我决定“暴露无知”:在网站上记下了自己学到的东西,让所有的人看。