首頁>科技>

這本書裡談到職業選擇時提了三個問題:

第一個和第三個問題關乎個人技能和志趣,第二個問題關乎你是否可以生存下去。你所擅長的並不一定是你喜歡的,你喜歡做的事情也並不一定能掙到錢。但是對某些程式設計師來說,這三個面向一直是混在一起的:你喜歡寫程式,傾心技術文化,程式設計技能也不錯,加上這些年市場上很需要程式設計師,你很自然就會認為只要持續提高程式設計能力,收入肯定會越來越高。

這其實是一種錯覺。程式設計厲害和掙到錢並沒有必然聯絡。想象一種極端情況:你帶著程式設計能力穿越到了唐朝,周圍的人都處在農耕社會,沒有人知道什麼是程式,這時你就沒法利用程式設計能力生存下去——因為周圍的人不需要,不會付錢給你。

據我個人經驗,程式設計師圈子一直很強調“熱愛”,很自豪自己可以動手做東西,會把自己類比為“詩人”、“畫家”或“手藝人”。我一直都很喜歡這種文化,也是受到它的鼓舞才寫了那麼久程式,以至於後來發現很多人羨慕程式設計師只是因為我們收入高的時候感到幻滅:難道不是因為我們很酷?

隨著程式設計師這個職業越來越普遍,想轉行寫程式的人越來越多,慢慢我才開始意識到程式設計師只是眾多職業中的一種,在其他行業的人眼裡並沒有多特別,從網上對“阿里程式設計師搶月餅”事件的反應來看,程式設計師在大部分人眼裡不過是掙錢多的屌絲而已。技術文化和網際網路精神什麼的,和這個職業已經沒什麼關係。所以今天這篇文章不會談及個人技能和志趣——那是你個人或你們圈子的事情。你可能喜歡 C 而不是 JAVA,可能想做前端而不是安全,這些選擇都挺好的,但它們和你能否一直有工作、能否掙到錢、能否生存下去沒有必然聯絡。在這裡,“職業規劃”的意思是如何儘量不失業,哪怕年齡大了也可以掙到錢,換句話說,如何生存下去。

先說一下程式設計師這個職業的缺點:

1. 知識更新換代極快

上大學的時候我對網頁製作什麼的就很有興趣,花了不少時間學習 ASP,一種 Windows 系統下的 Web 程式語言。後來又喜歡上了 RIA (Rich Internet Application) ,天天研究 Adobe Flex,還花了很多時間翻譯國外的技術文章。這些東西沒過多久就被淘汰了,我學到的相關技能大部分再也沒用了。

後來做了前端,新的技術和框架更是眼花繚亂,一個月不學習就聽不懂別人在說什麼了。後端可能好一些?我不太清楚,但從偶爾聽說到的各種 Cloud 以及新工具,好像也好不到哪裡去。在知識更新換代極快的情況下,持續快速學習就變成了常態,以至於業餘時間也要繼續熱愛技術。

我並不反對持續學習,但我非常不喜歡這種無法積累經驗的狀態。花了那麼多時間和精力研究了 Adobe Flex,結果大家都不用了,只好再從頭學習其它技術。很多技術大牛會說:“重要的不是具體技能,而是程式設計過程中得到的經驗和學習能力。”這種說法低估了獲取經驗的難度。並不是說我做了兩個專案就有了兩個專案的經驗,更有可能是我只獲得了一個專案的經驗,然後重複了兩次。對剛工作的人來說,被迫不斷學習新技術會幫助提高自身能力,但對工作幾年的人來說可能更多是負擔。

況且中國的技術行業只是表面光鮮,實際上還是勞動密集型,也就是說拼的是勞動強度和熟練度。你以為自己年齡大了更有經驗,學習新技術也快,但剛畢業的年輕人已經掌握了新技術,而且更能加班,相比之下你的經驗有多大價值呢?

2. 心理壓力大

程式設計的特點是行就行,不行就不行,執行一下就知道了。沒有無謂的口水,沒有辦公室政治。很多人選擇這一行也是因為這個優點。但這也意味著如果你的程式碼不行,就意味著你能力不行,沒有其它替代方案。但是對其它職業來說,一種問題可能有多種解決辦法,不一定什麼壓力都自己背。

假設我是一個專案經理,老闆抱怨網站速度太慢,讓我解決這個問題。於是我召集手下程式設計師,讓他們優化程式碼。他們研究之後,發現程式碼太複雜,優化起來麻煩,效果也達不到老闆要求,不如直接多買幾臺伺服器。我有點兒生氣,覺得這幫人不夠牛,居然搞不定,同時乖乖去買伺服器。買了伺服器之後去和老闆彙報,問題解決了,只花了伺服器的錢,如果讓程式設計師優化程式碼,算上他們工資的話,其實花的錢比伺服器要多。老闆很滿意,我也完成了任務,但是程式設計師可能會因此恐慌自責,覺得自己能力太差,暗下決心業餘時間要多學一些伺服器優化方面的知識。

程式設計師的生活環境也非常同質,平時接觸到的大都是程式設計師,而程式設計師是不需要程式設計師的。你會寫的程式我也會寫,你掌握的知識我也有。在這種同質化的環境中,因為幫助別人而得到感謝的機會就比較少,而得到尊重的唯一方式就是變得更牛。這就和應試教育一樣,沒有人知道學的東西有什麼用,於是大家就比誰考的分數高。所以你會看到程式設計師之間的技術鄙視,以及總擔心自己不夠牛的恐慌。若是生活在一個被別人需要的環境中,你就會因為幫別人解決問題而受到感謝和肯定,而不是因為具體技能有多好,心理會健康得多。

3. 脫離社會

程式設計師和機器交流得多,和人交流得少,這在行業景氣、程式設計師稀缺的時候是很大的優點。你只需要專心自己的事情,不用理會辦公室政治,還能拿到高薪。想轉行做程式設計師的很多人也都是衝著這點來的。但這樣的缺點就是你和人打交道的能力會退化,不知道如何同非程式設計師交流,不明白也不關心他們要什麼,一旦行業不景氣,或者遍地都是程式設計師,你就會有很大的風險。

之前我在《》裡寫過,你能掙到錢是因為別人願意給你錢。當程式設計師是稀缺資源的時候,是不需要自我推銷的,別人都搶著給你工作。一旦情況轉變,你就需要花點力氣解釋自己的價值,不然為什麼是你而不是另外一個程式設計師?而讓別人理解自己的價值非常需要溝通能力。

一個已經做到管理層的前同事曾給我抱怨手下的程式設計師不會寫 KPI,“不懂把自己的工作換算成錢”。KPI 就是讓老闆認識到自己的價值,老闆不關心你的程式碼,老闆關心你幫他多掙了多少錢,或者節省了多少錢,所以你寫“網頁速度優化了 20%”是沒用的,你要解釋一下根據現在的訪問量和頻寬價格,這個優化幫公司節省了幾百萬。

這當然不能怪程式設計師,因為程式設計師平時接觸到的不是機器就是其它程式設計師,而交流能力要在實踐中獲得。如果你不能接觸到其他各種各樣的人,你就不知道如何同他們交流,然後別人都知道你缺乏交流能力,不會讓你去做交流工作或避免和你交流,你就更加沒辦法接觸到其他不同的人。

針對以上職業劣勢,我們來看一下有哪些解決辦法:

1. 完善的勞動法和社會保障

程式設計師其實是可以一直做下去的,但這對所處的環境有很高要求。首先不能持續加班,保證休息時間,有張有弛,也能讓人照顧好家庭。其次自身權利得到保障,比如公司不能動不動就裁人,這就要求有完備的、嚴格執行的勞動法。然後就是起碼的社會保障,意味失業可以得到一些救助,直到重新找到工作。

這裡我要為社會福利制度辯護一句。福利制度並不是“養懶人”,人總有運氣不好的時候,社會的存在也是為了讓每個人生活得更好,而不是瞄準了要淘汰誰。一定的福利會讓人覺得安全,對社會運轉也有好處。當然,“多少福利才是合適的”、“如何避免有人濫用福利”等問題可以討論,但共識應該是儘量尊重每個人,必要時候提供幫助。

理想主義一點的話,程式設計師應該趁現在行業好、有話語權的時候儘量為自己、也為其他勞動者爭取權利。不過這個太難了,記得柳傳志說過,“不做改革的犧牲品”,所以還是換一個社會環境比較容易,那就是移民。

程式設計師移民有非常大的優勢,因為程式語言是沒有國界的。美國和英國的前端程式設計師寫的也是 HTML,過去直接可以工作。程式設計師圈子裡把移民叫做“肉身翻牆”,對應的就是平時的“虛擬翻牆”,也就是說程式設計師平時也接收許多外國的訊息,並沒有像其他不懂技術的人那樣被豢養起來。比較大的障礙可能就是外語了,尤其是聽和說,因為缺乏語言環境得不到鍛鍊,無法在面試中正常表現。不過程式設計師平時工作就需要大量閱讀外語資料,收入也不錯,可以付費找外國人練習口語,如果有心學習,也不是一件難事。

如果你真的熱愛技術,出國之後也不用擔心孤苦伶仃。任何一個大城市都有許多程式設計師社群,比如 Linux User Group, Ruby User Group 等。這些社群都有定期的 meetup,而且一般都會需要 speaker,如果你熱心一點,又願意分享,很容易就能交到朋友,還可以練習語言。其實海外中國人的圈子也是基於文化和語言的社群,要是你有許多其它興趣愛好,完全沒有必要侷限於某一個社群。

要想技術移民,最好早早開始計劃,找一份不太需要加班的工作,業餘時間就可以多學習外語,或者出去旅遊看看。

此外,完善的勞動法和社會保障並不只是制度,還說明了整體的社會氛圍,尤其是在民主國家,因為法律和制度都是大多數人的意志體現。在一個福利好的國家,社會的主流思想大概率是尊重他人的,不會把人當牲口使,不然為什麼要用納稅人的錢養牲口?而一個信奉叢林法則優勝劣汰的社會是不屑於福利制度的,你死了是因為你能力不行,沒法持續學習,你活該。你死了社會才會得到優化,變得更好。

我寧願被淘汰也不願意和社會達爾文主義者在一塊生活。

時不時就聽到有人說“程式設計師吃的是青春飯,只能做到三十歲”,不少程式設計師對這種說法感到不快,當作是對自己職業的侮辱。這種說法的真正意思是:在一個長期加班、勞動密集型、沒有基本保障、信奉叢林法則的環境裡,程式設計師只能做到三十歲。它是在說你所在的惡劣環境,所以某個國外的老年程式設計師依然在寫程式碼並不能反駁這種說法。

如果不能改變環境,至少可以在別人倒黴的時候不上去踩一腳,不加一句“技術不行才會被淘汰”。因為你永遠不知道自己的興趣可以持續多久,某個時候會不會更願意多花時間在家庭和生活上,那時萬一你失業,被你當初的言行教育出來的年輕人也絕不會同情你。

2. 轉行

一種轉行是直接走管理路線,這種轉行是比較容易的,可以在公司內部慢慢往上爬。另一種就是換個職業,這個比較困難,因為即使你業餘時間完全掌握了其它職業需要的技能,別人也可能不願意聘用你。所有公司都想要直接招聘有工作經驗的人。所以轉行的時候最好不要是全新的職業,而是你以往經驗還能用得上的職業,這樣找工作的時候會容易些。

轉行的時候不要太過考慮收入。程式設計師是高薪職業,要找一個和程式設計師一樣高薪的新職業是很難的。你要考慮的是如何避開上面提到的程式設計師工作的缺點,新的職業應該是重視經驗的、靈活變通的、與人有交流的。這樣的職業或許薪水要低一些,但你知道自己的經驗會越來越多,遇到問題總會有其它辦法,而且經常被不同的人需要,不安全感就會少得多。我現在的工作就比四年前國內的收入低,不過狀態比以前放鬆多了。

3. Don't be an asshole

不少程式設計師是不屑於和人打交道的,認為那是浪費時間,不如多看一些技術資料。沒錯,和人交流確實耽誤學習技術的時間,也不會讓你的技術變得更好,但是如本文開頭所說的,技術更好並不一定讓你掙到更多錢,也不一定保證你可以生存下去。鑽研技術的前提是你得活著,學會和人交流可以幫你更好地生存,因為人終究是群居動物,靠他人才能活下去。

程式設計師因為生活環境比較同質,對工作的目的往往有所誤會。大部分程式設計師都在公司工作,而大部分公司並沒有改變世界的願景,它們只是掙更多錢,養活員工。大部分人工作的目的也就是掙錢餬口,哪怕他們信了 CEO 的話要改變世界,也不太清楚什麼是改變世界。如果你認為工作是大家在一塊合作掙錢,就不會太鑽牛角尖。而如果你認為工作是為了讓你的程式碼更優雅、執行得更快,那麼你會發現同事裡太多傻 X,一切都很混亂,公司馬上要完。

學會和人交流的第一步就是要明白你需要他人,然後理解別人要什麼。儘管有人沒那麼理想主義熱愛技術,但老老實實打一份工,掙錢養活家人好像也不是特別要不得的目的吧?哪怕這些人比較平庸,但作為一個團隊,還是應該互相有起碼的對人的尊重吧?一旦你開始理解並在乎他人,就會願意和人交流,別人聽不懂會耐心解釋,犯錯的時候會願意改正,交流能力就會越來越強。

有時候程式設計師因為認定自己“情商低、不擅長和人交流”而陷入死迴圈。因為覺得自己情商低,和人交流就緊張犯錯,進一步更認定自己不適合與人交流。把思維轉換一下,你不是情商低,而是缺乏練習機會,情況就會好很多。而且我覺得程式設計師對“高情商”這件事有誤會,認為情商高的人每句話都滴水不漏,其實人都會犯錯,不過有人會把錯誤當作平常的事情,忘了就好了,而有人就會把它們當作需要被嚴肅解決的問題,結果被人笑鑽牛角尖。

以前我一個人待得太久,總覺得自己是個傻 X。現在與人接觸得多了,還是覺得自己是個傻 X,不過發現傻 X 也可以過得很不錯,於是也慢慢活得理直氣壯起來。

過去科技和網際網路公司的形象一直都很酷:前衛,革命,make the world a better place. 聽說 Google 的辦公室準則就是尊重每一個人,包括辦公室清潔工。國內網際網路公司也說自己崇尚平等,尊重人才,組織結構扁平。當時這些公司都年輕,它們的員工也年輕,再過幾年,很多員工應該都會超過三十歲了,不知道公司還能不能一直酷下去?還是會學習它們的老前輩,教育大家“公司不是養老的地方”?

  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 被稱為中國最具價值的企業 阿里有什麼獨特的魅力