軟件產業升級(四):軟件開發已部分自動化,未來程序員會失業

在前面的文章當中,我提出了軟件產業分5級的概念,並詳細分析了中國在軟件產業一、二、三、四級的表現,同時給出了大量的實例進行形象化描述以加深大家的印象。感興趣的同學可以翻看我之前的頭條號發文。

軟件產業升級(四):軟件開發已部分自動化,未來程序員會失業

軟件產業分5級

通過分析得出的基本結論是中國在軟件產業1~3級技術上已經沒有重大障礙,並且商業上均取得了很大的成功。但是中國在軟件四級上的表現相對弱勢,商業份額只有不到5%,並且由於起步較晚的原因,錯過了軟件產業規範和標準制定的機遇,導致在軟件核心產業上拓展困難重重。

然而這是一個技術日新月異的時代,當前正處於一大批新技術爆發的前夜(引用任正非談話),相對應的軟件技術和產業必將在未來10~20年內發生翻天覆地的變化,隨著這些新技術對舊技術的更新換代,新軟件產業的技術標準和規範必將重新定義。中國必須要抓住這個難得的機遇,真正進入未來軟件產業的核心領域,掌握產業話語權。

軟件產業升級(四):軟件開發已部分自動化,未來程序員會失業

一定要站上主席臺

本文並不是一篇嚴肅的學術論文,不妨對未來技術增加一些超越當前技術能力的想象,畢竟未來一切皆有可能,也歡迎大家留言討論。

自動化編程可萬倍提升軟件開發效率

設計人員只需要將自己需要實現的功能設計好,並且告知自動化編程機器人,機器人將在幾分鐘之後將幾萬行代碼寫完並且提交給設計人員進行驗收。

軟件產業升級(四):軟件開發已部分自動化,未來程序員會失業

機器人編碼可能嗎?

這幾萬行代碼如果讓程序員小哥哥編寫,可能需要30個人辛苦加班一個月才能完成,而機器人只需要幾分鐘,並且幾乎沒有軟件bug(缺陷),不需要單元測試、集成測試、系統測試一堆的測試過程,直接進入驗收就行,編碼效率能夠提升萬倍以上。

軟件產業升級(四):軟件開發已部分自動化,未來程序員會失業

我一向認為現在的編碼是很低效的

機器人自動化編程可能嗎?真的不可能嗎?

愛立信和華為曾經對自動化編程進行過探索

編程自動化並不是一個新話題,早在十幾年前就有人提出這個概念,並做過一些有益的嘗試,只是當年自動化編程造成的負面效果比較大而且很難徹底解決。

這個試點自動化編程的公司正是當年的移動通訊設備巨頭愛立信,因為是直接競爭對手的關係,華為也試著趕了一把時髦嘗試過。為什麼這兩個公司對自動化編程感興趣?因為通訊設備的代碼實在太過龐大了,動輒幾億行,兩個公司又分別都擁有一隻幾萬人的軟件開發團隊,人力資源負擔相當沉重,大幅度提升軟件開發效率是非常合理的追求。

軟件產業升級(四):軟件開發已部分自動化,未來程序員會失業

這對老對手都具有相當的探索精神

當年愛立信內部文件披露,試點項目中機器人自動化編程的代碼行數佔比最高達到了93%,這是個非常驚人的數字,這充分說明了一個問題,起碼從技術上來說,讓機器人寫代碼不是完全不可能的。

但是在之後的項目交付過程中遇到了問題,就是當發現代碼有問題需要定位故障和修改代碼的時候,發現機器人沒辦法做自我糾錯,而且機器人寫的這些代碼,人類程序員很難讀懂,更加難以維護。同時,通訊設備的安全性和穩定性要求又都極高,可能因為一行代碼出問題就導致整個城市甚至一個國家的通許故障,完全交給機器人似乎有點不靠譜。

最終,愛立信考慮再三,也沒有把這部分機器人寫的代碼正式應用,只是作為一個技術研究項目,做完了就束之高閣。而華為有了愛立信的前車之鑑,很快也放棄了自己的相關計劃。

現在軟件開發過程已部分自動化

但是軟件研發的自動化就停止了嗎?當然沒有,愛立信之所以當年選擇了放棄,只是因為那個項目愛立信步子邁的過大所以扯到了蛋,任何技術都需要一步一步前進,一下跨度太大多半會失敗。

軟件整個開發過程其實包括設計、開發、測試這三個大過程,當年愛立信在設計和開發兩個過程同時用力,才創造了93%代碼自動化生成的成果,但是最終技術不成熟失控了。

軟件產業升級(四):軟件開發已部分自動化,未來程序員會失業

軟件開發三個主要流程

  • 測試首先被自動化了

大家意識到一步到位過於挑戰之後,紛紛轉移方向,華為從2008年左右開始暫時放棄做軟件編碼的自動化,轉去實現軟件測試的自動化。

軟件產業升級(四):軟件開發已部分自動化,未來程序員會失業

自動化測試過程

測試的自動化技術上相對容易實現,只要規定好輸入輸出條件,機器進行執行結果正確與否的判斷就可以。華為之所以選擇測試環節進行自動化,一方面當年具備實現的工程條件,另一方面也是因為龐大的測試工作量華為實在難以承受。

大家知道通訊設備的代碼質量要求極高,但是規模超級龐大,要保證這麼複雜系統的高度可靠,要執行的測試用例是按千萬來計算的,這要是人來一條條執行,得要多少人多少時間。更關鍵的是,代碼每天都有上萬人在編寫,誰能保證合入新功能的時候老功能沒被影響到還是好用的?所以每次產品發佈週期,新的老的上千萬的測試用例都要被反覆執行很多遍,測試執行人員真的是生不如死。

經過了前後七八年的建設,華為今天基本實現了新老代碼的測試用例自動化執行。規模龐大的測試用例改造成自動化不是一件容易的事,但是一旦改造完成,效率就實現了萬倍的提升,每時每刻不分晝夜,機器都在忠實地執行著軟件質量守護工作。

軟件產業升級(四):軟件開發已部分自動化,未來程序員會失業

自動化測試用例守護代碼質量,忠於職守

剛剛有一個程序員小哥哥提交了代碼,機器馬上針對這段代碼和相關功能進行了上萬測試用例的驗證,當場告訴小哥哥說你這代碼有問題,今晚上請加班改。小哥哥立即就尷尬了,如果自己不改好,別的小哥哥的代碼也就沒法好好運行了,好吧,只能加班改。但是如果沒有機器人忠於職守,這個軟件缺陷就可能遺漏到網上去,下一步就可能導致你打不了電話。

更進一步,華為又基於自動化建設了模擬現實環境的性能衝擊自動測試。我們使用的基站軟件版本上網前,上萬部手機在華為實驗室裡,由機器人控制著不斷地進行著各種場景的同時呼叫衝擊測試,夜以繼日,這種測試要持續幾個月的時間,這種性能測試靠人工是沒辦法實現的。

軟件產業升級(四):軟件開發已部分自動化,未來程序員會失業

進球了一起發個微信如何?需要機器人模擬測試

只有經過了這樣嚴酷考驗的軟件才允許交到移動運營商手裡給設備升級,進而給我們提供服務。相對十年前,華為設備的質量提升的不是一點半點,自動化測試起到了非常關鍵的作用。

那原來的測試執行人員怎麼辦?有些轉去做測試設計人員了,就是考慮怎麼再增加些測試方法保證設備更穩定可靠。少數技術不足的人員只能離開,沒有辦法,這是大勢所趨。

  • 簡單功能和標準化功能的軟件編程也被自動化了

既然全系統的軟件自動化非常困難,那麼不如先自動化其中一部分,既然自動化編程比例達不到93%,那麼先達到30%行不行?這個當然行。當你不去考慮整系統的全部編碼都實現自動化,而是隻考慮替代一部分功能,事情就變得簡單了。

很典型的例子是MFC的框架程序,MFC是C++語言編程使用的一種集成開發環境。在C語言編程時代,如果程序員想寫一個帶界面的程序是非常痛苦的,每個像素和線條都需要自己繪製,那些按鈕的立體效果?那些菜單攔的繪製?菜單點擊以後要不要變形?寫這些代碼真的很折磨人,更關鍵的是寫這些代碼沒有太大的意義,這些跟你想寫的真正算法沒多大關係。於是MFC框架就把這些全自動化了,同時還完成了程序類之間的聯繫關係構架,這麼說吧,你還沒開始做正事,框架先幫你寫了幾萬行代碼了,為的就是讓你聚焦真正的算法實現。這可以算作是最初的編碼自動化。

軟件產業升級(四):軟件開發已部分自動化,未來程序員會失業

MFC編程框架

還有一類典型的例子是VB編程和Excel配套的VBA宏編程,他們都定義了很多標準功能的“控件”和公共“函數”,當你要實現的算法沒有太多奇特要求的時候,你只需要引用這些定製好的功能,拖拖拽拽設置下入參就完成了。這些標準的功能“控件”和函數,背後都有成千上萬的代碼是機器幫你自動生成的。

軟件產業升級(四):軟件開發已部分自動化,未來程序員會失業

Excel內置了很多標準函數和控件

後來的腳本類編程語言也是如此,比如Python。現在程序員寫的一行行的執行腳本,其實後臺有大量的代碼是機器人自動生成自動運行的。

但是為什麼像華為這種大型企業,還有大量的使用C語言編程的程序員呢?答案是他們做的軟件算法是這個星球上全新的算法,沒有現成的控件和函數可以用,他們本身就是在創造那些新函數和控件。這種創造性的勞動暫時是沒有辦法去自動化的,因為機器人完全不知道你想要的做什麼。

測試環節被自動化了,一部分標準功能的函數控件也被機器人代勞了,但是人類還是不能被滿足,最理想的狀態是我只把我的意圖告訴機器人,我最好一行代碼也不寫,這麼貪心?有辦法嗎?

未來軟件自動化可能的途徑

人類真的想實現一行代碼也不寫就完成自己軟件產品大作的理想,著急是不行的,還是得一步一步來。

我們知道,整個軟件開發的過程,比較通用的模型可以簡化為下圖:

軟件產業升級(四):軟件開發已部分自動化,未來程序員會失業

軟件開發V模型

最頂部的產品規劃和需求分析,那是真正的智人活動,是我們作為人類才具備的靈魂目的性和驅動力活動,關係到我們要做什麼和為什麼要做的問題。這一部分暫時先不考慮讓機器人介入,因為我不敢啊。

而這個圖裡面的右邊,根據上一節的分析,整個測試過程和一部分的編碼過程已經被自動化了,剩下沒有自動化的主要是左面的部分。如果一次性考慮將左面的四個步驟全部自動化掉,恐怕會陷入愛立信那種步子邁的過大扯到蛋的情況,所以,最好一步一步的來走。

我們首先應該考慮的是將偽代碼自動轉換成代碼。其實在我們在觀察程序員寫的一個典型的函數的時候,我們發現,裡面有大段的跟算法沒有直接關係的東西,比如變量的定義和賦值,還有內存的申請歸還一類。反正我在寫這部分的時候是很崩潰的:

軟件產業升級(四):軟件開發已部分自動化,未來程序員會失業

還有一堆的循環和判斷條件,真正有用的算法其實就那兩句,比如這個:

軟件產業升級(四):軟件開發已部分自動化,未來程序員會失業

所以能不能先從這裡入手,把這些給自動化掉,或許這裡需要發明一種更高級一點的編程語言,讓我們聚焦於算法本身,而不是聚焦於那些繁瑣的準備工作。誰先發明這種編程語言,自然可以在未來的軟件產業中呼風喚雨。

偽代碼直接翻譯成編程語言如果實現了,純粹的程序員碼農們注意了,如果不能提升自己,失業就不遠了。

如果我們成功把偽代碼變成了能夠自動化生成的,然後就可以考慮下能不能把我們的概要設計也變得輕鬆一點。恐怕這需要發明一種更高明的概要設計的工具才行,現在的概要設計做出來其實是給人看的,並不是給機器看的,機器拿過去根本看不懂。

軟件產業升級(四):軟件開發已部分自動化,未來程序員會失業

概要設計有不少類型的工具

當然,這種概要設計的工具想讓機器人明白你要做什麼,是比較的困難。等概要設計也被自動化以後,再考慮把系統設計也自動化了如何?技術難度當然是一步比一步更大,但是結果也非常可怕。

馬化騰只需要對機器人說:我需要個微信搶紅包的功能,一人發多人搶,搶到的金額隨機分配給每個人。

機器人:好嘞,稍等。

幾分鐘後,微信紅包軟件發佈了,馬化騰第二天就會把他的軟件團隊90%的人都解僱,剩下幾個人純粹是怕自己寂寞而已。

軟件自動化對產業的影響

軟件底層自動化,首先就可能會導致整個軟件一層產業的極大萎縮甚至於完全消失。最沒用技術含量的工作首先被替代,這也符合工業發展的普遍規律。

這種情況下的印度軟件外包產業岌岌可危,未來沒有核心技術的國家,想給別人代工賺點辛苦錢也做不到了。

隨著軟件編程層級的逐步提升,軟件二三四級也將發生鉅變。軟件二級由於應用為主,並不涉及複雜的算法,所以軟件二級的編程人員也將大量消失,剩下的也許只有那些能夠提出微信錢包這種新功能構想的人,因為軟件二級最值錢的只是這些創意想法。

軟件三級由於嵌入了大量的行業複雜算法,比如5G協議,未來也許只剩下了那些設計協議和算法的人,不懂專業知識的純軟件實現人員將大部分消失。

軟件四級將出現全新的編程語言和編程工具,誰發明這些語言和工具,誰就是未來的軟件之王。希望中國在新的軟件領域中可以引領技術發展。

預告:對未來的軟件產業來說,編程自動化也只是冰山一角,未來會產生全新的編程理念比如量子計算機編程,或者全新的編程方式比如腦意識編程,這些更有可能是未來軟件產業的重中之重,感興趣的同學請關注我的後續發文。


分享到:


相關文章: