谷歌大腦教AI寫代碼,是不是為了取代程序員?
更多精彩,敬請關注矽谷洞察官方網站(http://www.svinsight.com)
最近在京西、阿狸、380等互聯網巨頭掌門人的迷之助攻下,早已被「996」工作制度壓得闖不過氣的程序員們集體「造反」了。
有技術人員在知名代碼託管平台 GitHub 上發起了一個名為「996.ICU」的項目,以此抵制互聯網公司的超時工作,並得到了大批程序員的響應(雖然並沒有什麼卵用)。
打開今日頭條,查看更多圖片當然,並非只有大陸是程序員的「血汗工廠」。在矽谷,以互聯網為中心的「奮鬥神學」也常年盛行,朝九晚五的工作者卻會被當成Loser看待,天使投資人Gary Vaynerchuk還出版了一系列推崇極端工作的暢銷書,比如《Crush It!》,鼓勵「逐夢互聯網」的年輕開發者們每天工作18個小時。扎克伯格也曾告訴他的信徒們,創辦公司就像加入海豹突擊隊一樣。
去年,就有一位Uber工程師Joseph Thomas自殺,並在遺囑中將此歸咎於公司的高壓文化、長時間工作和不堪重負的心理壓力。
為什麼996奮鬥文化不再有程序員願意買單?它們不曾經和「下一代科技富翁」一樣是互聯網的光環和標籤嗎?
問題的癥結或許在於,職業程序員(負責編輯代碼的軟體工程師)原本是一項智力活動,它的典型形象原本是那些在車庫中改變世界的開發者。但隨著互聯網產業的極速膨脹,它已經逐漸在向體力勞動轉移了。
對此,《黑客與畫家》的作者保羅?格雷厄姆,做過一個非常好的概括——
「……(你)只是一個負責實現領導意志的技術工人,職責就是根據規格說明書寫出代碼,其實與一個挖水溝的工人是一樣的,從這頭挖到那頭,僅此而已,從事的都是機械性的工作。」
顯然,只能在程序開發流程里充當一種代碼工具的程序員,久而久之就會面臨非常殘酷的境地,那就是在勞動力市場上變得毫無議價能力:公司讓他做什麼就得做什麼,做不完就無止境地加班,不想做就只能離開。
而對於互聯網企業來講,當核心的技術員工被強制加班而日漸損耗,他們沒有時間來思考「添加/刪減這個功能有沒有必要」「代碼是否優美」「自己的技術理想」,企業的產品體驗也很難得到創新與升級。
當然,推行「996機制」的目的是「合法」逼迫程序員們主動離職的除外。對於大部分不得不通過「996」來提高生產力的公司來說,這顯然是一個勞資關係的「雙輸」局面。
理想的模式是怎樣的?或許我們可以思考一個新的可能性:那就是將大量現在必須由人類程序員完成的機械工作交給AI,讓員工從枯燥而漫長的「體力勞動」中解脫出來,去從事更有價值的「智力工作」,進行有效的創造。
機器和人類相互配合,重新找回日趨達到邊界的開發效率,這可能嗎?至少谷歌大腦的最新研究成果正在試圖抵達它。
互聯網圈的勞動力革命:
讓神經網路編寫「源代碼」
人類軟體工程師到底過著什麼樣真實的日子呢?
頂尖互聯網公司的軟體工程師掙得多,大概已經是共識了。被譽為程序員求職神器的招聘網站Triplebyte統計,矽谷的高級軟體工程師年薪的底薪常常可以達到14萬美元到17萬美元,摺合人民幣約在92萬元到112萬元。還不包括許多額外的期權、分紅、福利等等。
在中國,高級工程師也可以輕輕鬆鬆進入一線城市的高收入群體。
而「光鮮」背後的代價就是,幾乎所有的程序員都在超時工作。一位Google的可靠度工程師從上午9點一直工作到半夜以後完全是常態。而得益於灣區的高房價,他們往往還需要花費3-4個小時的通勤時間在路上。
和工作時長一樣威脅程序員健康的,還有可怕的工作壓力。高速的工作節奏、嚴苛的項目截止日期,大量積壓的工作任務,在處理對公司較為關鍵的事物時的焦慮,這些都是高薪光環背後獨有的「陰影」。許多矽谷程序員們都因此而進入漫長的「職業倦怠」期(崩潰狀態)。
更為殘酷的是,一旦他們的工作效率出現衰退,「性價比」就會顯得極為「不划算」,並早早結束自己的職業生涯(你可以管這叫優化、裁員、996,whatever)。
既然大公司的程序員和流水線工人沒什麼區別(嚴格按照設計稿和需求用代碼將產品一模一樣地實現出來),那麼用AI將他們從超負荷的工作量中解脫出來,就是極為必須且有價值的了。
谷歌大腦最新放出的論文,就能夠讓神經網路來完成這項高價值的工作——源代碼編輯。具體是怎麼實現的呢?
想要讓神經網路學會「編程」,首先要讓它了解人類程序員是如何完成這一工作的。谷歌大腦的解決方案就圍繞理解人類編寫代碼的過程(例如 GitHub 的 commit)展開,並使用深度神經網路模擬了整個編輯過程。
具體的過程是這樣的,研究人員收集了來自數千Python開發者的數百萬次細粒度的源代碼,構建了一個大型編輯序列數據集,訓練出了一個模型,試圖讓它學會「編程」。
效果顯示,在給定編輯序列的情況下,模型能知道後面該怎樣繼續「寫代碼」。這就和語言模型一樣,給定一小段話,模型就能接著用自然語言「編下去」。
比如給出兩個編輯序列(History A 和 History B)。經過兩次編輯後,兩個序列都有了相同的編碼狀態(State 2),但History A正在給foo函數添加一個額外的參數,History B正在從foo函數中移除第二個參數。
通過對原始狀態和編輯序列(Edits 1 & 2)的觀察,研究人員發現,神經網路「預測代碼」並知道後面怎麼「編下去」,是完全可行的。
那麼接下來的問題是,如何讓機器將預測結果以合理而優雅的方式呈現出來呢?
研究人員為「機器程序員」考慮了兩種表徵方式:顯式表徵和隱式表徵。
顯式表徵由一個兩階段的 LSTM 網路實現,第一階段能夠編碼每一個狀態序列,第二階段會將前面已觀察到的編輯序列解碼出來,因此,實例化序列中每一次編輯的狀態結果都會被 「照貓畫虎」地將代碼呈現出來。
而為了不讓「AI程序員」的作品「反類犬」,還需要帶入隱式表徵,這就要求,採用的隱式模型不僅能夠對隱式表徵進行操作,還能更好地捕捉到編輯內容和編輯上下文之間的關係序列,進而更好地學習策略。
谷歌人員參考了Transformer的位置編碼與Multi-head Attention(MHA),改造了一個強大的隱式注意力模型,編碼器會將初始狀態和所有已知編輯編碼為隱藏向量,解碼器會將其解碼為每一個編輯的位置、以及給定位置的編輯內容。
(隱式注意力模型)
結果顯示,改造後的隱式模型——雙向注意力模型,能夠在真實數據中實現高準確率、精準置信度和較好的可擴展性。它與顯式模型的協同工作幾乎可以解決所有任務,甚至是那些涉及元字元和具有較長替換序列的任務,這使機器洞察人類工程師的編程意圖、並在將來寫出「神似人類」的代碼成為了可能。
簡單來說這項研究的獨特之處就在於,谷歌大腦用一個神經網路來學習優秀人類工程師的編程經驗,不僅僅只是簡單地把需求套進去得到一堆結構和功能相似的「靜態」代碼,而是去理解工程師的意圖、決策等等,並將其應用到自己的編碼過程中去。
顯然,對於一線程序員和科技公司來說,這確實是個福音。因為他們總是需要去處理那些高度重複性、做不完的需求,而一個人的有效工作時間和精力總是有限的,機器的加入將直接降低程序員的工作量和疲勞感。
但這並不是急著樂觀的時候,就目前的研究現狀來看,距離「AI程序員」上崗還有很長一段路要走。
程序員們的「解放之路」,依然很長
一個又一個地完成開發任務,顯然是乏味的。做不完只能加班,從這個角度看,程序員(以及高級工程師)們的生活,和養雞場的母雞,,並沒有什麼本質區別,反正每天都必須完成N個蛋的生產指標。
不幸的是,「下蛋」只能由母雞完成,而「編程」這件事,目前也只能由人類來完成。原因也很簡單,「AI程序員」還只存在於設想和研究階段。
首先,機器編寫代碼的能力還遠遠不夠,真實效果有待驗證。
代碼其實是個「動詞」,它代表一種「動態」過程,需要很強的泛化能力才能完成。優秀的開發者往往會根據新需求、新的網路環境、bug的修復、最新的運營活動、公司的戰略意圖等等各種不斷變化的因素來構建代碼,某種程度上這也是區分普通程序員與牛逼程序員之間的重要標誌。而讓機器根據過去的代碼序列來動態判斷和預測即將發生的編輯內容,目前的性能完全不足以支撐實際應用。
另外,即使性能達到了,機器也只能完成相對簡單的任務,也就是那些流水線上的機械工作。如果想要開發出比較複雜和創新性的產品,那麼優秀的程序員以及高強度的工作還是不可避免的。
更關鍵的是,機器開發的成本也並不低。比如在谷歌大腦的這篇研究中,顯式模型的資源消耗就很大,而且隨著數據量的增加,它的成本也在指數級提升。比如長度為100的插入序列比真實數據集中的序列小十倍,但在運行時方面已經存在一個數量級的差異。
換句話說,如果僱傭一個程序員就能搞定,企業為什麼要花更多的錢和更高的風險去使用AI呢?
也許現在思考這個問題還言之過早,但現實已經很明顯,未來程序員想要獲得工作機會,是否願意996已經不是決定因素了,而是因為人比機器更便宜。
由此,我們從谷歌向程序員這樣的「高精尖」工種發起衝擊的研究動作背後,似乎可以感受到一絲不同尋常的味道。
關鍵不在996:
互聯網公司到底怎麼了?
在這場 「反對996」的全球風波背後,重點或許不在於「996」是否合情合理合法,而是直面一個問題,互聯網公司們到底都怎麼了?
我們來做一道簡單論證題。
已知:
很長一段時間內,程序員的高工作強度是由「高薪水+高預期+技術理想」共同買單的;
高薪水源自於互聯網公司的高估值;
高預期(股票、期權、分紅、理想)等由互聯網上市、融資等商業模式的完成來實現兌付。
那麼,在無法坐實估值的大資本環境下,互聯網企業回歸正常的估值空間,程序員的勞動「薪資」應該如何兌付?
過去十年互聯網企業的奇蹟般增長,都是在這樣的「一夜實現創富夢」的故事下完成的。在普遍不盈利甚至找不到賺錢方式的,就能拿到大筆資金,以期「以小博大」。在行業繁榮之際,包括生產力核心的程序員們,都對於「奮鬥文化」也保持著一定程度的沉默,甚至默認這是合理的。
但現實是,互聯網的產業鏈和商業規則已經大變樣了。互聯網企業的估值再也不是「賭博遊戲」,而開始與傳統實體拉平(效率優勢不再),甚至由於長期的泡沫顯得略有些貴了(高薪酬的低性價比)。在新的故事背景下, 隨著企業IPO/融資而快速實現「財務自由」的神話開始變得遙遙無期,勞動者自然會強調現貨兌付。這也是為什麼,關於「996機制」的討論總是圍繞「有無加班費」展開。
有網友調侃,「996的工資構成是10%的人民幣和90%的福氣」。以前這叫「矽谷夢」,現在卻顯得有點搞笑。
時代變了,一方面傳統互聯網企業「靠流量變現」的增長模式再也走不下去了,資本玩法已經到了窮途末路(主要是沒錢了)。互聯網企業想要生存下去,不能再靠便宜的價格(因為補貼不起),而是依靠創新,依靠健康的盈利模式,依靠低勞動力價格的成本優勢。
但是,一個極儘可能「壓榨」程序員剩餘價值的企業,一個員工無法有充足的時間思考、優化的工作環境,真的能誕生出創新產品嗎?答案顯然是否定的。
另一方面,無論員工或政府,都在「強迫」科技公司打消「以壓榨換效率」的想法。新一代的員工希望能夠開放自由地工作,而非像騾馬一樣常年忍受高強度的工作,以此換來的高薪酬被認為是不值得的。而不少政府也開始介入,英國就打算設立新的監管機構,來逐步結束科技公司「自我監管」時代,保障高技術員工的權益。
「人力成本空間」日漸縮小,將主意打到機器身上就非常地順理成章、喜聞樂見了。
程序員的職業未來會怎樣?
當然,有一部分「斯德哥爾摩」程序員可能會因此感到緊張。畢竟機器較之人類,在忍耐和生產效率上,是有過之而無不及。別說996了,只要捨得掏電費,這可是007(早0點到晚0點一周七天)模式都能幹的「編程怪物」!
先別急著恐慌,擔心以後連「996」的機會都沒了,引入AI對於大部分程序員來說,更真實的場景可能是這樣的:
首先,大部分機械的工作都會在機器的幫助下更高效率地完成。互聯網企業要通過越來越多的運營活動實現營收,程序員的任務也會越來越流程化,而AI可以比較高效地完成基礎源代碼開發,替代這部分機械勞動,緩解開發者的工作壓力。
同時,軟體工程師的職位重心開始向創造力和興趣轉移。過去的產業膨脹器,很多人選擇從事變成工作只不過是為了一份高的薪水和光環,經過幾個月的培訓就能上崗,但對於鑽研技術、產品創新毫無興趣。未來,這種經過短期培訓就能上手的低技能程序員崗位都會被機器替代,而高技能、高創造性的工程師的價值,則會史無前例地提高,自然也就不必每天在電腦前枯坐十幾個小時。
這樣,程序員這個職業本身的「新陳代謝」也會減慢, 職業生命隨之延長。
在很長一段時間內,快速的技術更新和高強度的工作壓力,使得互聯網企業更願意招收那些年輕的開發者。但他們的職業生涯很快就會到達瓶頸,開發速度開始慢下來(儘管實務經驗也在增長),但由於機械工作只會越來越多,就會被更年輕的勞動者所取代,進而被公司「優化」掉。
如果把那些損耗型、體力型的工作統統丟給機器去做,顯然程序員們的價值就不再是產出代碼的「生產工具」,考核標準也不再是是否忠實有效地完成了KPI,而是「自由意志」和創造思維的體現。
從這個角度看,AI消融的是那些非創造性的工作壁壘,對於早已疲憊不堪的程序員群體來說,對技術的期待應該會遠遠大於被技術淘汰的恐懼。因為唯有如此,才能從胡蘿蔔加大棒的「騾子」命運中逃離出來,去追尋工作和生活的樂趣與價值。
用一句老掉牙的話來說,工作也好,生活也好,讓我們給歲月以文明,而不是給文明以歲月。
更多精彩,敬請關注矽谷洞察官方網站(http://www.svinsight.com)
※號稱「全球首家」端到端自動駕駛,是實現還是噱頭?| 矽谷最新
TAG:矽谷密探 |