我曾經好幾個晚上都在用 AI 做東西,做出了不少功能,然後才突然發現,我其實沒辦法把自己剛完成的一半內容解釋清楚。

也有些夜晚,我花了好幾個小時想搞懂某個超小的問題,結果不知怎麼地,從那裡學到的東西反而比前一整晚還多。

仔細想想,這其實有點好笑。兩種情況下我都很有效率。兩種情況下我最後也都寫出了能運作的程式碼。但我從每次經驗中真正學到的東西,卻完全不同。

我最近寫了一篇文章,談到 AI 讓人太容易逃避思考,這件事也讓我開始反省自己的習慣。因為我一直都在用 AI 寫程式工具,而且用得很兇。我很喜歡它們。它們幫我做出了不少東西,不然那些東西我大概根本不會去嘗試。

但我也還在學,而且學很多。

而且「把東西做出來」跟「真正理解它怎麼運作」之間,差很多。

你理解了解釋,不代表你理解了程式碼

這大概是所有人都會遇到的事,只是我們不太想承認而已。

我可能會請 AI 解釋某件事,它會給我一個非常合理的說明。每個部分都講得通。我可以跟得上,知道每一段在做什麼,然後心想,好,懂了。

結果三天後我需要改一點東西,突然盯著程式碼看,感覺自己像第一次看到它一樣。

顯然,在有人一路牽著我理解整段說明的時候,我是確實看懂了。

但那跟真的知道它是什麼,還是有一段距離。

而且我說的不是背語法,或記住每一個 API 細節。我也常常需要查資料,我不覺得這有什麼問題。

我指的是理解「為什麼要這樣做」。

如果我對某個功能唯一記得的事,就是 AI 寫了它,而且它能跑,那我其實沒有從中學到多少。

有時候,真正有意思的部分,是你原本根本不知道存在的問題

我最近一直在做一個文字編輯器,叫做 Slate,這對我來說是一段很有意思的學習經驗。

其中一件我之前沒太想過的事,是你在編輯檔案的同時按下儲存,實際上會發生什麼。

儲存檔案聽起來很簡單,對吧?把內容寫到磁碟、標記為已儲存、完成。

但如果使用者在儲存進行時還繼續打字呢?

被寫入的檔案內容是舊的,但編輯器裡已經有更新的變更。於是如果儲存完成後,編輯器把未儲存狀態清掉,基本上就是在告訴使用者「都存好了」,但其實並沒有。

Slate 用的是基於修訂版本的儲存追蹤來處理這件事。當儲存開始時,它會記住自己正在儲存的是文件的哪個修訂版本。這樣一來,儲存進行期間所做的變更,就不會被誤判成已儲存。

AI 當然可以直接幫我把這整套做出來。我可以測試儲存按鈕,看到它能運作,然後繼續過日子。

但真正理解為什麼需要這種修訂追蹤,才是這件事對我有價值的地方。

重點其實不在程式碼本身,而是在認知到一件事可能會在「操作開始」和「操作結束」之間改變。

而這不只是文字編輯器才會遇到的問題,任何應用程式都可能碰上。

這才是我想從專案中帶走的東西。

實際動手實驗,差很多

我在使用本機 AI 模型時也注意到同樣的事。

假設我執行一個模型,而它花了 30 秒才完成某件事。

好吧,所以它很慢,對吧?

也許吧。但那 30 秒到底花在哪裡?

大部分時間是花在把模型載入記憶體嗎?實際運算很慢嗎?第二次執行會快很多嗎?

這些都可以測試。

而且我發現,當我真的開始實驗,而不是只叫 AI 解釋正在發生什麼時,我學到的東西會多很多。

再跑一次。分開量測。改一個地方。看看會發生什麼。

有時候結果完全符合我的預期;有時候卻差很遠,而通常這就是事情變得有趣的時候。

我很喜歡可以用 AI 幫我釐清問題。我可以問它還能試什麼,或為什麼結果不是我預期的那樣。

這讓學習陌生事物變得容易很多。

但 AI 告訴我「應該會怎樣」,跟我親眼看到「實際上會怎樣」,之間還是有很大的差別。

而且有時候 AI 的解釋也不對,這點我想大家都很清楚。

我不一定記得程式碼,但我會記得問題

我想這大概是我最有感的一件事。

當我真的花時間去理解某件事時,之後我也許不會記得具體的實作方式,但我會記得當時想解決的問題,以及我為什麼會那樣解。

而這會延伸到其他專案裡。

也許我會開始想:某個非同步操作,會不會在使用者已經改過東西之後才完成?

或是某個效能問題,其實是不是啟動時的問題?

又或者,我是不是存了一些狀態,其實完全可以從別的資料算出來?

我可能還是需要查資料。我可能還是會請 AI 幫我寫實作。

但至少我知道自己要找什麼,也知道為什麼這件事重要。

如果我只是沒多想就接受生成的程式碼,那我就會錯過這些。解法明明就在我的專案裡,但當我之後在別的地方遇到同樣的問題時,我甚至可能認不出來。

而考慮到我開始新專案的頻率,這種問題很有可能還是會再遇到。大概下週就會遇到。

當然,我不需要把每件事都變成學習機會

我也覺得這裡需要平衡。

有時候我只是想讓 AI 幫我把按鈕的內距修好。

我不需要花 45 分鐘去研究 CSS 間距的底層原理。我只想讓按鈕看起來對。

而且有很多事情,我也很樂意交給 AI 處理。樣板程式、重複性的修改、那些我已經做過一百次的事,或是單純我懶得做的瑣碎工作。

這也是我會用這些工具的原因之一。

但當我在做不熟悉的東西,或者在處理我知道之後還得維護的功能時,我會試著更投入一點。

有時候那代表我會多問一些問題。

有時候我會直接開始改東西,看看會發生什麼。

我覺得,就算只是先預測一下某個變更會帶來什麼影響,再去執行它,也可能有差。因為如果結果跟我預期的不一樣,那我現在就有一個值得調查的方向。

我每次都這樣做嗎?當然沒有。

有時候我已經對著某個東西看了兩個小時,AI 終於把它弄好了,而我腦中唯一的想法就是:「謝了,終於好了,繼續下一個。」

我不會假裝不是這樣。

但我確實在試著更有意識地分辨:什麼時候我是在學東西,什麼時候我只是在把事情做完。

因為這兩者不一定是同一件事。

把東西做出來,不等於學會它怎麼運作

我最喜歡 AI 寫程式工具的一點,就是我現在更願意去嘗試那些我幾乎不懂的東西了。

我試過各種語言、框架、本機模型、桌面應用程式,還有很多其他東西;如果沒有 AI,我以前大概都會先擱著不碰。

不一定是因為我學不會,而是因為要從一個完全陌生的東西開始,真的很花力氣。

AI 把最初那道門檻大幅降低了,我覺得這真的很棒。

但同時也很容易產生一種誘惑:就一直做下去就好。一個功能能動了,就接著做下一個。再下一個。等你回過神來,你已經有一整個應用程式了,但對其中一些很重要的部分,其實只有很模糊的理解。

而且很容易把這些進度,誤認成學習。

我自己確實也這麼做過。

我覺得,最讓我印象深刻的東西,通常都是那些我得稍微調查一下的部分。某些行為跟我預期的不一樣,或者我突然對它為什麼會那樣運作感到好奇,於是花了一些時間去搞懂。

有時候那種調查只花幾分鐘;有時候它會把我帶進一整晚的深坑。

不管怎樣,這些經驗通常都比那些第一次就完美運作的功能,更讓我記得住。

而這是我在繼續用 AI 開發時,想要一直記住的事。

我不想停止使用這些工具,也不想刻意把每件事都弄得更難。

我只是不想太沉迷於自己能做出多少東西,而忘了注意自己一路上到底學到了什麼。

所以……你呢?你有沒有在用 AI 開發的過程中學到一些有用的東西,現在已經能自己除錯或解釋了?或者,你有沒有回頭看過 AI 生成的程式碼,才發現自己其實完全不知道它怎麼運作?


原文出處:https://dev.to/sizzlebop/what-i-actually-learn-when-i-build-with-ai-1074


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝11   💬1  
338
🥈
mike
1
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登