我從以下幾個方面去考察編程語言和框架。
(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:日常開發
- 流程
- 寫在最后的話
- 看完了