本刊綜合
前段時間,英特爾公司推出了機器編程研究系統ControlFlag,這是全球首個自我監控系統,可以自主檢測代碼中的錯誤,目前仍處于早期階段。在初步測試中,這個系統利用超過10億行未標記的產品級別代碼進行訓練并學習新的缺陷。英特爾首席科學家表示,這款工具可以大幅減少測試和修復bug所需的時間和成本。
那么,機器編程究竟是什么?它目前發展如何,會在未來給世界帶來怎樣的改變?它會讓未來的程序員丟掉飯碗嗎?
代碼將不再是“手工藝品”
如今,幾乎各個行業都離不開編程。傳統編程看似簡單,其實對人的要求很高。盡管大多數人可以熟練使用自然語言表達自己的想法,但是讓其去編程卻不是很容易,那需要思想和底層原理支撐。
據統計,全球78億人中,只有2700萬人會編寫代碼,占比不到1%。根據美國非盈利組織code.org的數據,美國有50萬個編程人員崗位空缺,歐盟目前只有10%的編程人員受過計算機科學專業訓練。
“編程的基本規則往往需要通過長時間的學習和訓練才能掌握。如同好的作家不一定是好的編劇,作家描寫人的內心活動可以用‘心如刀扎這類語言進行描述,但是編劇需要把這種情緒明確細致地一一描述出來,這樣演員才可以栩栩如生地表演出來。”西安電子科技大學電子工程學院教授吳家驥介紹說。
傳統編程是基于規則和邏輯把人的意圖按照編程語言規范化實現的過程,程序員就像傳統工廠流水線上的員工和農場里的農民一樣,只需按照定義好的標準接口和編程規范,把需求意圖拆解為正確的邏輯,用代碼寫出來,所以程序員也被稱為“碼農”。
然而,在軟件飛速發展的今天,開發和維護卻依然是既耗時又容易出錯的工作。英特爾研究院機器編程研究部門總監賈斯汀·戈茨利希認為,這些從軟件誕生之日起就困擾著一代又一代程序員的問題,其實并非無解,他說,“相信我們能創造一個人人都是軟件開發者的社會,屆時機器將會承擔‘編程部分的工作,讓代碼不再是‘手工藝品。所以,我們將其稱為‘機器編程。”
發展尚處于早期
通過機器學習和其他自動化方法,設計可以自動編寫軟件的機器編程并非今天才有,20世紀50年代就已有學術機構開始涉足機器編程的研究。
在賈斯汀·戈茨利希看來,與以往不同,現在的機器編程融合了機器學習、形式化方法、編程語言、編譯器、計算機系統等多個領域。它所使用的自動編程技術,既包含精確方法(比如形式程序合成),也有概率方法(比如可微分編程)。機器編程汲取了我們迄今為止獲得的所有軟硬件知識,站在了歷史的拐點上。新的機器學習算法、新硬件與優化硬件、海量而多樣的編程數據,這三者是發展機器編程的要素。
微軟亞洲研究院首席研究員樓建光指出,機器學習算法的進步,算力的高速發展以及海量的編程數據,讓機器編程的發展進入了新的拐點。不過機器編程發展尚在早期,其難點在于目前機器還沒有組合與泛化的能力,只能進行簡單的編程,稍微長一點的程序就無法完成。復雜程序是由簡單程序組合而成的,而程序組合中有很多邏輯和思想,現在的人工智能沒有組合能力,缺乏邏輯思維。
盡管機器編程的發展尚在早期,但從全球機器編程的進展看,不同領域有不同進展,在特定領域,已經取得不錯的突破。但在通用領域,尚未取得實質性突破,仍需要產、學、研各界齊發力,加速機器編程的突破。
當下,在機器編程的賽道上,越來越多的公司涌了進來。除了微軟、谷歌、臉書等,在中國包括百度以及一些創業公司也加入了機器編程的研發行列,不同的公司有不同的技術路線,但他們的每一步探索,都會對未來機器編程產生深刻的影響。
機器編程將創造大量就業機會
據統計,全球程序開發人員2019年約為2390萬人,每年平均增加約100萬人,預估2024年將達到2870萬人。有人不禁擔憂,現在學計算機以后會不會產生人才飽和,未來機器編程會取代程序員嗎?
“未來機器編程不僅不會取代程序員,還會創造出大量就業機會,可能多達上百萬個。這是由于機器編程大幅降低了編程門檻,可以讓更多的普通人參與編程,實現更多的自動化工作流。”遠望智庫AI事業部部長、圖靈機器人首席戰略官譚茗洲表示。
英特爾有個愿景:只要你能以機器可理解的方式表達你的“意圖”——可能是用自然語言,或者可視化的圖表,甚至是打個手勢——機器編程就會幫你開發屬于你自己的軟件。
對此,譚茗洲解釋道:“未來需要更有效的編程意圖概要設計,把大的意圖拆解為更小的意圖,每個意圖更容易讓機器理解,進而可以讓機器人工智能編寫代碼。未來機器人工智能編程可能以一種交互式的方式進行,如程序設計者通過與人工智能編程機器意圖交互和所見所得的反饋,實現機器編程。”
專家預測,從當前人工智能相關技術的發展來看,機器編程得到廣泛應用可能仍然需要幾十年以上,因為廣泛應用意味著機器能更準確地了解人類的意圖,但是人類自然語言的表達本身就會存在很多不確定性。因此機器編程也并不可能完全替代程序員,特別是在需要多重嵌套的邏輯和多分支的邏輯場景下,因為這些場景需要更確定性的邏輯分析,顯然對機器來說是比較困難的。機器編程可能首先大規模應用于整體邏輯能夠拆解為多個簡單邏輯的場景,如工作流固定的場景或簡單的計算場景,抑或是邏輯簡單但精確性要求高的場景,如財會、醫療、金融等領域。
譚茗洲指出:“要想在人工智能時代做到人機共存,需順應技術的發展趨勢,讓機器去做其擅長的部分,例如軟件開發中,枯燥的活兒由機器承擔,人們得以有更大的自由、靈活度以及更多的時間精力去創造,可以去從事設計和制造機器人的工作。”