程序員生存定律-六個程序員的故事(2)

程序員生存定律這系列的目錄在這裏:程序員生存定律--目錄

喜歡從頭瞄的,可以移步。

-------------------------------------------------------------------------------

一個關於項目經理的故事

1 項目經理的養成日記

L2001年畢業之後加入到了福建實達公司。

在今天這個公司幾乎是很少有人聽說了,但在當年實達還是在IT這片江湖裏有些地位的。當年實達的產品線非常全,有網絡、有電腦還有外設。外設裏面就包含了終端、打印機和POS機。當然也還做過VCD,不過即使在2001VCD這一筆也是作爲失敗案例來提的。

當年L選擇了到外部設備公司去做激光打印機驅動程序。那時候實達外設試圖開發一款自己的中端激光打印機,因此需要全線配備軟硬件人員,正是藉助這個機會,L加入了激光打印機這個團隊。

現在想來這個決定有點狂妄,不管是自己還是實達。

隨着iPad這類平板的興起,人們的打印需求越來越少,所以激光打印機這類東西越來越不受關注,似乎要被被強塞到舊紙堆裏了。但不管它火不火,單純從技術難度上看,這東西絕對比手機難做,雖然世界上所有做打印機的廠商加起來市值也不一定有蘋果高。

激光打印機包括現在的多功能一體機屬於是精密機械,機械、光學儀器、硬件、軟件、甚至圖形字體都攪在一起十分難搞,沒有絕大的投資,絕對啃不下來。激光打印機等利潤最豐厚的部分是面向企業的各種機型,眼下這塊市場始終在富士施樂、佳能、理光等少數幾家廠商手中,國內並沒有廠商介入這一領域很可能是和介入壁壘過高有關。在2012年,很多日本有名的大公司都鉅虧,但做激光打印機的還能支持,我想這也和這一領域壁壘過高,競爭對手不多有一定關係。

當時做這個項目的時候,團隊裏的人員都很痛苦,L這個做驅動的尤其痛苦。微軟爲打印機提供了標準的驅動程序叫Unidrv,如果基於這個來做,雖然也麻煩,但基本不用編程,主要工作是調整配置文件。之後這個驅動負責幫你生成打印機能認識的用專門語言描述的頁面數據,那時最主流的頁面描述語言有HPPCL和著名的PostScript

但用Unidrv壞處是這樣一來你能定製的東西就非常少,很簡單的六合一功能都沒有。所以如果真的自己開發產品,那驅動程序最好要自己從頭寫。但L當時沒認識到自己寫其實是不太可能的。

L當時的水平大概是這麼個狀況:C++基本會用,但達不到很高的水準,熟讀《Windows核心編程》,但大部分書中講的內容沒有用過,反倒是MFC用的比較熟練,但很可惜的是做驅動的時候MFC用不上。通過了高級程序員考試,所以各種通用算法和數據結構沒什麼太大問題。

而從頭做驅動需要什麼呢,你要了解Windows提供的DDI接口,要了解圖形圖像、字體、頁面描述語言、色彩的知識。打印機驅動中最好做的是UI,基本上用Win32就行了,最難的是做頁面渲染,也就是把GDI描述的頁面轉換成相應頁面描述語言(PCL)描述的頁面。這一過程非常繁雜,根本不是初級程序員能搞定的。其中不說別的難點,一個圖像二值化就能憋死很多初級程序員。彩色頁面打到黑白打印機上,要把彩色圖轉爲用黑白兩色表示的灰度圖,這東西那那麼好弄的。

簡單來講是,L當時是兩眼一抹黑,差距太大。

可以舉個最簡單的例子來形象說明這種差距大到什麼程度:L當時基本的調試也不會,只能用OutputDebugString()輸出用DbgViewLog,來看程序那裏有問題。有人可能很奇怪說2001年時,VC6的調試器不很好用麼。祕密在於,Win98的打印機驅動是16位的,VC6完全不好使。直到後來找到SoftICE才解決了這個問題。

一邊做驅動的開發,L一邊把Unidrv搞定了,這樣基本上不耽誤其他硬件開發工作。同時L瘋狂補各種知識,單只爲了把C++搞通就啃了數本書,其中最難啃的反倒是《C++程序設計語言》,這書即厚又不好懂,那時候那明白什麼叫不充分的抽象。但回頭想來,讀這些書其實對工作幫助不大,打根基的東西總是見效慢。這就和高燒40度要趕緊掛水一樣,吃中藥慢慢熬,就是沒有立竿見影的效果。當你需要搞定矢量圖形如何轉換時,設計原則、面向對象這些東西對你能不能做出來一點幫助也沒有,只有當你能做出來了,這些東西可以幫你把事情做好倒是真的。

做了一年多後,大家都發現這活實在不是一個人能幹的,團隊中就又加了2個人,所以L勉強算是個小頭目了。但即使如此,整體進展仍然不太好,這和公司的策略有關,這家公司的核心產品,其實是針式打印機,並不是針式打印機,實達有着自主研發的整套針式打印機技術。而激光打印機實際上處在摸石頭過河的狀況,但偏偏這是個資本密集,技術密集的領域,這樣一來,進展不順也就在情理之中了。現在想來最好的解決方法其實是買套代碼,在上面定製。等到Win2000成爲操作系統的主流,藉助DDK的例子,這個問題一定程度上得到了解決。

說到這裏要拋開技術,說下大環境,要不然無法說明L的幸運。當時實達集團有三家子公司:實達網絡專攻網絡設備,如Modem、路由器等,實達設備專攻外設,如終端、打印機和Pos,實達電腦則主攻PC

當時這三家公司是冰火三重天的狀況:實達網絡日子很好過,發展也很快;實達外設則穩步發展;實達電腦則活的很不容易。整體來看實達實際上是處在下滑期,頂着ST的帽子讓公司很難受,新的利潤增長點又沒找到,尤其是電腦部分,利潤是必然是越來越薄。

在實達的三年裏L的工資竟然沒有一點調整,不過L當時沒太注意這些,還是在研究驅動。借Win2000 DDK的啓發,發現在打印處理器那個環節可以做很多事情,這樣針對頁面的各種操作就都可以自己來做了。

正當L把這個工作作出點進展的時候,家裏出了點事情,於是跳槽,到了蘇州一家也是做打印機驅動的公司。這純粹是種幸運而不是種安排,如果不是家裏有事,L未必會換工作,而在開始衰落的公司裏做非主營項目真未必是什麼好事情。

在此前整整三年裏,L理清了打印機驅動的體系結構,打下了語言、平臺的各種基礎,確定了基本開發方法,找到了適合的二值化算法,但真沒做出什麼太大的貢獻。

換到蘇州這家公司後,藉助過去的經驗,職位有所提升,是以LeaderTitle入職的,實際上是項目經理。不過一進公司,L很吃驚,當年從頭開發驅動不過也就三個人,這裏維護現有驅動搞了快20號人,主要做的事情就是修改現有的驅動程序,每次代碼變更量不大。絕對的八旗子弟。

不過麻煩事也出現了,以前那有那麼多報告,現在需求的確認,日程的確認,合同的確認,記錄的跟蹤,問題的總結全都要做。一天到晚大事沒有小事不斷,會議數目直線上升。再加上外語這一層障礙,還經常出現說半天對方還沒明白的狀況。

L信奉適者生存,開始積極轉型,把PPT寫好,把Excel寫好,文檔裏不能有小錯誤,讀項目管理書籍,讀估算書籍,把口語練好。過往的技術經驗和基礎還是很有幫助的,這讓L可以比較快的把握各種需求的規模、難度等。

直到有一天,原來的老大離職了,L被提升成了部門經理,開始帶自己的隊伍。

公司由於處在成長期,團隊的規模也就在不斷擴大,而L的責任範圍也就隨之逐漸擴張。這時候L的工作又發生了變化,以前是關注一個項目,現在要關注多個項目,也要關心兄弟們的士氣。

L這時候技術基礎還行,也試圖堅持寫代碼,可發現挺難的只能負責那種時限不是很嚴的,獨立性比較強的模塊,因爲你不知道接下來會發生什麼,出差、來客人、兄弟們吵架、流程出問題、臨時分配的其它工作等等。

在經歷了最初的幾次失敗之後,L的隊伍逐漸成熟,項目成功的機率逐步提高。現在L比較自信,認爲自己是一個比較合格的經理了。雖然不能講任何一個項目到手裏之後,都能保證它絕對成功,但至少可以儘可能保證它成功的機率較高。

可惜的是,L發現自己累積的技術基礎一點點荒廢,基本程序雖然看的懂,但寫起程序來變的很慢,每一行代碼調用每一個方法都要去仔細查找幫助文檔。

 

2 感悟程序人生

我們還是回到之前一直提到的幾個維度:

價值 實現程度(表達力,稀缺性,公司平臺)職場成就

L的經歷可以看出來,技術是根本,即使你想做管理,即使你學了可能用不上那麼那怕是當敲門磚用,你也要在恰當的領域裏有一定的技術基礎,這是價值的根本。要不然你可能沒有做管理的機會。

任何一個企業招一個人都希望這個人能儘快爲公司創造價值,這點和大學絕對不一樣,企業不負責再培養你四年。因此,一個人很難對企業說:我什麼都不會,我就會做項目管理,你招我吧。一般人很難遇到這麼瘋狂的企業。

第二點是你加入處在那個階段的公司非常關鍵,如果L一直堅守在第一家公司,L是不可能有所提升的。原因很多,但其中最關鍵的一點是在整個產品線中,驅動程序是在一個配套的地位上,而在第二家公司驅動程序則是公司最核心的業務,這點影響非常大。

第三點是做可流動區域小的工作時,要特別當心。短期來看L運氣還好,大致解決了自己的生存發展問題,但其實如果以20年爲尺度來看,問題仍然存在,對打印機驅動從業人員的需求永遠不可能像對網站開發人員那麼強烈,其劃定的區域也就非常有限。實際上這點在L的同事身上有了一定體現:你做的事情相對比較生僻,而你在這一領域上又沉澱了很久,一旦走出這個領域,又只有年紀大的劣勢,而沒有優勢,這會導致一個人非常艱難。但以L而言,確實又因此而受益,正因爲此領域有經驗的人員稀少,L纔有機會獲得較快的提升。

第四點是一定要避免加入處於衰落期的公司。假設說,領域想對比較生僻,但公司能夠爲此支付一定的溢價,那也是有得有失。只要沒有欺騙,當事人因爲合適的薪資而選擇了一個流動性不好的工作,這合情合理,風險理應由自己承擔。但關鍵是L的第一家公司處在衰落期,三年不調整工資基本等價於降薪。如果L不是碰巧離開了,那麼純經濟的角度看損失還是要大,一旦正好趕到房價暴漲後買房,那對人生的影響就不是一點半點。

第五點則是關於管理技能的可流動性。雖然說管理技能的大部分是共通的,但由於L的技術背景是驅動開發,L將很難成爲電商類項目的經理人。

L的經歷裏還潛藏着一個冷幽默,當L不會做驅動的時候,他被分配去做驅動;當L不會做項目經理的時候,他被分配去做項目經理;當L不會做部門經理時,他被分配去做部門經理。大致上是在做自己能力不足以匹配的事情,L的人生仍然再繼續,不知道此後的人生是否仍然會符合這條規律。


一個技術牛人的成長經歷

1 杭州李雲的技術牛人之路

李雲是《專業嵌入式軟件開發》一書的作者,後來去了阿里,阿里併購了UC後,老李應該在主要負責UC瀏覽器的開發,大家可以去微博上找他。爲了爲後來人提供參考,把自己的經歷非常詳細的寫了下來,在我看來,李雲的經歷非常的有價值,因此在這裏與大家做一點分享。因篇幅太長,引入的時候去掉了部分內容,下面是李雲的故事。原文參見:http://blog.csdn.net/hzliyun/article/details/8144320

故事的開始得從大學以前開始。從小受“學好數理化,走遍天下都不怕”觀念的影響,我認爲只要學好數理化就行了,所以偏科很嚴重,高二時英語還考過29分。那時也不愛讀書,高三時,別的同學在複習,我卻在看《晶體管技術》這類電子技術書。這種狀態,直接的結果就是第一次高考落榜了。

落榜的那個暑假,父母爲我的出路沒少操心。在一天早晨刷牙時,當我媽對我說希望我去復讀時,我當時腦海裏想“能象表哥那樣考上大學那該多好啊!”,在這個念頭驅使下,我答應了去復讀。從那天開始,我頓悟了,真正知道自己要什麼了。在復讀的一年裏,我學到的一種重要能力是自學,這爲以後大學乃至職場學習打下了很好的基礎。正因如此,我想給出我的職場第一感悟:自學能力是競爭力之本。

經過復讀,高考總成績提高了100多分,但也只夠專科線。最終,我被南昌水利水電高等專科學校錄取,專業是“供用電技術”。這個專業相信很多人不知其所以然,其實就是電力自動化的變種專業,其專業內容主要是電站、發電廠高電壓的繼電保護技術。

大學讀書期間,我開始有與人在成績上一爭高下的念頭了,加上覆讀一年所獲得的自學能力,以及自己的努力,學習相當輕鬆,尤其是隻要與電子技術沾邊的課程,都能輕鬆地勝出。三年共六個學期的學習,我拿了五個一等獎學金,一個二等獎學金。畢業時,我是系裏唯一的一名優秀畢業生。期間通過了大學英語四級考試和計算機二級考試,獲得了江西省電子技能比賽一等獎。需要提及的是,在大學期間所學的與計算機相關的課程只有:《電子技術基礎》、《計算機組成原理》、《計算機軟件基礎》、《單片機技術》和《Basic編程語言》。

在大學期間,我完成了人生很重要的一件事 --- 找好了現在的妻子。由於她是浙江人,所以畢業時工作地點毫不猶豫地選擇了杭州。那時很多同學的工作還是包分配的,而我來到了杭州的人才市場進行雙向選擇,那時找一份工作還是相對輕鬆的(注:我們大學錄取那年的招生人數是90多萬),投出一份簡歷就找好了工作。第一個工作單位是一家不到100人、地處杭州花港觀魚對面(三臺山)的電力設備製造民企。

儘管選擇去這家民企後立馬到公司去做了實地調查,但由於沒有社會經驗,加上被問的人沒如實反應,所以進入這家民企後所瞭解的情況讓人大跌眼鏡。另外也瞭解到單位會通過一些不入流的做法控制我們的戶口,不讓我們跳槽(那會兒的戶口還是相當重要的,結婚要戶口證明,有同事就因爲戶口被控制而登記不了)。而我們在進入這家單位時簽訂了六年的勞動合同。在這樣的小企業幹上六年意味着什麼?!當時與家人打電話告知這一狀況時,我都哭出來了(就在現在楊公堤與虎跑路交叉的、現早已不存在的一個電話亭裏,記憶猶新呀!)。

儘管前途是那樣的渺茫,但帶有“優秀畢業生光環”的我仍堅信自己能做得比別人更好,因爲有我的職場第二感悟:自信能讓你與衆不同,儘管有時的自信有點莫名其妙。在這個企業一開始的工作職責是電站設備的電氣設計工程師,需要用AutoCAD(到單位後學的)設計電氣圖紙,並指導工人最終完成電氣設備裝配及調試。期間,企業經營範圍擴大,需要從事電子設備的生產,因此我開始有機會接觸電子技術方面的設計工作。在兄弟單位一同事的幫助下,在一個星期內我掌握瞭如何用Tango(後來更名爲Protel,現在的名稱是Altium Designer)進行原理圖和PCB線路板設計。而且,這一個星期的設計結果最終成爲了電氣產品的一個部件。對於一個畢業不到一年的我來說,這是不小的進步。那時知道了什麼是網絡表、過孔、焊盤等,掌握了很多電子原件的工作原理(有的還自己用麪包板做實驗),明白了做電路板的大致業務流程,還能動手焊接電路板,熟練運用示波器和萬用表進行調試。那段時間,我對電子技術的興趣幫上了大忙,學習起來遠比別人快。當我精通電路原理,能自如運用示波器和萬用表調試電子產品時,別人卻還不明白我的調試動機。我的職場第三感悟:興趣是學習效率的催化劑,培養自己的職業興趣。

第一次真正對編程感興趣是從知道PLCProgramming Logic Controller)開始的。當時的電站設備採用了三菱的PLC,爲了配合這一電氣產品的需要,企業社招了一名懂PLC編程的工程師。由於老闆擔心我們相互學技術而“翅膀變硬”,所以明確提出工程師所掌握的技能不能互通有無。當時看到這位兄弟能通過“梯形圖”改變PLC的行爲,真是覺得他太神奇了,仰慕不已。後來通過這位兄弟的私下幫助,我晚上偷偷地在廠房裏面學習PLC編程。爲了獲得良好的學習效果,我設定了對電氣產品的PLC程序進行重寫的目標,且最終達成了這一目標(當然,由於這個目標不能讓老闆知道,所以我的PLC程序不能用於商用)。我的職場第四感悟:學習應給自己設置虛擬的項目目標,以做項目的形式提升學習效果,只有這樣學到的內容纔會深入而實用,切忌無目標地學到哪算哪。

一年多的功夫,我成爲了某電氣產品的技術負責人,對整個產品的所有技術細節都瞭如指掌,我帶領了其他幾個工程師實現了該產品的“自主研發”。有趣的一件事是,老闆當時並不知道我已經“翅膀硬了”,想抵賴答應過的8000元項目獎金,年輕氣盛的我在與之拍完桌子之後對其他工程師下令:“沒有我的允許,誰也不能將電氣圖紙和電路原理圖用於生產”。對抗的結果以老闆兌現承諾而告終。這時我隱約地有了我的職場第五感悟:話語權首先來自能力,而不是職位權力。

我那時還學會了CRC算法並將之運用於PLC的串口通訊中,由於對計算機如何通過串口與PLC通訊獲得採集數據存在很大的好奇心,所以想到了學習編程語言,並計劃做一個能在計算機上實時顯示PLC所採集數據的軟件。在向負責PLC編程的兄弟表達了這一想法後,他給我的建議是:學習C語言比較難,Basic語言則更容易。於是,我毫不猶豫地選擇了自學C語言,因爲我深信我的職場第六感悟:難學的技能一旦掌握更具競爭優勢。

也正是從那時開始,我真正開始了成爲軟件工程師的自學之路。那時比較幸運的是,單位專爲我配備了工作電腦,所以具備了自學的硬件條件。由於那時Internet還不普及,學習書籍都來自浙江大學的科海書店(後來眼見着它的店面越來越小,這也是進入電子商務時代的一個縮影),那時隔三叉五地到科海去找書,生活最大的花費就在於購書(那時這方面的書不少是質次價高)。當然,學習的過程或多或少還得瞞着老闆。那段時間,別人午休我就編程,除了看書和做書後的習題,還一直朝實現自己的計算機監控軟件這個目標邁進(參見我的職場第四感悟)。終於有一天,我用Turbo CDOS環境下實現了具有串口通訊功能的、基於圖形界面的監控軟件(如果你用現在的眼光看那個軟件,一定會說“很土”)。當我樂此不疲地向他人演示時,你可以想象我那時有多高興和自豪!這種小小的成功助長了我的信心,也讓我得到了我的職場第七感悟:用階段性成果不斷增強自己的自信,但最終支持自信的是能力,而不是自大。嚐到了成功甜頭的我隨後拓展了自己軟件開發方面的學習內容。那時的我已經下定決心要向軟件開發方向發展,這種選擇是因爲我的職場第八感悟:做自己喜歡的事,如果那是自己的興趣最好。 

1999年的某月,在企業拖欠了一個月工資的情形下,“蓄謀”逃離企業束縛的我們(共19個工程師)經過幾個月的勞動仲裁後,與企業解除了勞動合同。在離開這家民企的第二天,199911月的某天,我在浙江大立機電技術開發公司(即現在的大立科技。後面都簡稱爲大立公司)找到了第一份專職的軟件開發工作。我逃離束縛後能很快地找到新的支點,完全得感謝我的職場第九感悟:不論身處多麼困難的環境,即使覺得前途渺茫,也不要放棄學習,否則就是“自斷筋脈”。

在大立公司所參與的第一個軟件項目,是使用Visual C++從事Windows某變電站圖像監控桌面軟件的開發。儘管我之前自學過C++語言,但那時並未完全掌握面向對象編程,尤其是其中的多態。我在該桌面軟件中借鑑微軟的示例軟件DrawCli,獨立地實現了電子地圖功能。正是通過掌握這個示例軟件的設計與實現,我真正領悟到了面向對象設計的好處。也通過該圖像監控桌面軟件的開發經歷,掌握了Windows VxD驅動開發、socket通訊、多線程編程、圖像處理(銳化、僞彩處理、圖像字符識別和圖像對比等)、ODBC數據庫編程(用的是SQL Server)等。

在妻子進入大立公司不久,由我擔綱了新版圖像監控軟件的重新開發,這是我第一次擔任軟件項目負責人。在這個項目上,我可以盡情發揮,將我在老版本軟件上所看到的設計不足完全克服。也正是通過這個軟件項目,我的面向對象編程能力有了很大的提高,而且完整地做過了一個軟件產品。用我現在的眼光來看:那時的開發工作除了引入了版本控制軟件外,是不折不扣的作坊式軟件開發;至於管理技能的提高,也可以說是微乎其微。

2000年底,大立公司因爲業務拓展的需要,需開發嵌入式圖像監控系統(系統中的前端產品是後來數字硬盤錄象機的前身)。爲此,公司社招了一位比我年長十歲的資深硬件開發工程師,他在進公司時已經有基於AMDElan SC520 x86嵌入式微控制器的硬件開發經驗。他在進公司之初與章總交談時指出:“做這類嵌入式產品,需要軟件功底非常強的人”,章總的回答是:“你放心好了,我一定找一個最好的人與你搭檔”(這是章總後來告訴我的)。是的,所找的那個人就是我!而其實那時我只有用Visual C++從事Windows桌面軟件的開發經驗,可見公司領導對我能力之信任!我的職場第十一感悟:機遇很重要,但你得有能力才能抓住它。

我當時所面臨的技術挑戰,讀者可以想象。要知道,在2000年時基於x86微控制器的嵌入式系統的開發人員國內還很少。我的自學能力、電子愛好的興趣在這種挑戰面前又幫了大忙。其實,做嵌入式系統開發最主要的是參考各種資料以便掌握各類技術細節,這得通過大量地閱讀芯片手冊、用戶手冊,以及研究AMD在其官網上所提供的示例程序。在這個過程中,就技術困惑堅持探究和養成各種好的工作習慣(思考習慣、筆記習慣、總結習慣、閱讀習慣)非常重要。我的職場第十二感悟:職場首先比拼的不是智商,而是堅持與好習慣。

我獨自完成了該嵌入式前端產品上的軟件開發工作。其中包含的大致技術內容有:從編程的角度精通x86處理器架構; PCIIDE硬盤、網卡、串口、閃存等總線或外設的驅動;實時操作系統內核的移植工作;MINUX操作系統的文件系統的移植; XINU操作系統的TCP/IP協議棧的移植工作。移植工作往往會碰到各種技術細節問題,等移植工作完成,對被移植模塊的實現和背後的原理也已瞭如指掌。正應如此,這一時期的工作讓我對操作系統的實現原理有了很深的理解。

除了軟件方面的進步,我在大立公司時硬件知識也得到了很強擴充。不僅能輕鬆地閱讀數字電路原理圖,還自學了VHDL語言,使得拿到邏輯器件CPLDVHDL程序就能調試軟件(通過VHDL程序,可以瞭解編程所需的譯碼端口、相關信號的操作時序等)。還學會了如何使用邏輯分析儀輔助軟件調試工作。前面提到的這位兄長式硬件工程師調侃我說:“你讓我看到了中國軟件的希望!”,而我將這話當成了對自己的鼓勵。另外,這期間還考入了浙江大學專升本的通訊工程專業,給自己充電(2001年入學,2004年畢業,獲多學期“優秀學生”和“優秀畢業設計”)。

由於大立公司是浙江省測試技術研究所的子公司,它或多或少帶有事業單位的氣息。加上公司的技術舞臺有限,以及妻子也在同一家公司工作,我於20034月份左右離開了大立公司。在我離開之前,浙江省科委已批覆了公司的申請,分配給我一套福利房。在我離開之時,房子仍在建,不少同事對於我的離職很是不解,也勸我拿到房再走。但我有我的職場第十三感悟:當短期利益與長遠利益無法得兼時,選擇長遠利益。

在大立公司工作期間,很希望自己能入職UTStarcom這樣的通訊企業(那時的UTStarcom是多麼地輝煌!)。計劃離開大立公司之際,我向UTStarcom提交了求職簡歷。這次求職開始好像很順利,但我真正入職UTStarcom的過程卻很是曲折。

一開始當我收到UTStartcom的面試通知時,可能太希望能進入這個公司了,在沒有很深入瞭解這個崗位的前提下,就去面試了,且馬上拿到了Offer。但後來才瞭解到,我拿到的是生產部測試開發崗位,與實際研發部門是有區別的。 當時很糾結 — 這是我想進的公司,但卻不是我想要的崗位。如果拒絕生產部的Offer,我很有可能與UTStarcom無緣。考慮再三,我還是選擇了拒絕(參見我的職場第十三感悟),並重新向研發部門投了簡歷。

經過度日如年的一個多月等待(那會兒剛好發生了SARS疫情),在覺得入職UTStarcom研發部門無望的情況下,我入職了另外一家小公司。令人意外的是,在入職那家公司的第二天,我收到了UTStarcom研發部門的面試通知。在HR面試的那一輪中,HR對我說:“你是我所面試的人中最有工作激情的”。那時的技術面試官中,其中一位是我日後入職後的上司 — 夏青(現在是恆生電子通訊事業部的總經理),他是我的伯樂。由於我的學歷問題,在技術面試通過後,別人只要一位VP面試通過就行,我卻需要兩位。我的職場第十四感悟:學歷是很重要的敲門磚,即便你的能力很強;學歷儘管很重要,但能力纔是最終的通行證。

20036月份左右,我正式入職UTStarcom研發部,從事小靈通基站控制器(後面簡稱爲基站控制器)的軟件開發工作,也從此踏入通訊行業。在入職之初,由於自認爲對於操作系統的原理很精通,又完整地做過軟件項目,有點飄飄然,覺得自己是個“小牛牛”。然而,入職後一接觸工作就發現,內容沒有想象的那麼簡單!

首先,基站控制器的軟件規模比我以前主導開發的項目要大很多,而且需要熟悉通訊行業的相關信令。其次,儘管我那時精通x86處理器,基站控制器用的卻是PowerPC 8250,這意味着我得重新掌握它。再次,實時操作系統用的是前美國軍方的、開源的RTEMS,那是我第一次接觸這個系統。最後,UTStarcom的工作語言是英語,寫文檔和郵件都得用英語。儘管我那時能無障礙地閱讀MSDN和各類芯片手冊,但要着手寫,卻是一大挑戰(口語不作要求,因爲不需直接接觸老外)。

一入職所分配的工作是網元網管部分告警抑制軟件模塊的開發。儘管PowerPC處理器和RTEMS操作系統技術細節的掌握與否並不影響日常開發工作,但我仍將掌握它們作爲自己的努力目標,這是我的職場第十五感悟:技術細節掌握得越深,解決問題時就越能遊刃有餘。

那時工作時間應付日常開發工作,業餘時間則先將精力集中放在熟讀PowerPC 8250處理器相關的技術手冊上(晚上還得上夜大)。加起來超過2000頁的英文資料,我讀了不少於3遍。隨着時間的推移,當我對PowerPC 8250處理器很有感覺之後,我將工作重點轉移到了熟悉RTEMS操作系統的實現細節上。先處理器後操作系統的學習安排,是基於我以往在x86處理器上的工作經驗而得出的,也是因爲我的職場第十六感悟:技能的發展應採取深度先於廣度且交替進行的方式,只有這樣,面對大量的新知識才能更淡定。

RTEMS是一個類UNIX的實時操作系統,也正因爲接觸這個操作系統我才意識到了自己在軟件設計能力上存在很大的提升空間。儘管我對操作系統的實現原理胸有成竹,但卻無力於構建一個象RTEMS那樣的操作系統,也真切地體會到了RTEMS的設計之美。那時基站控制器上運行的RTEMS操作系統是由美國的新澤西研發中心移植好的,杭州研發中心只需在之上做應用開發。爲了就RTEMS操作系統獲得更好的學習效果,我又一次運用了我的職場第四感悟,設定了自己完成RTEMS新版本移植這一目標。

RTEMS新版本的移植工作雖不在公司的日常工作範圍內,但卻得到了上司的支持。由於那時RTEMS還在開發新的功能,並不是很穩定,在移植過程中碰到各種奇怪的問題,有些問題還與GNUbinutils工具集有關(binutils中包括nmldobjdump等工具。RTEMS是用GCC編譯的)。在無法確認是GNU工具集的問題之前,我甚至還向Wind River公司(其知名產品是VxWorks實時操作系統)尋求過幫助,因爲那時用的是它的JTAG仿真器。移植工作雖曲折,但最終還是成功了(我所移植的版本並沒有運用到產品中,後來的同事又做過了RTEMS4.6.0pre4的移植,且運用於產品中)。這一移植經歷,讓我對GNUbinutilsRTEMS操作系統的實現有了更爲深入地掌握。

UTStarcom工作的前期,我大多從事的是RTEMS操作系統相關的代碼維護工作,工作內容除了OS內核,還包括FTPTelnet等協議。直到中期轉爲做E-Box產品的互聯網接入模塊的開發工作。

E-Box是一個企業級電話交換產品,其中還存在一塊基於ADSL的互聯網接入數據板(與現在的ADSL貓功能一樣),用於實現企業網對互聯網的數據接入功能,這一數據板使用的是VxWorks5.5.0實時操作系統(PNE 2.0),處理器是IntelXScale IXP425。那時VxWorksIP協議棧還是基於BSD的,但Wind River對之做了一定增強。這段時期我的工作重點全在IP協議棧上(《TCP/IP詳解》這套書幫上了大忙)。這一時期的開發經歷,讓我對PNEBridgeFastPathMUXPPPoE協議、Radix路由算法和VLAN協議很熟悉,也學會了用SmartBit儀器和Chariot軟件做網絡性能測試。總之,讓我在IPv4)協議棧方面的知識上和軟件實現上有了長足的進步。

E-Box產品數據板上的開發工作進行了半年後,管理層決定放棄,於是我被調到了E-Box產品的軟件平臺組。那時平臺組剛好面臨一個比較麻煩的問題 --- 在命令行上運行reboot命令後,有時會出現整個系統掛起,而不是期望的重啓。平臺組的同事花了一個多星期的時間仍沒有解決這一問題。

進入平臺組之際,同樣是在沒有任何人安排的情況下,我自己主動承擔解決reboot命令功能異常的工作。在我的職業生涯中,我一直熱衷於去解決別人難以解決的技術問題,這是因爲我的職場第十七感悟:越難的技術問題,其所蘊藏的知識越豐富,也越具學習價值。經過一天半的時間,問題被解決了。其根源在於,reboot之前沒有禁用CPM協處理器。我能那麼快地解決這一問題,完全是因爲之前熟讀過PowerPC8250處理器的資料。

我在UTStarcom工作的後期,致力於ACEE-Box產品中的一些應用,藉助ACE的網絡通信功能幫助實現在Windows平臺上通過Visual Studio調試E-Box產品。我在《專業嵌入式軟件開發》一書的《可開發性設計,一種高效且經濟的開發模式》一章中所闡述的內容其實就是這一工作經歷的總結與延伸。

另外,我還在E-Box產品上做過難度比較大的一個特性是,利用PowerPC 8250MMU功能在VxWorks操作系統上實現了對任務棧的保護 --- 當一個任務被調度而處於運行狀態時,它的棧就處於可讀寫狀態,而其他任務的棧全處於只讀狀態(VxWorks5.5.0內核中,還沒有RealTime Process的概念,這一概念是從6.0開始有的,所以那時我所做的這一特性很具實用性)。通過這一特性,可以有效地防止任務棧被意外篡改(比如野指針操作),即便出現篡改也能儘早發現根源。這個功能的實現過程需要調試VxWorks內核,那時VxWorks的源碼雖對公司提供,但Wind River公司對所提供的GNUbinutils做了特殊處理,使得無法爲內核代碼生成調試所需的信息,結果是無法對內核進行源碼級程序調試。由於我之前的RTEMS操作系統移植經歷讓我對binutils非常熟悉,通過使用一定的方法(說來話長了)繞過了Wind River公司所設置的障礙,成功地實現了對VxWorks的源碼級程序調試。

在職場中,我不時能成功解決複雜問題和克服技術障礙。這與我的職場第十八感悟是分不開的:每次積累的點滴知識,一定會在將來不知不覺地發揮效能。

20064月份左右,我離開了UTStarcom。在UTStarcom所學到的,不只是前面所介紹的那些技術知識,更讓我知道了軟件開發的“正規軍”是怎樣的,與小公司相比,UTStarcom的軟件開發流程要正規得多;也經歷了英文寫作的“擠牙膏”時期過渡到輕鬆時期(好友周海東在我的英語學習中幫了不少忙);看到了好友于善成如何通過大量閱讀成爲一個知識淵博的人(他的閱讀量現在仍是我的學習榜樣);還有上司夏青的技術敏感度到現在仍讓我爲之稱道,是我職場至今所見過的二位具有良好技術敏感度的技術管理者之一(另一位是我在Motorola工作期間認識的,後面會談到他);團隊實力之強使得開發出的E-Box產品在我離開UTStarcom後不時能聽到正面的評價。

說到這裏有補充一點,我在大立公司工作時期,就很注重軟件設計文檔的編寫,而且在我離開之時,不僅完善了所有文檔,還爲後繼同事做了全面的培訓。我始終堅守我的職場第十九感悟:通過文檔化的方式傳承知識給後繼者是你的基本責任,因爲你作爲後繼者時也希望如此,這也是對自己負責的一種表現。在UTStarcom工作期間,我進一步形成了將自己的技術想法寫成文章與大家分享的習慣(那時同事賀旭東稱我爲“作家”,而我則稱他爲“點評家”),也因爲自己在嵌入式軟件開發技術上的長期點滴積累,開始有了寫書的想法。

離開UTStarcom後,我入職了杭州華數集團旗下的雷科通技術(杭州)有限公司。公司當時的意向是安排我負責某寬帶接入產品的軟件開發工作。在這個公司,儘管只有兩個月的時間但也做了些事。除了一個月內完成了寬帶接入產品以太網交換芯片在VxWorks操作系統上的驅動開發,並使得產品支持VLAN功能外,還解決了好幾個影響整個產品系統穩定性的嚴重遺留缺陷。這兩個月的工作不光讓我在技術團隊中很快地樹立了自己的威望,也使得公司高層管理者真切地看到了我的能力而在我提出離開時極力地挽留。這短暫兩個月的工作經歷帶給我職場第二十感悟:別人對你價值的認可,其實不是簡單地根據你的自身能力,而是根據你對他人和團隊的貢獻。

入職2006年初在杭州成立的Motorola研發中心的故事得從面試開始。在入職雷科通不久,我收到了獵頭的電話,雖然那時並沒有換工作的想法,但也沒有拒絕獵頭投簡歷。隨後我收到了Motorola的面試電話。那次面試過程記得很清楚,因爲那是我所經歷的第一次英語口語技術面試。雖然工作中從沒有鍛鍊過英語口語,好在對於自己做過的技術知識很熟悉,也經常需要查閱英文資料,所以對於所做過的內容還能用英語勉強解釋清楚。在面試的最後,我對印裔技術面試官說,“現在我的英語口語不好,但我相信只要有合適的環境,能很快地提高”。印裔技術面試官最後將我領到HR那,說了一聲“Yes” — 我的技術面試通過了!

面試結束的第二天,收到了Motorola HR的電話,告知Offer的相關信息(我的入職級別是E09E09及以上的人在整個Motorola杭州研發中心佔比大約爲10%)。那時由於並沒有換工作的想法,所以拒絕了Offer。想法很簡單,因爲曾在UTStarcom這樣的公司呆過了,所以對外企的工作並不是很嚮往,反而認爲在雷科通這種小公司更能施展。在我拒絕了MotorolaOffer後,我將這件事告訴了身邊的同事,他們的反饋幾乎都是“你應當去Motorola”。

幸運的是,另一名HR再一次致電給我,試圖說服我加入Motorola。她當時說“你一旦加入Motorola,以後離開時所看到的就是HPIBM這樣的大公司”,也正是這句話打動了我。之後的經歷證明,加入Motorola是很正確的一個選擇!

200676日,我正式入職Motorola杭州研發中心。加入的初期是大量的內部培訓,培訓內容包括技術方面的、流程方面的和英語。Motorola有着成熟的企業文化,通過培訓可以讓工程師很快地融入企業,使人行事象是Motorolan(摩托羅拉人)。在經歷了約半年的培訓和學習後,2006年底,我開始參與WiMAX產品線上的CLA中間件軟件項目。

儘管我在CLA項目上沒有具體的工作(比如,沒有缺陷修復工作會分配給我,也沒有新的特性開發工作會掛在我的名下),但對整個團隊所從事的技術工作都得負責。我的日常工作主要是設計方案評審、代碼審查、幫助或帶領團隊解決技術難題等。

CLA項目上工作了一個月左右,2007年春節之後,我被第一位派到Motorola的芝加哥研發中心做爲期二個月的現場技術支持。之前儘管在公司有過英語培訓,但要很好地聽與說還是存在很大的障礙,加上芝加哥那邊一起工作的是口音較重的印度人和巴基斯坦人,挑戰可以想象。在芝加哥研發中心除了做現場技術支持,還得爲後續人員的到來做鋪墊。比如,租好房子、車子,準備好生活所需的一些家當(當時因爲預算有限,我們住的是公寓,還得自己燒飯)。那段時間雖然因爲語言的問題倍感壓力,但在全英文的環境中,我的聽說能力進步也明顯。之後差不多每年一次的出國,見到以前認識的外國同事,總會有人對我說“Your English is getting better”。對於自認爲英語聽說能力不行的同仁,請記住我的職場第二十一感悟:英語的聽說能力只要有合適的環境,並勇於張嘴練習的情況下能快速地提高,不必擔心。

CLA軟件在技術上屬於運行於Linux操作系統上的一箇中間件,它存在多個進程用於幫助通訊設備網元(包括WiMAX基站和接入網關)實現網管功能。由於軟件架構的特點,使得CLA團隊不時會碰到由於其他團隊沒有用好CLA而產生的技術問題,這類問題開始大多難以定位是屬於CLA的、還是不屬於CLA的,因而查錯過程很低效。在CLA項目的後期,我希望通過引入新的軟件設計方案幫助團隊提高軟件的查錯能力,並改善軟件質量。引入新設計需要增加很多代碼,如何讓管理層不擔心由此而引入更多的缺陷是我着力這事時首先要考慮和解決的問題。

在這種背景下,我在CLA項目引入了單元測試,寄希望於通過單元測試提高新增代碼的質量,以使管理層更具信心而獲得他們強有力的支持。最終結果表明,在新增了近一萬行代碼的情況下,代碼在最終發佈後總共只發現了一個軟件缺陷。這個項目上的工作經歷讓我第一次真正嚐到了單元測試的甜頭,在《專業嵌入式軟件開發》一書中,單元測試方面的內容很多源於我在這一項目上的成功經驗。我在CLA上新增設計中的AEDAbnormal Exiting Detection)功能,在我離開CLA項目之後,還幫助團隊發現了很隱蔽的多線程問題。當通過AED功能發現這一問題的同事高興地跑過來對我說這個功能管用時,我的高興勁寫滿了整張臉。這個項目的經歷,也讓我更加堅信我的職場第二十二感悟:在軟件開發活動中,應設法通過有效的技術途徑去解決工程困境。

2009年初,Motorola杭州研發中心迎來了一個重量級項目 --- WiMAX產品線的接入網關ASN-GW,我被安排到該項目,角色是軟件開發架構師。初期我的架構師一職只是杭州研發中心單方面的角色安排,而非全球性的(當時該產品由美國、印度和中國三個研發中心共同參與)。

ASN-GW項目上與我一同共事的經理,是曾在Motorola美國研發中心呆了近十年、後來臨時轉到國內來工作的華人李亮(後面簡稱亮,習慣了)。他之前在美國工作時做過架構師、軟件發佈經理(Release Manager)等職,是一個對技術很有敏感度的管理者(我前面提到過的兩位有技術敏感度的管理者之一)。我在此之後的成長,完全離不開他的支持與信任,以及他爲我所創造的職場發展環境,能與他共事讓我倍感榮幸和感激。

我從亮身上學到的第一個內容是如何與美國管理層打交道。總體說來,Motorola在軟件開發管理方面很是四平八穩,其管理存在兩大特色,一是爭奪項目的所有權(Ownership),另一個是質疑(Challenge)。前者使得各團隊職責清晰,不容易出現突發問題或狀況找不到負責人;後者使得團隊在工作中有所作爲,不至於讓人渾水摸魚。在面對美國團隊的質疑時,我以前看到的大多管理者都很緊張,總想一味地達到美國方面的要求,但亮在這方面的表現卻明顯不同。他告訴我們(包括Team Leader):“如果美國提的要求不合理,直接與他們‘掰’”。後來我認識到,美國方面做事其實很講邏輯,只要我們對於他們所質疑的問題能給出合理的解釋,很多異常事件根本就沒什麼大不了。我的職場第二十三感悟:不要用沉默的方式一味地迎合別人的要求,據理力爭或許纔是作爲的表現。

參與ASN-GW的呼叫處理子系統的開發工作後,整個團隊經歷了大約半年的成長痛苦。痛苦有幾個根源,一是對WiMAX無線接入技術相關的國際標準不熟悉,另外則是對ASN-GW產品的現有實現不瞭解,而且產品的複雜度的確很大(其中一個技術指標是:必須達到99.999%的容錯能力)。在半年的痛苦期中,我很重要的一個工作職責是幫助團隊成長,作爲亮這類管理層與基層工程師間的橋樑。比如,爲團隊起草《開發者指南》和《測試指南》這樣的文檔,且要求和引導工程師通過文檔化的形式沉澱經驗與教訓,以便提高工作效率(雖然文檔化方法的實施過程需要我不斷地提醒,但這一方法被證明在這種時期很有效);我也會在例會上毫不留情地指出工程師的哪些行爲影響了工作效率。我的職場第二十四感悟:流程、文檔的作用,不只是引導我們做完事,更能規範我們的行爲和幫助培養工作習慣。

亮在項目進展的過程中,一直向美國方面主張杭州團隊必須設置架構師一職,也正是由於亮的一再爭取,美國方面最終努力地幫助我向這個方向發展,不斷爲我分派屬於架構師工作的任務(如更新產品架構模型、參與需求管理、參與系統設計文檔的評審、完成新特性開發工作評估等)。亮那時告訴我,我應是杭州研發中心第一個真正從事架構師工作的人。

剛接觸架構師方面的工作時,其實還是不大自信的,儘管我那時掌握了軟件架構師所需的基礎技術技能(比如,我的軟件設計能力很強、UML1998年開始接觸加上之後的持續學習所以功底也很好),但對於軟件研發管理方面的內容,以及WiMAX無線接入技術知識的系統性認識還是相對單薄的。那時與美國同事接觸下來的感覺是,他們的綜合能力都很強,似乎隨便一個人都知道如何做架構師,不少人有做GSMiDenCDMA產品的經驗,而且長期工作於無線接入技術領域。隨着更多地參與架構師方面的工作,不僅逐漸建立了自信,對Motorola的軟件研發管理也有了更爲深入地認識與理解。所看到的不僅僅是產品技術本身的複雜度,更有開發活動運作管理方面的複雜度。最終,我成爲了整個ASN-GW產品的架構師。

2009年,我考入了浙江大學的MBA,同時還開始着手寫自己的處女作《專業嵌入式軟件開發》。在之後長達近兩年的工作、學習和寫作的三重壓力下,我在時間管理上有很大的進步,抗壓能力也得到了很好的鍛鍊,這時我的職場第十二感悟(指其中的堅持)又讓我最終渡過了這段最爲艱難的時期。(注:《專業嵌入式軟件開發》一書其實不只專注於嵌入式,其中絕大部分內容是C/C++開發人員應當掌握的。當時書名中採用“嵌入式”三個字完全是因爲給書定位的需要,害怕書名不具體而使人難以選書。當然,也正因爲“嵌入式”三個字,使人覺得面太窄了。有利有弊吧!該書在各大網上書店都歸類於“軟件工程及軟件方法學”,而非“嵌入式系統”)

2010年中期,NSN宣佈收購我所在的Motorola網絡部門,收購活動直到2011年的4月份才結束。同時由於WiMAX市場的不景氣,美國不少系統架構師轉到了FDD-LTE產品線上,我也因爲這一緣故擔任了大約半年的系統架構師,主要負責WiMAX技術的移動性與網絡安全方面的工作。

20127月份,因爲WiMAX產品線裁員,我轉到了NSNWCDMA產品線。也從此開始離開了Motorola的研發管理環境,而真正步入了NSN的研發管理環境。

真感謝你花時間讀到這!儘管我們常將“職業規劃”掛在嘴邊,實際上職場發展真的是一種“布朗運動”。你不知道下一站會是哪、也不知道後面將要從事什麼工作、更不清楚後面會碰到怎樣的老闆。在衆多不確定因素面前,或許參照我一路走來所總結出的職場感悟能讓你不斷地朝好的方向發展。

2 感悟程序人生

上面的文字比較長,其中記錄了李雲成長過程中的各種細節。其中非常讓人感動的是李雲的這種永不放棄的精神,從文字中我們可以看到李雲從來沒有停止自己前進的腳步。這是非常可貴的,李雲的成績中幾乎沒有運氣成分,完全的靠自己的雙手把握自己的人生。

我們還是回到之前一直提到的幾個維度:

價值 實現程度(表達力,稀缺性,公司平臺)職場成就

在這一公式下,你會發現李雲道路的主旋律就是在一個技術路徑長的領域裏增值、增值再增值。不論是最初的PLC還是後來的WiMax都可以比較籠統的歸到一個叫軟硬結合的軟件領域,這個領域技術路徑比較長,和基於ASP.net做信息管理系統完全不是一個難度。從事這類工作其知識必須貫通軟硬件,否則寸步難行。一個一直做純軟件的人,在這類領域中聽都聽不懂相關工程師在說什麼。今天之所以很多程序員可以缺乏硬件知識也能做軟件開發,關鍵在於Window送,Java這類平臺屏蔽了大量細節,而做上述這類工作時等價於需要撕掉這種屏蔽,重新面對軟件最本來的面目。所以這天生是個技術路徑長的領域。

在這樣的領域中達到一定高度後,稀缺性會很自然的呈現出來。,與此同時,公司平臺的切換也使李雲所站的位置越來越高,稀缺性越來越好。

李雲的經歷同樣也說明了人生確實需要一種永動的勢能,否則一旦他安於現狀比如停留在大立公司,停止了自己在技術上的追求,那麼也不會有現在的高度,而是會在某個環境下上過着相對比較穩定的生活。

在李雲身上表達力起到了一定的作用,但作用暫時並不明顯,技術的不斷提高和積極的精神使李雲並沒有碰到這方面上的瓶頸。

如果與第一個故事裏的主人公老A相對比就可以發現更多的事情。兩者年紀相差不大,但卻走出了截然相反的人生道路。同北大、清華、浙大這類頂級學校相比,李雲的學校實在是差的一塌糊塗,如果在九幾年兩個人剛畢業的時候讓企業進行選擇,李雲絕對是一點機會都沒有,誇張點講李雲根本就不會有和老A並列在一起的機會。

但在2011年,經過十幾年的奮鬥之後,形式完全逆轉,老A不再有和李雲並列在一起的機會了。李雲可以在各大公司間選擇比較適合自己的工作,而老A只能被外包公司被動選擇。形象點講,老A出身名門,但人生一路下滑。李雲畢業於專科學校,但靠自己的努力創造了命運。

也許有刁鑽的人會說,李雲這樣有什麼好,馬雲什麼技術都不懂,阿里系一樣千億市值。這麼想就危險了,所謂一念天堂,一念地獄即是如此。恰如人不能寄希望於中彩票一樣,對於人生而言,理想可以遠大,但手裏要有看得見的適合自己的路徑。崇拜馬雲先生可以,但馬雲先生自有其自身的艱辛和機緣,而大多時候這類成功完全不可複製。不具體瞭解這些,而單純因爲虛無縹緲的遠大,而荒了現在,那就是好高騖遠。

------------------------------------------------------------------------------

關於我自己的各種信息,在左邊欄可找到,想了解下寫這書的人是不是騙子和大忽悠的可以瞄。

最後希望感興趣的支持V衆投,感覺上這應該是國內最靠譜的生活購物等的問答社區了吧,都是朋友給朋友做的答案,同時實行一人一號,一人一票制度,想找什麼答案關注公衆號:vzhongtou(左側有二維碼)就行了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章