自動化來勢洶洶,未來的程式設計師該何去何從?

發表於2017-11-30

【編者按】:AI、自動化,這些技術進步不僅威脅到到了其他行業的工作,甚至有聲音認為,連開發這些技術的程式設計師其自嘲的“碼農”地位都將不保。比方說,OpenAI 前研究科學家 Andrej Karpathy 就認為,在AI引領的軟體2.0趨勢下,傳統程式設計師真的有可能要失業了。不過,跟 Tyler Elliot Bettilyon 相比,這些都是對程式設計師未來的片面看法,相對而言,他對程式設計師未來的工作前景分析更加全面客觀,值得從業者好好看看,思考未來作何選擇。

我的一位朋友最近提出了一個問題,這樣的問題我在不同場合都聽說過,只是形式各不相同:

你是否認為IT和一些低端的程式設計工作會重蹈渡渡鳥的覆轍?看起來一場大規模的就業泡沫似乎就要破裂了。在我看來,技術和低端電腦科學相關工作之所以還“久負盛名”並且拿到不菲的報酬的其中一個原因,是那些荒謬的行話以及公眾對計算機的無知,但這兩個在未來10年都會消失……

這個問題同時指向了兩點,一是技術工作的未來,二是對軟體工程領域的普遍誤解。雖說有大量“荒謬的行話”沒錯,但是還有同樣多的困難問題等著那幫有著合適技能組合的人去解決也是事實。一些軟體工作絕對是要消失的,但在很多年的時間裡有著合適經驗和知識的一些程式設計師仍然會繼續享有聲望並且拿到可觀的報酬;作為例子可以看看最近AI研究人員薪水的爆發以及可用人才的相應短缺就知道了。

在不斷變化的技術業能夠保持與時俱進是個挑戰。通過審視取代現在哪些程式設計師的技術可以預測出市場的那些崗位會消失。此外,要想預測特定技能薪酬和需求變化我們應該考慮學習程式設計群體的壯大情況。就像Hannah指出“公眾對計算機的無知”導致了那些會程式設計的人工資高企一樣,大眾對計算機的認知正在逐年變得更加嫻熟。

日益走向商品化

對自動化取代工作的恐懼既不新鮮也不是杞人憂天。在任何領域,尤其是在技術領域,市場力量都會推動著企業朝著自動化和商品化發展。Gartner的炒作週期曲線就是對這一現象的很好詮釋。

自動化來勢洶洶,未來的程式設計師該何去何從?

Gartner 2017炒作週期曲線

隨著時間延續,特定想法和技術把生產力推進到了“高原期”,最終實現自動化。但凡回顧歷史就能得出結論,自動化是有能力摧毀特定的就業市場的。從作物收割到,到汽車裝配,不同行業的技術發展正在不斷替代和增強人類勞動力,降低成本。一位教授曾經在自己的編譯器課程上總結說,“以史為鑑,看看紡織業和鋼鐵業:你是想建造機器和工具呢,還是想操作那些機器?”

在這裡“機器”的隱喻是指計算機程式語言。這位教授其實是問:你是想用JavaScript開發網站呢,還是想開發驅動JavaScript的V8引擎

網站的建立工作已經由WordPress等工具自動化了。而另一方面V8的競爭對手也越來越多,其中一些正在解決開放的研究問題。語言會來了又走(想想看現在還有多少分Fortran的工作?),但總會有人開發下一種程式語言。我們是幸運的,因為程式語言的實現也是用程式語言寫的。作為軟體的“機器操作者”把你推上了一條成為“機器製造者”的道路,這是過去的鋼鐵廠工人所沒有走過的。

語言、解譯器以及編譯器的不斷增多向我們表明,每一臺摧毀工作的機器也提供了對這些機器進行改進、維護等的新機遇。儘管消失的工作的列表正在變得越來越長,但是人類全體都認為“我想已經沒有工作可以做的了”的那個歷史性時刻還沒有到來。

自動化來勢洶洶,未來的程式設計師該何去何從?

Pinsetters

商品化會向我們所有人襲來,不僅僅只是軟體工程師。在整個歷史長河中,人類勞動力都在不斷被非人類的東西取代或者增強,導致工作所需的人更少,對技能的要求更低。自動汽車和自動卡車只是這個偉大的人類傳統的一時之興。如果創造和自動化的週期是生活的現實,接下來我們自然要問:哪些工作和行業有危險,哪些又暫時無憂呢?

誰自動化誰?

AWS、Heroku等類似託管主機平臺永久性地改變了系統管理員/DevOps工程師的角色。網際網路企業過去絕對需要自己的伺服器專家。其中一些精通Linux;一些懂得如何用Apache或者NGINX配置伺服器;有的不僅會對伺服器、路由器等各種物理元件進行佈線,而且還懂配置路由表以及各種必要的軟體來讓伺服器供大眾在web上訪問。儘管現在仍然有一群人懂得幹這一行,但AWS正在令其中一些技能變得過時——尤其是對經驗要求更低的一些事情以及硬體類的事情。對於靈通物理基礎設施的人來說,Amazon(以及Netflix、Google等)內部還有非常賺錢的角色可以擔任,但是中小企業方面對這些角色的需求已經大為減少。

像SalesForce、Tableau以及SpotFire這樣的“商業智慧(BI)”工具正在開始佔領歷史上屬於軟體工程師的地盤。這些系統已經減少了對內部資料庫管理員的需求,但作為一種通用技能同時也增加了對SQL的需求。BI還減少了對內部報表技術的需求,但增加了對“整合工程師”的需求,後者的工作是將來自企業的資料流交給第三方平臺進行自動化處理。一度為Excel和電子表格所統治的資料管理領域正在逐步被推向Python或者R這樣的指令碼語言以及SQL上。一些工作會消失,但對能夠寫軟體的人的需求總體上來說是增長的。

就更接近軟體而言,資料科學是商品化的一個很好的例子。Scikit.learn、Tensorflow以及PyTorch都是、方便大家編寫機器學習軟體的軟體庫。事實上,用同一個資料集跑許多有著不同引數集、同時賭氣演算法實現幾乎一無所知的機器學習演算法是有可能的(當然這麼做是不明智的,這裡只是說可能性)。我敢打賭未來幾年商業智慧公司會嘗試將這些型別的演算法整合到自己的工具裡面。

從很多方面來說資料科學就像5到8年前的web開發——這是一個蓬勃發展的領域,因為“技能鴻溝”,你能夠獲得的效果知識很少。後來,隨著web開發訓練營的關停整合,資料科學訓練營又在原來的地方冒出來。收購了原來的web開發訓練營(Dev Bootcamp)的Kaplan現在就是設立了一個資料科學訓練營(Metis),並且決定關閉DevBootcamp,同時維持Metis的運轉。

內容管理系統是工具裡面因為自動化而取消對軟體工程師需求的最明顯例子之一。SquareSpace和WordPress是當今最流行的CMS系統之一。這些平臺顯著降低了只有一點前端web開發技能的人的價值。事實上,做網站並把它放上網的門檻已經低了很多,低到毫無變成經驗的人也能夠每天都成功地釋出新網站。這些人沒法做出服務數十億人的、互動性極強的網站,但是替自己的企業製作網站為客戶提供所需資訊絕對是可以的。一個可愛的登入頁,再加上如何尋找公司、如何聯絡自己這樣的資訊對於當地飯店、酒吧或者零售店來說已經綽綽有餘。

如果你的企業不是以“網際網路業務”為主,想弄個過得去的網站放到網上從來都沒有像現在這麼容易。因此,可迅速做好網站並放到網上的 web承包商產業一度欣欣向榮,但現在已經變得沒那麼賺錢了。

最後,在這種情況下如果忽視計算機的物理方面的話這種態度近乎自大。用Mike Acton的話來說:“軟體不是平臺,硬體才是平臺”。搞軟體的人至少要學習一點計算機體系結構和電氣工程的知識才算是明智的。硬體的一次大動盪,消比如費者級的量子計算機的出現將會改變軟體工程的一切。

量子計算機仍然還有很長一段路要走,但對GPU的興趣在增加,同時朝著並行化的方向發展是即將到來的轉變。 CPU的速度近幾年來一直停滯不前,而在當時,對機器學習和“大資料”的渴望似乎已經達到無可遏止的地步。隨著對大型資料集的處理需求與日俱增,OpenMP,OpenCL,Go,CUDA等其他並行處理語言和框架將繼續成為主流。為了在短期內快速提高競爭力,顯著並行化將成為全面需求,而不僅僅侷限在高效能的小眾應用領域,比如作業系統,基礎設施以及視訊遊戲等。

人人都在學編碼

網站無所不在。2017 Stack Overflow調查報告指出,約15%的專業軟體工程師正在“網際網路/Web服務”公司工作。美國勞工部預計Web開發的增長率比平均崗位需求增長速度高很多的情況仍將繼續(2014年到2024年間為24%)。鑑於其可視性,這個行業很大一部分的關注點都會落在“填補技能鴻溝”上面。編碼訓練營幾乎只教Web開發,而Udemy、Udacity以及Coursera等類似市場上也充斥著Web開發的課程。

整個Web開發技術棧的自動化程度越來越高,入門級的新程式設計師大量湧入Web開發領域,這導致部分人預測軟體開發人員將會面臨一個“藍領”市場。有的人甚至更加激進一點,認為把這個產業推向藍領市場是大型科技公司設計的戰略。當然,其他人會說我們正朝著又一次泡沫破裂進發。

對特定技術需求的變化已經不是新聞。技術的語言和框架總是會有此消彼長的情況。Web開發目前的化身(“JS為王”)的走勢最終會像2000年代早期的Web開發走勢一樣(還記得Flash嗎?)所不同的是,這次在當今流行的web開發框架上很多人都有著明確(且主要)的教育經歷。在你決定給自己貼上“React開發者”標籤之前,請記住曾經有人自認為是“Flash開發者”。如果把你的職業生涯吊死在一種語言、框架或者技術上無異於玩輪盤賭遊戲。當然,要預測哪些技術還將繼續發展下去是相當困難的,但是如果你打算找個東西全力以赴的話,我建議可以按照Lindy效應(對易損的東西來說,每多活一天,都會縮短其壽命;相反的,對於不易損的東西來說,每多活一天,都將更拉長其存在壽命。)選出一些已經經受住了時間考驗的語言,比如C語言。

下一代人將具備一種事實上的技術素養水平,這是X世代乃至千禧世代所不具備的。其結果之一是,這些人將會使用下一代的CMS工具。這些工具會變得更好,年輕的工作者也會用得更好會更好地使用它們。隨著充滿渴望技能熟練的年輕人進入就業市場,這兩個因素的結合絕對會降低低水平的IT和web開發技能的價值。高中也在迎頭趕上,開始提供電腦科學和程式設計課程,一些受過良好教育的高中學生一旦畢業可能就會馬上以程式設計實習生的身份加入勞動大軍。

另外一大群的新人是MBA和資料分析師。一度由Excel主宰的崗位列表正在開始把SQL列為“具備更好”,甚至變成了“崗位要求”。諸如Tableau,SpotFire,SalesForce等基於Web的指標體系在繼續取代電子表格作為報表生成主要工具的地位。如果這種情況持續下去,更多的資料分析師將會開始學習如何直接使用SQL,因為這要比把資料匯出到電子表格更加簡單。

想要超越同行在職場繼續往上爬的人正在網上學習資料庫和統計變成語言方面的課程。有了這些新技能之後,通過機器學習和統計庫的學習,他們就可以把自己定位成資料科學家了。走這條路的話看看Metis的課程就是很好的例子。

最後,獲得電腦科學和軟體工程學位的人數在不斷攀升。比如說,普渡大學報告說,其計算機課程課程的申請量在5年間已經翻了一番。康奈爾大學的電腦科學畢業生也出現了類似的爆發式增長。鑑於軟體的發展和普及,這種趨勢並不令人驚訝。年輕人很難會想象出計算機在我們的未來發揮的作用會越來越小,所以為什麼不去學習一些能提供工作保障的東西呢。

稀有與期望

現在這個行業的一個普遍的觀點是,你在大學四年電腦科學課程中受到的教育大多是不必要的東西。我已經多次在程式設計訓練營的大廳裡,web開發商店裡聽到過這樣的說法,甚至像Eric Elliott這樣的業界知名人物都這麼說。不過反方意見也很流行,有的甚至說“所有的程式設計師都應該拿到碩士學位”。

我的觀點跟Eric Elliott一樣,我認為學習程式設計應該有更多的選擇,而4年的學位未必許多人的最佳選擇。同時,我也同意William Bain的觀點,即跨程式設計領域的基礎技能對職業壽命至關重要,但是除了大學課程,目前你很難在其他地方找到這些資訊。我曾經寫過,作為長期職業生涯的基礎,有抱負的工程師應該學習什麼樣的技能,並且解釋了為了幫助分享這些知識,我加入了Bradfield。

不同形態和規模的編碼學校正變得愈發的無處不在,這裡面有很好的理由。你不用瞭解大O符號、晦澀的資料結構以及演算法細節也能學習程式設計。然而,儘管史丹佛大學的新鮮熱辣的畢業生確實也能跟剛出Hack Reactor出來的人競爭一些工作,但這種情況只在一個或兩個子行業中出現。編碼學校和訓練營的畢業生還沒有申請嵌入式系統、密碼/安全、機器人、網路基礎設施或人工智慧研究和開發方面的工作。但這些領域就像web開發一樣正在迅速發展。

一些與程式設計相關的技能已經開始從“稀有技能”向“基準期望”過渡。相反,建立像AWS這樣強悍的引擎的工作已經非常普遍的。推動技術發展的大公司——比如Amazon、Google、Facebook、Nvidia以及Space-X等——通常不會找“對JavaScript有基本瞭解”的人。 AWS每天為數十億使用者提供服務。為了支撐這種載荷量,AWS基礎設施工程師需要對網路協議、計算機架構有深入的瞭解,並且要有多年的相關經驗。就像任何學科一樣,這裡面有業餘愛好者和工匠之別。

這些知名企業正在解決研究問題開發真正建立真正開拓能力疆界的系統。然而,即使在基本的程式設計技能越來越普遍的情況下,他們仍然很難填補其中的空缺。可以編寫演算法來預測基因序列變化從而帶來想要結果的人在未來將會非常值錢。可以對衛星、航天器和機械自動化程式設計的人將繼續受到高度重視。這些領域並不適合採取前端web開發那種“3個月密集學習計劃”的人才速成,至少還沒有像樣的成功先例。

因為電腦科學開頭是“計算機”這個詞,所以我們可以認為,到2025年,所有的年輕人天生就能理解計算機。不幸的是,計算機的普及並沒有造就對數學、電腦科學、網路基礎設施、電氣工程等有著事實上的瞭解的新一代人。會用計算機跟計算研究是不一樣的。儘管數學自創始伊始就已經存在,但十分精通統計學的人仍然相對較少,而電腦科學也是一樣的陳舊。 Euclid發明了好幾種演算法,其中之一是在每次發出HTTPS請求時使用;每次我們登入網站都要用HTTPS這一事實並不會自動讓任何人瞭解這些協議是如何工作的。

雙峰工資分佈

更成熟的專業領域往往會有雙峰的工資分佈模式:相對較少的從業人員賺走了相當多的錢,其中大多數人的工資都不錯,但並沒有處在前1%之列。美國全國法律就業組織收集的資料可以十分清晰地反映出這一現象。大部分法學畢業生的工資在45000美元到65000美元之間,這是很高的工資了,但很難跟“頂尖專業人士”聯絡在一起。

自動化來勢洶洶,未來的程式設計師該何去何從?

法律專業的工資分佈情況

我們往往會認為,所有的法律畢業生都有可能成為一家律師事務所的合夥人,但事實上他們有很多條路可以走:律師助理,文員,公設辯護人,法官,企業法律服務,合同寫作等等。電腦科學專業的畢業生也有很多選擇,從Web開發到嵌入式系統不等。基本的程式設計技能會繼續成為一種期望,而不是“錦上添花”,我懷疑程式設計工作也會出現類似的分佈情況。

儘管還會有一批程式設計師靠著不斷推進技術極限而賺到很多的錢,但是為新的以計算機為中心的經濟提供動力的中級程式設計師隊伍將會越來越壯大。Web開發人員的平均工資肯定會隨著時間的推移而下降。說雖如此,但我懷疑“程式設計師”的崗位總量只會繼續增長。隨著人工的供給側開始滿足需求,希望我們將看到各種中級程式設計工作將會出現有益的繁榮。對於那些正在開闢無限可能的程式設計師來說,他們還將繼續拿到頂級的職業工資。

不管你是屬於哪一類的程式設計師,從事技術行業意味著終生都要繼續教育。如果你想成為第二類程式設計師,你就得加大投入,去學習如何創造機器,而不僅僅是使用機器。

 

 

相關文章