還記得軟件席卷世界的時(shí)候嗎?一個(gè)最近比較流行的觀點(diǎn)是,人工智能正在席卷各類軟件。過去,谷歌的首席執(zhí)行官桑達(dá)爾·皮查伊(Sundar Pichai)談到了“自動(dòng)編寫自己”的軟件。有些人認(rèn)為軟件開發(fā)的工作只是比創(chuàng)造不斷重復(fù)代碼片段復(fù)雜一點(diǎn),那么現(xiàn)在,人工智能的快速發(fā)展可能會(huì)讓軟件工程師們集體失業(yè)。
傳統(tǒng)上,開發(fā)人員編寫軟件有著一系列固定的規(guī)則,例如:如果a發(fā)生,那么就進(jìn)行b操作。人類碼農(nóng)指導(dǎo)著機(jī)器,這是軟件1.0時(shí)代。但在軟件2.0時(shí)代里,人們認(rèn)識(shí)到,基于深度學(xué)習(xí)研究的進(jìn)步,我們可以構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò),來學(xué)習(xí)需要哪些指令或規(guī)則才能獲得預(yù)期的結(jié)果。特斯拉人工智能總監(jiān)安德烈·卡帕西(Andrej Karpathy)等人是2.0時(shí)代的支持者,他們提出的論點(diǎn)是,未來里,我們將不再需要親手編寫代碼。我們只需要找到數(shù)據(jù)并將其輸入機(jī)器學(xué)習(xí)系統(tǒng),一切就完成了。在這個(gè)場景中,軟件工程師的角色將轉(zhuǎn)變?yōu)?ldquo;數(shù)據(jù)監(jiān)管員”,或是“數(shù)據(jù)賦能者”。
然而,軟件工程不會(huì)很快消失。即使軟件工程師2.0、數(shù)據(jù)科學(xué)家2.0這樣的新職業(yè)正得到不斷的發(fā)展,人工智能技術(shù)也會(huì)反過來增強(qiáng)軟件1.0時(shí)代工作者的能力。事實(shí)上,我們還不能確定軟件工程在不久的將來,是否會(huì)變得和今日完全不同。深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)系統(tǒng)中將會(huì)為我們提供幫助,但它不會(huì)完全取代我們。
機(jī)器學(xué)習(xí)將如何塑造軟件開發(fā)?
這將是一個(gè)全新的世界,但我們并不是活在電視劇里。事實(shí)上,一般的智能辦公室助理已經(jīng)能安排一天的日程,并啟動(dòng)電話會(huì)議。甚至有些AI支持的系統(tǒng),可以為企業(yè)生成商標(biāo),并根據(jù)反饋?zhàn)詣?dòng)改進(jìn)商標(biāo)。
今天,手機(jī)會(huì)自動(dòng)檢查拼寫并提示下一個(gè)單詞。在編寫代碼時(shí),類似的工具也會(huì)高亮潛在的錯(cuò)誤。例如,從事結(jié)對編程(Pair programming)的人自然會(huì)預(yù)想到軟件2.0對他們工作方式的影響。考慮到機(jī)器學(xué)習(xí)和會(huì)話接口方面的進(jìn)步,可以想象,未來的一臺(tái)機(jī)器就能撐起結(jié)對編程任務(wù)的半邊天。
多年來,我們一直使用自動(dòng)化工具來節(jié)省編寫模板代碼的時(shí)間。現(xiàn)在,AI驅(qū)動(dòng)的助手工具也越來越頻繁地出現(xiàn)在更加復(fù)雜的軟件開發(fā)中。它們以增強(qiáng)式集成開發(fā)環(huán)境的形式出現(xiàn),為人們推薦更好的代碼組合。
人工智能的角色
讓我們想象一個(gè)更高級的人工智能助手在未來發(fā)揮的巨大作用。在進(jìn)行編碼工作時(shí),你的AI同時(shí)會(huì)通過分析確定你正在編寫的是哪種代碼,并且根據(jù)你的風(fēng)格來自動(dòng)完成其余的代碼撰寫。本質(zhì)上,人工智能助手更像是獲得你的授意,為你完成剩下的工作。
另一個(gè)人工智能助手將大有作為的領(lǐng)域是測試驅(qū)動(dòng)開發(fā)。與人類工作速度形成鮮明對比的是,一個(gè)機(jī)器同事可以快速進(jìn)行數(shù)百萬次的迭代,來找到解決測試的正確代碼段。擁有一個(gè)AI同事意味著,測試驗(yàn)證這項(xiàng)任務(wù)將交由AI完成。我們不用同時(shí)應(yīng)對編寫測試和測試驗(yàn)證這兩項(xiàng)工作,從而節(jié)約了在編碼上花費(fèi)的時(shí)間,讓我們有更多的時(shí)間用于理解和解決業(yè)務(wù)問題。
將來,軟件2.0甚至可能會(huì)幫助指導(dǎo)測試驅(qū)動(dòng)開發(fā),為測試提出建議,并給出它自己的原因。讓我們想象一下,營銷人員來到開發(fā)團(tuán)隊(duì),說他們想要這樣或那樣的功能。如果他們能以機(jī)器能夠理解的方式表達(dá)他們想要的東西,機(jī)器就能自動(dòng)選擇必要的測試,并提出下一步的建議。
強(qiáng)化,而不是代替
這引發(fā)了一個(gè)終極問題:機(jī)器會(huì)完全取代軟件工程師嗎?現(xiàn)實(shí)情況是,我們最多只能達(dá)到百分之九十幾的能力,而這仍然意味著1%的失敗和不可預(yù)測性。一個(gè)監(jiān)控系統(tǒng)需要用來確保所寫的代碼能夠正常工作。也許軟件工程師的新角色就是監(jiān)控代碼并幫助機(jī)器學(xué)習(xí)系統(tǒng)達(dá)到接近100%的準(zhǔn)確率。
既然我們已經(jīng)概述了可以想象的好處,下一個(gè)問題就出現(xiàn)了:軟件編程的哪些部分可以轉(zhuǎn)移到深度學(xué)習(xí)2.0框架中,哪些部分應(yīng)該保留在傳統(tǒng)的1.0框架中?時(shí)至今天,我們得到的結(jié)論是,這些深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)在監(jiān)督學(xué)習(xí)環(huán)境下表現(xiàn)得很好。如果向它們提供訓(xùn)練數(shù)據(jù),提供好的和壞的實(shí)例,那么它們就能學(xué)會(huì)正確地輸出。
但這些系統(tǒng)的好壞取決于訓(xùn)練數(shù)據(jù)的質(zhì)量。正如我的一位同事所指出的,改進(jìn)模型的性能常常包括改進(jìn)底層代碼、部署環(huán)境,以及改進(jìn)訓(xùn)練數(shù)據(jù)。事實(shí)上,一些機(jī)器學(xué)習(xí)系統(tǒng)因?yàn)檫^于優(yōu)秀,以至于它們實(shí)際上被訓(xùn)練數(shù)據(jù)中的人為缺陷所耽誤。
最終的一點(diǎn)想法
我們需要設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)來處理其他解決方案。軟件開發(fā)的某些部分能夠很好地進(jìn)行深度學(xué)習(xí),而另一些部分則不能。如果我們再看看結(jié)對編程,通過與他人共享控制權(quán),會(huì)有許多不同的方法來完成問題。軟件開發(fā)是一個(gè)不斷與其他同事協(xié)作的過程。每一對新的工作伙伴都會(huì)帶來不同的經(jīng)歷和解決問題的不同方法。組合越多,得到的解就越多。
在軟件2.0中,我們得到了一個(gè)新的AI伙伴來幫助開發(fā)人員更好地完成他們的工作。我們展望一個(gè)更有活力的人機(jī)合作環(huán)境,它將帶來更多、更有效的解決方案。這對每個(gè)人都有好處。
來源 | 網(wǎng)易智能
選自 | The Next Web
作者 | Hans A. Gunnoo
編譯 | 網(wǎng)易智能
參與 | 毅立