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