GPT-o3超過(guò)99%的程序員,碼農(nóng)們是不是要哭暈在廁所了?
大家好,我是每天分享AI應(yīng)用的螢火君!
最近OpenAI一連搞了十幾天的新品直播,雖然熱度不是特別高,但是也確實(shí)爆出了一些比較有意思的東西,比如GPT o3,據(jù)說(shuō)編程能力已經(jīng)超過(guò) 99%的程序員(某程序員競(jìng)賽的前200名),我等碼農(nóng)是不是要哭暈在廁所了?
程序員的出路在哪里?
AI編程革命
談到這一輪的AI革命,很多人會(huì)類比工業(yè)革命。在工業(yè)革命初期,隨著機(jī)器的普及應(yīng)用,很多手工業(yè)者丟了生計(jì),但也有一批手動(dòng)業(yè)者主動(dòng)進(jìn)化,學(xué)會(huì)了機(jī)器的操作方法,在新的時(shí)代里依然搶手。
所以最新的說(shuō)法是:AI不會(huì)革所有人的命,AI革的是不會(huì)使用AI的人的命。
這種說(shuō)法是站的住腳的。
就我個(gè)人而言,寫代碼已經(jīng)離不開AI了,遇到不會(huì)寫的代碼就問(wèn)AI已經(jīng)是家常便飯,甚至有了什么思路之后,直接就讓AI先寫一個(gè)實(shí)現(xiàn),感覺(jué)不好的話,再讓AI重寫,一般都能得出滿意的結(jié)果。這比自己苦思冥想、到處去查資料要快上不少,甚至結(jié)果也往往更好。當(dāng)然這里邊還有一些前提條件,比如你要把自己的想法清晰的表達(dá)出來(lái)。
就像人們對(duì)商品的需求是廣泛且持續(xù)存在的,軟件的需求也是廣泛且持續(xù)存在的。使用AI可以提升軟件程序的生產(chǎn)效率,如果你花1天時(shí)間可以寫出100分的程序,那么使用AI,很可能只需要幾分鐘的時(shí)間就能寫出至少80分的程序,這里邊的生產(chǎn)力差距是很明顯的,所以AI對(duì)于編程而言,自然也是一場(chǎng)革命。
歷史證明,不想被淘汰,只能積極的擁抱新的生產(chǎn)工具。學(xué)會(huì)使用AI編程,自然也成了程序員在AI時(shí)代的必備能力。
AI編程的要點(diǎn)
就像大家都寫程序,有的人寫的好,有的人寫不出來(lái)。使用AI編程也是,有的人效率大幅提升,有的人生成的代碼沒(méi)法用,還耽誤時(shí)間。
為什么會(huì)這樣?
我個(gè)人的觀點(diǎn)是:不得要領(lǐng)。
編寫代碼的要領(lǐng)是:掌握各種編程規(guī)則,并在各種解決方案中做好權(quán)衡。很多同學(xué)以代碼能跑起來(lái)為最終目標(biāo),不管性能,也不考慮維護(hù)、擴(kuò)展,這樣很難寫出優(yōu)秀的程序,自然也成不了高手。
AI編程的要領(lǐng)是什么呢?
講清楚
我們還是在編程,所以編程的要領(lǐng)還是要掌握,但是又增加了AI的方式,就需要結(jié)合AI的特性。
這里邊最主要的問(wèn)題就是講不清楚,程序員們往往知道怎么去實(shí)現(xiàn),但是很難給別人講明白。而使用生成式AI,一個(gè)很重要的工作是編寫提示詞,也就是把你想要的東西通過(guò)文字清晰明白的表達(dá)出來(lái)。
舉個(gè)簡(jiǎn)單的例子,你想要讓AI設(shè)計(jì)一個(gè)商城的數(shù)據(jù)庫(kù),如果你只是簡(jiǎn)單的告訴它:幫我設(shè)計(jì)一個(gè)商城的數(shù)據(jù)庫(kù)。
它很大概率上是很難生成直接可用的代碼的,因?yàn)樗恢滥阋褂檬裁磾?shù)據(jù)庫(kù),也不知道你的商品和訂單是怎么管理的,更不清楚你的訂單量是什么樣的規(guī)模,這些都會(huì)影響數(shù)據(jù)庫(kù)的設(shè)計(jì)。AI大概率會(huì)給你了一個(gè)路邊攤的方案,然后被你鄙視一番。
要想讓AI輸出高質(zhì)量的內(nèi)容,我們必須把問(wèn)題的上下文講清楚,以AI能夠理解的方式告訴它。在數(shù)據(jù)庫(kù)的例子中,可能包括:你的商城都有哪些功能,商品品類如何組織,商品有哪些屬性,每天的訂單量如何,訂單的流轉(zhuǎn)過(guò)程如何,等等。
有時(shí)候?qū)τ谝粋€(gè)復(fù)雜的系統(tǒng),一輪對(duì)話是不夠的,可能需要多輪對(duì)話,比如先講一下你的商城功能有哪些、業(yè)務(wù)規(guī)模如何,然后讓AI給你一些數(shù)據(jù)庫(kù)的選型建議;然后再基于你選擇的數(shù)據(jù)庫(kù),通過(guò)各個(gè)部分的描述,讓AI給出具體領(lǐng)域的設(shè)計(jì)。
好模型
工欲善其事,必先利其器。
AI模型的性能也很重要,這里說(shuō)的模型性能是AI模型生成結(jié)果的質(zhì)量問(wèn)題。
了解過(guò)大語(yǔ)言模型的同學(xué)應(yīng)該都聽說(shuō)過(guò)OpenAI,作為大語(yǔ)言模型的領(lǐng)導(dǎo)者,它的ChatGPT是頂好的,對(duì)于同樣的問(wèn)題,ChatGPT往往能理解的更為準(zhǔn)確,也能給出質(zhì)量更高的答案。對(duì)于編程來(lái)說(shuō),就是它輸出的代碼能正常跑起來(lái),而很多模型給出的答案經(jīng)常跑不起來(lái),各種報(bào)錯(cuò)。
根據(jù)我的測(cè)試體驗(yàn),目前 GPT 4o 和 Claude 3.5 Sonnet 在編程方面的能力比較領(lǐng)先,國(guó)產(chǎn)的 通義靈碼 也不錯(cuò),但是有時(shí)給出的方案還是差強(qiáng)人意,有點(diǎn)路邊攤的感覺(jué),輸出過(guò)多不太重要的東西,溝通效率上差一些,應(yīng)該還是基礎(chǔ)模型的能力不夠強(qiáng)。
當(dāng)下,從效率方面看,使用更好的模型確實(shí)可以節(jié)約一些時(shí)間。
程序員的未來(lái)
所有的工作都是基于需求產(chǎn)生的,程序員也不例外。
計(jì)算機(jī)出現(xiàn)以后,人們需要使用計(jì)算機(jī)來(lái)完成大量繁復(fù)的計(jì)算任務(wù),隨著計(jì)算能力的增強(qiáng)和計(jì)算范圍的拓展,人們又需要使用計(jì)算機(jī)來(lái)運(yùn)行各種各樣的軟件程序。但是人和機(jī)器打交道特別困難,最開始使用0和1的機(jī)器碼,這不是一般人能玩的溜的,后來(lái)雖然又搞出了各種各樣的先進(jìn)技術(shù)和編程語(yǔ)言,但是計(jì)算任務(wù)的復(fù)雜度也進(jìn)一步提升,對(duì)專業(yè)人士的需求不減反增,程序員就是這類專業(yè)人士。
現(xiàn)在大語(yǔ)言模型來(lái)了,AI編程革命愈演愈烈,程序員何去何從?
絕對(duì)數(shù)量的減少
我們還是從需求出發(fā)。
首先假設(shè)計(jì)算任務(wù)的需求并沒(méi)有明顯減少,也沒(méi)有明顯增多,也就是程序的需求沒(méi)有減少;但是使用AI之后編寫程序的效率會(huì)提升,也就是說(shuō)個(gè)體生產(chǎn)力會(huì)提升;在總體需求不變的情況下,個(gè)體生產(chǎn)力的提升就會(huì)減少對(duì)個(gè)體數(shù)量的需求。在這個(gè)假設(shè)中,一些程序員不得不出局。
那么這個(gè)假設(shè)是否成立呢?
當(dāng)前國(guó)內(nèi)有一個(gè)現(xiàn)象很突出,很多廠子經(jīng)歷了一輪又一輪的裁員,很多同學(xué)離職后有很長(zhǎng)時(shí)間的空窗期,整個(gè)社會(huì)對(duì)程序員的需求明顯在減少。但是AI的發(fā)展必然又帶來(lái)新的工作機(jī)會(huì),比如提示工程師、模型訓(xùn)練工程師、AI應(yīng)用開發(fā)工程師,如果我們把這些新的崗位也劃到程序員的行列,但是它們足以抵消社會(huì)對(duì)傳統(tǒng)程序員的需求減少嗎?
我想不能夠,因?yàn)槭褂肁I的效率更高,則需要人貢獻(xiàn)的力量就會(huì)更少。也許AI會(huì)創(chuàng)造更多的其它工種,但是對(duì)以編程為生的程序員的需求一定是減少的。
需求和技術(shù)的平衡
隨著AI模型能力的持續(xù)增強(qiáng),手寫代碼的機(jī)會(huì)越來(lái)越少,但是AI的能力長(zhǎng)時(shí)間內(nèi)始終有所欠缺,比如:理解用戶的需求,在各種技術(shù)方案中做出權(quán)衡等,而且AI的倫理問(wèn)題一時(shí)半會(huì)也很難解決,程序出了問(wèn)題還要有人來(lái)背鍋。
所以程序員的大部分工作將是:
理解用戶需求,然后讓AI實(shí)現(xiàn)用戶的需求,并對(duì)生成的結(jié)果進(jìn)行調(diào)整和把關(guān)。
理解用戶需求:注意這里說(shuō)的是理解用戶需求,而不是理解產(chǎn)品經(jīng)理給出的產(chǎn)品設(shè)計(jì)。當(dāng)下,程序員編寫程序本來(lái)也是需要理解產(chǎn)品設(shè)計(jì)的,但是好的程序只是理解了產(chǎn)品經(jīng)理的輸出還是不夠的,產(chǎn)品經(jīng)理的主要問(wèn)題是缺乏技術(shù)的敏感度,這需要程序員來(lái)補(bǔ)齊,并在產(chǎn)品中有所體現(xiàn)。而且如果程序員寫代碼的時(shí)間少了,那老板自然不會(huì)讓你閑著,直接對(duì)接用戶可能是一個(gè)方向。
讓AI實(shí)現(xiàn)用戶的需求:這里關(guān)注的是程序員的語(yǔ)言表達(dá)能力,你得能把問(wèn)題說(shuō)清楚,知道如何與AI進(jìn)行交互,讓AI更好的完成編碼工作。這是一項(xiàng)需要重點(diǎn)打造的能力。
對(duì)生成的結(jié)果進(jìn)行調(diào)整和把關(guān):AI對(duì)整體的把握能力仍然十分有限,雖然很多模型都號(hào)稱支持多少K的上下文,但是真正用于實(shí)際的時(shí)候還是會(huì)丟三拉四,不夠可靠。人要來(lái)把關(guān)的話,對(duì)技術(shù)的理解仍然十分鐘重要,因?yàn)槿艘鰶Q策,什么能做,什么不能做,什么情況適合采用什么樣的方案,都要考慮清楚。
現(xiàn)在也有一些公司在做AI程序員,讓一幫AI來(lái)扮演各種角色,來(lái)實(shí)現(xiàn)一個(gè)軟件程序的開發(fā)。似乎程序員馬上就要失業(yè)了,但是對(duì)于一個(gè)有著幾年開發(fā)經(jīng)驗(yàn)的同學(xué)來(lái)說(shuō),應(yīng)該能夠理解:一個(gè)包含各種復(fù)雜邏輯的業(yè)務(wù)系統(tǒng),AI還是很難搞清楚的,短期內(nèi)也很難代替人來(lái)做決策。
總結(jié)
AI的引入顯著提高了編程效率,使得高質(zhì)量代碼的生成速度大大加快。面對(duì)未來(lái),盡管傳統(tǒng)編程崗位的需求可能減少,但新的職業(yè)機(jī)會(huì)也在不斷涌現(xiàn),程序員同學(xué)們要積極適應(yīng)變化,充分利用AI的優(yōu)勢(shì),掌握清晰表達(dá)需求的能力,了解如何有效溝通以獲得最佳的AI輸出,同時(shí)還要持續(xù)提升自身技術(shù)素養(yǎng),以便更好地理解用戶需求、指導(dǎo)AI工作及審核最終結(jié)果。