如何使用AI學習一門編程語言?

無論你是軟件開發新手還是擁有幾十年的豐富經驗,總是需要學習新知識。TIOBE?Index追蹤50種最受歡迎的編程語言,許多生態系統為職業發展和橫向轉型提供了機會。鑒于現有技術具有的廣度,抽空學習一項新技能并有效運用技能可能困難重重。

最近我一直在嘗試學習Rust語言,這是一種注重性能、可靠性和生產力的類型安全語言。我在此過程中學到了使用AI編程助手的若干技巧,想與你分享,以改善你的學習體驗。

文章最后列有幾項基于AI的新技能,你可以在學習過程中運用起來,加快實現目標。我在本文所說的AI是指基于大語言模型(LLM)的AI驅動的編程助手,比如Amazon Q Developer(前身是CodeWhisperer)、GitHub Copilot和JetBrains AI Assistant。你可以將下面所有技巧運用到所選擇的工具上。

對參數化知識持懷疑態度

“參數化知識”是訓練過程中存儲在模型中的信息。編碼數據是AI通常能夠快速響應、提供準確信息的原因。不過,AI有時候也會給出嚴重錯誤的答案。

這對我們用戶來說意味著什么?雖然這些系統可能大有幫助,但它們受到收集數據和訓練模型所需的時間和資源的限制。比如說,OpenAI使用截至2023年12月的信息訓練ChatGPT 4 Turbo模型,數據集的內容是未知的。從用戶的角度來看,任何特定的模型中是否存在“完整”的知識、為什么有時我們可能對其響應不感興趣都是不確定的。

留意數據集的截止日期可以幫助你更好地理解和處理來自AI聊天會話的響應。作為一名物色和購買服務的消費者,研究提供商的數據收集實踐和訓練過程可以帶來更令人滿意的體驗。

雖然AI通常會有所幫助,但在任何學習過程中,經過驗證的人類知識來源仍將是最有價值的。這倒不是說AI系始終是錯的,但你需要養成質疑自己使用的信息是否正確的習慣。另一個需要謹慎的原因是,這些系統的創建者將它們訓練成樂于助人的助手。有時它們可能“太樂于助人”了,生成可能不存在的想法和概念,即幻覺現象。

總而言之,只有“真正的智能”才能理解AI何時犯錯。

閱讀代碼和提示以解釋

開源軟件運動為每個學習編程的程序員提供了輕松訪問生產級代碼的途徑。開源代碼庫提供了一個很好的機會,可以了解專業人員如何編寫代碼,并學習語言習慣用法和技巧等。但是如果沒有基本的參考框架或基本的理解,閱讀一門不熟悉的語言可能令人生畏、一頭霧水。

我一直在使用的一種技術是在流行的代碼共享網站GitHub上查找特定語言的代碼,并將其粘貼到AI聊天會話中,一并粘貼的還有提示“請解釋該代碼”和“請列出該代碼塊中出現的重要語言概念”。

該提示的模板可能如下所示。

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,你還可以在并排或統一視圖中獲得變更的Diff視圖。視圖允許你快速查看變更,并選擇接受或拒絕變更。

嘗試不同的選項

學習任何主題都涉及試驗,更重要的是,涉及運用學到的概念。這對于找到一種切實有效的解決方案并理解何時嘗試不同的方法至關重要。有了AI,嘗試不同的實現方法從未像現在這樣直觀簡單。

下面是我用來發現Rust語言中便于進行后續研究的功能特性的提示。

Given the following API, show me three different implementations```rustfn add(x: i32, y:i3) -> i:32 {// implementation goes here}```

記住,這事關學習,所以API不一定特別復雜。嘗試想法讓你得以發現AI聊天會話之外的不同學習路徑。這種技術非常出色,特別是與傳統的主題搜索相比;傳統的主題搜索可能因你對特定主題的理解而受到限制。

Amazon Q Developer等一些工具提供內聯選項,允許你在不離開編輯器上下文的情況下循環處理示例。按左右方向鍵可以讓你在諸選項之間移動,直至找到一個你喜歡的選項。

更多的上下文始終更好

我在上面提到了LLM的嵌入信息限制。請記住,在這些服務可能缺乏信息的地方,能提供信息再好不過了,但你需要用正確的方式來提供。

在現代互聯網搜索體驗的訓練下,我們已學會在文本框中提出基于關鍵字的問題。搜索式查詢是我看到許多AI新手常犯的一個錯誤,這可能會讓他們對結果感到失望。在使用AI助手時,將AI聊天會話視為“搜索”是一個壞習慣,因為LLM的創建者構建它們是為了預測用戶可能想要什么。

進行更準確預測的最好方法是盡可能地詳細和明確。

一個很有效的方法是基于示例的提示。你提供的示例越多,結果就越準確。這里有一個模板提示,可以幫助你在學習過程中發現新的想法。

Given the following three examples, what would an implementation for <X> look like?example 1:``````example 2:``````example 3:``````

你在聊天會話中輸入的數據提供了實現預期結果所需的上下文。別害怕糾正或添加更多的上下文。越多越好,因為模型有更多的信息作為響應的基礎。

為了保持對話進行、增添聊天會話的上下文,Amazon Q Developer為你提供了一組自然的后續問題,確保你在學習過程中有積極性。

查看代碼補全

大多數AI服務提供多行代碼補全功能。雖然我忍不住會接受編輯器中呈現的所有選項,但這通常會阻礙我的學習過程。相反,我喜歡從創建表明目標的代碼注釋入手。

// TODO: create a match expression to process the different message variants

在下圖中,我們看到GitHub Copilot主動表示可以補全我的語句。乍一看很不錯,但我必須停下來細想這個選項,看看它是否符合我的意圖。在按Tab鍵之前,我要停下來。想想為什么?

這么做的原因是為了檢查我目前的技能是否能夠閱讀和處理代碼。如果是,那我取得進展。如果不是,那么我應該花時間去了解我的知識短板在哪里。永遠不要接受你并沒有完全理解的代碼、添加到代碼庫中。

注意,你可以配置該功能以減少干擾,只按需顯示補全,以減輕在編寫代碼和讀取代碼之間切換的認知負擔。

解釋錯誤,找到解決辦法

面對每個編程堆棧,你都會遇到編譯和運行時錯誤,其中一些錯誤可能很隱晦。如果你在設法理解為什么你的應用程序失敗,不妨使用AI助手聊天會話來解釋這個問題,找到出現問題的地方,并提出解決方案。

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回溯中發生了什么事情。

分享想法

雖然使用AI聊天從一個話題切換到另一個話題可能感覺很自然,但放緩節奏、將你新發現的知識與其他知識重新聯系起來總是好事。一旦我學到了新概念,并創建了切實可用的示例,我會與其他學習者和專家分享,以獲得寶貴的反饋。記住,AI只能對你的要求有所幫助,而其他人會用他們的實際經驗加以豐富,預測你可能忽略的潛在陷阱。

社交媒體平臺是分享截圖、代碼示例和想法并獲得寶貴反饋的好地方,你可以將這些反饋納入到未來的AI聊天會話中。

總結聊天

這里有一個建議送給那些不擅長記筆記,但可能想要回憶前一天工作的那些人。在長時間的學習結束后,不妨讓當前的聊天會話總結你的所有問題,并為每個問題列出一句話的答案。

Given what we’ve chatted about, list all the questions and a single-sentence summary of each answer.

響應是出色的快速參考指南,供你的下一次學習會話參考。這也是一篇很好的博文,你可以練習與他人分享你的想法和學習經驗。

用AI學得更快

我希望當你使用AI工具更快速、更有效地學習時,這些技巧對你有所幫助。這些工具旨在幫你實現為自己設定的目標。我發覺它們在形成新想法和探索我不知道的想法方面大有幫助。

最重要的是,它們讓我與社區里的其他人建立了聯系,這些人拓寬了我的知識面。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/38972.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38972.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38972.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ARCGIS python 裁剪柵格函數 arcpy.management.Clip

ARCGIS python 裁剪柵格函數 arcpy.management.Clip 1 功能 裁剪掉柵格數據集、鑲嵌數據集或圖像服務圖層的一部分。 2 使用情況 基于模板范圍提取部分柵格數據集&#xff0c;輸出與模板范圍相交的所有像素使用以 x 和 y 坐標的最小值和最大值確定的包絡矩形或使用輸出范圍文…

MATLAB-振動問題:單自由度阻尼振動系統受迫振動

一、基本理論 二、MATLAB實現 單自由度阻尼振動系統受迫振動&#xff0c;MATLAB代碼如下&#xff1a; clear; clc; close allA 1; psi 0; F0 10; D 20; Rm 0.5; M 1; omega 2; delta Rm / (2*M); omega0 sqrt(D / M); Omega sqrt(omega0^2 - delta^2); Zm Rm i *…

多線程的三種創建方式

繼承Thread類的方式進行實現 public class MyThread extends Thread{ Override public void run(){//多線程具體業務邏輯} }在main方法里面創建子類對象&#xff0c;開啟線程 public static void main(String[] args) {MyThread t1 new MyThread(); MyThread t2 new MyThrea…

LLM大模型工程師面試經驗寶典--基礎版(2024.7月最新)

1.簡單介紹一下大模型【LLMs】&#xff1f; 大模型&#xff1a;一般指1億以上參數的模型&#xff0c;但是這個標準一直在升級&#xff0c;目前萬億參數以上的模型也有了。大語言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;是針對語言的大模型。 2.目前主…

基于布雷格曼偏差校正技術的全變分一維時間序列信號降噪方法(MATLAB R2018A)

信號降噪是信號處理的重要步驟之一&#xff0c;目的是提高所獲得信號數據的質量&#xff0c;以達到更高的定性和定量分析精度。信號降噪能提升信號處理其他環節的性能和人們對信息識別的準確率&#xff0c;給信號處理工作提供更可靠的保證。信號降噪的難點是降低噪聲的同時也會…

69. x 的平方根(簡單)

69. x 的平方根 1. 題目描述2.詳細題解3.代碼實現3.1 Python方法一&#xff1a;逐個遍歷方法二&#xff1a;二分查找 3.2 Java 1. 題目描述 題目中轉&#xff1a;69. x 的平方根 2.詳細題解 不能使用系統內置的函數&#xff0c;尋找某個數&#xff08;假定為x&#xff09;的…

網絡請求的高效處理:C++ libmicrohttpd庫詳解

一、libmicrohttpd簡介 libmicrohttpd是一個小型的C語言庫&#xff0c;用于創建HTTP服務器和客戶端。它提供了HTTP 1.1協議的完整實現&#xff0c;包括持久連接、管道化請求、虛擬主機等特性。libmicrohttpd的特點是&#xff1a; 輕量級&#xff1a;易于集成到C或C項目中。跨…

微信好友不小心拉黑了?這樣操作,友誼的小船不會翻

在數字化時代&#xff0c;微信已成為我們社交生活的核心&#xff0c;它不僅連接著親朋好友&#xff0c;更承載著我們的情感與回憶。 然而&#xff0c;情緒波動時&#xff0c;我們可能會一時沖動&#xff0c;將某些好友誤送入黑名單。但別擔心&#xff0c;今天&#xff0c;就讓…

IMU在手語識別中的應用

近期&#xff0c;一款由美國和中國科研團隊聯合研發的新型的穿戴設備——SignRing&#xff0c;以其獨特的IMU&#xff08;慣性測量單元&#xff09;技術&#xff0c;為聾啞人士的手語識別帶來了革命性的突破。SignRing不僅極大地擴展了手語識別的詞匯量&#xff0c;更提高了識別…

二維數組-----螺旋性矩陣輸出

題目有點難&#xff0c;ok其實是很難。。。 觀察樣例輸出&#xff0c;不難發現&#xff0c;螺旋數組中元素的遞增軌跡為&#xff1a;右右右、下下下、左左左、上上上 簡明為&#xff1a;右、下、左、上。可以設開始遞增的元素1的位置為&#xff08;x&#xff0c;y)&#xff0c…

由跨域引發一些思考

由跨域引發一些思考 前言什么是跨域&#xff1f;為什么會產生跨域&#xff1f;跨域場景示例&#xff1a;跨域常見的解決方法&#xff1a;JSONP&#xff08;JSON with Padding&#xff09;CORS&#xff08;Cross-Origin Resource Sharing&#xff09;document.domain iframeloc…

AutoHotKey自動熱鍵(二)中文版幫助手冊下載和自定義一般鍵盤快捷鍵

所有的操作其實在開發者手冊中已經交待完了,所以我們要使用中文的手冊來進行使用 autohotkey1.1.15中文手冊下載 好了,為什么有了中文手冊,這里還要進行一些具體的介紹呢,就是為了讓大家少踩坑,能夠快速形成生產力 這里先講一下自定義快捷鍵WIN鍵和ALT鍵和CTRL鍵和SHIFT鍵的組…

智慧的網絡爬蟲之CSS概述

智慧的網絡爬蟲之CSS概述 ? CSS 是“Cascading Style Sheet”的縮寫&#xff0c;中文意思為“層疊樣式表”&#xff0c;用于描述網頁的表現形式。如網頁元素的位置、大小、顏色等。css的主要作用是定義網頁的樣式。 CSS樣式 1. 行內樣式 行內樣式&#xff1a;直接定義在 HT…

深入理解Git:fetch與pull的區別與運用

在Git的版本控制世界中&#xff0c;fetch和pull是兩個至關重要的命令&#xff0c;它們都與從遠程倉庫獲取數據有關。然而&#xff0c;這兩個命令在功能和用法上卻存在著顯著的差異。本文將詳細解析fetch和pull的區別&#xff0c;以及它們在實際開發中的應用&#xff0c;幫助讀者…

Qt 5.14.2+Android環境搭建

1. 安裝QT5.14.2的過程中&#xff0c;選中套件&#xff08;kit&#xff09; qt for android。 如果已經安裝了qt creator但沒有安裝該套件&#xff0c;可以找到在qt安裝目錄下的MaintenanceTool.exe&#xff0c;運行該程序添加套件。 2. 安裝jdk8&#xff0c;android sdk&…

五分鐘了解MQ消息集成

一、MQ消息集成的定義 MQ消息集成是通過消息中間件&#xff08;Message Queue&#xff09;實現的一種數據集成方式。它通過將數據發送到中間件中&#xff0c;再從中間件中接收數據&#xff0c;實現不同系統之間的數據交換。在MQ消息集成中&#xff0c;發送者和接收者之間不需要…

vue3.2及以上 父調子的方法defineExpose定義供父調用的方法及屬性

1、定義子類LoginForm&#xff1a; function handleLogin(account, token) {console.log(account,token)}defineExpose({handleLogin,}); 2、父類調用子類組件 const loginFormRef ref(); <LoginForm ref"loginFormRef" />loginFormRef.value.handleLogin(…

代碼隨想錄第38天|動態規劃

1049. 最后一塊石頭的重量 II 參考 備注: 當物體容量也等同于價值時, 01背包問題的含義則是利用好最大的背包容量sum/2, 使得結果盡可能的接近或者小于 sum/2 等價: 盡可能的平分成相同的兩堆, 其差則為結果, 比如 (abc)-d, (ac)-(bd) , 最終的結果是一堆減去另外一堆的和, 問…

Deep-LIBRA:一種用于可靠量化乳腺密度的人工智能方法,并在乳腺癌風險評估中進行了獨立驗證| 文獻速遞-深度學習自動化疾病檢查

Title 題目 Deep-LIBRA: An artificial-intelligence method for robust quantification of breast density with independent validation in breast cancer risk assessment Deep-LIBRA&#xff1a;一種用于可靠量化乳腺密度的人工智能方法&#xff0c;并在乳腺癌風險評估中…

【LeetCode】每日一題:相交鏈表

給你兩個單鏈表的頭節點 headA 和 headB &#xff0c;請你找出并返回兩個單鏈表相交的起始節點。如果兩個鏈表不存在相交節點&#xff0c;返回 null 。 圖示兩個鏈表在節點 c1 開始相交&#xff1a; 題目數據 保證 整個鏈式結構中不存在環。 注意&#xff0c;函數返回結果后&am…