Copilot 來了,程序員會(huì)失業(yè)嗎?ChatGPT 又來了,程序員會(huì)失業(yè)嗎?程序員本來就焦慮,最近似乎越來越焦慮了。在 Copilot 問世時(shí),我感覺自己退化成了工具人:《我退化成一個(gè)只會(huì)敲 Tab 鍵的工具人了!》。如今 ChatGPT 又來了,這次我是什么感覺呢?感覺真的 Google 和 StackOverflow 已經(jīng)不好用了。
不過,經(jīng)過一段時(shí)間對(duì) Copilot 的使用,我的心態(tài)已經(jīng)平和了許多,不再擔(dān)心失業(yè)了。回頭來看,其實(shí),它們都是效率工具,它們不是要干掉程序員,而是更好地幫助程序員。眾所周知,程序員可以改變世界,那么,借助 Copilot 和 ChatGPT,程序員的自我感覺更棒了!可以更加肆無忌憚地在未知領(lǐng)域里自由探索了!
(資料圖片)
探索 Vue前幾天,我開始對(duì)一個(gè) Vue 項(xiàng)目做一些迭代優(yōu)化,這是我第一次接觸 Vue 項(xiàng)目。我需要對(duì)該 Vue 項(xiàng)目進(jìn)行保護(hù),添加登錄功能,詳細(xì)過程見《使用 IdentityServer 保護(hù) Vue 前端》。我在這一篇日志里提了一下,說自己參考 Vue 的官方文檔,給 Vue 應(yīng)用添加的方法,在 vue-router 的導(dǎo)航守衛(wèi)里,按照 vue-router 的官方文檔去拿這個(gè)方法,居然是 undefined!通過 Google 搜索了很久,都是這種官方文檔類似的說明(然而并不管用!),于是我去 StackOverflow 上提了這個(gè)問題:https://stackoverflow.com/questions/74769607/how-to-access-vues-methods-from-navigation-guard,這個(gè)問題到現(xiàn)在,也沒有其他人(除了我自己)回復(fù)。
于是我抱著試一試的心理,在 ChatGPT 上問了一下,沒有想到立即得到了詳細(xì)的解答:
它的思路是,將方法添加在 Vue 的 prototype 中,這樣,在導(dǎo)航守衛(wèi)里就能使用 this關(guān)鍵字去訪問全局方法了!這真的是比 Google 好用呀!
探索 Mybatis plus我對(duì) Java 也不熟,它的生態(tài)中很多組件,我聽上去感覺就是拼寫錯(cuò)誤。昨天在 Mybatis plus 上就栽了跟頭。事情是這樣的,我和同事們業(yè)余做了一個(gè)項(xiàng)目(有興趣一起來玩的同學(xué)們歡迎聯(lián)系哈),目前剛開始,正在做一個(gè) 3D 世界里的角色可以選擇自己的皮膚顏色的功能。
https://brickverse.vercel.app/
或者這個(gè)鏈接:https://brick.cat
前端部署在 Vercel 上,后端部署在 Okteto 上。后端服務(wù)是一個(gè) Java 項(xiàng)目,我在這個(gè)項(xiàng)目里添加了 UserPreference 這個(gè)數(shù)據(jù)表,用來保存用戶的偏好設(shè)置,詳細(xì) api 文檔見:https://brickverse-user-service-gracewen1.cloud.okteto.net/doc.html#/brick/%E5%BD%93%E5%89%8D%E7%94%A8%E6%88%B7%E5%81%8F%E5%A5%BD%E7%AE%A1%E7%90%86/createOrUpdateUserPreferenceUsingPOST。
用戶可以有很多設(shè)置,我的設(shè)想是每個(gè)用戶可以有多個(gè) key-value 鍵值對(duì),但同一個(gè)用戶,同一個(gè) key,只能有一條記錄。為了簡單,就提供一個(gè)接口給到用戶添加或者更新偏好。我的設(shè)想是,對(duì)于同一個(gè) userId, key,如果沒有記錄就添加,有的話,就更新 value。我對(duì) Mybatis plus 不熟,但是在寫的過程中,點(diǎn)出了一個(gè) saveOrUpdate 方法,就認(rèn)為這正是我要的,保存或者更新嘛。我在 Flyway 腳本里將 userId 和 key 設(shè)置成唯一索引,心想,當(dāng)我試著保存一個(gè)記錄時(shí),首先嘗試插入,碰到已有記錄的錯(cuò)誤時(shí),該方法就轉(zhuǎn)而調(diào)用 update。
CREATE TABLE `user_preference` (`id` bigint NOT NULL AUTO_INCREMENT,`user_id` varchar(100) NOT NULL,`key` varchar(100) NOT NULL,`value` varchar(10000) NOT NULL,`create_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `user_id_key` (`user_id`,`key`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
public boolean saveOrUpdatePreference(String userId, UserPreferenceDto dto) {var key = dto.getKey();var value = dto.getValue();UserPreference userPreference = new UserPreference();userPreference.setUserId(userId);userPreference.setKey(key);userPreference.setValue(value);return this.saveOrUpdate(userPreference);}
沒想到,實(shí)際上,當(dāng)想要更新這個(gè) value 時(shí),仍然報(bào)了唯一索引沖突錯(cuò)誤,而沒有進(jìn)行更新。這時(shí),我才知道,這個(gè) saveOrUpdate,在不傳入主鍵時(shí),總是嘗試插入。這時(shí)我用 Google 搜索如何讓 saveOrUpdate 根據(jù)自定義查詢條件去判斷是否已存在呢?發(fā)現(xiàn)似乎只有國人在用 Mybatis Plus,找到的鏈接全是 csdn 對(duì) saveOrUpdate 的泛泛簡介,沒有一篇文章講解高級(jí)用法。
這時(shí)我抱著試一試的想法,去問了一下 ChatGPT,沒想到它立刻馬上給予了詳細(xì)的說明,不僅有代碼示例,還有溫馨提示,主要指出我的代碼問題在于調(diào)用 saveOrUpdate 時(shí),沒有去數(shù)據(jù)庫里查詢已有記錄。
你看,它給的代碼示例,在調(diào)用 saveOrUpdate 之前,先使用 QueryWrapper 去查詢了數(shù)據(jù)庫里的現(xiàn)有記錄,然后再設(shè)置值??吹竭@里我秒懂了,我需要在調(diào)用 saveOrUpdate 之前,根據(jù) userId 和 key 來查詢一下數(shù)據(jù)庫中的記錄。這時(shí),我想,能不能把這個(gè)查詢做為參數(shù)直接扔給 saveOrUpdate 呢?我試著在 saveOrUpdate 的第一個(gè)參數(shù)后加了一個(gè)逗號(hào),這時(shí), Copilot 就自動(dòng)幫我補(bǔ)全了代碼,我一看,還正是我需要的條件呢!
我按了一下 Tab 鍵,提交了這個(gè)改動(dòng):
在 cicd 流水線跑完后,我再試了一次,重新選擇皮膚顏色,更新成功了!
總結(jié)我感覺自己從此可以擺脫面向 Google 和 StackOverflow 編程的習(xí)慣了,轉(zhuǎn)而面向 ChatGPT 和 Copilot 編程。ChatGPT 和 Copilot,可以讓程序員在嘗試新的領(lǐng)域時(shí),變得更加有效率。就像朋友圈有朋友留言說的,ChatGPT 和 Copilot 可以互相結(jié)對(duì)編程,讓 AI 們?yōu)槲覀兇蚬ぃ?/p>
標(biāo)簽:
北京豐臺(tái)站開始聯(lián)調(diào)聯(lián)試 將承擔(dān)京廣、京港臺(tái)高鐵運(yùn)輸任務(wù)
要文