昨天晚上寫代碼到深夜,一頭扎到床上,沉沉睡去。
第二天睜開眼睛,我發現自己居然坐在一個咖啡館裡,旁邊的牆上貼着最新的英文電影海報《阿甘正傳》、《肖申克的救贖》
這都是1994年的經典電影,我意識到,自己穿越到了1994年的美國!
對面坐着一個帥哥,一邊操作電腦,一邊在不停地讚嘆。
我探過頭去,發現他正在看這個東西:
我說:「哥們兒,這不是安德森開發的Mosaic瀏覽器嗎?這麼丑,你怎麼不用網景?」
「網景?那是什麼東西?不過兄弟不簡單啊,我在咖啡館喝了這麼多天的咖啡,你是第一個識貨的,還知道安德森,肯定也是個程序員吧,要不一起干吧!」
「幹什麼啊?」
「瀏覽器絕對是互聯網的未來,現在很多公司都在狂熱地擁抱它, 他們就使用 Microsoft Word寫文檔,然後將文檔保存為 HTML,通過 FTP 將它們放到網上,這裡邊有商業機會啊。」
「寫個HTML會有什麼商業機會?」
「靜態的網站是枯燥的,這些公司很快就會發現,可以和用戶交互的、動態的網站才有商業價值。我準備專門提供這樣的諮詢服務,為他們開發各種動態的Web應用程序。對了,忘了自我介紹了,我叫Rasmus Lerdorf。」
這個人名怎麼這麼熟悉?
我想既然穿越而來,那就看看1994年的動態網站是怎麼開發的吧。
我說:「我叫張大胖,主要用Java編程。」
「Java?那是什麼語言?」 他兩眼立刻放光了!
我意識到說漏嘴了,Java這時候還沒誕生呢!
「其實叫C++--,一個小眾語言。」
「和C語言相關,那就好,我們得用C語言寫CGI腳本。」
我和他合夥開了個諮詢公司,專門接開發動態網站的活兒。
但是開發一開始,我就崩潰了:沒有前後端分離,沒有Java,沒有JSP,ASP, 真的全靠在C語言!
給大家看看:
用一句話來說那就是:在C語言當中輸出HTML代碼。
這是人幹的活嗎?我都快寫吐了!
Rasmus:「沒辦法啊,C語言編寫CGI腳本,實現動態網頁,可不就得這樣嘛?對了,你會用Perl嗎?」
「就是那個寫出來以後代碼誰都不認識的語言?我不想用!」
時間長了,Rasmus 也受不了了:「這些CGI 腳本無外乎就是處理表單, Post數據,過濾等,重複代碼太多了,怎麼樣才能提高效率呢?」
他有空就琢磨這件事情,有一天,他想到了一招,把這些常用的功能都包裝到一個C語言庫中,它「植入」NCSA Web 服務器中(這是Apache之前最流行的服務器),然後在上面添加了一個模板系統,可以輕鬆地調用他們。
於是代碼就是變成這個樣子:
換句話說:就是在HTML中「混入」代碼。
和CGI對比,這種方式對程序員來說非常友好,我們的工作效率一下子提高了很多。
說實話,我早就知道這種方式,就是ASP,JSP嘛,但是自己沒那技術實力,實現不了啊!
Rasmus 很快就找到了一個新客戶,用新工具為他們開發Web程序,連接到數據庫,滿足他們各種各樣的需求。
隨着客戶的增多, 客戶的需求也略有不同,於是,Rasmus 就不斷地擴展它的工具箱, 從簡單的解析器慢慢發展為包含條件標籤,然後是循環標籤、函數等各種複雜的東西,這已經是一門語言了。
Rasmus 把它們稱為Personal Home Page,簡稱PHP。
我這才意識到,原來遇到了PHP之父!
很快就有其他程序員找上門來, 問我們:Rasmus, 你們怎麼開發得這麼快!
Rasmus說:我有個人工具箱啊!
「那我能不能用?」
Rasmus說:「可以啊,工具只是我的錘子,每個人都可以用我的錘子。」
我趕忙阻止他:「Rasmus, 你把錘子給別人, 那咱們靠什麼賺錢?」
「我不靠錘子賺錢,我賣的是解決問題的服務。」
我心想他真是傻瓜,為什麼不靠賣他的工具來賺錢呢?學學Bill Gates,過幾年上市!
讓我沒想到的是,神奇的事情發生了。
使用PHP的人開始給Rasmus發送補丁了 ——他們發現了Rasmus都沒有發現的Bug!
於是Rasmus到客戶那裡說:我又升級了一個新版本,改了這個,改了那個。
客戶非常滿意,他們認為我們的工作效率非常高,不但能快速完成功能,還能快速修復Bug。
我突然意識到:這不就是開源嗎?
當然,這是1994、1995年,開源這個詞還沒有出現,當時只有RMS提倡的自由軟件。
隨着越來越多的人提交補丁,PHP逐漸完善,1995年,Rasmus看到時機成熟,正式宣布了 PHP 1.0的誕生。
原來PHP就是這麼起步的啊!
Rasmus展示出了一個領袖的大度和風範,他放棄了對PHP的獨家控制權。
通過把項目的所有權分給其他人,這樣大家都可以投入,PHP成了大家的項目,而不是Rasmus一個人的項目。
當時,PHP源碼放在CVS中,我想讓Rasmus把PHP源碼放到GitHub, 可是那個時候連Git都沒有,哪而來的Hub?
在這裡沒有管理,大家是自我組織的小群體,可以圍繞自己感興趣的東西,自我組織。
任人唯賢, 代碼說話。
這真正地改變了PHP的本質。
有一個周末,我又和Rasmus來咖啡館喝咖啡,我說:「我覺得你得給PHP添加一些高級的特性了!」
「比如泛型,註解,面向函數編程,Lambda之類。」
「不不,我希望 把進入PHP的門檻控制在很低的水平,無論是使用它還是向他做貢獻。任何想解決Web問題的人通常會通過PHP找到非常直接的解決方案,許多聲稱可以解決 Web 問題的替代方案太複雜了,想想看,你需要在周五之前完成工作,但是得翻閱800頁的手冊,這讓人崩潰。」
「你有沒有想過,將來PHP會統治Web?」
「哈哈, 有這種可能嗎?」
當年的Rasmus並不知道,PHP將在互聯網大潮中野蠻生長,和Linux, MySQL , Apache聯姻, 不斷攻城略地。
W3Tech的統計顯示,PHP統治了Web, 接近80%的網站在使用PHP!
「如果讓你總結一下,如何才能創建一個成功的開源項目,你會怎麼說?」
聊到這個話題,Rasmus突然就滔滔不絕起來,因為他從0到1發展起一個項目,簡直太有發言權了!
「如果你只有一個很酷的想法, 沒有人會加入你的項目,每個人都有很酷的想法。
如果你創建的東西是半生不熟的,那麼人們可能對你做的事情不屑一顧,他們會用自己的方式來解決問題。
只有你構建了足夠有用的東西,大家才會來到你的身邊,他們會更容易接受你的代碼,然後稍微擴展來解決他們自己的問題,這樣雪球才能滾動起來。
所以,要開始一個開源項目,你必須解決一個困擾你一段時間的問題,這可能會花費數月的時間才能找到真正的問題並解決掉,然後你必須接受早期採用這的建議,盡最大努力讓工具對更廣泛的受眾有用。
最後可以考慮放棄控制權,讓其他人和你一起努力,當人們用你的代碼做他們任何想做的事情的時候,你的開源項目就成功了!」
「太棒了,我希望我的讀者們都能看到這段話。」
「你的讀者?」
「是的,碼農翻身公眾號,我不能說太多了,天機不可泄露,我得走了。」
說完,我就消失了。
後記:這次嘗試了一個新的寫法,讓張大胖穿越到了1994年,以旁觀者的身份講解了PHP的起步歷程。最精華的部分就是末尾關於「如何創建一個成功的開源項目」。
有人可能要問,哪些情節是真的?這個要賣個關子,只要在公眾號回復「PHP之父」就能得到答案。
(完)
我的新書《半小時漫畫計算機》京東、噹噹熱銷中,五折優惠,不容錯過,長按二維碼即可購買
另外,沒有看過第一本《碼農翻身》的小夥伴可以考慮下,也是5折,點擊閱讀原文即可購買。