Go 語言狂人許式偉:編程的意義就是讓世界變得有趣一些
如果要用貼標籤的方式快速認識他的話,大概可以這樣說:他是中學時代的奧數競賽狂人,大學時代的 C 語言狂人,創業圈子裡的存儲狂人和 Go 語言狂人,以及一位教兒子學編程的父親。本次《初心》的講述者,他的名字叫做——
《初心》十集技術人物紀錄片 | 第九集
由InfoQ 二叉樹出品
許式偉,七牛雲 CEO。2000 年加入金山,同年畢業於南京大學物理系。2002 年任 WPS 首席架構師,主導 WPS 2005 的研發。2006 年建立金山實驗室。2009 年在盛大創新院發起祥雲計劃。2011 年創辦七牛雲存儲。
我們的使命其實很簡單,一句話就是:釋放社會的創新力。
創新力的釋放其實是有前提的,如果整個社會的創新環境不好,創新力是沒辦法釋放的。影響創新的根源有哪些呢?一個是基礎設施,就是雲;第二個就是教育。所以我最想做的事情也是這兩件事,一個是雲計算,一個是教育。
我一直並不覺得大人是聰明的。現在大部分家長其實都是不明智的,大家拚命的往小孩腦袋裡面塞各種各樣的東西。其實你真要去讓你的小孩在社會有適應性的話,請你還是要想一下未來是什麼樣子的。未來 10 年 20 年的時候,整個社會是什麼樣子?只有你明白了那個時候是什麼樣子的,你才能夠想像說,你現在能夠教會小孩什麼樣的東西,去讓他能適應那個狀態的社會。
所以我為什麼教小孩學編程,其實最樸素的一個點是什麼呢?我認為站在 20 年後的小孩,其實他不懂編程是跟文盲是沒有區別的。
我就從 Scratch 開始。這個語言我一看就驚呆了,我覺得這就是我想要的東西,它能讓一個只有五六歲的小孩能夠去編程。後來我發現其實還有 Google 的 Blockly,都很有趣。觀察他們學習的時候,和學數學和學英語的狀態是完全不一樣的,他會期待說我下一次要繼續學,我覺得這才是真正意義上的教育的革新。
反觀我在大學,為什麼會那麼狂熱的去學電腦上的東西?我反思了一下,其實最核心的一點就是反饋。人為什麼喜歡玩遊戲,就是因為遊戲的反饋特別短,你剛付出了一個努力,你立刻就得到了收穫,對吧?計算機也是一樣的。
第一次接觸電腦,其實高中時就已經有接觸了,但那時候一年可能最多能夠碰個三四次,打開電腦以後就進入一個 Basic 環境。但哪怕是這麼簡陋的環境,我當時也挺著迷的。
一進大學就更加不可收拾,發現比我以前理解的電腦能做的事情多多了。老師特別推崇 C 語言,我就自己去找 C 語言的材料,把我們學校圖書館的計算機類的書基本上全翻過了。我的第一個 C 程序就已經到上千行這種規模,做 doskey。
後來我又去做一些好玩的,像分形什麼的。分形是一個邊緣的學科,介於數學和圖形學、計算機之間,它是一種圖形的生成系統,比如說一棵樹,你可以用一個很簡單的演算法,可能就是五六個數據點,就能夠快速的生成看起來和現實生活中很像的一棵樹。還有就是朱麗亞集,是說一個函數有多麼漂亮,就是你研究一個很普通的數學函數的話,你會發現它其實可以畫出很多自相似性的這種細節。我當時就把分形學我看到的這些 L 系統、IFS、朱麗亞集這些全部都寫成程序,然後做了一個分形的集合 demo。
就是覺得好玩。我覺得其實著迷計算機是有原因的,最核心的就是它真的讓你能夠感覺說你在創造一個世界。這種感覺和你學數學學物理,你發現這都是很有用的知識,但是這些知識能幹嘛?不知道。所以它對人的魅力也是不一樣的。
我是學物理的,然後我覺得計算機很好,我就很清楚說我未來一定是做計算機相關的事情,就想考計算機的碩士。其實我考碩士的考試費用都交了,但是我最後沒有去考,因為當時金山來我們學校招聘。我大學的班長說覺得金山挺適合我的,他說如果你要考物理系或者其他任何系的研究生,他都覺得挺不錯的,但是計算機是一個實踐的科學,所以讀計算機的碩士其實是沒有在公司進步要快的。
我當時一聽,覺得他這句話說得非常對。當時也沒準備簡歷,我就立刻手寫了一份簡歷投上去了,最後也獲得了考試的機會。
考完以後自我感覺非常好,覺得他們出的題目挺有深度的,大部分人如果說對語言背後的機理不了解的話,很容易答錯。我其實是在大學時候自己嘗試去寫一個 C++ 的編譯器,當時是沒有成功了,但這個經歷對我的收穫還是很大的,我基本上所有的語法特性都想過如果讓我來實現,我會怎麼實現。所以金山那個考題我就很自信,覺得自己一定能被錄取上。
結果最後發現沒有通知我。過了一周之後,我們系裡面的領導才跟我說不好意思,金山讓你去面試,我忘了告訴你了。然後我才想起來其實是我自己沒有留電話號碼,因為我家裡比較窮,沒有打電話的習慣。然後我就查了一下金山的電話,打過去前台說能不能有機會給我面試一下,他們就說招聘已經結束了。然後我就說你跟招聘的人說一下,我叫許式偉,如果有印象的話你就說一下,沒印象就算了。最後王羽就打電話到我們宿舍說給我面試,然後我就去了金山。
我應該是 2 月份左右就過去實習了,相當於大學最後一段時間是在金山度過的,畢業論文也是在金山寫的,論文雖然跟在金山的工作沒關係,但也是計算機相關的,講的是如何自己去做一個圖形庫。當時 Windows 還剛出來,我就很想去自己做一個圖形界面,代碼量還是非常多的。
我之前的人用序列化做讀盤存檔,但我認為序列化系統是有缺陷的。它的好處是做事情特別快,幾行代碼就能把讀盤存檔寫完了,但它最大的缺陷就是版本兼容很差,就是說後來版本的 WPS 存下來的文件,以前的版本是打不開的。這對於一個 Office 軟體在我看來是致命的,就是你的用戶被迫要跟隨著你升級,這會制約很多東西,用戶和用戶之間交互文檔就很麻煩。所以我當時就琢磨說怎樣做一個存檔讀盤的系統是能夠做到版本比較優雅的兼容。
另外一個有意思的挑戰,就是我留意了一下微軟的 Office,它有一個特點就是存檔特別快,但是我們就做不到這一點,因為我們一存檔就是完整的存檔,就會比較慢。
這些東西我都會想很多,然後就越做越有意思。後來其實反過來想,存檔讀盤對一個 Office 軟體其實是一個核心系統。因為第一,你的資產其實是用戶留下來的文檔,根本就不是這些工具;還有一個,它是觸及數據的,而數據是一個軟體的靈魂。
所以我當時經常會把微軟 Office 的讀盤存檔格式分析透了,然後介紹給同事去聽,聽完之後反而會影響他們的功能設計,因為你了解數據結構,基本上對手的思路就很清楚。
我做的第一個版本是 WPS 2001,口號是「不一樣的 Office」,然後 WPS 2002 的話,口號就變成了「一樣的 Office」。所以大家也明白了,其實你只有先做到了內部核心的一樣,你才能做到不一樣。如果你連微軟的資產都不兼容的話,你是沒有機會的。
做了 2002 之後就是 2005 了,中間隔了三年,是因為我們決定完全重寫。我在 2005 的時候是作為首席架構師,我要考慮 UI,考慮 IO,考慮數據層。為什麼要做這個數據層?因為 Office 軟體里其實有一個很複雜的東西叫 undo/redo。大部分人可能覺得很簡單,就是 Ctrl+Z 就行了,但其實它背後是很複雜的。
如果學生在學校裡面學過設計模式的話,會知道設計模式裡面對 undo/redo 用的模式叫 command 模式,但這是理論界。實際上在工程界,你會發現這個模式效果沒那麼好,因為 command 模式意味著所有的功能你都要為它考慮反操作,但 Office 軟體如果你列功能的話,就是厚厚的一本書,這個工程量是很恐怖的。
所以我們當時提出數據層的構想,是希望能做基於狀態的 undo/redo。這個和存檔讀盤也是相關的:快速存檔,說白了就是在一個文件裡面存多個版本,用戶敲了幾個字,我就在文件裡面存了兩個版本的文件,它是增量存的。那麼 undo/redo 可以做成什麼呢?用戶每做一次操作,我就存檔一次,然後 undo 的時候,我切換到上一個版本就可以了。
在金山的前六年,我可以歸結為一個技術人對自己不斷迭代的過程,覺得自己在不斷提升,自己心裡很滿足。
但工作六年之後,我發現這種滿足感已經被另外一個困惑給取代了:我覺得我們做 Office,一直還是做的挺不錯的,但是為什麼就不賺錢呢?所以就在思考說到底做什麼樣的東西是能夠在商業上也能獲得成功的。
我們第一個探索是在 WPS 裡面分出了一個小 team,叫 WPS online。這個構想其實跟遊戲的成功是有關係的,因為遊戲最早單機軟體的時候也是不成功的,盜版嘛。但是遊戲變成網遊以後,發現大家都很賺錢。所以我們當時認為軟體服務化是一個必然的趨勢。
但實際上在這個事情上我沒做太大的投入,我是站在跳得更開的一個角度,是說如果讓我重新去思考,我到底該做什麼樣的業務,才是符合互聯網時代的?
所以我在 2007 年很堅決的一個轉型,是希望自己從一個技術人轉成一個產品經理。因為只有你是一個產品經理,你才是一個商業上可以去探討成功的角色。所以我當時就提出離職了,只投了一份簡歷就是 Google,最後還成功了。但是我沒去,因為金山同意讓我成立一個金山實驗室,讓我想幹什麼就幹什麼。
我先做了一個搜索引擎。做搜索引擎就要做爬蟲,做爬蟲就需要存儲,然後我就想,那就搞搞存儲。在這個過程中,有一天我突然意識到,其實這個世界上還沒有牛逼的互聯網化的存儲公司。所以我那時就朦朦朧朧感覺說我應該做一個存儲的互聯網公司。存儲在以前其實就是硬碟,再高端點什麼 EMC、NetApp,都是軟體時代的存儲。我認為未來肯定是互聯網化的存儲,就是雲存儲。
所以金山實驗室就開始折騰,怎麼去做一個靠譜的存儲系統。這是一個從技術演進去考慮的思路。然後另一個側面也印證了我的一些想法,就是當時的移動互聯網。2007 年,雷軍開始去投一些移動互聯網的初創企業,我也是很認同這個趨勢的,然後就在想,移動互聯網的趨勢下什麼會變化。我的結論是存儲會變化。手機上打字是很麻煩的,那圖片、語音交互的方式一定會出現,導致存儲需求的爆髮式增長。
成立金山實驗室是我轉型為產品經理的開始。存儲是後來被證明是一個靠譜的想法,但其實當時想法還蠻多的,靠譜的不靠譜的。轉型產品經理之後,我覺得我做得第一件事情就是開放,因為關起門來我認為是做不好產品的。
我印象很深的第一次去北京參加一個搜索引擎的沙龍,我認識了很多牛人,包括後來唱吧的陳華,美麗說的徐易容,還有霍炬、郝培強等等,都是在那個會議上認識的。我也拜訪了遨遊的老大等等,基本上覺得哪個公司有趣,我就會去,儘可能的跟創始人聊聊,然後聊的話題不再是技術,而是看別人怎麼想的,怎樣去滿足用戶的需求。
其實我前面做六年的 Office 的時候,我也會經常去一個地方,就是 WPS 的論壇。為什麼呢?因為其實做辦公軟體,你很難去跟客戶聊,但有一個地方就是用戶論壇,因為用戶會在上面罵你。我認為如果你真要做好一件事情的話,理解用戶非常重要。所以我也經常說一個小數據,就是當時在 WPS 論壇上晃悠的那些技術人員,後來基本上都成了 CEO。
離開金山實驗室之後,第一個就是去了百度,可能是因為搜索引擎的情結。我其實沒覺得我會在百度待很久,但還是想去看看,去學習一下。
所以在百度確實待了不久,就去了盛大。到盛大的原因很簡單,就是因為我覺得我 ready 了。當時盛大創新院剛成立沒多久,我覺得這個機會很好,想去做存儲的雲化這個事情。我就去了盛大,基本上從零開始招團隊,慢慢的把團隊做起來,慢慢的探索一個存儲的產品應該怎樣去做。
在盛大就做了兩年半,最後就出來決定做七牛。那是在 2011 年的 6 月份。
我當時對於我是不是一個公司的老闆,其實沒那麼在意。但是在盛大其實有各種誘惑,比如最典型的誘惑,就是盛大文學原來的 CTO 離職後,他們想找一個新的 CTO。創新院的老院長就找到我,說覺得我做盛大文學的 CTO 挺合適的,我直接就拒了。後來創新院想拓展,要分院,什麼多媒體院、搜索院、雲院,各種院,當時說是不是我適合做雲院的院長,然後我真的是不感興趣。因為我覺得創新院作為一個孵化器,它最重要的是扶持的職能,就是如何讓別人能夠成功創業。但我根本就沒做成功過一個創業的事情,然後我去扶持別人創業,我認為是不靠譜的。
創辦七牛,我覺得有幾個背景。一個是在公司內創業,我越來越覺得受到的局限還是蠻大。另外一個就是,我覺得雲計算的機會真的起來了。
2007 年其實還是我自己在頭腦裡面覺得這是一個機會,但是到 2011 年,其實亞馬遜就已經很知名了,而且國內阿里雲 2009 年就進去了,用戶的教育已經到了一個階段。剛好 2011 年是移動互聯網爆發的一年,移動互聯網公司之間的競爭也比以前激烈很多,那時候大家都想的是如何跑得更快,就對雲服務自然有訴求。
其實我們還是走了一些彎路,最早創業的時候是面向個人市場,這是比較容易想到的,因為 2010 年的時候 Dropbox 非常火。但是我們三個月就換方向了,原因是我們對自己的一個反思。一個就是 9 月份的時候,覺得網盤市場是過熱的,各家巨頭都進去了,而且大家都沒有商業模式,不知道該怎麼賺錢,雖然當時還沒有開始百盤大戰,但我們可以預見未來會有百盤大戰的一天。另外一方面,我們思考了一下我們的團隊,都是技術背景,普通老百姓在想什麼其實不太了解。
這個情況下,我們就會重新思考說那我們到底怎麼推廣,我們怎麼樣才能勝出,其實我們是沒有答案。但比較好的一點就是我們在存儲領域其實還比較知名,大家會容易想到我們。當時移動互聯網競爭比較激烈,就會有很多圖片比較多的公司發現需要一個雲存儲,然後剛好 360 找上來了,說想要一個雲存儲,我們就飛成都,跟他們聊完之後覺得他們需要的產品我們能很快做出來。
我們團隊一直有一個觀念,就是要專註,只做一件事情。所以團隊決策,最後一致認為我們應該做企業雲存儲,然後就轉型了。這是我們第一次面臨的一個變化,我覺得也是影響非常重大的一個變化,因為如果沒有這個決策,其實今天基本上可以確定肯定沒有七牛。
差不多 2012 年,就開始有一些視頻客戶的需求;但是到 2014 年,我認為是一個重要的變化,短視頻爆發是那個階段產生的,然後我們花了比較多的精力對視頻做支持。然後到了 2015 年,大家都知道直播開始起來了,其實我們直播也是從 2014 年就開始做一些,然後我們的大數據其實也是 2014 年就開始做。
但是我們每做一個新的業務都會相對比較低調,因為我們要做用戶的驗證。我覺得這是最值得初創企業去做的,就是先確認你的東西靠譜,然後再推廣。2012 年初的時候,我說我們第一年只要做十個以內的客戶就夠了。種子用戶期不需要太多客戶來驗證我的想法,你要確保的是用戶的典型性,是你的核心用戶,不是隨隨便便找來湊數的。這樣一些核心用戶,你滿足他最核心的痛點,然後一些邊邊角角的需求,你可以不斷去迭代。
我一直跟同事講一個觀點,就是一個公司,從 10 個客戶到 10000 個客戶,和你從 100 個客戶到 10000 個客戶,你的成本是一樣的;但是你早期服務 10 個客戶和 100 個客戶,成本可能就真的是十倍的差別。這類似於精益創業的想法,就是你要讓自己創業的成本儘可能的低,那你就要更聰明的做事情。
一個企業怎麼樣子才算成功?其實我的看法很簡單,就是我認為企業沒有成功這個說法。企業就是不斷的成長。
企業要有危機感。危機感什麼意思呢?就是不要覺得我已經成功了。當企業認為自己成功了,其實就是一個非常危險的信號。企業一定要隨時去想下一步是什麼,很積極的往前走。
我們做雲存儲,我覺得無非就兩個核心,一個是找到下一個藍海是什麼,另一個就是企業要有狼性。當然我很少提狼性這個詞,但是在紅海市場,你能憑藉的就是狼性。任何一個藍海都不會是永久的藍海,所以在一個紅海市場,就是肉搏,技巧都是次要的,你的鬥志、你的毅力、你的勇敢才是最重要的。
人生的意義是什麼?
我覺得不同人的追求不一樣,沒有必要把自己的觀念強加給別人。在我看來,人的意義就是自我實現,所以首先要看你自己追求的是什麼,你想要追求什麼,你就去實現什麼。像我的話,我特別希望能夠改善一下這個環境,要讓這個世界變得更有趣一些。
二叉樹是 InfoQ 全新推出的一檔面向技術人的視頻欄目,在第一季《初心》紀錄片中,我們採訪跟拍了十位技術大咖,探問他們的初心,叩響對技術的本心。更多高清視頻,請在【秒拍】搜索「InfoQ」。


※矽谷人工智慧技術、內容時代的技術實戰,值得關注的QCon上海2017
※快速學習 BAT 中高級工程師的 13 大必備技能
※全球架構師峰會倒計時3天
※你是如何被微信廣告選中的?微信廣告引擎與社交傳播演算法實踐
※領走這份攻略 離入圍華為開發者大賽只有一步
TAG:InfoQ |
※如果「時間」也是一種編程語言,世界該多有趣?
※你想知道的,目前最火的編程語言有哪些?
※對於沒有編程經驗的人,R 語言是否很難掌握?
※宇宙生命研究者:很可能我們也是一種AI,一種被編程好的生物AI
※趣味漫畫:如何使用不同的編程語言來造一匹馬
※國產編程語言《易語言》是怎麼一步一步變遊戲外掛「代言人」的?
※學會編程是不是黑客入門,做黑客至少要懂幾種語言?
※如果盲目學編程,那將毫無意義!
※程序員是否應該創造面向 IDE 而非人類的編程語言?
※都別爭了!全宇宙最好的編程語言是貓語
※我們印象中的編程都是英文的,那有中文的編程嗎?如果有,你想學嗎?
※為什麼學了編程語言還是不會做軟體?
※想轉行做程序員,學哪種編程語言比較好?
※少兒編程,為更好的世界
※這個世界上存在終極編程語言嗎?
※懂編程是不是就真能製作機器人
※會考試也是一種能力,想成為學霸,就要養成自己的編程思維
※編程從古代就有,只是現在編程換了一個……
※你是不是覺得學習編程很枯燥?難道你不知道可以邊玩遊戲變學習編程么
※程序猿的崛起,一篇文章看懂編程語言