當(dāng)你打開(kāi)谷歌輸入想要搜索的事物時(shí),它總會(huì)自動(dòng)猜想你可能尋找的關(guān)鍵詞。輸入Wi它可能自動(dòng)聯(lián)想Wikipedia(維基百科),輸入Bra它會(huì)聯(lián)想到 Brad Pitt(布拉德·皮特)。有時(shí)候這些自動(dòng)填寫(xiě)可能與你想要搜索的完全不相關(guān),但大多數(shù)情況它還是非常準(zhǔn)確的,這為你的搜索提供了捷徑。
現(xiàn)在一支政府支持的科研小組想要為全世界的程序員在編寫(xiě)計(jì)算機(jī)代碼時(shí)提供相似的提示,也即在程序員完成編碼前猜想它們想要編碼的內(nèi)容。美國(guó)萊斯大學(xué)于本周表示,作為五角大樓的瘋狂科學(xué)部門(mén),美國(guó)國(guó)防部先進(jìn)研究計(jì)劃署(DARPA)對(duì)這個(gè)代號(hào)為PLINY的自動(dòng)填寫(xiě)編碼項(xiàng)目投資了1100萬(wàn)美元,這一項(xiàng)目是以第一部百科全書(shū)的古羅馬作者為名。“文字搜索預(yù)測(cè)是描述這一項(xiàng)目的最好比喻,”萊斯大學(xué)計(jì)算機(jī)科學(xué)學(xué)院院長(zhǎng)、PLINY項(xiàng)目首席調(diào)查員維韋克·薩卡爾(Vivek Sarkar)這樣說(shuō)道。“人們將能夠從一系列可能的解決方案中進(jìn)行挑選。”
這一項(xiàng)目包含來(lái)自萊斯大學(xué)、德克薩斯州大學(xué)奧斯汀分校、威斯康星大學(xué)麥迪遜分校以及源代碼分析工具制造商GrammaTech公司的研究人員。PLINY將從網(wǎng)頁(yè)里收集到的大量開(kāi)源代碼編入索引,從而形成一個(gè)強(qiáng)大的預(yù)測(cè)引擎,研究人員希望它可以預(yù)測(cè)編碼人員將輸入的代碼。從理論角度說(shuō),它應(yīng)該可以檢測(cè)漏洞或者安全隱患。
如果這一項(xiàng)目順利進(jìn)行,那么它或?qū)槟切┱也坏胶细癯绦騿T參與研究日益復(fù)雜的軟件項(xiàng)目的公司帶來(lái)福音。這是大量初創(chuàng)企業(yè),從趣味編程網(wǎng)站Codecademy 到試圖讓編程變得更簡(jiǎn)單的工具Light Table,都試圖解決的問(wèn)題。
PLINY并不是第一個(gè)旨在為程序員建立自動(dòng)填寫(xiě)系統(tǒng)的項(xiàng)目。微軟正在利用去年發(fā)布的插件Bing開(kāi)發(fā)助理進(jìn)行相似的研究。然而,薩卡爾表示PLINY是一個(gè)更雄心勃勃的項(xiàng)目。“大多數(shù)其它項(xiàng)目都是利用代碼結(jié)構(gòu)的知識(shí)進(jìn)行文字分析。”而薩卡爾帶領(lǐng)的研究小組試圖開(kāi)發(fā)的軟件不僅可以分析文字,還會(huì)分析代碼里所表達(dá)的概念,無(wú)論程序員所編寫(xiě)的是哪一種程序語(yǔ)言。薩卡爾希望PLINY可以自動(dòng)提示與提供程序員編寫(xiě)內(nèi)容無(wú)縫結(jié)合的代碼,它甚至可以糾正安全隱患和其它錯(cuò)誤。
然而,這并非易事。如果你曾有過(guò)使用微軟Office 97時(shí)代的Clippy(大眼夾)輔助工具的經(jīng)歷,或者瀏覽過(guò)“該死的自動(dòng)更正”(Damn You Autocorrect)博客,你就會(huì)意識(shí)到糾正這些預(yù)測(cè)系統(tǒng)有多困難。雖然谷歌是部分通過(guò)了解最常見(jiàn)的搜索術(shù)語(yǔ)從而實(shí)現(xiàn)預(yù)測(cè)搜索關(guān)鍵詞,但在編程世界里情況則有所不同。最常見(jiàn)的解決方案可能并不是最優(yōu)的解決方案。
薩卡爾承認(rèn)他們的科研小組面臨著巨大的挑戰(zhàn),尤其是確保高質(zhì)量的代碼和可用性方面。但他認(rèn)為鑒于為能源部和健康保健領(lǐng)域的其它應(yīng)用程序做過(guò)大數(shù)據(jù)分析的背景,他的研究小組正是迎接這一挑戰(zhàn)的最佳人選。他表示萊斯大學(xué)一直想要將部分機(jī)器學(xué)習(xí)算法應(yīng)用于軟件開(kāi)發(fā),DARPA恰好提供了實(shí)現(xiàn)途徑。
PLINY小組將首先分析網(wǎng)絡(luò)上的開(kāi)源代碼,主要是利用例如GitHub和 Sourceforge提供的代碼托管服務(wù),同時(shí)還將分析各種重大的開(kāi)源項(xiàng)目,例如Apache基金會(huì)管理的一些項(xiàng)目。最終,薩卡爾設(shè)想了一個(gè)可以索引企業(yè)所有專(zhuān)有軟件項(xiàng)目的企業(yè)版本。
研究小組還將建立一個(gè)為存儲(chǔ)和分析代碼專(zhuān)門(mén)設(shè)計(jì)的自定義數(shù)據(jù)庫(kù)系統(tǒng)。這個(gè)數(shù)據(jù)庫(kù)將提供對(duì)索引代碼進(jìn)行組織和劃分優(yōu)先級(jí)的途徑。這將幫助解決代碼質(zhì)量問(wèn)題。那些非常好的項(xiàng)目可以?xún)?yōu)先考慮,或者由特定程序員編寫(xiě)的代碼也具有優(yōu)先級(jí)。項(xiàng)目的最終成果可能類(lèi)似于谷歌的自動(dòng)填寫(xiě),但有用性要高得多。