發(fā)布于:2020-12-24 16:12:24
0
86
0
當我上大學時,我們不得不在計算機科學考試中手工編寫代碼。如果您在過去十年中的任何時候都學會了編碼,那么您可能會認為這聽起來很野蠻,效率低下,只是愚蠢。 而且你會是對的。 但是這里還有一個嚴重的問題:我們用于計算機編程的技術正在不斷發(fā)展,并且發(fā)展的非??臁?我很幸運,我的考試不涉及打孔卡。
編碼實踐的下一個重大革命可能比我們想象的要近,它涉及到幫助計算機自我編碼。 一些研究人員認為,通過利用自然語言處理和神經(jīng)網(wǎng)絡,我們可以在幾年內(nèi)將人類從編碼過程中徹底清除。
如果您是編碼人員,很高興得知他們是錯的。 我們將需要很長時間的人工編碼人員。 在本文中,我將解釋原因。
神經(jīng)網(wǎng)絡和編碼
首先,讓我們看一下新一代的編碼工具,看看它們能做什么。在編程中使用神經(jīng)網(wǎng)絡,機器學習和AI工具的想法已經(jīng)存在了數(shù)十年,但是直到現(xiàn)在,第一個可用的實用工具才出現(xiàn)。這些工具可以分為三種類型。
首先是旨在自動識別錯誤的工具。這一直是神經(jīng)網(wǎng)絡在編程中最成功的應用之一,對于某些編碼人員來說無疑是極其有用的??偛课挥谌鹗康墓綝eepCode在這種工具方面一直處于領先地位,但是即使他們的產(chǎn)品也有嚴重的局限性,我很快就會談到。
其次,有一系列工具旨在自己生成基本代碼,或者可以為程序員自動完成代碼。這些工具現(xiàn)已在許多流行的開發(fā)平臺上發(fā)布。 Facebook開發(fā)了一個名為Aroma的系統(tǒng),該系統(tǒng)可以自動完成小程序,而DeepMind開發(fā)了一種神經(jīng)網(wǎng)絡,該網(wǎng)絡可以提供比人類設計的更有效的簡單算法版本。
然后是神經(jīng)網(wǎng)絡在編程中最激動人心的應用:英特爾,麻省理工學院和喬治亞理工學院的團隊進行了這項研究。這些研究人員開發(fā)了一種稱為“機器推斷代碼相似性”或MISIM的系統(tǒng),他們聲稱該系統(tǒng)能夠以與NLP系統(tǒng)可以讀取人類生成的文本段落相同的方式來提取一段代碼的“含義”。
如果可以充分發(fā)揮其潛力,該MISIM系統(tǒng)有望成為一種革命性的工具。因為它與語言無關,所以系統(tǒng)可以在編寫代碼時讀取代碼,并自動編寫模塊以完成常見任務。在許多程序中,用于自動執(zhí)行云備份的許多代碼都是相同的,并且合規(guī)性過程對于許多編碼人員來說也是一個主要的時間浪費。
像MISIM這樣的系統(tǒng)有望使編寫代碼的過程比目前的效率高得多,但是它們?nèi)匀淮嬖诤艽蟮木窒扌?。讓我們來看一些?/span>
局限性
基于神經(jīng)網(wǎng)絡的編碼工具不太可能在短期內(nèi)取代人工編碼器。為了弄清為什么我們來看看這些工具的三種主要使用方式固有的局限性。
首先,旨在捕獲人類創(chuàng)建的代碼中的錯誤的ML和AI程序非常有用,但僅限于某種程度上。目前,您可能會很痛苦地意識到如果使用了其中一種程序,它們會產(chǎn)生大量誤報:人工智能認為可能是錯誤的功能,但不是。從信息安全的角度來看,這些工具謹慎行事的事實固然很好,但也表明它們了解現(xiàn)代編程復雜性的能力有限。
其次,Aroma和OpenAI的GPT-3語言模型之類的工具即使在自然語言的描述下也可以在人類的指導下制作出簡單的代碼。當給出有限的可控制問題來解決時,它們的表現(xiàn)非常好,但是(到目前為止)無法查看設計簡介和制定最佳方法。
我上面提到的第三種工具-MISIM及其相關系統(tǒng)-無疑是神經(jīng)網(wǎng)絡在編碼中的最具創(chuàng)新性的用途,并且最有希望真正改變我們的工作方式。但是,應該指出的是,該系統(tǒng)仍處于開發(fā)的早期階段,距離公開測試版還有很長的路要走。因此,在獲得版本之前,我將保留對其限制的判斷。
最后,盡管如此,還值得指出的是,所有這些工具中都隱含著一個更根本的限制:創(chuàng)造力。
換句話說,盡管這些工具非常適合在提示時完成代碼,但它們無論是在編碼還是設計方面都不會贏得任何設計大獎。即使是最好的Web設計軟件也嘗試過并以失敗告終,無法實現(xiàn)AI驅(qū)動的美學工具-這有一個很好的理由:人類知道什么對其他人類看起來很好。
利用這種美學,在過去的幾十年中,創(chuàng)新能力一直是編碼范例的主要焦點。例如,這就是原因之一,為什么今天周圍許多最好的前端開發(fā)框架都如此面向視覺。人類非常擅長在看似無關的數(shù)據(jù)中發(fā)現(xiàn)模式,而人工智能則擅長執(zhí)行重復,耗時的任務。
合作與創(chuàng)造力
這種無法創(chuàng)建新解決方案的原因是神經(jīng)網(wǎng)絡最終不會取代人類的原因。相反,我們需要確定哪些任務最好由AI來完成,哪些任務最好由人類來完成,然后利用這兩者的優(yōu)勢構(gòu)建協(xié)作的編碼方法。
做到這一點有兩種明確的方法。一種方法是使用AI編碼工具以比我們的教育系統(tǒng)目前更靈活,更有效,更有針對性的方式培訓人類開發(fā)人員。例如,通過提供有關在編碼時保護真實系統(tǒng)的詳細指導,可以將自動化推薦系統(tǒng)用于為初學者教授編程安全性。
其次,在跟蹤人類編碼人員的活動并提高其工作效率方面,人工智能顯示出了巨大的希望。一個很好的例子是許多公司現(xiàn)在使用的自動發(fā)票,其中使用ML系統(tǒng)來跟蹤人類員工的活動。的確,為每個人類程序員提供一個AI助手來學習他們的工作方式,然后根據(jù)他們以前的解決方案提出建議,將對大多數(shù)開發(fā)人員帶來極大的好處。
第三,像MISIM這樣的系統(tǒng)即使不能完全自動執(zhí)行代碼編寫,也可能會有一點出乎意料的好處:它們可以用來重寫遺留系統(tǒng)。由于MISIM之類的工具與平臺無關,因此它們可能會自學成語,以了解諸如COBOL之類的古老(現(xiàn)在已經(jīng)很模糊)的編碼語言,然后以可用格式(如Python)重新編寫這些程序。您問誰仍在使用COBOL?好吧,美國政府。
所有這些方法并不試圖用機器類似物代替人類編碼器。實際上,它們?nèi)家圆煌姆妒綖橐罁?jù):在編碼方面,人與機器可以作為同事而不是競爭對手一起工作。
底線
這聽起來像是烏托邦的愿景,但放眼望遠,您會發(fā)現(xiàn)這是非??尚械摹T谠S多方面,編碼中使用AI和ML工具的出現(xiàn)反映了圖形編碼工具甚至是編程語言本身的先前開發(fā)。您的前端開發(fā)工具和python腳本都不會在根本上與您的硬件進行交互:所有事情,我們都忘了,所有這些都需要轉(zhuǎn)換為二進制機器代碼。
將編碼視為“翻譯”的過程現(xiàn)在可能已經(jīng)過時了,但這確實可以為我提供培訓。二十年前,我們被明確教導如何將代碼轉(zhuǎn)換為匯編語言。如今,這種方法似乎完全是浪費時間。
最終,這就是AI編碼工具的開發(fā)所尋求擴展的。這里的最終目標是,像MISIM這樣的系統(tǒng)將能夠?qū)τ嬎銠C程序進行描述,甚至甚至是要解決的問題的描述,并能夠自行生成程序。但是請務必記住,描述仍將由人類給出。