為什麼說機器程式設計是你要投入其中的下一種技術?

一批新興的工具正使用機器學習及其他方法使軟體開發過程的一部分實現自動化。比如說,GitHub上個月推出了這樣一個工具:可以在程式設計師開發程式碼時給出建議。亞馬遜也建立了CodeGuru,這種工具有助於自動查詢軟體中的效能瓶頸。Facebook則有Aroma,它也可以提供程式碼方面的建議。我自己在英特爾實驗室的團隊則構建了一款工具(目前僅供我們內部使用),可以自動檢測程式碼中的錯誤。

為什麼說機器程式設計是你要投入其中的下一種技術?

這種自動化程式設計被稱為“機器程式設計”。它最有趣的功能之一是“程式碼語義相似性”,試圖自動確定兩個程式碼片段是否表現出相似的特徵或實現相似的目標。由於計算領域的進步、可訪問“大程式碼資料”(比如IBM/MIT新的CodeNet 專案,包含約1400萬個程式碼樣本)以及新的機器學習演算法,這在最近成為了可能。

透過利用程式碼語義相似性的力量,業界得以開發出自動化系統,幫助CIO們確保開發團隊在軟硬體複雜性增加的情況下仍保持同樣水平的生產力,同時解決軟體開發人才短缺、應對職場倦怠。

支援語言到語言的轉換

程式碼語義相似性還可用於程式語言之間進行轉換的工具(即轉譯器)。在過去,將程式的原始碼從一種程式語言轉換成另一種程式語言的軟體系統遙不可及。然而,對於歷來使用更專業的傳統語言進行程式設計的大型全球組織而言,轉譯方面的最新進展可能意義重大。

想象一下這樣一個世界:無需花費數年時間即可將整個組織的程式碼庫從COBOL手動轉換成 Python,機器程式設計系統可以為您完成所有工作——只需幾天時間。這類系統的雛形早已存在,甚至如今就已用在一些科技公司中,比如Adobe。比如說,據我所知,Adobe Photoshop使用驗證提升(verified lifting),將C/C++轉換成當前版本的Halide。

機器推斷程式碼相似性(MISIM)之類的程式碼語義相似性系統不僅可以幫助組織更新整個程式碼系統,還將擴大人才庫。隨著更多的開發者熟悉這些新語言(比如,從FORTRAN遷移到Python),將組織的程式碼庫從當今軟體開發者不太瞭解的舊式遺留語言更新為現代程式語言將使人員招聘變得更容易。CIO們甚至可能看到程式設計錯誤減少,因為新時代的語言往往更容易上手,更容易在內部處理大部分系統複雜性。

提升新手開發者,有助於填補開發者空白

程式碼語義相似性系統還可以建議程式碼。比如說,前面提到的GitHub Co-Pilot旨在瞭解某個軟體的意圖,然後建議改進(或更完整)的版本以幫助開發者。

如果充分發揮潛力,這類程式碼建議系統有望透過為新手開發者和專家開發者提供改進的替代方案,以提高軟體質量和生產力。最終,這將幫助CIO及其IT部門跟上軟體需求,無需僱傭額外員工或花錢在新資源上。這些程式碼建議系統的最終願景是提高所有開發者的生產力。

語義相似性系統還可以與開發者協同工作,自動檢測程式碼中的錯誤。

結束語

由於軟硬體具有的異構性,軟體開發領域變得日益複雜。預計開發團隊也會越來越快地開發軟體。對於CIO及其監督的軟體開發而言,機器程式設計可能是唯一經濟上可行的方法。因此,現在正是開始試用新興機器程式設計工具,瞭解如何在貴組織中最有效地實施它們的合適時機。