左耳朵耗子履歷

個人簡歷

陳皓,coolshell.cn博客博主。
14年以上軟件開發相關工作經驗,8年以上項目和團隊管理經驗。
擅長底層技術架構,軟件工程。
對高性能,高可用,分佈式,高併發,大規模數據處理系統有一定研究。
技術擅長C/C++/Java和Unix/Linux/Windows。

軼事和思考

毅然辭掉銀行工作

我當時在銀行做銀行網絡、銀行的電子郵件系統和辦公自動化系統。當時正處在銀行信息化的階段,加上當時互聯網和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年我就來到了北京,去到一家做分佈式計算平臺軟件的公司。

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

建立coolshell.cn的原因

我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/UDP的協議,語言用法、編譯和類庫的實現,數據結構,算法等等就非常關鍵了;

  • 第三重門是業務智能,在這一重門裏,你會發現很多東西都很學院派了,

比如,搜索算法,推薦算法,預測,統計,機器學習,圖像識別,分佈式架構和算法等等,你需要讀很多計算機學院派的論文。

  • 總之,這主要看你職業生涯的背景了,如果你整天被當作勞動力來使用,你用到的技術就比較淺,比較實用,但是如果你做一些知識密集型的工作,你就需要用心來搞搞研究,就會發現你需要理論上的知識。

比如說,我之前做過的跨國庫存調配,需要知道最短路徑的算法,而我現在在亞馬遜做的庫存預測系統,數據挖掘的那些東西都需要很強的數學建模、算法、數據挖掘的功底。
我覺得真正的高手都來自知識密集型的學院派。他們更強的是,可以把那些理論的基礎知識應用到現在的業務上來。但很可惜,我們國內今天的教育並沒有很好地把那些學院派的理論知識和現實的業務問題很好地結合起來。
比如說一些哈希表或二叉樹的數據結構,如果我們的學校在講述這些知識的時候能夠結合實際的業務問題,效果會非常不錯,比如:設計一個IP地址和地理位置的查詢系統,設計一個分佈式的NoSQL的數據庫,或是設計一>個地理位置的檢索應用等等。在學習操作系統的時候,如果老師可以帶學生做一個手機或嵌入式操作系統,或是研究一下Unix System V或是Linux的源碼的話,會更有意思。在學習網絡知識的時候,能帶學生重點學一下以>太網和TCP/IP的特性,並調優,或是能做一個網絡上的Pub/Sub消息系統或是做一個像Nginx一樣的web server,那會更好。如果在學圖形學的過程中能帶領學生實踐開發一個作圖工具或是一個遊戲引擎,那會更有意思。

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

如何在壓力下,享受技術帶來的快樂

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

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

另外,任何一門技術玩深了,都是很有意思的。有些人形成了一個價值取向,“我只做什麼,絕不做什麼”。前段時間有一個剛來亞馬遜的工程師,他原來做的是數據挖掘推薦系統,後來公司重組要他做前端,他不肯。我覺得,前端後端都是編程,Javascript是編程,C++也是編程。編程不在於你用什麼語言去coding,而是你組織程序、設計軟件的能力,只要你上升到腦力勞動上來,用什麼都一樣,技術無貴賤就是這個意思。
回到問題,怎麼才能享受到快樂呢?第一,入世和出世要分開,不要讓世俗的東西打擾到你的內心世界,你的情緒不應該爲別人所控,也不應該被世俗所污染,活得真實,你纔會快樂。第二點就是要有熱情,有了熱情,你的心情就會很好,加班都可以是快樂的,想一想我們整個通宵用來打遊戲的時光,雖然很累,但是你也很開心,這都是因爲有了熱情的緣故。

做自己是最難的

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章