教了100個人用人工智能編程之后,我學(xué)到了這些
對于任何有創(chuàng)意抱負(fù)的人來說,這都是一個巨大的機(jī)會。

人工智能的出現(xiàn)對于不是程序員的人來說是個巨大的福音,以前他們有心無力的事情現(xiàn)在有了希望。不過,指望擁有了人工智能之后就能在 3 周之內(nèi)完全掌握編程,仍然是不可能的事。但是,人工智能也會不斷進(jìn)化,所以,對于任何有創(chuàng)意抱負(fù)的人來說,這是一個巨大的機(jī)會。

上個月,我推出了一門課程,其想法是教大家如何在一個月的時(shí)間內(nèi)用 ChatGPT 輔助編程,做出一個 GPT-4 聊天機(jī)器人。
人工智能這個話題現(xiàn)在很熱,我關(guān)于這方面的文章也寫得不錯。但我覺得我還有些真正重要的事情要做。因此,我對這門課程抱有很高的期望。但我對后來收獲的反應(yīng)程度完全沒有準(zhǔn)備。
我們在第一個小時(shí)內(nèi)就收到了少量注冊。但在接下來的幾天里——注冊的人數(shù)猶如涓涓細(xì)流。注冊的學(xué)生數(shù)先是 5 人,然后增加到 10 人,再到 25 人。
到第 80 名學(xué)生時(shí),我們關(guān)閉了注冊。我們向買不起課程的學(xué)生發(fā)放了 20 份獎學(xué)金,我開始準(zhǔn)備教書。我對沒人來的恐懼又被另一件事給取代了:有人會喜歡嗎?更重要的是,他們真的能學(xué)到東西嗎?這會有價(jià)值嗎?
在過去這一個月里,我非常榮幸地看到有將近 100 人開始用人工智能來做開發(fā)。有很多令人驚嘆的時(shí)刻——比如當(dāng)學(xué)生們在一開始的課程中讓自己的第一個聊天機(jī)器人跑起來的時(shí)刻,或者當(dāng)他們突然理解了一個他們老是聽到但不甚了了的人工智能術(shù)語的時(shí)候,比如“嵌入”( embedding)。這一路上也有一些波折和跌倒——事實(shí)證明,人工智能在編程方面仍然不可靠,作為一名講師,我自己在講課方法上也還存在可以改進(jìn)的地方。
不過像這樣的課程有一個非常大的好處,那就是如果做得對的話,你跟學(xué)生的收獲會一樣多。這個月對我來說肯定是這樣的。能夠幫助這么多人開始用人工智能做開發(fā)是一件非常令人愉快的事情。
以下就是我學(xué)到的一些東西。
人工智能屬于作弊代碼級的創(chuàng)造力提升手段
我做這門課程的時(shí)候的想法是,人工智能就像視頻游戲作弊代碼,可以提高創(chuàng)造力,可以讓技術(shù)水平不高的人變成能夠突然將自己的想法變?yōu)楝F(xiàn)實(shí)的開發(fā)者。他們所需要的只是推一把。
我現(xiàn)在更加堅(jiān)信這一點(diǎn)。我看到參加這門課程的人只具備了一些基本的技術(shù)技能,然后馬上就可以收獲“哇噢時(shí)刻”,這些時(shí)刻激發(fā)了他們的創(chuàng)造力和自主性。在第一堂課上,每個人都做出了一個基本的對話式聊天機(jī)器人,就像下面這樣:

在課程開始時(shí),我演示了這個機(jī)器人,并逐步通過示例代碼來解釋它是如何工作的。然后我用 ChatGPT 從頭開始對機(jī)器人進(jìn)行實(shí)時(shí)編碼,這樣學(xué)生們就可以看到如何正確輸出提示,以得到他們需要的代碼。接著我就讓他們自己發(fā)揮,用 ChatGPT 來編寫他們自己的機(jī)器人。這么做是有風(fēng)險(xiǎn)的——這個班的學(xué)員編程技能水平參差不齊。但對他們當(dāng)中的相當(dāng)一部分人來說,這成為了他們的一個重要時(shí)刻。大家都對人工智能的編程水平感到震驚,說感覺就像作弊一樣。
第一次用人工智能編程的感覺就是這樣。這有點(diǎn)像《黑客帝國》里面的那一刻,就是墨菲斯(Morpheus) 把武術(shù)技能下載到尼奧(Neo)大腦的那一刻。 尼奧一覺醒來,突然就會功夫了。

通過人工智能讓大家開始產(chǎn)生自己是創(chuàng)意主體的那種感覺很棒,因?yàn)榇_實(shí)如此。他們突然意識到,如果能夠用人工智能來支持自己的工作流,那么他們可以做的事情比他們想象的要多得多。
但這么做還有更深層次的好處:有助于激發(fā)理解。
人工智能讓學(xué)習(xí)編碼不那么嚇人和抽象
在我看來,編程的問題在于你必須爬上陡峭的山峰才能用這項(xiàng)技能做任何有趣的事情。大家到這兒來學(xué)習(xí)編程是為了開發(fā)應(yīng)用、網(wǎng)站、視頻游戲以及其他有趣的創(chuàng)意內(nèi)容的。但他們一開始并沒有機(jī)會學(xué)習(xí)怎么做這些事情,最初的幾個月他們學(xué)的是變量、數(shù)組、函數(shù)和循環(huán)。
編程一開始的構(gòu)建塊看起來非常抽象,并且與實(shí)際目標(biāo)脫節(jié),以至于很多學(xué)生很快就放棄了。這有點(diǎn)像上吉他課,你想學(xué)完之后就可以成為約翰·邁爾(John Mayer)那樣的大師,結(jié)果去學(xué)了才知道,光音階你就得練半年,之后才能開始學(xué)習(xí)彈一首歌。
要學(xué)的還不只是一般的編程概念。人工智能也有自己的語言。大型語言模型(LLM)、嵌入(embeddings)、向量數(shù)據(jù)庫(vector databases)、注意力……等等等等。
是不是感覺被壓得喘不過氣來!編程學(xué)習(xí)會選擇那些天生具有抽象能力的人,或者那些有足夠的毅力與自我激勵能力來走下去的人。
但人工智能讓大家可以開發(fā)出一個 Day One 項(xiàng)目,做出來的看起來很像他們夢寐以求的應(yīng)用、網(wǎng)站或游戲。這些項(xiàng)目與大家當(dāng)初想學(xué)習(xí)編程的原因密切相關(guān)。一旦他們做到了這些,就會有足夠的動力去更深入地研究,這樣一來,像客戶端/服務(wù)器交互這樣的技術(shù)主題似乎學(xué)起來就更有吸引力了——因?yàn)槟憧梢岳斫馑鼈優(yōu)槭裁粗匾恕?/p>
一旦有了可以參考的實(shí)踐經(jīng)驗(yàn)時(shí),一些特定的人工智能詞匯也變得更容易理解了,比方說嵌入。我認(rèn)為有很多人之所以想?yún)⒓舆@門課程,就是因?yàn)榭释袡C(jī)會理解人工智能的術(shù)語——我感覺當(dāng)他們對其中的某個概念有了恍然大悟的感覺時(shí),就是這門課程最高光的時(shí)刻之一。
所有這一切都會產(chǎn)生一個重要影響:能讓更多的人可以把自己視為“技術(shù)人員”。
哪些人可以被看作“技術(shù)人員”的邊界在不斷擴(kuò)大
根據(jù)美國勞工統(tǒng)計(jì)局的數(shù)據(jù),美國大約有 132000 名專業(yè)程序員。2017 年大約有 100000 名學(xué)生主修計(jì)算機(jī)科學(xué)——所以有很大一部分人上過幾門計(jì)算機(jī)科學(xué)課程,但最終沒有成為專業(yè)程序員。
這些人了解一些基本概念,但其實(shí)內(nèi)心并不認(rèn)為自己是“技術(shù)人員”。他們當(dāng)中有些當(dāng)了產(chǎn)品經(jīng)理,他們天天跟工程師一起工作,但自己并不參與代碼編寫。另外一些人最終到了銀行,去折騰復(fù)雜的 Excel 公式。還有一些人則完全放棄了編程,最終做了一些完全不一樣的事情。
他們都有夢想,而人工智能意味著今天他們實(shí)現(xiàn)夢想的能力是一年前的 10 倍。他們只是還沒有意識到這一點(diǎn)。
未來,我認(rèn)為“可以通過使用人工智能而成為開發(fā)者的人”的范圍會進(jìn)一步擴(kuò)大。比方說,知道如何使用 Notion、Squarespace 或 Bubble 等無代碼工具的人比了解底層編程概念的人要多得多。突然之間,前者中的這些人也將能夠用人工智能開發(fā)出有趣的東西。
但這一路上也不全是陽光和彩虹。也會遇到問題。
就算你用人工智能來編碼,你還是需要懂基本的編程知識
人工智能還不夠好,沒法可靠地避免或修復(fù)自己的編程錯誤。在有些方面它的表現(xiàn)非常好,而在其他方面則表現(xiàn)平平。
有一點(diǎn)經(jīng)驗(yàn)的程序員可以學(xué)會填補(bǔ) ChatGPT 的空白,但技術(shù)經(jīng)驗(yàn)較少的人應(yīng)付這個則要困難得多。你很容易陷入令人沮喪的困境,也就是提示模型替你做某件事情,結(jié)果發(fā)現(xiàn)它沒能做到,然后你去提示它修復(fù)問題,但收效甚微。
我們在這門課程當(dāng)中肯定也遇到這個問題了,我認(rèn)為部分原因是我自己對什么屬于“基本”的東西這個問題有些忽視了。到目前為止,我做編程已經(jīng)有約 20 年的時(shí)間,所以一開始的時(shí)候,我并沒有意識到看似很“基本”的任務(wù)實(shí)際上有多復(fù)雜。比方說,我知道我需要向?qū)W生解釋什么是嵌入,或者為什么 GPT 模型會產(chǎn)生幻覺。但有時(shí)候我會把基本術(shù)語的解釋跳過,比方說 API 密鑰或環(huán)境變量是什么——沒有編程背景的人在聽到這些的時(shí)候會感到一頭霧水,這是可以理解的。
現(xiàn)在回想起來我感到很尷尬,因?yàn)槲覜]有意識到需要把這樣的概念解釋清楚。這導(dǎo)致第一堂課的狀態(tài)起伏很大。正如我在上面提到的那樣,部分學(xué)生在讓他們的機(jī)器人只需要幾個提示的情況下就可以工作,而有的學(xué)生最終感覺被落在了后面,因?yàn)橛行┻^程步驟我沒有解釋清楚,他們卡在那里了。
在接下來的課程當(dāng)中,我稍微加強(qiáng)了一點(diǎn)對真正“基本”的內(nèi)容的介紹,但在上課過程中我一直會遇到這樣的時(shí)刻。20 年來形成的直覺與知識積累確實(shí)影響很大,有和沒有這些積累對于“可以通過這些模型實(shí)現(xiàn)什么編程任務(wù)”會產(chǎn)生很大的不同——如果你沒有經(jīng)驗(yàn)可以依靠,則很容易會迷失方向。
這意味著有效的現(xiàn)代編程教育應(yīng)該包含以下兩個方面:1)教學(xué)生編寫提示,讓模型替他們完成編程任務(wù),以及 2) 教他們理解模型生成的代碼。
如果做不到第 2 條,很容易就會迷失方向,尤其是如果你沒法使用最新模型的話。
人工智能編程的有與無
真相很簡單,那就是 GPT-4 在編程方面明顯優(yōu)于 GPT-3.5。
GPT-3.5 就像毛毛蟲,GPT-4 就像蝴蝶。帶有網(wǎng)頁瀏覽功能的 GPT-4 就像你帶著可愛的小蝴蝶,然后給它喂了一點(diǎn)生長激素。
這背后的原因很簡單。與后續(xù)模型相比,GPT 3.5 編寫出來的代碼更有可能存在 bug,最終把事情搞砸。而 GPT-4 在這些問題上做得更好。但是,它的知識有截止期限(它不知道 2021 年 9 月之后發(fā)生的任何事情)意味著如果你用了該日期之后發(fā)布的編程庫的話,將會遇到困難。比方說,GPT-4 并不知道 GPT-4 的存在。因此,如果你要求它編寫使用 GPT-4 API 的機(jī)器人代碼,它就沒法做到。
這會導(dǎo)致有些課比較難上,因?yàn)槊總€學(xué)生可以使用的工具集不一樣——他們可以使用什么樣的工具會顯著提高(或削弱)他們的能力水平。
這給課堂制造了一種有與無的氛圍,如果你支付得起訪問費(fèi)用,或者你是能夠訪問支持 web 瀏覽等新的 alpha 功能的少數(shù)幸運(yùn)兒之一,你的工作效率可能會大大提高。我試過用向?qū)W生提供 GPT-4 API 密鑰等手段來改善這一點(diǎn),但并不能完全解決問題。
這一切都凸顯了一點(diǎn):對于能夠訪問最新技術(shù)模型的創(chuàng)新者而言,這個世界是如此的不一樣。這也讓我對“技術(shù)變得更加普及與便利”的未來感到興奮。
我認(rèn)為,過了 1 年之后,人人都可以用上質(zhì)量堪比 GPT-4 的模型,而且這樣的模型應(yīng)該可以訪問 web 以及他們正在編寫的代碼。這樣有和無的差別將消失,并會顯著擴(kuò)大能夠使用 AI 開發(fā)東西的人群范圍。
我認(rèn)為能出現(xiàn)這種情況至關(guān)重要。
未來會是什么樣子
我可以想象對此持懷疑態(tài)度的人在閱讀這篇文章時(shí)會說類似這樣的話:“當(dāng)然,你可以讓大家用人工智能開發(fā)點(diǎn)玩具項(xiàng)目,但這不能讓他們成為真正的程序員?!?/p>
這種態(tài)度似曾相似——過去懂 C 語言的經(jīng)常嘲笑 Python 程序員不是真正的程序員,因?yàn)樗麄兌疾恍枰M(jìn)行內(nèi)存管理。從某些方面來說,那些 C 語言程序員絕對是正確的。學(xué)會管理內(nèi)存確實(shí)能讓你成為更好的程序員。但是當(dāng)今的 Python 程序員真的需要它這項(xiàng)技能嗎?可未必。
我認(rèn)為利用人工智能來幫助你編程這件事也是一樣。當(dāng)你在提示模型幫助你開發(fā)東西時(shí),對底層編程概念有深刻理解會產(chǎn)生很大的不同。
但人工智能依然可以成為一種有效的工具,幫助你激勵自己實(shí)現(xiàn)這種理解。而且,隨著模型的改進(jìn),你可能不再需要像 20 年前那樣,去了解一些基本的實(shí)現(xiàn)細(xì)節(jié)。
我當(dāng)年學(xué)編程的時(shí)候,是看了一本書的。我用的是 Sam 的《21 天學(xué)通 C++》(Teach Yourself C++ in 21 Days),我告訴你吧——那本書是個徹頭徹尾的謊言。
為了學(xué)會 C++,我被迫呆在臥室里,一行一行地將書里的說明輸入電腦。當(dāng)某些東西不起作用時(shí),我只能祈禱答案在書里的某個地方能找到。如果找不到,我就得去搜索質(zhì)量不高的 vBulletin 論壇帖子,希望從解決過類似問題的人那里找到線索。這非常令人沮喪,而且非常耗時(shí)。最后,我可能花了 6 個月的時(shí)間才完全理解其中的內(nèi)容。
當(dāng)年那本 Sam 的書的賣點(diǎn)是我可以在 3 周之內(nèi)學(xué)會編碼。這在 20 年前顯然是不可能的。時(shí)至今日依然不可能。
但是今天用人工智能在 3 周內(nèi)用代碼開發(fā)出一些很棒的東西則 100% 是有可能的。對于任何有創(chuàng)意抱負(fù)的人來說,這都是一個巨大的機(jī)會。
