每日最新頭條.有趣資訊

重新定義程序員職業,FB推出代碼推薦工具Aroma

乾明 發自 凹非寺

量子位 出品 | 公眾號 QbitAI

解放程序員,Facebook是認真的。

這一社交網絡巨頭在其官方部落格上宣布,推出面向程序員的工具Aroma

直擊程序員想實現功能,而不知道如何寫代碼的痛點。

它能幫助程序員輕鬆地找到可以“參考使用”的代碼,節省他們日常開發工作流程中的時間和精力。

比如,一個安卓程序員想要了解其他人如何解碼手機中的bitmap,他可以使用下面的這些代碼直接進行搜索:

然後,Aroma會給出一些代碼推薦:

這段代碼來自與五個實現類似功能的代碼,但是去除了相關細節,以便程序員更好地參考。

除此之外,Aroma也能夠集成在編碼環境中。

Facebook表示,使用這一工具,程序員再也不用像原來那樣,自己手動瀏覽幾十個代碼搜索結果了。

哪怕代碼庫非常大,它也能在幾秒鐘內給出推薦,並且不需要提前進行模式挖掘。

現在,Facebook已經將其用到了自己內部代碼庫中,並為其一些開源項目創建了Aroma版本。

這一工具亮相之後,便引發了巨大的關注。

甚至有人在Twitter上評論稱,可以重新定義程序員這一職業。

Facebook是如何做到的?

給程序員推薦代碼

用Aroma給程序員推薦代碼,主要分為3個階段:

第一,基於特徵的搜索。

首先,Aroma會解析語料庫中的每個代碼,並創建其解析樹,並將代碼集索引為稀疏矩陣。

然後,從每個代碼的解析樹中提取一組結構特徵。這些結構特徵都是經過精心選擇的,可以捕捉每個代碼的用法、調用方法和結構信息。

進而根據每個代碼的特點,為其創建稀疏向量。

最後,所有代碼的特徵向量構成索引矩陣,用於搜索檢索。

當一個程序員編寫新的代碼時,Aroma會以上述的方式創建一個稀疏向量,並將該向量與包含所有現有代碼的特徵向量的矩陣相乘。

點積最高的前1000個代碼會被檢索出來,作為推薦代碼的候選。

儘管代碼語料庫可以包含數百萬種代碼,但由於稀疏向量和矩陣的點積能夠非常高效的實現,這種檢索的速度會很快。

第二,重新排序和聚類。

通過檢索得到推薦代碼的候選集之後,接下來就是對其進行聚類。為了做到這一點,Aroma要先根據候選的各個代碼和查詢代碼的相似性來對它們進行重新排序。

因為稀疏向量隻包含關於存在哪些特徵的抽象信息,所以點積分數低估了代碼之間的實際相似性。

因此,Aroma對方法語法樹進行修剪,去掉方法主體中不相關的部分,隻保留與查詢片段最匹配的部分,並根據候選代碼片段與查詢的實際相似性對其重新排序。

在獲得了最後的排序列表之後,Aroma會運行一個迭代的聚類算法來尋找相似的代碼片段,並在創建代碼時推薦額外的代碼語句。

第三,用交叉算法創建代碼進行推薦。

交叉算法的工作原理,是將所有推薦代碼中的第一個代碼片段作為“基礎”代碼,然後與其余的代碼進行對比,迭代地對其進行“修剪”。

比如下面的這幾段代碼,每一個都有特定於其項目的代碼,但都包含公共的代碼。

第一段代碼:

第二段代碼:

基於上述的方法,Aroma會對第一段代碼和第二段代碼進行比較,來找到公共代碼。第一段代中關於ImageView的代碼,沒有出現在第二段代碼中,因此將被刪除。結果如下所示:

然後,將得到代碼與第三段代碼,第四段代碼進行比較……

修剪之後剩下的代碼,就是所有方法中常見的代碼,它將成為最後被推薦的代碼。

其他被推薦的代碼,也是以這樣的過程創建出來的。

此外,Aroma的算法也可以確保這些推薦彼此之間有很大的不同,因此程序員可以看到幾個不同的代碼,來學習各種各樣的編程模式。

程序員們的擔憂

雖然這一工具受到了不少程序員的好評, 但也有一些程序員表達了不一樣的觀點。

有人在Hacker News上表示,這也許就是自己作為程序員職業生涯結束的開始。

也有人說,這個工具似乎是試圖強迫機器學習解決實際上沒有人有問題的例子。

他說,很多人搜索習慣用法的主要用例,就是知道如何進行高級別的重構,而不是獲得相似的代碼。

此外,也有人擔憂有人寫錯了代碼,它會不會在其他代碼庫中大肆傳播……

你覺得呢?這一工具,對於程序員來說,影響幾何?歡迎在評論區給出你的看法。

傳送門

Aroma論文鏈接:

Aroma: Code Recommendation via Structural Code Search

https://arxiv.org/abs/1812.01158

訂閱AI內參,獲取AI行業資訊

加入社群

量子位AI社群開始招募啦,量子位社群分:AI討論群、AI+行業群、AI技術群;

歡迎對AI感興趣的同學,在量子位公眾號(QbitAI)對話界面回復關鍵字“微信群”,獲取入群方式。(技術群與AI+行業群需經過審核,審核較嚴,敬請諒解)

誠摯招聘

量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復“招聘”兩個字。

喜歡就點「好看」吧 !

獲得更多的PTT最新消息
按讚加入粉絲團