陳皓(@左耳朵耗子):我的精神家園(圖靈訪談)

盼盼姐發表於2012-08-16

圖靈訪談之三十二:陳皓(@左耳朵耗子)專訪

芝蘭生於深谷,不以無人而不芳 。君子修身養德,不以窮困而改志。

“碼農人物誌”第二期碼農代表:陳皓@左耳朵耗子),酷殼coolshell.cn博主。
14年軟體開發相關工作經驗,8年以上專案和團隊管理經驗,6年的軟體行業諮詢經驗。擅長底層技術架構,團隊建設,軟體工程,軟體研發諮詢,以及全球軟體團隊協作管理。對高效能,高可用性,分散式,高併發,以及大規模資料處理系統有一些經驗和心得。喜歡關注底層技術平臺和網際網路行業應用。技術擅長C/C++/Java和Unix/Linux/Windows。現於Amazon中國任研發經理,負責庫存預測和電子商務全球化業務(全球開店)的研發。

enter image description here

經歷

“我就想要去經歷一些未經歷過的事情,這樣老了以後才不會後悔。”

圖靈社群:98年大學畢業,你找到了一份令旁人羨慕的銀行工作,後來為什麼離開了?

我當時在銀行做銀行網路、銀行的電子郵件系統和辦公自動化系統。當時正處在銀行資訊化的階段,加上當時網際網路和IT業剛剛火起來,得到這份工作其實是很幸運的。銀行正值擴張電子資訊化業務的時候,其實應該有很多事可做,但是當時的主要工作都是由廠商來幹。比如說IBM或Cisco拿下單子來,會把工作外包給系統整合商。作為一位技術人員,其實可以發揮的空間並不大,多數時間我只是出了問題打電話的角色。沒有人會教你任何事,出了問題,就是打電話,然後按照他們的指導來完成工作。但這個還不是促使我離職的最主要原因,我離開是因為網際網路和IT業的興起讓我有些心嚮往之,有想去看一看的衝動。我還記得當時的辭職書是這麼寫的:“本人對現有工作毫無興趣,申請辭職。”處長說,“你可以這麼寫,但是要加上‘經調解無效’,另外,分給你的房就不能要了。”我說好啊。就這樣就辭去了工作,去了上海。老實說,這個決定真不好做,因為幾乎所有的朋友和親人都很反對。

圖靈社群:離開了原來的工作,為什麼選擇來到人地生疏的上海?

當時選擇上海是有原因的,我覺得在當時的環境(2000年)下,上海的發展比較不錯。沒有選擇深圳的原因是個人感覺那是因為政治原因憑空冒出來的一座城市,我不是很喜歡。北京我有很多同學,而我想去一個陌生的地方。但是後來發現上海也不是做技術的地方,過得有些壓抑,初來到上海的時候經常會被人瞧不起,畢竟是剛剛來到大城市。

我當時感覺銀行束縛了我,想看看自己可以跑多遠,能發揮出多大的價值。於是決定出來闖一闖,主要就是要去經歷一些應該去經歷的事情,不希望老了以後會後悔年輕的時候沒有去。當時IT產業的發展是一個大趨勢,我感覺我必須要去一座大城市,去經歷一些東西。在小地方基本沒有這些機會。要學會游泳就必要跳到水裡去嗆兩口水,所以我就義無反顧地出來了。

圖靈社群:在上海你有什麼重要的經歷嗎?

我仍然記得自己拎著皮箱站在上海火車站的樣子,舉目無親。原來在老家的時候覺得自己還挺厲害的,自以為不愁找不到好工作。不過事實卻不是這樣的。

我還記得第一次去面試時,(面試官)問了很多和C相關的問題,問了我半個小時,我一個問題都答不上來。我一直低著頭,好像被審問的犯罪分子一樣。我從大學畢業出來就沒經歷過什麼面試,再加上自己內向的性格,所以,整個過程我都在低著頭,不敢看別人一眼。最後,面試官問了我一個問題是“有不懂的問題你會怎麼辦”,這樣的問題我都不敢回答,其實這道題的答案不過就是“問別人”或是“自己看書”或是“上網查資料”什麼的。很顯然,這場面試我肯定是被滅掉了。但這還沒完,最後面試官對我說:“你出來幹什麼,象你這種性格根本不適合(到大城市來)。”我當時被嚴重地打擊了,感覺到自己確實有一些東西很差。第一個是性格差,不知道怎麼與人交往,第二個是技術差,很多問題不知道,第三個就是視野狹窄,沒見過世面。後面的幾家公司的面試都大同小異。一個人在異地他鄉,經歷了這些事情,心裡會非常地恐慌,“我這條路是不是走錯了?”我經常這樣問自己。

面對這樣的情況,我被逼迫著一定要改變自己。因為,離開銀行時,我的家人、同學和朋友都很反對我出來,如果這樣灰溜溜地回去,我面對不了他們。而前面的人還看不起我。我當時的處境真的很難堪,就像爬在懸崖中間,上不去也下不來。所以,當時只有一個想法,就是要證明自己不是那麼差的人。人被逼到那個份上,活得就比較簡單,哪有什麼職業發展規劃,只想拼命地多學技術,提高自己的能力。這個經歷有點像是一劑興奮劑,同時也相當陣痛。但是回頭想想,第一個面試官應該是我最感謝的人。

圖靈社群:後來,你在當時這種前有敵人後有追兵的狀況下怎麼堅持下來的?

在同學的幫助下我找到了在上海的第一份工作。南天公司,這是一家給銀行做系統整合軟體 的公司,大學畢業時本來也可以進去,現在繞了一圈而且還是靠同學幫助進去的,所以那時的心態還很不平穩,另一方面因為以前是做銀行的,是甲方,現在成了乙方了,兩邊的人都用異樣的眼光看我,心態非常不好。不過,這是個技術不錯的企業,國內早期很多搞Unix/C的高手都是從這個公司培養出來的。我當時的技術還是不行,比如說到了使用者站點以後,不知道怎麼做,我曾經誤操作把使用者的資料刪掉了。經常犯低階錯誤,不但沒做好自己的工作,反而還給別人添了麻煩。這些經歷都讓我有一種“技術焦慮感”,或者叫“技術憂鬱症”。我覺得自己這也不行,那也不行。這也是我今天仍然在拼命學習的原因。這就好像我們經常在參加工作多年後還會夢見自己的英語四級沒過,或者是期末考試沒過一樣。我經常會夢見的是專案又做砸了,又把使用者的系統搞亂了,一大堆人要審我、要訓斥我。

因為技術差,溝通差,不會面試,所以,我決定經常出去面試,基本上每週都要去,不管懂不懂,也不管是什麼公司,也不管別人鄙不鄙視我,反正一有機會就去面試,多見見人這樣可以讓我的性格有所改善,同時,也可以知道社會上需要一些什麼樣的技能,把別人面我回答不上來的東西都記下來,然後回頭找答案。那個時候我會經常去上海書城看書,看很多很多的書。我學的東西很雜,什麼做網頁,Windows,Unix,Java,.NET,flash,連3DMax/photoshop我也學,還去考CCNA的認證……。這樣散亂地學習兩年後,我才慢慢確定了要走C/C++/Unix/Windows系統底層的路子。而這樣撲天蓋地學習的結果有一個好處就是,我成長的速度相當之快。我自己摸索到了適合我的學習方法(從基礎和原理上學習),從而不再害怕各種新的技術。那時,所有人都在休黃金週出去玩的時候,我還呆在辦公室或住處看書學習。

等到一年半之後,用句趙本山的臺詞說,我在面試中學會搶答了。面試官的問題沒問完,我就能說出答案了。其實,基本上是面一個公司過一個(當然都是一些小公司),此時,我就開始挑公司了。

感到技術能力不行就去學技術,交往能力不行我就去面試,這兩個問題都可以通過大量地實踐和努力來彌補,但是眼界這個東西沒有辦法通過努力來彌補。所以,當時非常想去一些更大的公司看看,如果能去外企更好。

圖靈社群:你從什麼時候開始感覺自己已經變得和以前不一樣了?

我還記得,有一天,有一個和網路相關的技術問題,同事們搞了三四個通宵,也沒弄明白,後來想起我好像在看這方面的書,他們就讓我去看看、試試,結果我只用了20分鐘就搞定了。基礎真的很重要,這受益於我看了《TCP/IP詳解》這套書。

後來,我去了一家做電信軟體的公司,他們讓我做PowerBuilder,儘管我當時想做的是C++,但是因為當時各種原因很需要這份工作,就去了。進了那裡的第一天發現公司裡有一個論壇,上面都是一些技術上懸而未決的問題,都是關於Windows/C++的。我一看,都是些很簡單的問題,一下午的時間就被我全部解決掉了,我的基礎知識發揮了作用。於是,當天下午我一下子就被調到了核心組。不過,我只在那裡呆了兩個多月,因為那時我已經不愁找工作了,這期間有兩家北京的公司錄用了我,於是,02年我就來到了北京,去到一家做分散式計算平臺軟體的公司。

在上海的這兩年的時間,從什麼都不是,到得到工作上的全面肯定。那段時間感覺自己牛得不得了,有些狂妄和驕傲了,經常上網和不認識的人爭論一些很傻的問題,後來發展到對當時的領導以及銀行客戶的領導不敬,總覺得這些人太二。現在回頭看過去,我覺得那是我人生特定時期的記號,人生的痕跡。

關於酷殼

“為什麼說我們技術人員是書呆子?其實我們有很多有趣的東西,只不過是你不知道而已。”

圖靈社群:你為什麼要創立一個像酷殼這樣的網站?

我2002年在csdn開了一個blog,當時叫專家專欄。開個專欄很簡單,只要發6個帖子。我也不是什麼專家,只是喜歡看書、喜歡學習而已,也喜歡做一些學習筆記。那時候沒有筆記本也沒有桌上型電腦,市面上好像也沒有U盤和行動硬碟。正好有CSDN有這麼一個地方,就去CSDN的站點上把自己的一些學習筆記放在了上面。後來03年的時候技術專欄轉到了部落格,因為CSDN對其部落格經營得不好,我09年就離開了csdn,建立了酷殼。花了4500塊錢,租了一個server。我離開那裡主要有兩個原因,一個是因為當時csdn部落格有一些效能上的問題,.NET架構嘛,大家都懂的(笑)。另外一個原因就是當時出現了很多部落格營銷的站點,有點像今天的36氪。好像那時候出現最早的叫煎蛋,那上面會有一些報紙上不會出現的國外的趣聞,是以部落格的方式形成的媒體。這和常規的以日記形式出現的部落格大不一樣。煎蛋、有意思吧等這些部落格讓我看到了部落格還能這樣寫,我覺得很好玩兒。而我當時也經常會去國外社群看一些文章,也能看到一些有意思的東西(因為我當時有了學習瓶頸,國內的網站已經滿足不了我了)。心想,既然這些東西這麼有意思,我為什麼不自己開一個部落格呢?

我老婆是學新聞編輯的,她鄙視我說,你的部落格雖然有很多人讀,但是隻能算是個書呆子的部落格,全是一些書呆子式的文章。我有些不服,我覺得技術人員不全是書呆子,我們這個圈子裡也有很多有趣的東西,只不過是你不知道而已。於是我想弄一個有意思的、有娛樂性質的東西,裡面都是技術圈裡面有意思的事兒,但是很多技術圈以外的人也能看懂。一開始酷殼和csdn部落格的風格完全迥然,如果有技術性的文章我還會在csdn上貼,但是後來我就完全拋棄了原來csdn上的部落格。酷殼的初衷是希望很多人都可以來上面發表一些東西,但是可能是我寫得太多了,別人就被壓制住了。

圖靈社群:在部落格的維護方面一直以來你是怎麼做的?

現在更新頻率一週一篇,一開始的時候一週三篇。磨刀不誤砍柴工,總是有時間來做這些事的。我經常看書,需要把學到的東西整理成學習筆記。自從在csdn上寫部落格的時候,就有這樣的習慣了,而且又有“技術焦慮症”,害怕跟不上,所以維護部落格的事對我來說是很自然的。

現在我已經不用自己再租伺服器了,由於酷殼的訪問量比較有保證,我提供了廣告位,就免費得到伺服器了(笑)。

關於老的和新的技術

“技術的發展要根植於歷史,而不是未來。”

圖靈社群:對於日新月異的新技術,你是什麼態度?

遇到新技術我會去了解,但不會把很大的精力放在這。這些技術尚不成熟,我只需要跟得住就可以了。我的團隊自己想學什麼我都不干涉,但是用到專案裡的技術,必須是很成熟的,(技術應用)十年以上可能是一個門檻。有人說技術更新換代很快,我一點兒都不覺得是這樣想。雖然有不成熟的技術不斷地湧出,但是成熟的技術,比如Unix,40多年,C,40多年,C++,30多年,Java也有將近20年了……,所以,技術並不多啊。還有很多技術比如ruby,lisp這樣的,它們沒有進入主流的原因主要是缺少企業級的應用背景。

如果要捋一個脈絡下來,70年代Unix的出現,是軟體發展方面的一個里程碑,那個時期的C語言,也是語言方面的里程碑。(當時)所有的專案都在Unix/C上,全世界人都在用這兩樣東西寫軟體。Linux跟隨的是Unix, Windows下的開發也是 C。這時候出現的C++很自然就被大家接受了,企業級的系統很自然就會遷移到這上面,C++雖然接過了C的接力棒,但是它的問題是它沒有一個企業方面的架構,否則也不會有今天的Java。C++和C非常接近,它只不過是C的一個擴充套件,長年沒有一個企業架構的框架。而Java出現之後,IBM把企業架構這部分的需求接了過來,J2EE的出現讓C/C++捉襟見肘了,後面還有了.NET,但可惜的是這隻侷限在Windows平臺上。這些就是企業級軟體方面語言層面這條線上的技術主幹。

另外一條脈絡就是網際網路方面的(HTML/CSS/JS/LAMP…)。這條脈絡和上述的那條C/C++/Java的我都沒有放,作為一個有技術憂慮症的人,這兩條軟體開發的主線一定不能放棄。無論是應用還是學術,我都會看,知識不愁多。何必搞應用的和搞學術的分開陣營,互相看不起呢?都是知識,學就好了。

技術的發展要根植於歷史,而不是未來。不要和我描述這個技術的未來會多麼美好,用這個技術可以實現什麼花哨的東西。很多常青的技術都是承前的。所以說“某某(技術)要火”這樣的話是沒有意義的,等它火了、應用多了我們們再說嘛(笑)。有些人說不學C/C++也是沒有問題的,我對此的回應是:如果連主幹都可以不學的話,還有什麼其他的好學呢?極端一點,我要這麼說:這些是計算機發展的根、脈絡、祖師爺,這樣的東西怎麼可以不學呢?大部分學校雖然都會教授C,但是教得都不好。學校喜歡教微軟的東西,老師好教學生好學。我不是說Windows不好,但那不是計算機文化的主幹,那只是微軟的主幹、PC的主幹。整個計算機文化的主幹肯定是源起於Unix/C這條線上(注意,我說的是文化不是技術)。我也寫過很多與Unix文化相關的文章,大家可以看看我寫的“Unix傳奇”

圖靈社群:可是在應用環境中,對新技術的需求是很高的,你覺得在教育領域電腦科學的側重應該是什麼樣的?

學校教的大部分都是知識密集型的技術,但是社會上的企業大部分都是勞動密集型的。什麼是勞動密集型的企業呢?麥當勞炸薯條就是勞動密集型的工作,用不到學校教授的那些知識。如果有一天你不炸薯條了,而要去做更大更專業的東西,學校裡的知識就會派上用場。有人說一個語言、一個技術,能解決問題能用就行了,我不這樣認為。我覺得你應該至少要知道這些演變和進化的過程。而如果你要解決一些業務和技術難題,就需要抓住某種技術很深入地學習,當成藝術一樣來學習。

我在“軟體開發‘三重門’”裡說過,第一重門是業務功能,在這重門裡,的確是會程式設計就可以了;第二重門是業務效能,在這一重門裡,技術的基礎就很管用了,比如:作業系統的檔案管理,程式排程,記憶體管理,網路的七層模型,TCP/UCP的協議,語言用法、編譯和類庫的實現,資料結構,演算法等等就非常關鍵了;第三重門是業務智慧,在這一重門裡,你會發現很多東西都很學院派了,比如,搜尋演算法,推薦演算法,預測,統計,機器學習,影像識別,分散式架構和演算法,等等,你需要讀很多計算機學院派的論文。

總之,這主要看你職業生涯的背景了,如果你整天被當作勞動力來使用,你用到的技術就比較淺,比較實用,但是如果你做一些知識密集型的工作,你就需要用心來搞搞研究,就會發現你需要理論上的知識。比如說,我之前做過的跨國庫存調配,需要知道最短路徑的演算法,而我現在在亞馬遜做的庫存預測系統,資料探勘的那些東西都需要很強的數學建模、演算法、資料探勘的功底。

我覺得真正的高手都來自知識密集型的學院派。他們更強的是,可以把那些理論的基礎知識應用到現在的業務上來。但很可惜,我們國內今天的教育並沒有很好地把那些學院派的理論知識和現實的業務問題很好地接合起來。比如說一些雜湊表或二叉樹的資料結構,如果我們的學校在講述這些知識的時候能夠接合實際的業務問題,效果會非常不錯,如:設計一個IP地址和地理位置的查詢系統,設計一個分散式的NoSQL的資料庫,或是設計一個地理位置的檢索應用等等。在學習作業系統的時候,如果老師可以帶學生做一個手機或嵌入式作業系統,或是研究一下Unix System V或是Linux的原始碼的話,會更有意思。在學習網路知識的時候,能帶學生重點學一下乙太網和TCP/IP的特性,並調優,如果能做一個網路上的pub/sub的訊息系統或是做一個像Nginx一樣的web server,那會更好。如果在學圖形學的過程中能帶領學生實踐一個作圖工具或是一個遊戲引擎,那會更有意思。

總之,我們的教育和現實脫節太嚴重了,教的東西無論是在技術還是在實踐上都嚴重落後和脫節,沒有通過實際的業務或技術問題來教學生那些理論知識,這是一個失敗。

精神家園

“當你老了的時候,回想過去,如果你是為自己而活的,你就不會後悔,而且會感覺很踏實。”

圖靈社群:你如何在進度壓力下,享受技術帶來的快樂?

中國人中庸的思想,入世和出世,每天的工作就是入世。舉個例子,在上海的時候,給交通銀行做專案的時候,每週休息一天,早九點到晚十點,每天工作12個小時,這樣的工作持續了一整年,沒有節假日,專案上的技術也沒什麼意思。當時我晚上十點回到住處,還想學一些C++/Java和Unix/Windows的技術,於是就看書到晚上11:30,每天如此,一年下來學到很多東西,時間沒有荒廢,心裡就很開心。我覺得當時是快樂的,因為有成長的感覺是快樂的。

現在的我,工作、寫部落格、養孩子,事情其實更多。我早上7:30起床,會瀏覽一下國外的新聞,hacker news, tech church, reddit, highavailability之類的站點,9點上班。晚上6、7點鐘下班,開始帶孩子。十點鐘孩子睡了覺,我會開始重新細讀一下這一天都發生了些什麼事情。這個時間也有可能會用來看書。學習的過程(我)是不喜歡被打斷的,所以從十點到十二點,家人都睡了,這正是我連續學習的好時間。可能從晚上11:30開始,我會做點筆記或者寫部落格。我現在對酷殼文章的質量要求比較高一些,所以大概積累一個星期的時間才可以生成一篇文章。每天我大概都在一兩點鐘才會睡覺。沒辦法,我有技術焦慮症。但是覺得這樣的生活很充實,也很踏實。

另外,任何一門技術玩深了,都是很有意思的。有些人形成了一個價值取向,“我只做什麼,絕不做什麼”。前段時間有一個剛來亞馬遜的工程師,他原來做的是資料探勘推薦系統,後來公司重組要他做前端,他不肯。我覺得,前端後端都是程式設計,Javascript是程式設計,C++也是程式設計。程式設計不在於你用什麼語言去coding,而是你組織程式、設計軟體的能力,只要你上升到腦力勞動上來,用什麼都一樣,技術無貴賤就是這個意思。

回到問題,怎麼才能享受到快樂呢?第一,入世和出世要分開,不要讓世俗的東西打擾到你的內心世界,你的情緒不應該為別人所控,也不應該被世俗所汙染,活得真實,你才會快樂。第二點就是要有熱情,有了熱情,你的心情就會很好,加班都可以是快樂的,想一想我們整個通宵用來打遊戲的時光,雖然很累,但是你也很開心,這都是因為有了熱情的緣故。

圖靈社群:有人說你現在的文章仍然說明你是一個躺在自己池子裡說話的人,是不是說你仍然沒有達到一個很高的層次?

我承認我活在我的精神家園裡面。我推薦大家看一下王小波的《我的精神家園》,這篇文章對我的影響非常大。看了這篇文章,你就會明白我為什麼要躺在自己的池子裡,如果不想被這個社會所汙染,就必須要躺在自己的池子裡。做大眾是很容易的,做自己是最難的。當你老了的時候,回想過去,如果你是為自己而活的,你總會覺得很踏實。可能有人會覺得我偏激,沒關係,為什麼要所有人看法都一致呢?世界因為不同而美麗,多元化的價值觀並不衝突。


更多精彩,加入圖靈訪談微信!

相關文章