自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

重新定義程序員職業(yè),F(xiàn)acebook推出代碼推薦工具Aroma

新聞 開發(fā)工具
解放程序員,F(xiàn)acebook是認真的。這一社交網(wǎng)絡巨頭在其官方博客上宣布,推出面向程序員的工具Aroma。

本文經(jīng)AI新媒體量子位(公眾號ID:QbitAI)授權轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。

解放程序員,F(xiàn)acebook是認真的。

這一社交網(wǎng)絡巨頭在其官方博客上宣布,推出面向程序員的工具Aroma。

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

它能幫助程序員輕松地找到可以“參考使用”的代碼,節(jié)省他們?nèi)粘i_發(fā)工作流程中的時間和精力。

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

  1. Bitmap bitmap = BitmapFactory.decodeStream(input); 

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

  1. final BitmapFactory.Options options = new BitmapFactory.Options(); 
  2. options.inSampleSize = 2; 
  3. // ... 
  4. Bitmap bmp = BitmapFactory.decodeStream(is, null, options); 

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

除此之外,Aroma也能夠集成在編碼環(huán)境中。

重新定義程序員職業(yè),F(xiàn)acebook推出代碼推薦工具Aroma

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

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

現(xiàn)在,F(xiàn)acebook已經(jīng)將其用到了自己內(nèi)部代碼庫中,并為其一些開源項目創(chuàng)建了Aroma版本。

這一工具亮相之后,便引發(fā)了巨大的關注。

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

重新定義程序員職業(yè),F(xiàn)acebook推出代碼推薦工具Aroma

Facebook是如何做到的?

給程序員推薦代碼

重新定義程序員職業(yè),F(xiàn)acebook推出代碼推薦工具Aroma

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

***,基于特征的搜索。

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

然后,從每個代碼的解析樹中提取一組結構特征。這些結構特征都是經(jīng)過精心選擇的,可以捕捉每個代碼的用法、調(diào)用方法和結構信息。

進而根據(jù)每個代碼的特點,為其創(chuàng)建稀疏向量。

***,所有代碼的特征向量構成索引矩陣,用于搜索檢索。[[262075]]

當一個程序員編寫新的代碼時,Aroma會以上述的方式創(chuàng)建一個稀疏向量,并將該向量與包含所有現(xiàn)有代碼的特征向量的矩陣相乘。

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

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

重新定義程序員職業(yè),F(xiàn)acebook推出代碼推薦工具Aroma

第二,重新排序和聚類。

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

因為稀疏向量只包含關于存在哪些特征的抽象信息,所以點積分數(shù)低估了代碼之間的實際相似性。

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

在獲得了***的排序列表之后,Aroma會運行一個迭代的聚類算法來尋找相似的代碼片段,并在創(chuàng)建代碼時推薦額外的代碼語句。

重新定義程序員職業(yè),F(xiàn)acebook推出代碼推薦工具Aroma

第三,用交叉算法創(chuàng)建代碼進行推薦。

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

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

***段代碼:

  1. InputStream is = ...; 
  2. final BitmapFactory.Options options = new BitmapFactory.Options(); 
  3. options.inSampleSize = 2; 
  4. Bitmap bmp = BitmapFactory.decodeStream(is, null, options); 
  5. ImageView imageView = ...; 
  6. imageView.setImageBitmap(bmp); 
  7. // some more code 

第二段代碼:

  1. BitmapFactory.Options options = new BitmapFactory.Options(); 
  2. while (...) { 
  3.  in = ...; 
  4.  options.inSampleSize = 2; 
  5.  options.inJustDecodeBounds = false
  6.  bitmap = BitmapFactory.decodeStream(innull, options); 

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

  1. InputStream is = ...; 
  2. final BitmapFactory.Options options = new BitmapFactory.Options(); 
  3. options.inSampleSize = 2; 
  4. Bitmap bmp = BitmapFactory.decodeStream(is, null, options); 

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

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

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

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

程序員們的擔憂

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

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

重新定義程序員職業(yè),F(xiàn)acebook推出代碼推薦工具Aroma

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

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

重新定義程序員職業(yè),F(xiàn)acebook推出代碼推薦工具Aroma

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

重新定義程序員職業(yè),F(xiàn)acebook推出代碼推薦工具Aroma

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

傳送門

Aroma論文鏈接:

Aroma: Code Recommendation via Structural Code Search

https://arxiv.org/abs/1812.01158

 

責任編輯:張燕妮 來源: 量子位
相關推薦

2016-02-17 09:56:37

職業(yè)程序員

2012-12-11 09:31:19

程序員職業(yè)素養(yǎng)

2009-03-05 10:31:35

程序員IT行業(yè)職業(yè)規(guī)劃

2019-02-26 09:55:52

Java開發(fā)工具

2019-04-23 13:51:43

程序員技能開發(fā)者

2012-12-04 10:08:25

程序員

2020-08-17 07:00:00

混合云云計算技術

2009-02-23 13:00:17

程序員職業(yè)習慣

2013-07-25 09:47:40

程序員職業(yè)發(fā)展

2017-10-13 22:18:53

物聯(lián)網(wǎng)

2020-02-25 22:41:41

程序員技能開發(fā)者

2015-07-30 11:29:07

Web程序員CSS工具

2016-12-05 14:42:01

創(chuàng)造型職業(yè)程序員

2017-03-06 09:06:13

2017-03-01 20:31:35

程序員

2023-08-07 11:03:58

數(shù)字化戰(zhàn)略首席信息官

2009-11-05 11:42:45

Unix專家

2014-06-03 09:15:17

融合數(shù)據(jù)中心華三

2019-06-20 08:13:33

物聯(lián)網(wǎng)IOT技術

2015-11-12 10:32:13

程序員FaceBook
點贊
收藏

51CTO技術棧公眾號