1%
據統計,全球78億人中,只有2700萬人會編寫代碼,占比不到1%。美國有50萬個編程人員崗位空缺,歐盟目前只有10%的編程人員受過計算機科學專業訓練。
據報道,英特爾公司在2020年12月推出的機器編程研究系統ControlFlag是全球首個自我監控系統,不需要標記數據就能學習。在初步測試中,這個系統利用超過10億行未標記的產品級別代碼進行訓練,還可以自主檢測代碼中的錯誤,發現了許多過去被開發人員忽略的違規和異常。
英特爾首席科學家、英特爾研究院機器編程研究主任及創始人賈斯汀·戈茨利希認為,這款軟件能夠“大幅減少評估和Debug(修補漏洞)所需的時間和成本”。 英特爾研究院的研究人員發現,軟件開發者會花費大約一半的時間用來Debug,通過ControlFlag以及類似的系統,程序員有望大幅減少Debug的時間并把更多時間用于人類程序員最擅長的工作。
機器編程的實質究竟是搬運代碼模型,還是具有一定的自主開發特征?目前機器編程的主要方法有哪些,效能如何,具備怎樣的優勢?為什么有專家認為機器編程不僅不會取代程序員,還會創造出大量就業機會?
機器編程讓代碼不再是“手工藝品”
快速發展的科技領域幾乎離不開編程。傳統編程看似簡單,其實對操作者的要求很高。盡管大多數人可以熟練使用自然語言表達自己的想法,但是讓所有人都去學習編程卻并不是件容易事,這需要人的邏輯思維和對底層原理的理解作為支撐。
據統計,全球78億人中,只有2700萬人會編寫代碼,占比不到1%。根據美國非盈利組織code.org的數據,美國有50萬個編程人員崗位空缺,歐盟目前只有10%的編程人員受過計算機科學專業訓練。
“如同好的作家不一定是好的編劇,作家描寫人的內心活動可以用‘心如刀絞’這類語言進行描述,但是編劇需要通過場景搭建和細節設置把這種情緒細致地表現出來,演員才能沿著這個邏輯栩栩如生地表演出來?!蔽靼搽娮涌萍即髮W電子工程學院教授吳家驥介紹說,好的程序員就如同代碼“編劇”,往往需要通過長時間學習和實踐才能掌握編程的基本規則。
傳統編程是基于計算機語言規則和邏輯,利用規范化的編程語言,把人的意圖在計算機世界里實現的過程,程序員就像傳統工廠流水線上的員工一樣,只需按照定義好的標準接口和編程規范,把需求意圖拆解為正確的邏輯,用代碼寫出來。
然而,在軟件飛速發展的今天,軟件的開發和維護卻依然是既耗時又容易出錯的工作。賈斯汀·戈茨利希認為,這從軟件誕生之日就困擾著一代又一代程序員的問題其實并非無解,他認為:“我們能創造一個人人都是軟件開發者的社會,屆時機器將會承擔編程部分的工作即機器編程,讓代碼不再是‘手工藝品’?!?/span>
吳家驥向記者介紹,所謂機器編程,就是通過機器學習和其他自動化方法,設計可以自動編寫軟件的軟件,它涉及形式化方法、編程語言、編譯器、計算機系統等多個領域。機器編程所使用的自動編程技術既有精確方法(比如形式程序合成),也有概率方法(比如可微分編程)。
“人類的編程過程側重于邏輯業務,很少關心編程的語法、格式等。而機器編程實質是搬運代碼模型,因為目前還沒有成熟的編程機器可以達到自主開發軟件的程度,包括英特爾最新提出的ControlFlag。”吳家驥指出。
有助于大幅降低開發和維護成本
其實機器編程并非新生事物,早在上世紀50年代,就已經有學術機構開始涉足機器編程的研究。
在賈斯汀·戈茨利??磥恚斚抡前l展機器編程的好時機?!皺C器編程汲取了我們迄今為止獲得的所有軟硬件知識。今日與往時不同的是,我們站在了歷史的拐點上,我們現在有新的機器學習算法、新硬件與優化硬件、海量而多樣的編程數據,而這三者是發展機器編程的必備要素?!?/span>
目前機器編程的效能如何,具備怎樣的優勢?吳家驥介紹說,有了機器編程,軟件的開發和維護將有望實現完全自動化,編程人才的缺口、編程精確度有待提升等問題也迎刃而解。
據了解,機器編程的方法主要分為兩種:一種需要依賴編程領域專家知識和已經設定好的模板庫,即編程機器把專家制定的規則和大量模板庫組合起來,進而滿足人們的編程意圖。但其問題在于,專家的知識儲備和模板庫需要不斷積累更新。此外,編程中存在很復雜的邏輯和多樣化的語法差異,僅靠少數專家很難做到全面掌握所有信息,其制定的規則也無法做到近乎完美。
第二種是利用機器學習進行自我監督去適應編程規則,讓機器通過海量給定的代碼學習正確的編程規則,常用于進行程序代碼測試。這種方式包括兩個階段:模式挖掘階段,主要學習用戶指定的GitHub(一家開源平臺)存儲庫中的特殊編碼模式,當學習完成時,該模式將生成一個優先級字典,為后續機器編程提供知識儲備;掃描階段,主要是根據所學的特異性模式字典分析給定的源代碼存儲庫,當識別到異常模式時,將發出報警信息并為用戶提供可能的替代方案或進行自動校正。
“利用自我學習的方法可提高機器編程效率,這是由于自監督學習可以不斷自我完善自我進化,使得機器越來越聰明——在編程時可以快速把人類意圖或自然語言轉變為編程語言,在代碼調試過程中可以智能地提示錯誤?!眳羌殷K指出,機器編程的快速發展將有望大幅提高軟件開發和維護的效率,同時可以有效降低成本。
據統計,全球IT行業每年花費的1.25萬億美元軟件開發成本中,大約有50%用于Debug。目前,ControlFlag已經證實了其可以在廣泛使用的產品級代碼中發現隱藏的bug(漏洞),比如在分析cURL(程序員廣泛使用的實現互聯網下載的開源命令行工具)時,ControlFlag發現了一個以前沒有發現的異常,促使cURL開發者提出了更好的解決方案。
為人類程序員省出時間去創造
程序能夠自動化的高效構建,意味著程序員要失業了嗎?賈斯汀·戈茨利希的觀點是,機器編程真正過人之處是創造數千萬到數億個就業機會,并且專業程序員也不會被替代。
“未來機器編程不僅不會取代程序員,還會創造出大量就業機會,可能多達上百萬個。這是由于機器編程實質上大幅度降低了編程門檻,就如同電腦上的很多操作工具,它們的出現提高了人類的工作效率,可以讓更多的普通人參與到編程中,實現更多的工作流,即業務過程的部分或整體在計算機應用環境下的自動化?!边h望智庫AI事業部部長、圖靈機器人首席戰略官譚茗洲說。
英特爾公司曾表示,其開發機器編程的愿景是:只要你能以機器可理解的方式表達你的“意圖”——可能是用自然語言,或者可視化的圖表,甚至是打個手勢——機器編程就會幫你開發屬于你自己的軟件。
對此,譚茗洲解釋道:“未來需要更有效的編程意圖概要設計,把大的意圖拆解為更小的意圖,每個意圖更容易讓機器理解,進而可以讓機器編寫代碼。未來機器編程可能以一種交互式的方式進行,通過多輪對話以交互形式構造編程環境。”
專家預測,從當前人工智能相關技術的發展來看,機器編程得到廣泛應用可能仍然需要幾十年以上,因為廣泛應用意味著機器能更準確地了解人類的意圖,但是人類自然語言的表達本身就存在很多不確定性。因此機器編程不可能完全替代人類程序員,特別是在需要多重嵌套的邏輯和多分支的邏輯場景下,這些場景需要確定性更強的邏輯分析,顯然這對機器來說是比較困難的。
譚茗洲指出,機器編程可能會首先大規模應用于整體邏輯能夠拆解為多個簡單邏輯的場景,如工作流固定的場景或簡單的計算場景;亦或邏輯簡單但精確性要求高的場景,如財會、醫療、金融等。
“要想在人工智能時代做到‘人機共存’,需順應技術的發展趨勢,讓機器去做其擅長的部分,例如軟件開發中,簡單枯燥的部分由機器承擔,而人類程序員則可以有更大的自由度、靈活度、時間和精力去創造?!弊T茗洲說。