天天看點

程式員這個職業會是另一個即将破滅的泡沫嗎?

一位朋友最近向我提了個問題,這個問題我曾經在不同的論壇上聽到過,雖然問題的形式不太一樣:

“你認為 IT 和一些低級别的程式設計工作最終會消失嗎?這個工作看起來有點像一個巨大且即将破裂泡沫。我認為,科技和低水準計算機科學相關工作能夠“受人尊敬”以及保持高薪的唯一原因是這個行業中充斥着晦澀難懂的專業術語和公衆對計算機的無知,而這兩種情況在未來的 10 年裡都将消失。”

這個問題既跟技術工作的未來相關,也是對軟體工程領域誤解的一個常見例子。雖然這個行業裡确實有很多“晦澀難懂的專業術語”,但其中也存在着相當多的難題正等待着具備相應技能的人去解決。一些軟體相關的工作正在慢慢地消失,但真正具備一定經驗和知識的程式員們将繼續會受人尊敬,也能拿到較高的報酬。最近的 AI 研究員薪水大爆炸和相應人才的缺乏正是印證了這一點。

在不斷變化的技術環境中保持相關性可能是一個挑戰。看看目前那些用來取代程式員的技術,我們就能夠預測有哪些工作在将來可能會消失。此外,要預測薪酬和技能需求的變化,應該把未來會有越來越多的人學習程式設計這個情況考慮進去。正如Hannah所指出的那樣,“公衆對計算機的無知”使得會程式設計的人的工資很高,而公衆對計算機的了解會越來越深入。

持續向着商品化發展

對自動化取代人類的恐懼既不新鮮也沒有根據。在任何一個領域,特别是在技術領域,市場的力量都會推動企業走向自動化和商品化。 “Gartner炒作周期報告”就是對這種現象進行情景化的一種方式。

程式員這個職業會是另一個即将破滅的泡沫嗎?

2017 Gartner 炒作周期

随着時間的推移,一些特定的想法和技術最終必将走向自動化這個“生産力高地”。縱觀曆史,我們可以得出結論,自動化有能力摧毀特定的就業市場。在不同的行業,從作物收割到汽車裝配技,先進的技術将不斷增強甚至取代人力,進而降低成本。一位教授曾經在編譯原理課上這樣說:“以紡織業和鋼鐵行業為例:你是要創造機器,還是要操作這些機器?

在這個比喻中,“機器”是指計算機程式設計語言。這位教授真的在問:你想用JavaScript建立網站,還是要建構支援JavaScript的V8引擎嗎?

今天,網站的建立可以用WordPress或其他平台來自動進行。而另一方面,V8正在成為越來越多解決開源研究問題的競争對手。程式設計語言會突然流行起來,也會慢慢衰敗下去(現在還有多少Fortran相關的職位呢?),但總是會有人去創造下一個程式設計語言。 幸運的是,程式設計語言是用程式設計語言自己來編寫的。作為一名軟體業中的“機器操作員”,你将走上一條“機器創造者”的道路,而過去的鋼鐵勞工并非如此。

層出不窮的程式設計語言、解釋程式和編譯器告訴我們,每一個破壞工作的機器也帶來了改進、維護這些機器的工作機會。盡管越來越多的工作崗位已經不複存在,但人類曆史上還沒有出現過一個集體訴說“我們沒有任何工作可做”的時刻。

程式員這個職業會是另一個即将破滅的泡沫嗎?

擺放保齡球球瓶的人

商品化正面向我們所有人走來,而不僅僅針對軟體工程師。縱觀曆史,人類的勞動一直被非人類所取代,或者是所需的人數減少,以及所需掌握的技能要求降低。 自動駕駛的汽車和卡車 這個目前最時髦的東西正說明了這一點。 如果創造和自動化這種循環反複是生活中存在的事實,那麼接下來要回答的問題自然是:哪些工作和行業會面臨風險,而哪些不會?

誰把誰自動化了?

AWS、Heroku和其他類似的托管平台已經永遠改變了系統管理者和DevOps工程師這樣的角色。網際網路企業過去完全需要有自己的伺服器管理者,包括:精通Linux的人,會配置Apache或NGINX服務的人,一個不僅會在實體上連接配接伺服器、路由器和所有其他實體元件,還能夠配置路由表以及所有讓伺服器在網際網路上可通路的軟體的人。盡管由人來操作更加專業一點,但AWS正在淘汰其中的一些技能,特别是那些無需多少經驗水準以及實體側方面的工作。雖然亞馬遜(包括Netflix和Google)在網絡基礎設施方面擁有豐富的專業知識,但在中小型企業中這方面的需求要少得多。

SalesForce、Tableau和SpotFire等“商業智能”工具也逐漸開始侵占原本由軟體工程師占據的空間。這些系統減少了對企業内部資料庫管理者的需求,但同時也增加了把SQL作為通用技能的需求。它們減少了對企業内部報表制作技術的需求,但是增加了對“內建工程師”的需求,因為他們能讓資料自動地從企業流向第三方軟體平台。之前由Excel和Spreadsheets主導的領域越來越多地被像Python或R這樣的腳本語言所主導,并朝着用SQL進行資料管理的方向發展。有些工作已經消失,但是對程式設計人員的需求總體上還在增加。

資料科學這個實際的案例在一定程度上跟軟體商品化非常類似。 Scikit.learn,Tensorflow和PyTorch都是通用軟體庫,開發者使用這些庫可以很容易地建構機器學習應用程式,而無需從頭建構算法。實際上,人們可以使用很多不同的機器學習算法來運作資料集,而這些算法可以有許多不同的參數集,并且使用者無需深入了解算法是如何運作的(雖然這麼做并不明智,但這是有可能的)。我可以打賭,商業智能公司将在未來的幾年内将這些算法內建到自己的工具中。

資料科學在很多方面就像是5-8年前的網頁開發。這是一個蓬勃發展的領域,隻要懂得一點知識你就能入門。随着網站開發教育訓練班的關閉,資料科學教育訓練班如雨後春筍般地冒了出來。Kaplan曾經購買了原來的網絡開發教育訓練班(Dev Bootcamp)并啟動了資料科學教育訓練班(Metis),現在決定關閉DevBootcamp,但繼續維持Metis的營運。

内容管理系統是讓企業自動遠離對軟體工程師需求的流行工具之一。 SquareSpace和WordPress是當今最受歡迎的CMS系統。這些平台的存在顯著降低了那些隻具備一點點前端Web開發技能的開發者的價值。事實上,現在制作網站和上網的障礙已經大大降低,沒有任何程式設計經驗的人每天都在釋出網站。他們不是在為網際網路提供數十億人通路的互動網站,而是為自己的企業搭建網站,為客戶提供他們所需要的資訊。一個包含如何找到企業以及如何與企業聯系的可愛登陸頁面,對于當地的餐館、酒吧或零售店來說已經完全足夠了。

如果企業的主要業務并不是“網際網路業務”,那麼,在網際網路上搭建一個網站并不簡單。是以,曾經一度非常繁榮的網站承建商這個行業,雖然它們能幫你在網際網路上快速建立起一個簡單的網站,但也開始變得越來越不賺錢。

最後,在這種情況下,無視計算機的實體特性就是一種自大。用Mike Acton的話來說:“軟體并不是平台,硬體才是平台”。軟體相關人員至少要學習一點計算機架構和電氣工程知識才是明智的。消費級量子計算機的出現将會改變軟體工程的一切。

量子計算機還很遙遠,但人們對GPU以及并行化趨勢的興趣正日益增長。 CPU速度的提高已經停滞了好幾年,但機器學習和“大資料”的飛速發展不可抑制。随着處理大型資料集的需求越來越多,OpenMP、OpenCL、Go、CUDA和其他一些并行處理語言和架構将成為主流。為了在短期内提高競争力,全方位的并行化是将成為主流,這不僅僅展現在作業系統上,還展現在基礎設施和視訊遊戲等領域中。

每個人都在學習程式設計

網站無處不在。 2017年的Stack Overflow調查報告指出,約有15%的專業軟體工程師都在“網際網路/網絡服務”公司工作。據勞工統計局預測,網絡開發崗位人數的增長速度将繼續高于平均水準(2014年至2024年平均水準為24%)。由于該行業的的知名度較高,人們紛紛關注起“技能差距的彌補”上。程式設計教育訓練班現在幾乎隻教網站開發,而網站開發線上課程也已經搶占了Udemy、Udacity、Coursera和其他一些線上課程的市場。

網站開發技術的自動化程度越來越高、大量入門級網站開發程式員的湧入,使得有人預測網站開發對于軟體開發人員來說将成為一個“藍領”市場。有人進一步指出,推動該市場的藍領化是大型科技公司的一個戰略。而其他一些人則說,我們正在為另一個即将破裂的泡沫而努力。

對特定技術的需求發生變化并不是新聞。 語言和架構的發展總會遇到上升期和下降期。目前的網站開發(“JS為王”)會重走2000年初的網站開發之路(還記得Flash嗎?)。 在決定給自己貼上“React開發者”這個标簽之前,請記住,曾經有人認為自己是“Flash開發者”。把自己的事業限制在一個特定的語言、架構或技術上就像是一場賭博。當然,要預測哪些技術能保持相關性是相當困難的,但是如果你想迎難而上,那麼我建議你以“Lindy效應”為依據,并選擇像C語言這樣已經經受住了時間考驗的東西。

未來一代年輕人的技術素養肯定更高,這是X一代甚至千禧一代的人們所不具備的。同時,CMS工具也會變成更好,以友善年輕人更好的利用這些工具。這樣,更多的年輕人會進入這個行業,進而導緻低水準IT和網絡開發技能的價值大大地降低。另外,高中也會開始提供計算機科學和程式設計方面的課程,一些受過良好教育的高中生可能會進入勞動大軍,在畢業後立即成為一名程式設計實習生。

另外的一大批程式設計新軍是MBA和資料分析師。曾經的職位描述中要求會用Excel,而現在開始改為會用SQL,或者是熟練使用SQL。諸如Tableau、SpotFire、SalesForce和其他一些基于Web的度量系統将取代電子表格成為報告生成的主要工具。如果這種情況持續下去,那麼就會有更多的資料分析師去學習SQL,因為這比将資料導出到電子表格中處理更簡單。

那些想要轉入IT行業或者想在崗位上更進一步的人來說,在網上學習資料庫和統計類程式設計語言是一個不錯的選擇。在有了這些新技能之後,他們就可以把機器學習和統計庫方面的庫結合來,把自己定位為資料科學家。

最後,獲得計算機科學和軟體工程學位的人數正逐年攀升。例如,普渡大學宣稱,他們計算機科學課程的申請數量在五年内翻了一翻。康奈爾大學也報道了計算機科學畢業生數量大爆炸的新聞。鑒于軟體的增長和普及,這一趨勢并不令人驚訝。對于年輕人來說,他們很難想象計算機在我們未來生活中充當的角色将越來越小,是以為什麼不研究一些能夠保住我們飯碗的東西呢。

稀缺和期望

在這個行業中,現在有一個很普遍的觀點,認為在大學四年的計算機科學課程中學到的知識大多是沒什麼大用處的。我在教育訓練班、線上開發商店,以及一些大人物例如Eric Elliott的作品中都看到過類似的觀點。當然,反對意見也很多,有人甚至說:“所有的程式員都應該有碩士學位””。

我的想法跟Eric Elliott一樣,我認為對于程式設計來說,還是有更多其他的路可以選的,而4年的大學生活可能也不是某些人最佳的選擇。同時,我也同意威廉·貝恩的觀點,即跨學科領域應用的基礎技能對于職業生涯的長期發展來說是至關重要的,而且在大學課程之外還很難找到相關的知識。我以前曾經寫過有關一個有抱負的工程師在漫長的職業生涯中應該學習哪些基礎技能。

一些與程式設計相關的技能已經開始從“稀缺技能”轉向“期望标準”。推動科技發展的大公司,例如亞馬遜、Google、Facebook、Nvidia、Space-X等等,通常不會招聘對JavaScript隻是基本了解的人。 AWS每天為數十億使用者提供服務,為了支撐這種負載,AWS基礎架構工程師需要深入了解網絡協定和計算機體系結構,并擁有多年的相關經驗。與其他學科一樣,IT業中也有業餘愛好者和工匠。

這些著名的公司正緻力于解決研究性的問題,以及建構某種真正能夠突破邊界的系統。然而,即使在基本的程式設計技巧越來越普及的情況下,他們仍然很難招到合适的人來填補空缺。能夠編寫算法來預測基因序列變化的人将會受到這些公司的追捧,在未來的價值将非常高。能夠給衛星、航天器和機械自動化程式設計的人将繼續受到企業的高度重視。這些領域并不适合成為像前端網絡開發那樣的“三個月速成班計劃”。

計算機科學脫胎于“計算機”這個詞,一些人預計,到2025年人們對它會有天生的了解。很可惜,計算機的普及并沒有造就出真正了解數學、計算機科學、網絡基礎設施、電氣工程等學科的新一代。計算機素養與計算機的研究是不一樣的。盡管數學已經存在,但統計學素養較高的人仍然比較少,計算機科學也一樣。 Euclid發明了多種算法,其中有一個算法在每次發送HTTPS請求的時候都會用到。但事實上,每次我們使用HTTPS登入網站的時候,并不會自動了解這些協定的工作原理。

雙峰薪水分布圖

成熟專業領域的薪水分布圖往往有兩個波峰:相對較少的人賺取了相當多的錢,他們中大多數人的薪水都很高,但在收入的前1%中卻看不到他們的身影。美國國家法律安置協會(National Association for Law Placement)收集的資料證明了這種情況。大部分法學畢業生的工資在4500美元到65000美元之間,雖然工資很高,但很難跟“頂尖專業人士”聯系在一起。

程式員這個職業會是另一個即将破滅的泡沫嗎?

擁有法學學位的人的收入分布圖,來自于美國國家法律安置協會

我們往往會認為,所有的法律專業畢業生都有可能成為一家律師事務所的合夥人,而事實上他們有很多的職業方向:律師助理、文員、公共辯護、法官、企業法律服務、合同寫作等等。計算機科學專業的畢業生也有很多的道路可以選擇,從網頁開發到嵌入式系統。由于基本的程式設計技能仍然是“期望”,而不是“具備”,是以,我猜測程式設計這個職業的收入分布圖也會出現類似的情況。

雖然總會有一批IT界人士花費大量的資金來推動技術的發展,同時也會有越來越多的IT中産階級人士為新的以計算機為中心的經濟提供支援。網頁開發人員的平均收入肯定會随着時間的推移而下降。也就是說,“程式員”的職位總數隻會繼續增長。對于那些正在重新定義可能性的程式員來說,他們将繼續獲得頂級工資。

無論你在這個行業中身處哪個角色,從事技術職業就意味着你要活到老學到老。如果你想讓自己的收入出現在第二個波峰上,那麼你可能需要研究如何創造機器,而不是簡單地操作它們。