自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

這個(gè)“搭子”不賴(lài)!用AI實(shí)現(xiàn)結(jié)對(duì)編程

譯文 精選
人工智能
本文從“結(jié)對(duì)編程”的角度出發(fā),介紹了自己通過(guò)與AI交流合作,學(xué)習(xí)新的語(yǔ)言和框架,進(jìn)而重建博客的過(guò)程。

譯者 | 陳峻

審校 | 重樓

您聽(tīng)說(shuō)過(guò)“結(jié)對(duì)編程(Pair Programming)”的概念嗎?根據(jù)維基百科,它是由兩名程序員共同開(kāi)展軟件開(kāi)發(fā)的一種方式。其中的一名程序員(或稱(chēng)“駕駛員”)負(fù)責(zé)編寫(xiě)代碼,另一名程序員(或稱(chēng)“觀察員”或“領(lǐng)航員”)需要在對(duì)方輸入每一行代碼時(shí),對(duì)其進(jìn)行審查。而且,兩名程序員經(jīng)常會(huì)互換角色。在審查的過(guò)程中,“觀察員”還會(huì)考慮工作的“戰(zhàn)略”方向,提出改進(jìn)意見(jiàn),以及有待未來(lái)解決的問(wèn)題。此舉的目的在于基于“觀察員”的指導(dǎo),“駕駛員”能夠?qū)⒆⒁饬θ考性谕瓿僧?dāng)前任務(wù)的“戰(zhàn)術(shù)”方面。

在過(guò)去的兩周里,我與人工智能(AI)一起,以結(jié)對(duì)編程的方式,在一個(gè)陌生的開(kāi)發(fā)環(huán)境中,使用了對(duì)自己來(lái)說(shuō)全新的語(yǔ)言和框架,重建了過(guò)往的博客。下面,我將分享該重建過(guò)程的一些與人工智能結(jié)對(duì)合作的經(jīng)歷。

背景介紹

為了確保人工智能在此次重建中發(fā)揮關(guān)鍵性作用,我制定了以下兩項(xiàng)規(guī)則:

  1. 使用傳統(tǒng)搜索引擎獲取信息的比例不超過(guò)20%。
  2. 不尋求其他開(kāi)發(fā)人員的幫助。

換句話說(shuō),在這次開(kāi)發(fā)和學(xué)習(xí)過(guò)程中,人工智能成為了我的主要信息來(lái)源、合作伙伴和助手。從某種意義上說(shuō),這種合作類(lèi)似于我們?cè)陂_(kāi)篇提到的、通過(guò)讓人工智能在其中扮演伙伴的角色,與之開(kāi)展“結(jié)對(duì)編程”。因此,在整個(gè)過(guò)程中,我使用到了GitHub Copilot、ChatGPT、ClaudeWarp(一種人工智能助手)等服務(wù),并且將它們視為重要的編程“伙伴”。

選擇技術(shù)棧

在選擇技術(shù)棧的階段,我主要依靠的是ChatGPTClaude。通過(guò)向他們提供我的技術(shù)背景和具體要求等詳細(xì)信息,我在多輪溝通中逐漸明確了自己需要的編程語(yǔ)言、框架和編輯器。

如您所知,與人工智能的對(duì)話可謂既自由又發(fā)散。每當(dāng)人工智能給出建議或提示時(shí),我都會(huì)深入研究其對(duì)應(yīng)的方向和細(xì)節(jié),并定期總結(jié)自己的理解,以便再次與人工智能進(jìn)行確認(rèn)。與幾個(gè)月前相比,GPT-4Claude 2已不再一味地去迎合提問(wèn)者,而是及時(shí)、禮貌地指出了我的理解總結(jié)中的錯(cuò)誤,并有效地避免了我在錯(cuò)誤的道路上越走越遠(yuǎn)。最終,我選擇了TypeScript、AstroTailWindCSSVSCode作為博客重構(gòu)的必要技術(shù)。

在此階段,人工智能為我高效地提供了有價(jià)值的信息,而且?guī)椭铱焖俚刈龀隽藳Q策。究其原因,我歸結(jié)為如下方面:

  1. 明確的要求:清晰且通俗易懂的需求,能夠簡(jiǎn)化與人工智能溝通的整個(gè)過(guò)程,并使之快速明白提問(wèn)者的意圖。
  2. 成熟的技術(shù)選擇:我所選擇的技術(shù)堆棧是由成熟的項(xiàng)目組成。這些項(xiàng)目通常擁有活躍的在線社區(qū)和豐富的官方文檔。這些信息為人工智能提供了可靠的語(yǔ)義資源,并確保了人工智能夠?qū)ζ渖婕暗降募夹g(shù)有深入理解。
  3. 結(jié)合個(gè)人經(jīng)驗(yàn):利用自己在其他編程語(yǔ)言方面的經(jīng)驗(yàn),我在“結(jié)對(duì)”討論中,使用了熟悉的語(yǔ)言、框架、以及開(kāi)發(fā)環(huán)境作為參考,以幫助人工智能更好地理解我的需求。
  4. 多個(gè)人工智能平臺(tái)的互補(bǔ)性:我同時(shí)在ChatGPTClaude上開(kāi)展了討論。雖然在大多數(shù)情況下,兩個(gè)平臺(tái)提供的信息整體相似,但是偶爾也出現(xiàn)不同的方向,這就相當(dāng)于您的“結(jié)對(duì)”中多了一個(gè)伙伴。
  5. 人工判斷不可或缺:盡管與傳統(tǒng)搜索相比,人工智能提供的信息總量有所減少,但是如果用戶(hù)缺乏分析能力和決策能力的話,他們可能仍然會(huì)犯“選擇困難癥”。因此,提問(wèn)者必須具備較強(qiáng)的分析和判斷能力。否則,過(guò)度的自由可能會(huì)阻礙我們獲得令人滿意的結(jié)果。

設(shè)置開(kāi)發(fā)環(huán)境

雖然我曾用過(guò)VSCode,但是從未將其作為我的主要開(kāi)發(fā)工具。同時(shí),我在安裝Node.js和使用NPM方面的經(jīng)驗(yàn)也相對(duì)有限。對(duì)此,AI詳盡地協(xié)助我構(gòu)建出了開(kāi)發(fā)環(huán)境。

值得一提的是AI回答命令行操作的過(guò)程。鑒于由Warp提供的AI助手使用起來(lái)非常便捷,因此在遇到錯(cuò)誤時(shí),我只需點(diǎn)擊閃電(??)按鈕,AI助手便會(huì)自動(dòng)將相關(guān)命令和輸出作為上下文,提交給人工智能。相比之下,在GitHub Copilot中,我得需要手動(dòng)選擇有待解釋的輸出內(nèi)容,以確保上下文的完整性。雖然我可以使用右鍵菜單中的人工智能選項(xiàng)、或快捷命令@workspace /explain #terminalSelection來(lái)完成這項(xiàng)工作,但總歸不如Warp便捷。

Xcode的集成測(cè)試環(huán)境不同,在VSCode中,開(kāi)發(fā)人員需要根據(jù)所使用的語(yǔ)言和框架,來(lái)選擇合適的測(cè)試框架和插件。在此過(guò)程中,我曾遇到了一些困難。起初,我試圖根據(jù)人工智能的建議安裝Jest,但由于開(kāi)發(fā)環(huán)境與Astro的兼容性問(wèn)題,而未能成功。在與人工智能討論了幾次未果后,我轉(zhuǎn)而使用了搜索引擎,不過(guò)仍然找不到解決方案。最終,網(wǎng)上的一篇文章提及了一個(gè)我從未告知AI的知識(shí)點(diǎn),及其有關(guān)配置的背景信息。據(jù)此,在人工智能的指導(dǎo)下,我成功實(shí)現(xiàn)了對(duì)Jest框架的配置。

不過(guò),在隨后的單元測(cè)試中,我又發(fā)現(xiàn)Jest無(wú)法與Astro的運(yùn)行環(huán)境協(xié)同工作。通過(guò)查閱Astro的官方文檔,我發(fā)現(xiàn)其實(shí)ViTest是更適合Astro的測(cè)試框架。而且,ViTest的安裝過(guò)程非常便利,可以完美地運(yùn)行Astro代碼的測(cè)試。

因此,在該項(xiàng)目中,我最終配置了兩個(gè)測(cè)試框架,即:將ViTest用于Astro特定測(cè)試,并將Jest用于其他測(cè)試。

此外,不知道是否配置問(wèn)題,GitHub Copilot通過(guò)快捷命令所生成的默認(rèn)測(cè)試代碼是基于Jest的。而為了生成適合ViTest的測(cè)試代碼,我需要通過(guò)與AI對(duì)話,明確提出該請(qǐng)求方可。

通過(guò)上述經(jīng)歷,我意識(shí)到:即使有人工智能和搜索引擎的幫助,最權(quán)威的信息來(lái)源仍然是官方文件。也就是說(shuō),雖然人工智能對(duì)這些文件有相當(dāng)?shù)牧私?,但有時(shí)也會(huì)遺漏一些關(guān)鍵信息。可見(jiàn),官方文件具有無(wú)可替代的權(quán)威性,仍然是我們首選的信息來(lái)源。

通過(guò)代碼閱讀學(xué)習(xí)新的語(yǔ)言

通過(guò)閱讀由Astro提供的官方模板,我了解了Astro,也是學(xué)習(xí)TypeScript的最佳途徑。同樣,在此階段,人工智能起到了決定性的輔助作用。它大幅提高了我的學(xué)習(xí)效率。在Astro項(xiàng)目中,Astro文件可能包含諸如:TypeScriptJavaScript、HTML、CSS、以及特定的Astro標(biāo)記與用法等各種元素。顯然,對(duì)于像我這樣沒(méi)有相關(guān)經(jīng)驗(yàn)的人來(lái)說(shuō),如果沒(méi)有人工智能的幫助,將很難知曉該從何處開(kāi)始。

雖然Astro相比其他框架來(lái)說(shuō)更新,但是人工智能的知識(shí)庫(kù)已經(jīng)能夠?qū)ζ鋼碛凶銐虻牧私猓⒖梢郧宄刂赋龃a不同部分的含義。通過(guò)人工智能對(duì)于具體代碼的詳細(xì)解釋?zhuān)抑饾u理解了代碼的結(jié)構(gòu)和邏輯。甚至,對(duì)于那些我不理解的地方,它也能按需給出進(jìn)一步的解釋。

在與AI討論的過(guò)程中,我充分利用了自己對(duì)于其他編程語(yǔ)言和框架的了解,作為與人工智能對(duì)話的參考。同時(shí),我還會(huì)定期總結(jié)自己的理解,并請(qǐng)人工智能幫助糾正其中的錯(cuò)誤認(rèn)識(shí)。此外,隨著討論的深入,我也會(huì)定期要求人工智能提供之前討論過(guò)的結(jié)論,以作記錄之用。

該階段有關(guān)的代碼解讀和討論,主要是在GitHub Copilot中進(jìn)行的。雖然GitHub Copilot的總體表現(xiàn)良好,但我們?cè)谑褂眠^(guò)程中仍有一些事項(xiàng)需要注意,例如:

  1. 如果沒(méi)有選擇特定的代碼,GitHub Copilot只會(huì)解釋當(dāng)前編輯窗口中可見(jiàn)的代碼。
  2. 為了向GitHub Copilot提供更多的上下文,我們有必要手動(dòng)選擇要提交的代碼,以作為當(dāng)前問(wèn)題的上下文。
  3. GitHub Copilot不支持跨多個(gè)文檔的討論,因此用戶(hù)需要自己整合不同文檔的內(nèi)容,才能形成完整的上下文。
  4. GitHub Copilot的答案有長(zhǎng)度限制。如果答案太長(zhǎng),它可能會(huì)提示涵蓋掉了已提供的代碼。在這種情況下,我們可能需要ChatGPTClaude的幫助。
  5. 在某些情況下,GitHub Copilot提供的答案質(zhì)量可能不如ChatGPT

編程實(shí)踐

根據(jù)提示自動(dòng)生成代碼,是開(kāi)發(fā)人員體驗(yàn)人工智能強(qiáng)大功能的最佳方式之一。最近在開(kāi)發(fā)者社區(qū)中熱議的、前文已提到的GitHub Copilot,既有能力理解開(kāi)發(fā)者的意圖,又能夠?qū)崟r(shí)生成高質(zhì)量的代碼。對(duì)于我的博客重構(gòu)項(xiàng)目而言,我不僅想創(chuàng)建一個(gè)新的博客,而且希望在此過(guò)程中學(xué)習(xí)和掌握新的語(yǔ)言和框架。對(duì)此,在啟用了GitHub Copilot后,只要我提供了足夠多的提示和注釋?zhuān)?/span>Copilot就能夠快速地生成相應(yīng)的代碼。

起初我認(rèn)為這樣挺好,但是隨著使用的深入,我發(fā)現(xiàn)自己在短時(shí)間內(nèi),居然養(yǎng)成了向人工智能索取程序代碼的習(xí)慣。它讓我更關(guān)注的是注釋對(duì)代碼生成的影響,而不是具體代碼的實(shí)現(xiàn)概念。這顯然與我想通過(guò)重構(gòu)來(lái)掌握一門(mén)新的語(yǔ)言的愿望是相矛盾的。面對(duì)人工智能給出的代碼結(jié)果,我甚至產(chǎn)生一種以為自己已經(jīng)掌握了這門(mén)語(yǔ)言的錯(cuò)覺(jué)。

意識(shí)到這種情況后,我只有在無(wú)法獨(dú)立實(shí)現(xiàn)代碼的時(shí)候,才會(huì)啟用GitHub Copilot的實(shí)時(shí)代碼生成功能。也就是說(shuō),不管寫(xiě)得好不好,我都會(huì)先嘗試著先自己寫(xiě),然后讓人工智能幫我發(fā)現(xiàn)問(wèn)題,進(jìn)而逐步提高代碼的可讀性和可用性。在這個(gè)過(guò)程中,我會(huì)向人工智能請(qǐng)教語(yǔ)法上的細(xì)節(jié),讓人工智能指導(dǎo)我使用更符合TypeScript的編程范式、以及更合適的代碼實(shí)現(xiàn)方法。

由于同一功能的代碼會(huì)被多次重復(fù)創(chuàng)建,因此提前創(chuàng)建單元測(cè)試是非常重要的。在VSCode中,無(wú)論是Jest還是ViTest,都可以啟用自動(dòng)化測(cè)試,以便代碼在被修改后,立即運(yùn)行測(cè)試。我希望Xcode也能提供類(lèi)似的功能。畢竟在不斷修改代碼的過(guò)程中,經(jīng)常會(huì)出現(xiàn)需要優(yōu)化或糾正錯(cuò)誤的情況。我們只有通過(guò)測(cè)試,才能及時(shí)發(fā)現(xiàn)問(wèn)題。

小結(jié)

經(jīng)過(guò)這段時(shí)間與人工智能產(chǎn)品的密切合作,我逐漸認(rèn)識(shí)到:在有效利用人工智能的同時(shí),保持個(gè)人技術(shù)成長(zhǎng)和獨(dú)立思考的重要性。面對(duì)勢(shì)不可擋的人工智能的飛速發(fā)展趨勢(shì),它將毫無(wú)疑問(wèn)地對(duì)我們未來(lái)的生活和工作等方方面面產(chǎn)生深遠(yuǎn)的影響。

目前,人工智能已經(jīng)具備了快速編寫(xiě)代碼的能力,許多開(kāi)發(fā)人員或多或少地?fù)?dān)心會(huì)被它所取代。作為一名開(kāi)發(fā)人員,我認(rèn)為避免被取代的關(guān)鍵在于:不斷提高自身技能,展現(xiàn)人工智能無(wú)法取代的獨(dú)特價(jià)值。也就是說(shuō),過(guò)度地依賴(lài)人工智能確實(shí)可以在某些方面提高工作效率,或者實(shí)現(xiàn)以前不可能實(shí)現(xiàn)的結(jié)果。但是長(zhǎng)此以往,開(kāi)發(fā)者可能會(huì)逐漸喪失自身優(yōu)勢(shì),最終從人工智能工具的使用者,很可能會(huì)轉(zhuǎn)變?yōu)槿斯ぶ悄芄ぞ叩闹郑喝祟?lèi)提示生成器(Human Prompt Generators)。當(dāng)然,總的來(lái)說(shuō),人工智能在幫助我的學(xué)習(xí)和重建過(guò)程中,確實(shí)給我?guī)?lái)了巨大的驚喜。將來(lái),我計(jì)劃將人工智能更多地融入自己的工作。

譯者介紹

陳峻(Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項(xiàng)目實(shí)施經(jīng)驗(yàn),善于對(duì)內(nèi)外部資源與風(fēng)險(xiǎn)實(shí)施管控,專(zhuān)注傳播網(wǎng)絡(luò)與信息安全知識(shí)與經(jīng)驗(yàn)。

原文標(biāo)題:Pair Programming with AI,作者:fatbobman

責(zé)任編輯:華軒 來(lái)源: 51CTO
相關(guān)推薦

2013-01-30 10:03:01

結(jié)對(duì)編程編程語(yǔ)言

2013-05-06 10:22:07

結(jié)對(duì)編程敏捷開(kāi)發(fā)敏捷管理

2013-11-28 10:22:37

編程結(jié)對(duì)編程

2010-01-27 09:33:40

結(jié)對(duì)編程

2013-06-20 09:38:57

2015-09-11 08:59:03

結(jié)對(duì)編程

2023-01-18 23:20:25

編程開(kāi)發(fā)

2014-03-03 09:48:55

SSHTmux

2013-05-24 09:37:25

結(jié)對(duì)編程結(jié)對(duì)編程實(shí)踐BitBucket

2023-04-20 18:45:44

2015-09-11 09:43:27

分析編程特征

2011-06-03 09:58:03

結(jié)對(duì)編程程序員

2021-04-18 07:09:50

工具類(lèi)異步編程

2011-08-30 10:03:59

軟件工程

2017-10-20 11:07:45

編程代碼編程模式

2025-04-07 00:00:00

DeepSeekAI輔助編程

2024-08-23 08:40:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)