我从以下几个方面去考察编程语言和框架。 (1)我自己要懂,且容易上手。 (2)开发成本不高,能够快速开发。 (3)有不错的测试框架(方便日后做持续集成)。 (4)社区支持好,文档丰富。 (5)招人成本不高。 我自己用了7年的C语言(全职),5~6年PHP和Python(个人的小项目),3~5年的C#(集中在我大学阶段和职业早期),几个月的Java、Ruby和F#(纯属兴趣爱好)。 C语言可以直接抛弃,做互联网的写代码还去考虑ELF、栈溢出、缓冲区泄漏太伤神;C#和F#也抛弃,除非我想绑在微软的架构下,支付高昂的总体拥有成本(TCO)(当然,想借力BizSpark的创业者可以考虑,毕竟3年内免费使用全套微软产品的诱惑很大)。 Java是一个巨大的诱惑,太多优秀的开源项目让你忍不住想使用Java。不过Java不适合快速开发,对团队能力和规模挑战太大,于是也被抛弃。但是开发一些关键的引擎会用考虑使用Java现成的工具,如Mahout(当时的想法简单,Mahout最终只出现在架构图中)。 入围的就剩下PHP、Python和Ruby。这三者都能很好地满足第2、3和4条。 虽然那时Symfony是我最熟悉的框架,但我并不喜欢PHP。骨子里的陈旧让它无法与Python/Ruby这样更“动态”的语言相媲美。symfony模仿Rails,但实现得很吃力,Ruby里method\_missing这样美妙讨巧的甜点在PHP里几乎是个梦魇[\[8\]](#anchor28)(好吧,我PHP功底很弱的)。这就是symfony无论如何也无法赶上Rails的最重要的原因:它被PHP语言的限制给束缚了。按照Paul Graham的说法,语言的表现力上:lisp >> Ruby ~ Python > PHP >>>> Java/C等静态编译语言。 我非常赞同这一观点。另外,PHP不太适合开发后台服务,如写一些守护进程(daemon),这样后台的服务还需要用别的语言,所以PHP出局了,我决定从Python和Ruby中选择一门语言来实现途我睿。 在花了不少时间分别学习Ruby/Rails2和Django[\[9\]](#anchor29)后,我决定使用Python。基于以下理由。 (1)Ruby的很多特性太灵活,如开放类的修改,太灵活可能不利于团队开发(这点现在看来是我当时的偏见)。 (2)使用Ruby做项目的工程师很难招。从招工程师的角度来看:PHP >>>> Python >> Ruby。Python工程师不好招,但合格的Ruby工程师几乎招不到。 (3)我对Python的驾驭能力比Ruby高至少两个等级[\[10\]](#anchor210)。 现在回过头来看,第三点是最关键的,第一点和第二点其实都不那么重要。具体原因如下。 (1)畏惧来源于无知,我不懂Ruby,所以害怕它的灵活。 (2)创业团队要小而精,两个很棒的Rails工程师抵得上一打PHP工程师(从开发效率上看),使用Rails的工程师在当时算得上是极客(geek),找出牛人(ace player)的概率很大。 最终我确定了使用Python/Django,然后就开始一门心思地学习,边学边做途我睿。Django有着可能是这个世上最好的在线文档,学起来毫不费力。 * * * * * [\[8\] ](#ac28) Python有类似的语法getattr。 [\[9\] ](#ac29) Python的Web框架很多,选择Django主要是看重了它的文档和社区支持度。 [\[10\] ](#ac210)在Dreyfus模型中,能力分成五级:novice→advanced beginner→competent→proficient→expert。我的Python水平大概在competent这个级别,而Ruby仅仅是novice。