如何使用AI學習一門編程語言?
譯文譯者 | 布加迪
審校 | 重樓
無論你是軟件開發(fā)新手還是擁有幾十年的豐富經驗,總是需要學習新知識。TIOBE Index追蹤50種最受歡迎的編程語言,許多生態(tài)系統(tǒng)為職業(yè)發(fā)展和橫向轉型提供了機會。鑒于現(xiàn)有技術具有的廣度,抽空學習一項新技能并有效運用技能可能困難重重。
最近我一直在嘗試學習Rust語言,這是一種注重性能、可靠性和生產力的類型安全語言。我在此過程中學到了使用AI編程助手的若干技巧,想與你分享,以改善你的學習體驗。
文章最后列有幾項基于AI的新技能,你可以在學習過程中運用起來,加快實現(xiàn)目標。我在本文所說的AI是指基于大語言模型(LLM)的AI驅動的編程助手,比如Amazon Q Developer(前身是CodeWhisperer)、GitHub Copilot和JetBrains AI Assistant。你可以將下面所有技巧運用到所選擇的工具上。
對參數化知識持懷疑態(tài)度
“參數化知識”是訓練過程中存儲在模型中的信息。編碼數據是AI通常能夠快速響應、提供準確信息的原因。不過,AI有時候也會給出嚴重錯誤的答案。
這對我們用戶來說意味著什么?雖然這些系統(tǒng)可能大有幫助,但它們受到收集數據和訓練模型所需的時間和資源的限制。比如說,OpenAI使用截至2023年12月的信息訓練ChatGPT 4 Turbo模型,數據集的內容是未知的。從用戶的角度來看,任何特定的模型中是否存在“完整”的知識、為什么有時我們可能對其響應不感興趣都是不確定的。
留意數據集的截止日期可以幫助你更好地理解和處理來自AI聊天會話的響應。作為一名物色和購買服務的消費者,研究提供商的數據收集實踐和訓練過程可以帶來更令人滿意的體驗。
雖然AI通常會有所幫助,但在任何學習過程中,經過驗證的人類知識來源仍將是最有價值的。這倒不是說AI系始終是錯的,但你需要養(yǎng)成質疑自己使用的信息是否正確的習慣。另一個需要謹慎的原因是,這些系統(tǒng)的創(chuàng)建者將它們訓練成樂于助人的助手。有時它們可能“太樂于助人”了,生成可能不存在的想法和概念,即幻覺現(xiàn)象。
總而言之,只有“真正的智能”才能理解AI何時犯錯。
閱讀代碼和提示以解釋
開源軟件運動為每個學習編程的程序員提供了輕松訪問生產級代碼的途徑。開源代碼庫提供了一個很好的機會,可以了解專業(yè)人員如何編寫代碼,并學習語言習慣用法和技巧等。但是如果沒有基本的參考框架或基本的理解,閱讀一門不熟悉的語言可能令人生畏、一頭霧水。
我一直在使用的一種技術是在流行的代碼共享網站GitHub上查找特定語言的代碼,并將其粘貼到AI聊天會話中,一并粘貼的還有提示“請解釋該代碼”和“請列出該代碼塊中出現(xiàn)的重要語言概念”。
該提示的模板可能如下所示。
Please explain the following code
```rust
// rust code goes here
```
Also, list the important language concepts from the description in a bulleted list so I may do more research.
因此生成的主題列表是一種很好的方式,可以讓我把學習的重點放在當下最重要的事項上,而不是試圖一次吸收整個圖書館的信息。
JetBrains AI Assistant將允許你存儲提示模板供重復使用,你在不同的項目之間跳轉時這非常有用。
詳細內嵌注釋的提示
當你還沒有完全掌握一門語言的語法或語義時,一大堆代碼可能讓人望而生畏。使用提示“為每行注釋”是一種快速而簡單的方法,可以大致了解應用程序可能在做什么。
借助JetBrains AI Assistant,你還可以在并排或統(tǒng)一視圖中獲得變更的Diff視圖。視圖允許你快速查看變更,并選擇接受或拒絕變更。
嘗試不同的選項
學習任何主題都涉及試驗,更重要的是,涉及運用學到的概念。這對于找到一種切實有效的解決方案并理解何時嘗試不同的方法至關重要。有了AI,嘗試不同的實現(xiàn)方法從未像現(xiàn)在這樣直觀簡單。
下面是我用來發(fā)現(xiàn)Rust語言中便于進行后續(xù)研究的功能特性的提示。
Given the following API, show me three different implementations
```rust
fn add(x: i32, y:i3) -> i:32 {
// implementation goes here
}
```
記住,這事關學習,所以API不一定特別復雜。嘗試想法讓你得以發(fā)現(xiàn)AI聊天會話之外的不同學習路徑。這種技術非常出色,特別是與傳統(tǒng)的主題搜索相比;傳統(tǒng)的主題搜索可能因你對特定主題的理解而受到限制。
Amazon Q Developer等一些工具提供內聯(lián)選項,允許你在不離開編輯器上下文的情況下循環(huán)處理示例。按左右方向鍵可以讓你在諸選項之間移動,直至找到一個你喜歡的選項。
更多的上下文始終更好
我在上面提到了LLM的嵌入信息限制。請記住,在這些服務可能缺乏信息的地方,能提供信息再好不過了,但你需要用正確的方式來提供。
在現(xiàn)代互聯(lián)網搜索體驗的訓練下,我們已學會在文本框中提出基于關鍵字的問題。搜索式查詢是我看到許多AI新手常犯的一個錯誤,這可能會讓他們對結果感到失望。在使用AI助手時,將AI聊天會話視為“搜索”是一個壞習慣,因為LLM的創(chuàng)建者構建它們是為了預測用戶可能想要什么。
進行更準確預測的最好方法是盡可能地詳細和明確。
一個很有效的方法是基于示例的提示。你提供的示例越多,結果就越準確。這里有一個模板提示,可以幫助你在學習過程中發(fā)現(xiàn)新的想法。
Given the following three examples, what would an implementation for <X> look like?
example 1:
```
```
example 2:
```
```
example 3:
```
```
你在聊天會話中輸入的數據提供了實現(xiàn)預期結果所需的上下文。別害怕糾正或添加更多的上下文。越多越好,因為模型有更多的信息作為響應的基礎。
為了保持對話進行、增添聊天會話的上下文,Amazon Q Developer為你提供了一組自然的后續(xù)問題,確保你在學習過程中有積極性。
查看代碼補全
大多數AI服務提供多行代碼補全功能。雖然我忍不住會接受編輯器中呈現(xiàn)的所有選項,但這通常會阻礙我的學習過程。相反,我喜歡從創(chuàng)建表明目標的代碼注釋入手。
// TODO: create a match expression to process the different message variants
在下圖中,我們看到GitHub Copilot主動表示可以補全我的語句。乍一看很不錯,但我必須停下來細想這個選項,看看它是否符合我的意圖。在按Tab鍵之前,我要停下來。想想為什么?
這么做的原因是為了檢查我目前的技能是否能夠閱讀和處理代碼。如果是,那我取得進展。如果不是,那么我應該花時間去了解我的知識短板在哪里。永遠不要接受你并沒有完全理解的代碼、添加到代碼庫中。
注意,你可以配置該功能以減少干擾,只按需顯示補全,以減輕在編寫代碼和讀取代碼之間切換的認知負擔。
解釋錯誤,找到解決辦法
面對每個編程堆棧,你都會遇到編譯和運行時錯誤,其中一些錯誤可能很隱晦。如果你在設法理解為什么你的應用程序失敗,不妨使用AI助手聊天會話來解釋這個問題,找到出現(xiàn)問題的地方,并提出解決方案。
What exactly is the problem here in my Rust backtrace? Reduce the response to the file and line and explanation of the error and propose a solution.
```
```
下面這個例子表明了使用這個提示來理解Rust回溯中發(fā)生了什么事情。
分享想法
雖然使用AI聊天從一個話題切換到另一個話題可能感覺很自然,但放緩節(jié)奏、將你新發(fā)現(xiàn)的知識與其他知識重新聯(lián)系起來總是好事。一旦我學到了新概念,并創(chuàng)建了切實可用的示例,我會與其他學習者和專家分享,以獲得寶貴的反饋。記住,AI只能對你的要求有所幫助,而其他人會用他們的實際經驗加以豐富,預測你可能忽略的潛在陷阱。
社交媒體平臺是分享截圖、代碼示例和想法并獲得寶貴反饋的好地方,你可以將這些反饋納入到未來的AI聊天會話中。
總結聊天
這里有一個建議送給那些不擅長記筆記,但可能想要回憶前一天工作的那些人。在長時間的學習結束后,不妨讓當前的聊天會話總結你的所有問題,并為每個問題列出一句話的答案。
Given what we’ve chatted about, list all the questions and a single-sentence summary of each answer.
響應是出色的快速參考指南,供你的下一次學習會話參考。這也是一篇很好的博文,你可以練習與他人分享你的想法和學習經驗。
用AI學得更快
我希望當你使用AI工具更快速、更有效地學習時,這些技巧對你有所幫助。這些工具旨在幫你實現(xiàn)為自己設定的目標。我發(fā)覺它們在形成新想法和探索我不知道的想法方面大有幫助。
最重要的是,它們讓我與社區(qū)里的其他人建立了聯(lián)系,這些人拓寬了我的知識面。
原文標題:How to learn a programming language using AI,作者:Khalid Abuhakmeh