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