我从以下几个方面去考察编程语言和框架。
(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。
- 版权信息
- 作者简介
- 专业书评
- 内容提要
- 主人公寄语
- 序一
- 序二
- 前言
- 梦想
- 途我睿的由来
- Alex和剑桥MBA
- iWeekend创业周末
- 合伙组建公司
- 依依辞别Juniper
- 申请助跑计划
- 助跑计划
- 创新工场初印象
- 种子融资
- 融资的目的
- 投资协议
- 期权池
- 清算优先权
- 反稀释条款
- 关于投资协议的谈判
- 等待进入创新工场
- 早期产品
- 概念
- 技术选型
- 语言和框架
- 数据库选择
- 心得
- 架构杂谈
- 开发
- 与iWeekend再续前缘
- 完善拼图
- 组建团队
- 愿景和使命
- 发布Alpha版本
- 正式上线
- UX再造
- 天使投资
- 工具和社交之争
- Demo Day
- 途客圈旅行助手
- Nanfang离职
- 加速计划
- 新一轮招聘
- 结束编外身份
- 重铸产品
- 苦中求乐——飞盘
- 复盘
- 敏捷实践
- 可爱的实习生
- VIE和75号文
- 通宵上线
- 永定河峡谷徒步
- 产品经理之痛
- Tao神出走
- 途客圈旅行助手正式上线
- 旅行计划大赛
- 破局的尝试
- 矛盾爆发
- 风云再起
- 密云会议
- 裁人风波
- 踽踽独行
- 搬离创新工场
- 项目代号:Cayman
- 开辟收入
- 分歧再起
- 产品代号:Ireland
- 有爱的夫妻档组合
- 项目管理工具:teamspark
- 小宝降临
- 最后的尝试
- 和平分手
- 现金流告急
- 艰难抉择
- 再度裁人
- 告别团队
- 结束使命
- 新的思考
- 团队
- 选择合伙人
- 选择技术合伙人(成为技术合伙人)
- 开发产品的能力
- 组建团队的能力
- 领导团队的能力
- 自我驱动的能力
- 招募团队
- 建立自我提高的团队
- 方向/市场
- 市场区隔
- 市场容量
- 产品之外的技术工具箱
- 场景1:新员工(工程师)入职
- 场景2:日常开发
- 流程
- 写在最后的话
- 看完了