像用實(shí)習(xí)生一樣用 AI 輔助你編程

0 評(píng)論 3586 瀏覽 14 收藏 12 分鐘
🔗 产品经理的核心价值是能够准确发现和满足用户需求,把用户需求转化为产品功能,并协调资源推动落地,创造商业价值

不少人認(rèn)為大模型現(xiàn)在已經(jīng)這么強(qiáng)了,做點(diǎn)事怎么感覺(jué)這么弱智。其實(shí),政治的使用方法,是像帶實(shí)習(xí)生一樣使用AI工具——就像作者在正文中分享的經(jīng)驗(yàn)一樣。

我是不敢讓 ai 幫我寫程序的,每回問(wèn)它的問(wèn)題,十次倒有八次是錯(cuò)的,問(wèn)完之后還要自己去網(wǎng)上搜一遍,然后反復(fù)測(cè)試,才敢寫進(jìn)代碼。不知道大家怎么甩手給它的。
——響馬

響馬毫無(wú)疑問(wèn)是編程高手,幾十年的開發(fā)經(jīng)驗(yàn),另外他寫的代碼都屬于一些底層代碼,被訓(xùn)練過(guò)的比例極少,AI 大概率寫不出來(lái)高質(zhì)量代碼,不放心讓 AI 幫忙寫程序正常。但對(duì)于普通程序員來(lái)說(shuō),不一定要像響馬那樣,拒絕 AI 的幫助。

比如我就是個(gè)普通程序員,寫的都是一些簡(jiǎn)單的前端 UI 代碼,或者后端增刪改查代碼,并沒(méi)有太高技術(shù)含量,就經(jīng)常讓 AI 給我?guī)兔Γ€是讓我效率提升不少的。我總結(jié)下來(lái)經(jīng)驗(yàn)就是:像用實(shí)習(xí)生一樣用 AI 輔助你編程。

在科技公司或者開發(fā)團(tuán)隊(duì)經(jīng)常能看到這樣的場(chǎng)景:某些資深程序員,寫代碼特別牛,效率特別高,但是很多活都?jí)涸谒麄兩砩希蔀榱藞F(tuán)隊(duì)瓶頸,于是老板說(shuō),這樣不行,給你幾個(gè)實(shí)習(xí)生或者新手程序員幫你分擔(dān)一些吧。

大多數(shù)時(shí)候這種提議是被拒絕的,倒不是他們藏私不愿意帶人,而是在他們看來(lái),把活交給實(shí)習(xí)生,一個(gè)簡(jiǎn)單的任務(wù)都要花幾天時(shí)間,自己一小時(shí)就做完了,中間還要溝通,做完質(zhì)量不行還要幫忙擦屁股,花的時(shí)間超過(guò)自己寫的時(shí)間,一點(diǎn)都不合算,另可自己做。

這些確實(shí)是事實(shí),但是可能忽略了一些問(wèn)題:

  1. 實(shí)習(xí)生是會(huì)成長(zhǎng)的,很多事情教了一遍就不需要再教第二遍了。
  2. 再?gòu)?fù)雜的程序也是有些“體力活”的,比如說(shuō)搭個(gè)腳手架,新增個(gè)模塊,簡(jiǎn)單的重命名/重構(gòu),等等。對(duì)于資深程序員來(lái)說(shuō),老是干體力活會(huì)倦怠的,但是對(duì)實(shí)習(xí)生來(lái)說(shuō)正好是一個(gè)學(xué)習(xí)的好機(jī)會(huì)。
  3. 能從實(shí)習(xí)生身上學(xué)習(xí)到新的東西。當(dāng)我們對(duì)一門技術(shù)太熟悉,會(huì)有路徑的依賴,不太容易發(fā)現(xiàn)或者接受新的技術(shù),同樣的任務(wù)讓實(shí)習(xí)生做,雖然大多數(shù)時(shí)候不如你做的,但是也會(huì)有眼前一亮的時(shí)候,能學(xué)到一點(diǎn)新的東西或者開闊一下眼界:原來(lái)還可以這樣!
  4. 如果你的任務(wù)不能交給實(shí)習(xí)生做,也許架構(gòu)上存在一些不足,無(wú)法合理的將功能拆分。有些程序員的活不能拆分出來(lái),一個(gè)原因可能是架構(gòu)還不夠好,模塊都在一起,無(wú)法拆分。當(dāng)然即使拆分后肯定還是有些復(fù)雜模塊是無(wú)法進(jìn)一步拆分的,這不在此列。

我在帶實(shí)習(xí)生上有一些經(jīng)驗(yàn),所以在使用 Cursor 或者 GitHub Copilot 的時(shí)候,就是把 AI 當(dāng)成一個(gè)實(shí)習(xí)生用,效果是很好的。

01 首先體力活都交給 AI 來(lái)做

體力活指的是那種重復(fù)的、要求不高的、繁瑣的工作。比如說(shuō):

  • 新建一個(gè)頁(yè)面、一個(gè) API
  • 一個(gè)數(shù)據(jù)庫(kù)增刪改查的模塊
  • 單元測(cè)試

這些活說(shuō)難也不難,但是自己寫有點(diǎn)麻煩,所以我每次都是 Cursor 里面用 CMD+i 喚出 Composer,把相關(guān)代碼文件都添加上作為上下文,然后提出要求,一個(gè)初始的功能就有了。

比如我要為自己的博客網(wǎng)站增加一個(gè) Sitemap 的功能,我當(dāng)然可以自己寫,但光文件都得創(chuàng)建好幾個(gè),還得寫一些基本的讀取數(shù)據(jù)庫(kù)和輸出 Sitemap 代碼,甚至我還得去查詢一下 Sitemap 規(guī)范。正因?yàn)槿绱耍晕乙恢睉械眉由线@功能。

很快就幫我把相關(guān)文件都創(chuàng)建好了,雖然說(shuō) robots.txt 都給我做成動(dòng)態(tài)的有點(diǎn)業(yè)余,但是也還好,至少我知道了內(nèi)容應(yīng)該是什么,懶一點(diǎn)就讓它重新生成個(gè)靜態(tài)文件,勤快一點(diǎn)就手動(dòng)創(chuàng)建一個(gè)。剩下的就是調(diào)試一下,沒(méi)什么問(wèn)題就可以發(fā)布了。

理論上基于這個(gè)結(jié)果,還可以一直提要求,知道滿意為止,或者差不多了自己接管手動(dòng)修改一下。

我個(gè)人是覺(jué)得,讓 AI 幫忙先實(shí)現(xiàn)一個(gè)基本的模塊,意義不僅僅在于減少了體力活,而是幫你開了個(gè)頭!萬(wàn)事開頭難,很多時(shí)候真的就是因?yàn)闆](méi)有一個(gè)開頭就沒(méi)繼續(xù),當(dāng)有個(gè)初始的結(jié)果,哪怕爛一點(diǎn),再基于它上面修改要簡(jiǎn)單很多,更容易交付。

02 給“實(shí)習(xí)生”一個(gè)葫蘆,讓他們學(xué)著畫瓢

對(duì)于實(shí)習(xí)生來(lái)說(shuō),稍微復(fù)雜一點(diǎn)任務(wù)很難從無(wú)到有做出來(lái),但是如果給他們一個(gè)已經(jīng)做好的模塊作為參考,照著葫蘆畫瓢,那么也能做個(gè)差不離。

讓 AI 幫你編程也是一樣的,你不能指望 AI 能像你一樣厲害懂你的代碼庫(kù),但是你可以教它,把一個(gè)類似的實(shí)現(xiàn)代碼給它參考,甚至于寫一段偽代碼讓它實(shí)現(xiàn)。

就拿前面 sitemap 的例子,添加到上下文的 feed.xml/route.ts 就是“葫蘆”,有了這個(gè)“葫蘆”,它去“畫瓢”就容易多了,它可以從中去學(xué)習(xí)最佳實(shí)踐是什么。

03 設(shè)計(jì)架構(gòu)和技術(shù)選型的時(shí)候,選“實(shí)習(xí)生”熟悉容易上手的技術(shù)

技術(shù)選型是一個(gè)讓人糾結(jié)的事情,需要各種考量,現(xiàn)在更是多了一個(gè)維度,就是要考慮把 AI 當(dāng)成你的團(tuán)隊(duì)成員,想讓 AI 能更好的幫你干活,那么就少造一些輪子,少用一些偏僻的框架或類庫(kù),用那種最流行的,訓(xùn)練語(yǔ)料最多的框架和庫(kù)。

比如我在給自己搭建博客的時(shí)候,選的 Nextjs、Tailwindcss、ShadcnUI、D1(Sqlite),這些都是相當(dāng)流行和容易上手的框架和庫(kù),所以我讓 AI 幫我實(shí)現(xiàn)一個(gè) Sitemap,它能知道在什么創(chuàng)建文件,遵循什么規(guī)范,寫 UI 也知道如何幫我添加正確的 CSS。

04 將復(fù)雜任務(wù)分解成簡(jiǎn)單的任務(wù),讓“實(shí)習(xí)生”幫你完成小的模塊

資深程序員和新手程序員的一個(gè)分界,就是能不能將復(fù)雜模塊拆分成簡(jiǎn)單的小模塊。比如我要搭建一個(gè)自己的博客網(wǎng)站,就 AI 現(xiàn)在的能力,是沒(méi)辦法自動(dòng)完成這樣一個(gè)項(xiàng)目,但是我可以讓它幫我創(chuàng)建一個(gè)頁(yè)面,幫我實(shí)現(xiàn)一個(gè)數(shù)據(jù)庫(kù)讀寫的功能模塊,幫我基于數(shù)據(jù)庫(kù)讀寫模塊實(shí)現(xiàn)一個(gè) API,而我自己,則可以聚焦于數(shù)據(jù)庫(kù)的表設(shè)計(jì)、系統(tǒng)的架構(gòu)設(shè)計(jì)、UI 設(shè)計(jì)這些事情上。

05 向“實(shí)習(xí)生”學(xué)習(xí)

現(xiàn)在在實(shí)現(xiàn)功能的時(shí)候,哪怕我比較熟悉的,我會(huì)習(xí)慣性問(wèn)一下 AI,讓它幫我生成一段代碼,雖然大多數(shù)時(shí)候它不一定比我寫的更好,甚至是錯(cuò)誤的,但有時(shí)候它能提出一種全新的我沒(méi)考慮過(guò)的思路,那我就能從中學(xué)習(xí)到點(diǎn)什么,以后可能就用的上了。

就像大數(shù)學(xué)家陶哲軒,也在用 AI 幫忙解決數(shù)學(xué)問(wèn)題,并非 AI 數(shù)學(xué)比他厲害,而是給他提供了不一樣的思路。

我曾遇到過(guò)一個(gè)問(wèn)題,我嘗試了幾種方法,但都無(wú)法解決。于是,我嘗試詢問(wèn) GPT,你建議我使用什么其他方法來(lái)解決這個(gè)問(wèn)題?GPT 給我提供了 10 種可能的方法,其中有 5 種我已經(jīng)嘗試過(guò),或者明顯沒(méi)有幫助。的確,有幾種方法并不實(shí)用。但其中有一種我還沒(méi)嘗試過(guò)的方法,那就是針對(duì)這個(gè)問(wèn)題使用生成函數(shù)。當(dāng) GPT 建議我使用這種方法時(shí),我意識(shí)到這就是我漏掉的正確方法。所以,將 GPT 視為一個(gè)交流伙伴,它確實(shí)具有一定的用處。
——陶哲軒

06 對(duì)“實(shí)習(xí)生”產(chǎn)出的結(jié)果要驗(yàn)證

既然 AI 只是一個(gè)實(shí)習(xí)生,那么就說(shuō)明它生成的代碼是靠不住的,哪怕看起來(lái)很好,總是要像對(duì)待實(shí)習(xí)生一樣,去對(duì)代碼做審查,理解它實(shí)現(xiàn)的思路,對(duì)結(jié)果進(jìn)行測(cè)試驗(yàn)證,出現(xiàn)問(wèn)題讓 AI 改進(jìn)或者手動(dòng)修復(fù)。

如果有人去責(zé)怪產(chǎn)品的問(wèn)題是因?yàn)?AI 生成的質(zhì)量不行,那只能說(shuō)明是在甩鍋,就像你生產(chǎn)環(huán)境的故障不能怪這是實(shí)習(xí)生寫的,難道你們不做 Code Review,不做 QA 的嗎?

07 最后

這是我在日常使用 AI 輔助編程的一點(diǎn)經(jīng)驗(yàn)分享。如果你把 AI 當(dāng)成一個(gè)資深程序員,那么你大概是要失望的,但是如果你把 AI 當(dāng)作一個(gè)實(shí)習(xí)生,它真的可以做不少事情,讓你提升編程效率。

另外一些現(xiàn)在 AI 還不能完全替代專業(yè)程序員的地方:

  • 基于業(yè)務(wù)需求進(jìn)行抽象和架構(gòu)設(shè)計(jì)的能力
  • 對(duì)復(fù)雜問(wèn)題進(jìn)行分解和統(tǒng)籌規(guī)劃的能力
  • 出現(xiàn)問(wèn)題定位和調(diào)試的能力
  • 當(dāng)然還有出問(wèn)題背鍋的能力

歡迎分享你的經(jīng)驗(yàn)!

本文由人人都是產(chǎn)品經(jīng)理作者【賽博禪心】,微信公眾號(hào):【賽博禪心】,原創(chuàng)/授權(quán) 發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來(lái)自Unsplash,基于 CC0 協(xié)議。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 目前還沒(méi)評(píng)論,等你發(fā)揮!
专题
32189人已学习19篇文章
一个合格的购物车是怎么设计出来的?
专题
92860人已学习30篇文章
想要脱围而出,你必须升级你的技能和思维。
专题
19352人已学习13篇文章
画像标签是由数据标签经过分析、加工处理,形成的更加抽象、易于理解的复合标签。本专题的文章分享了如何设计用户标签体系。
专题
43091人已学习17篇文章
谈到互联网产品,我们不得不谈的就是它的盈利方式,这也是产品人经常会被问到的问题。
专题
19164人已学习15篇文章
评论区应该如何设计?本专题的文章提供了评论区设计思路。
专题
12960人已学习11篇文章
在工作中我们会跟客户/boss/用户等人对接需求,并把需求交付给设计师/开发等人,那么应该怎么做呢,本专题的文章分享了如何对接和交付需求。