本文根據(jù)洛凱科技 Aladdin 項(xiàng)目負(fù)責(zé)人 & TGO 鯤鵬會(huì)北京分會(huì)會(huì)員王泰在 TGO TALKS 上帶來的《未來的程序員 = 人工智能 + 軟件工程》的演講整理。王泰針對(duì)軟件開發(fā)中 70% 的時(shí)間是在 debug 的問題,提出了通過人工智能和產(chǎn)品化方式解決問題的方法。以下為王泰現(xiàn)場(chǎng)分享內(nèi)容,Enjoy: 大家好,我是王泰,來自于洛凱科技,目前是洛凱北京辦公室的一名技術(shù)管理者,也是我司 Aladdin 項(xiàng)目的項(xiàng)目負(fù)責(zé)人。 今天,我的演講會(huì)分成三個(gè)部分:
在開始之前,我們先來思考三個(gè)問題:
當(dāng)前,軟件已經(jīng)深入到我們的工作和生活當(dāng)中,大多數(shù)人都已經(jīng)無法離開軟件,可見當(dāng)今軟件普及程度有多高。那么請(qǐng)大家想想,我們的軟件工程足夠成熟了嗎? 我相信,當(dāng)我用反問的形式向大家提問時(shí),大家的心中肯定有些許不安,開始思考當(dāng)下軟件工程是不是還沒有那么成熟??梢姶蟛糠秩说男闹卸紱]有明確的答案,都明白我們的軟件工程還有許多可以改進(jìn)的地方。 那請(qǐng)大家再設(shè)想一下,一份代碼,從我們開發(fā)到交付需要經(jīng)過 Coding、Testing、Debugging 的過程。我們每個(gè)寫過代碼的人都知道,一般來說,Testing 加 Debugging 的時(shí)間遠(yuǎn)遠(yuǎn)大于我們 Coding 的時(shí)間。 可是你們知道它們的時(shí)間分配比例是什么樣的嗎? 在 總體來看,我們 Testing 和 Debugging 的時(shí)間,是 Coding 時(shí)間的 3 倍,甚至更多。 當(dāng)你們看到這份數(shù)據(jù)時(shí),是不是也回憶起自己坐在電腦前,痛苦 debug 的經(jīng)歷了呢? 就像上圖這幅漫畫展示一樣,我們程序員的生活就是在不斷地寫 Bug 與修 Bug 中度過。 因?yàn)榧词故莾?yōu)秀的工程師,他們也會(huì)面臨著同樣的問題——Testing 和 Debugging 的時(shí)間太長。而 Testing 和 Debugging 往往是最無聊、最令人討厭的事情。 因?yàn)樵谧?Debugging 的大部分時(shí)間中,我們只是反復(fù)地點(diǎn)擊鼠標(biāo)、跟蹤斷點(diǎn)、定位問題。這些工作日復(fù)一日的折磨工程師,一點(diǎn)點(diǎn)扼殺工程師們的創(chuàng)造力。 可是工程師應(yīng)該是當(dāng)今最富創(chuàng)造力的一群人,怎么能把時(shí)間耗費(fèi)在重復(fù)性如此之高的工作中呢? 在場(chǎng)的大部分人都做過工程師,而且你們一定都是非常優(yōu)秀的工程師,所以我猜測(cè)你們都嘗試過解決這個(gè)問題。也許通過“過程控制”,也許通過“軟件架構(gòu)”。這些做法都沒有問題,方法的確可以保障“過程”和“結(jié)果”更加可控。 但是我們花費(fèi)在 Debug 的時(shí)間,似乎并沒有明顯的減少。 現(xiàn)在,我再問一下,我們現(xiàn)在的軟件工程足夠成熟了嗎? 顯然沒有。 我們需要更多更有效的手段來減少 Debug 的時(shí)間,減少代碼缺陷,提高我們的工作效率,以及拯救程序員們?nèi)諠u稀少的頭發(fā)。 如果我們用人工智能,那么 Debugging 能更加智能嗎?能讓 Debugging 更自動(dòng)化嗎?能讓我們寫出效率更高、缺陷更少的代碼嗎? 我們可以先將 Debug 的過程分成兩部分:
首先,我們主要聊聊錯(cuò)誤定位的問題。 實(shí)際上,在很早之前就有人開始研究自動(dòng)化錯(cuò)誤定位。在沒有使用人工智能之前,自動(dòng)化錯(cuò)誤定位的手段包括基于頻譜的錯(cuò)誤定位方式——SBFL、基于變異的錯(cuò)誤定方式——MBFL 等等。 這些方法都是基于統(tǒng)計(jì)概率獲得的結(jié)果,它們的效果和原理各不相同,有些方法原理簡單執(zhí)行速度快,但效果有限;有些方法相對(duì)準(zhǔn)確率更高,可定位時(shí)間太長。 而且使用他們還需要一個(gè)前提——必須依賴單元測(cè)試的執(zhí)行結(jié)果,因此這些方法還沒有廣泛應(yīng)用。 當(dāng)前,我們 Aladdin 項(xiàng)目團(tuán)隊(duì)希望能讓所有的程序員都能體驗(yàn)上自動(dòng)化錯(cuò)誤定位的好處,使用上高效的錯(cuò)誤定位手段,為此我們嘗試去利用人工智能的方式改進(jìn)錯(cuò)誤定位的過程。 目前,我們結(jié)合了 Android 工程師工作的流程,在工程師調(diào)試時(shí),實(shí)時(shí)給出代碼的修改建議。 我們用人工智能的方法不僅縮短的錯(cuò)誤定位的時(shí)間,而且也將準(zhǔn)確率提高到 80%。同時(shí),我們還正在嘗試,讓程序員們可以不寫單元測(cè)試,就可以做錯(cuò)誤定位。 實(shí)際上,人工智能在提高工程研發(fā)效率上能做的事情遠(yuǎn)不止這些。也許你們已經(jīng)聽說過人工智能現(xiàn)在正在學(xué)習(xí)如何改 Bug,甚至學(xué)習(xí)如何寫代碼。 上圖是一段爐石傳說的 Python 代碼,這是北京大學(xué)軟件工程實(shí)驗(yàn)室使用 CNN 的方式自動(dòng)生成的代碼。他們把卡牌上的描述文字輸入到他們寫好的程序中,接下來程序就可以自動(dòng)分析卡牌描述被發(fā)動(dòng)時(shí)的規(guī)則,并生成相應(yīng)的 Python 代碼。 雖然這段代碼看上去像一個(gè)剛學(xué)編程的初學(xué)者寫的,也不能全部正確運(yùn)行,但是這已經(jīng)離我們?cè)?jīng)設(shè)想過能自動(dòng)寫代碼的程序非常接近了。 以上都是一些實(shí)際的落地場(chǎng)景,如果未來能有更多了解人工智能和軟件工程的工程師一起加入進(jìn)來,那么我們就可以推進(jìn)更多的場(chǎng)景實(shí)現(xiàn)。 但是,我們的工程師現(xiàn)在還是每天陷入在寫不完的 Bug 和 Debug 的困境中,并以為這些都是理所當(dāng)然的工作。 科技的進(jìn)步不會(huì)停止,我相信遲早有一天能自動(dòng)寫代碼的程序時(shí)代會(huì)真正來臨。那么,到時(shí)候我們會(huì)面臨哪些挑戰(zhàn)呢?我們又該如何解決挑戰(zhàn)呢? 我想我們可以做 2 點(diǎn):
過去,我們是傳統(tǒng)行業(yè)的挑戰(zhàn)者,經(jīng)歷過互聯(lián)網(wǎng)對(duì)傳統(tǒng)行業(yè)的沖擊;我們?cè)?jīng)也是互聯(lián)網(wǎng)紅利的受益者,做過風(fēng)口上的那只豬。然而,眼下我們面臨的挑戰(zhàn)似乎是來自于行業(yè)內(nèi)部程序員之間的競爭。 實(shí)際上,未來整個(gè)工程行業(yè)都將面臨來自于外部的挑戰(zhàn),而這個(gè)挑戰(zhàn)這就是人工智能技術(shù)。當(dāng)面對(duì)人工智能時(shí),我們要轉(zhuǎn)換自己的思維,我們應(yīng)該主動(dòng)學(xué)習(xí)人工智能,至少要了解人工智能會(huì)對(duì)我們的行業(yè)產(chǎn)生什么影響。 當(dāng)前,雖然程序員之間的競爭也很明顯,但是只要市場(chǎng)足夠大,那么工作需求還是有很多的,這也是讓很多人現(xiàn)在不愿意面對(duì)轉(zhuǎn)型的原因。 我們身邊有不少這樣的程序員——他們每天都在做重復(fù)的工作,安于現(xiàn)狀,沒有學(xué)習(xí)的激情。同時(shí),隨著年齡的增長,他們開始產(chǎn)生焦慮,因?yàn)樗麄兊哪芰腕w力已經(jīng)比不上新人,所以如果他們不能順利轉(zhuǎn)型管理,那么就會(huì)擔(dān)心公司裁員。 最近,我有個(gè)朋友在向我抱怨,他開始擔(dān)心自己未來缺少競爭力,不能負(fù)擔(dān)起北京的生活成本。他已經(jīng)開始考慮,是否要在近兩年內(nèi)換一個(gè)其他城市里壓力小一點(diǎn)的工作。 當(dāng)然,這只是個(gè)案。 可是,當(dāng)人工智能真的可以寫代碼的那一天,那就是我們整個(gè)行業(yè)都要面臨的挑戰(zhàn)。 這就像是,互聯(lián)網(wǎng)改變了通信行業(yè);QRCode 改變了金融行業(yè);而現(xiàn)在人工智能不僅會(huì)改變行業(yè),更會(huì)改變程序員的工作方式。 過去,變化只是生活的一部分;現(xiàn)在,變化已經(jīng)成為了生活的全部。 實(shí)際上,我的工作也一直在發(fā)生變化。最早,我是一名校內(nèi)網(wǎng)的后端工程師,我在校內(nèi)網(wǎng)寫了 4 年半的主站后端代碼。2012 年,我開始創(chuàng)業(yè),被迫走向了管理崗位;后來,我接觸到了 TGO 鯤鵬會(huì),這是我第一次關(guān)鍵變化。 這次的變化讓我感受到“做好寫代碼之外的工作”和“寫一段優(yōu)美的代碼”同樣重要。 2015 年,因?yàn)槠髽I(yè)的發(fā)展需求,我希望可以用機(jī)器學(xué)習(xí)給公司產(chǎn)品賦能。于是,我很快搭建起公司的推薦系統(tǒng)隊(duì)伍,同時(shí)我也開始重新學(xué)習(xí)數(shù)學(xué)、算法。雖然我們的產(chǎn)品由于市場(chǎng)需求轉(zhuǎn)型沒有成功,但是那段時(shí)間我們團(tuán)隊(duì)積累了不少的技術(shù)方案,幫助公司在后續(xù)并購的過程中提高了估值。此時(shí),是我第二次的關(guān)鍵變化。 在這次變化之后,我現(xiàn)在的工作已經(jīng)離不開機(jī)器學(xué)習(xí)和人工智能。 今天,我想讓自己開始第三次的關(guān)鍵變化。過去,我在自己的舒適區(qū)里做技術(shù)和科技管理者,不愿走到臺(tái)前。因?yàn)槲沂且粋€(gè)非常容易緊張的人,每次走到臺(tái)前都需要做巨大的心理建設(shè)。但是,現(xiàn)在的工作已經(jīng)不太允許我一直躲在后面,所以我選擇讓變化驅(qū)動(dòng)自己成長。 我想,我們每個(gè)人都應(yīng)該擁抱變化,因?yàn)樽兓瘯?huì)影響到我們工作和生活的點(diǎn)點(diǎn)滴滴。 我們可以暢想一下未來程序員的工作——未來可能會(huì)有兩種程序員,一種是寫一份讓機(jī)器讀懂產(chǎn)品文檔的程序員;另一種是開發(fā)和維護(hù)人工智能的程序員,他們既能懂得人工智能,又能懂得軟件工程。 或許現(xiàn)在的程序員有部分會(huì)被人工智能取代,但是我相信,只要我們擁抱變化,不斷地提高自己,那么這種變化一定可以驅(qū)使你不斷進(jìn)步! |
|