為什麼你招聘不到程式設計師,以及軟體如何定義現實世界

歪理邪說發表於2016-03-02

文/霍炬

2015 年,網際網路創業從火熱到“寒冷“,但有一件事全年都沒有變化,就是大家都覺得招聘不到程式設計師。我沒有確切的數字知道 2015 年這一年程式設計師的薪資增長的比例,但是我確切的知道,在 2015 年,一個有3~4 年工作經驗的年輕程式設計師,在北京和上海能拿到的薪水已經接近 2010 年盛大創新院給我的薪水了。要知道,2010 年盛大為了建立創新院,給出的是業界頂級的薪水,而且那時候我已經有 8 年的工作經驗了。這不過是 5 年前的事,今天,3 年工作經驗的程式設計師薪水已經到了這個水平。在中國,大概唯一增長率可以比的上北上廣房產的,就是程式設計師的薪水了。

很多人人根本拒絕相信這件事,不僅僅這個行業之外的人,甚至連這個行業之內的人也覺得非常不可思議。但所有人不得不面對的一個事實是:當你需要程式設計師的時候,會發現根本招聘不到程式設計師。那個“所有都準備好了,只差一個程式設計師就可以開工了” 完全不是笑話,我知道無數個專案,都是真的就差一個程式設計師了。

但是,他們就是招聘不到這個急需程式設計師。

還有很多人的看法是,過幾年程式設計師就好招聘了,現在只是泡沫時期罷了。甚至還有人認為,過幾年我們就不需要程式設計師了,因為有更多的工具可以幫助生成軟體。不好意思,這兩種想法都不是 2015 年才有的,從 1995 年,甚至 1985 年,這兩種看法就存在了。30 年來,泡沫起了一輪又一輪,破了一輪又一輪,自動化工具也確實出了一個又一個,更多的平臺也被建立起來,確實某種程度人,一些人可以“不需要寫程式”,也能 *開始* 進行網際網路創業。但是,幾十年來程式設計師的需求始終是上升的,符合需求,能寫出可用程式碼的程式設計師從來沒好招聘過,這個職業一直處於一種古怪到近乎瘋狂的供不應求階段。回頭來看,就算是 2008 年金融危機的大崩潰時刻,全世界範圍內,程式設計師好招聘也只持續了半年。美國 H1b 簽證只有 2008 年沒用滿,之後每一年都要抽籤才能獲得,無數中國和印度的程式設計師急盼簽證。

“不需要寫程式就可以進行網際網路創業”,這個倒是某種意義上是實現了。不過並不是有自動生成軟體的工具,而是各種應用平臺發展起來了。比如,一個專心內容創業的人,用微信公眾帳號就可以開始,一行程式都不用寫。但是不要忘記,這些平臺背後,仍然是無數程式設計師的工作成果。就算是用微信公眾平臺開始了創業,如果規模發展的大一點,終究還是要寫一些程式的,要麼是自己的 App/社群,要麼是 HTML5 做的各種活動,或者是用微信 SDK 介面做的各種自動化功能。總之,早晚你還是要寫點程式的。如果換個角度看,像微信公眾平臺這類應用,只不過是把過去沒有寫程式能力的人拉了上來可以有個開始,等其中的強者被篩選出來之後,他們又回到要僱程式設計師的境地。這麼一看,這些平臺不僅沒有減少程式設計師的職位,反而擴大了需求。如果沒有公眾平臺,可能很多創業者壓根到不了需要程式設計師支援這一天,也賺不到錢去養活一個程式設計師,現在,他們中的成功者終於可以活到這一天,加入競聘程式設計師的行列了…

這個世界對程式設計師的需求幾十年沒降低,按照我的觀點,甚至未來幾十年也不會降低,薪酬也只會持續上升。各種社交平臺上,也會見到各種惡毒嘲笑諷刺程式設計師的人和段子(基本來自傳統行業,他們大概覺得自己一輩子也不需要好好的和程式設計師打交道吧),這些人顯然是不相信我這個看法的。無論相信不相信,眼前的情況就是這樣的。為什麼程式設計師會這麼難招聘,背後的原因是什麼?要回答這個問題,我一般會推薦對方看一篇文章,叫做《軟體正在吞噬整個世界》,這是 2011 年美國著名風投 Andreessen Horowitz 創始人 Marc Andreessen 寫的文章。今天看來,這篇文章的意義顯然被低估了,Andreessen 寫過很多文章,但這無疑是最重要的一篇,也是對未來的指向最清晰的一篇。但別說 2011 年,就算是今天,也很少有人真正理解它的重要性。這篇文章並不長,看完我這篇,推薦找來再讀一遍,相信你會有新感受。

我一直非常推崇這篇文章的看法和遠見,但是,我覺得他用的“吞噬”(Eating)這個詞並不好,它沒有能精確體現真實情況,我更願意使用的詞是“定義”(defining)。“軟體定義現實世界”,這算是我發明的一個新詞。我這篇文章要寫的,就是關於軟體是何如定義現實世界的。

今年 3 月份的時候,我在杭州和一個朋友聊天,我們叫她夕總,是做傳統行業的。她很驚訝程式設計師為什麼這麼難招聘。我給她大致描述了越來越多的行業開始使用軟體來替代傳統人力勞動的狀況。她恍然大悟的說:“啊,我知道了,我家小區過去是個老大爺負責收停車費,現在變成了完全自動刷卡進入。所以,很多個老大爺被軟體替代了,軟體又需要程式設計師來開發和維護?” 這個例子找的非常準確,從一個具體的案例來看,就是這樣的。她敏銳的抓住了現實世界最基層的情況。我也繼續用這個例子做為背景說下去。

圖片:以前是這樣的

圖片:以後都是這樣的了…

當我們用一套停車場管理系統,替代了停車場管理員(那個老大爺)之後,整件事情改變了什麼?它並不僅僅是節約了一個老大爺的人力成本這麼簡單,僅僅節約人力成本的價值並不大,因為基層體力勞動的人力成本是相當有限的,節約 20 個老大爺的工資,也未必能比得上一個程式設計師的工資支出。

比節約一個人的人力成本更重要的是,我們用軟體來規範了停車場的行為,即所謂“定義”。在使用軟體之前,停車場管理員是有很大權利的,很多人都知道,給停車場管理員塞一包煙,他可能就會少收你 20 塊錢停車費。甚至很多停車場管理員會直接把停車費塞到自己口袋裡面,如果你沒要停車發票的話。停車場的運營是沒辦法監督這種行為,要監督,就需要付出巨大的人力,甚至冒很大風險。有了軟體系統之後,一切都不一樣了。不再需要去監督這種往自己口袋裡面塞錢的行為了,只要軟體沒有能被他們找到的漏洞,一切都變成了非常規範的行為。開車來的車主進入停車場的時候取卡,系統拍下車牌照,出停車場的時候自動計時收費,付錢之後停車場出口才開啟,車才能離開。這個過程可以完全沒有人力參與,就算是保留那個停車場老大爺的職位來做應急工作,他的行為也是嚴格被軟體規範的。不交錢,停車場出口不開啟,車就沒法離開停車場,這是一條被明確定義了的基本規則,除非暴力去破壞停車場設施,否則,一切都是被軟體管理的,人改變不了什麼。從此,整個過程中不會再有錢的損耗,停車場運營方會獲得更多收益。這些收益中的一部分,就變成了軟體公司的利潤,軟體公司利潤的一部分,變成了程式設計師工資。

這就是軟體企業為何有巨大盈利,程式設計師工資為什麼這麼高的原因。僅從這個例子看,軟體沒有創造新的價值,但是在若干傳統行業中,軟體奪回了一部分人本來不應該拿到的錢,把這些錢重新變成了利潤,程式設計師分享了這部分利潤。在這個停車場的例子中,按道理說,停車場管理員的收入只應該是一份工資,不包括偷偷塞到口袋裡面的停車費,但是如果沒有軟體,這種行為是沒法阻止的,一定會有很大一筆錢流到不應該獲得它們的人手裡。另外一方面看,在車主這邊,他們的行為也被定義了。過去很多人是願意接受 10 塊錢買一包煙,省 20 塊錢停車費這種設定的。但在軟體管理之下,這種利益交換沒機會發生了。在這個停車場的案例中,參與業務的兩方行為都被軟體重新規範和定義了。

整個過程可以這樣看:在軟體企業的幫助下,現實世界的資金流向被重新分配了。這就是“軟體定義現實世界”。軟體重新定義了社會規則,定義了人的行為。當然,目前軟體還只是體現了業務人員的意願,在這個階段,更確切的說法是:軟體幫助人們重新定義社會規則。

這只是個開始。我們站的高一點看這個已經被軟體接管了的停車場。你會發現,關於它的細節都被隱藏了,你只知道它存在著介面(Interface)。所謂介面,就是對資源的一種抽象,我們知道它提供什麼,比如在這裡例子中,可能是停車場有多少空車位,已經停有多少車,每天有多少收益,停車場的位置在哪…等等,具體的細節,被裝進了一個黑箱子裡面,我們不再關心它。比如,一個軟體管理的停車場還有沒有看車老大爺,這就算細節,在這種視角下,我們不再關心這個人是否存在,也不關心他在做什麼,因為已經用軟體定義好了他的行為,這時候我們只關心提供結果的介面即可。

在軟體世界中,知道了介面,就可以使用這一份資源。從此,我們把這個停車場可以看作軟體世界裡存在的一個單元(Unit),剛才說了,它的現實狀況已經被裝進黑箱子遮蔽掉了。如果你只有一個這樣的單元,它只能用來規範基本行為,但如果你在相鄰街道再有一個這樣的“停車場單元”,這時候就能開始有一些新的變化了。比如,停車場單元A已經幾乎停滿了,但停車場單元B還空著一半車位,這時候就可以通過軟體來調整資源,讓車主儘量往停車場B停。具體手段有很多,比如通過智慧手機傳送一條訊息,告訴正在開來的車主,停車場A要排隊 10 分鐘,停車場B排隊 1 分鐘就可進入。自然可以分流一部分人到停車場B。甚至是把停車場B的停車價格降價 10%,吸引更多人前往。這些實時的,根據資源剩餘情況的動態配置,利用傳統手段是不可能做到的。一方面是傳統手段沒法快速反饋資訊,另外一方面,傳統方式的審批決策流程過長,要降價總要有個負責人批准一下吧?從而讓實時的動態調整變得不可能。但在一個被軟體定義的世界裡面,是可以做到的。在這種模式下,如果我們再遮蔽掉具體的引導辦法(降價,排隊時常通知之類),甚至可以把A和B兩個停車單元合併成一個看,即,在軟體層面上,我們有了一個更大的停車場單元。

再繼續下去,如果有更多的資源具有了介面,他們之間還可以發生什麼互動?比如,兩個停車場旁邊有兩個規模和品質相似的餐館A和餐館B,它們也具有了介面,軟體世界裡面,我們抽象出餐館單元A和B,知道它們的座位有多少空餘,知道今天廚房有什麼材料,知道價格…那麼,停車單元A報告自己已經滿了的時候,這時候餐館B是不是願意暫時降價 10% 來吸引更多客源?如果餐館B通過降價,成功把自己空餘的資源賣掉了,他是否願意分享一部分利潤給停車場,以及分享一部分利潤給幫助進行資源配置的軟體運營方?

這些都是會在未來發生的事情。越來越多的現實世界資源通過一個介面,接入軟體世界,成為一個抽象的單元,它們會直接發生相互的作用,這就是我們多年所說的“智慧化”。所有的這一切,最終都需要軟體實現。把一個現實資源抽象成介面這件事,在軟體行業稱之為“虛擬化”,一個 60 年代軟體行業就使用的概念。通常這個詞被用於雲端計算行業,雲端計算產業在真正的物理計算機上虛擬出了計算機、路由器、記憶體…把這些資源彈性分配給需要的使用者使用。但實際上,現實世界的一切都是可以通過這種方式被虛擬化的。這就是未來被軟體定義的現實世界。對於這樣的世界,如果找一個更容易理解的例子,最適合的是遊戲。未來的一切都像即時戰略遊戲所表現的那樣,如果你玩過星際爭霸,大概會記得拿滑鼠點一下,派出一個 SCV 去採礦,用滑鼠點一下工廠,坦克就開始被生產出來。在這個過程中,操作者只需要知道點滑鼠下達指令,之後收穫指令的結果。點一下滑鼠,幾分鐘之後得到一輛坦克,至於工廠裡面具體如何生產一輛坦克,SCV 如何獲得礦石,這些細節被遮蔽掉,不用在關心。將來現實世界,傳統行業的一切都會變成這樣,甚至連下達指令的(玩遊戲)的這個操作者早晚也會被軟體替代。

我並不是在寫科幻小說,在今天,很多行業已經實現了類似的效果。比如航空業,這個行業裡面很多部分已經是高度虛擬化的了,他們已經可以用一個指揮系統調動各種地勤和支援資源去完成航空行業運轉的各種流程。當然,他們也需要好多程式設計師來開發和維護這個系統…

說到這裡,推薦一部非常符合這個主題的動畫片,叫做《夏日大作戰》,這部 2009 年的動畫用圖形化和更易懂的方式描述了這種未來的場景,非常好看。這是 2010 年,當時還在九城工作的布布推薦我的,我們都非常喜歡它,也一致認為這就是未來。(布布這個人也在笑來關於比特幣的文章裡面出現過,他跟笑來說不要挖礦,要花錢去買比特幣…是一個非常傳奇的傢伙)

圖片:夏日大作戰

我們再站高一點,看之前描述的場景。現在我們有了若干的資源單元,他們分佈在不同的行業,這些單元已經被軟體定義好了,我們看作是黑箱。在軟體之下,又定義了無數具體工作人員的行為。剛才的例子裡面,除了停車場管理員,還有廚師,服務員…沿著這個思路繼續想,還會有給餐館進貨,供應原材料的供應商,維修停車場設施的公司…所有這些,會會被虛擬化成軟體世界中的一個單元。然後是各種被提供服務的人(所謂使用者),他們有接收資訊的方式,大到計算機,小到智慧手機,或者各種嵌入式系統,比如特斯拉電動車駕駛艙裡面的那塊大螢幕…一個使用手機的使用者,或者一輛特斯拉,同樣都可以被抽象成一個帶有介面的資源單元。所有資源單元的行為,都是被軟體定義的,他們之間的互動方式和可能產生的結果,同樣是被軟體定義和調配的。這其中的每一層,每一部分,都需要大量程式設計師的工作。越來越多的現實資源被虛擬化,也就產生了更多的互動和更多的可能性,這些一樣需要程式設計師去實現。今天,人類社會被虛擬化成軟體的資源還只有極少的部分,我沒有具體統計的數字,但大家只要想想自己每天的現實生活所需所用,至少能有個大概的感知,恐怕被虛擬化的資源連1% 都不到。未來的空間有多大?幾乎是無限量的大。

現實世界能被虛擬化到什麼程度呢,我之前幾次推薦過科幻小說《雪崩》裡面描述了未來的世界只剩下三種職業:娛樂業、程式設計師和 Pizza 快遞員。這本寫於 90 年代初的小說,早年看起來非常震撼,今天看起來…覺得他還不夠極端。因為現在我們已經確知了,Pizza 快遞員的工作會被無人機改變,娛樂業會被 VR/AR 改變。最後乾脆現實世界只剩下了程式設計師這一種職業…軟體並沒有吞噬掉現實世界,而是重新定義了現實世界的所有資源。

圖片:雪崩封面

所以,今天一切關於軟體/網際網路泡沫的看法都是過時的。現實世界的虛擬化已經快到了相當的程度,我們真的需要大量的程式設計師,未來仍然需要,有多少都不夠用。因為程式設計師職業缺口太大了,早就不是有錢就能招聘到的了,甚至一個程式設計師因為公司要打卡,就會選擇另外一家企業,因為他們可選擇的餘地實在太大了。很多企業遠遠沒意識到問題的嚴重性,而聰明的企業,已經在忙著做“企業技術文化”工作了。如果你不是 BAT,又不是一個很酷的新公司,程式設計師們根本對你沒有興趣,到這個境地,花別人一倍的錢也未必能僱到人,所以就需要做技術文化工作,去宣傳我們也是很酷的,我們也是能改變世界的…從而不至於在這種競爭中落後。

最近一段時間,我周圍很多其他行業的朋友都跑來問我,是不是他們應該學寫一點程式。我通常都回答,只要你有興趣,學的下去,那就當然應該。就算不能成為職業程式設計師,在這個軟體定義一切的行業裡面,理解程式如何產生,理解程式設計師如何工作,那就一定會有一份更好的職業機會等著你。為什麼不學呢?

以上這些,就是難以僱到程式設計師這種狀況產生的基本面,因為這個職業缺口確實太大了,未來這種職業缺口不僅不會減少,毫無疑問還會繼續擴大下去,甚至可以誇張一點的說,人類世界現代化的速度,很大程度被程式設計師數量不夠制約…

相關文章