轉(zhuǎn)眼間 2023 年又將結(jié)束了。我從 2007 年碩士畢業(yè)參加工作至今,已經(jīng)以 回顧自己這些年的 IT 從業(yè)經(jīng)歷,我覺得有三次的技術(shù)發(fā)展浪潮,給我留下了深刻的印象。 第一次是我還在計(jì)算機(jī)專業(yè)本科就讀時(shí),我們寢室兄弟們用的都還是 Windows 操作系統(tǒng)。一位兄弟從圖書館借了一本 Linux 操作系統(tǒng)的書,坐在電腦前,書放在膝蓋上,一邊看著書,一邊在鍵盤上敲命令,想在自己電腦上安裝一個(gè) Linux 系統(tǒng)。后來隔壁寢室一位同學(xué)過來,看到后指點(diǎn)說,你如果只是想學(xué)習(xí) Liunux 系統(tǒng),其實(shí)不用這么麻煩,你在你的 Windows 操作系統(tǒng)里下載一個(gè) Vmware,安裝個(gè) Linux 虛擬機(jī)就可以了。我當(dāng)時(shí)一聽,哇,直接在 Windows 系統(tǒng)里運(yùn)行一個(gè)完整的 Linux 系統(tǒng)?太神奇了!第一次與虛擬化技術(shù)的親密接觸,給我留下了深刻印象。 第二次我深深感受到計(jì)算機(jī)技術(shù)魅力的時(shí)候,是我 2017 年與 Docker 和 Kubernetes 虛擬化技術(shù)的初次接觸。當(dāng)時(shí)云原生開發(fā)的理念已經(jīng)大行其道,我所在的 SAP 公司也在云轉(zhuǎn)型的道路上邁開大步往前走,公司內(nèi)部也舉辦了很多輪的 Docker & Kubernetes 等技術(shù)培訓(xùn)。我當(dāng)時(shí)已經(jīng)從服務(wù)器端編程的 ABAP 技術(shù)棧轉(zhuǎn)到了 Java 和 Node.js,搭建本地開發(fā)環(huán)境一度成為了我的噩夢(mèng)。Docker 提供了應(yīng)用與環(huán)境的隔離,簡(jiǎn)化了應(yīng)用的部署和擴(kuò)展,使得應(yīng)用能在不同的環(huán)境中以一致性的方式運(yùn)行。其輕量級(jí)特性使得它相比傳統(tǒng)虛擬機(jī)技術(shù),在資源利用和啟動(dòng)速度上都有明顯優(yōu)勢(shì)。 然而今年年初開始以 ChatGPT 為代表的 AIGC 火爆出圈,給我?guī)淼木薮蟮恼鸷?,遠(yuǎn)遠(yuǎn)超過了我當(dāng)初第一次接觸虛擬機(jī)和 Docker & Kubernetes 時(shí)的感受。 盡管技術(shù)圈內(nèi)有一些悲觀的看法,比如 和我 2007 年一起畢業(yè),參加工作的同學(xué)們,如今仍然和我在一線編程崗位上的,已經(jīng)不多了。他們中的絕大多數(shù),已經(jīng)轉(zhuǎn)崗成為了 Manager,架構(gòu)師,產(chǎn)品經(jīng)理,質(zhì)量工程師等等。而我這些年來在公司,每年被分配擔(dān)任一些剛畢業(yè)參加工作的年輕同事的導(dǎo)師,看著他們年輕充滿活力,朝氣蓬勃的工作勁頭,我時(shí)不時(shí)會(huì)問自己:我這個(gè)老程序員,和這些年輕的程序員相比,我的核心競(jìng)爭(zhēng)力究竟在哪里? 在我剛剛成為一名年輕的程序員時(shí),我曾經(jīng)誤以為,一個(gè)程序員會(huì)使用的編程語言、編程工具越多,運(yùn)用的技術(shù)越流行,掌握的技術(shù)棧越熟練,這個(gè)程序員就越優(yōu)秀。在這種想法的驅(qū)動(dòng)下,我盡可能多地去嘗試新的編程技術(shù)和工具,不管這些東西在自己工作中是否能應(yīng)用得上。每天泡各種技術(shù)論壇,一看到介紹新鮮技術(shù)和工具的帖子,馬上在自己本機(jī)上嘗試。堅(jiān)持了一段時(shí)間之后我發(fā)覺,即便這樣做,也沒有成為自己心目中 后來我結(jié)了婚,有了小孩,父母的年齡也越來越大了,我感覺自己能分配到潛心專研技術(shù)的業(yè)余時(shí)間越來越少。既然屬于自己能夠分配的時(shí)間的絕對(duì)數(shù)量沒有辦法增加,那我只有提高單位時(shí)間的產(chǎn)出,盡可能提高學(xué)習(xí)效率。 所以我決定在 ChatGPT 等 AI 工具干掉我之前,我先盡可能利用它們提高自己的工作效率,盡可能延長(zhǎng)自己的編程壽命。 今年我開始用 ChatGPT 來輔助自己完成那些技術(shù)含量低的,機(jī)械的重復(fù)工作。 比如讓 ChatGPT 幫我寫單元測(cè)試代碼。 使用的 ChatGPT prompt: ChatGPT 會(huì)自動(dòng)生成單元測(cè)試代碼,我們可以在這些基礎(chǔ)上,進(jìn)行人工審查然后修改。 我現(xiàn)在是一個(gè) Angular 開發(fā)人員,幾乎每天都要和其標(biāo)準(zhǔn)庫里的 HttpClient 工具庫打交道。 工作中我對(duì)其 request 方法感興趣,想閱讀其源代碼,但是對(duì)于里面?zhèn)€別語句不甚理解: 那么我首先讓 ChatGPT 給我介紹整個(gè) request 方法大致完成一件什么事情,使用 prompt: ChatGPT 給出的答復(fù),我一目十行,很快就了解了這個(gè)方法的大致目的。 然后再給 ChatGPT 發(fā)出指令,提醒它要逐行介紹: 于是得到了我期望的解答。 代碼重構(gòu)和性能優(yōu)化下面是一段存在性能問題的 ABAP 代碼。這段代碼首先從數(shù)據(jù)庫表 tadir 里讀取 200 條 Class 定義,然后循環(huán)這 200 條記錄,在循環(huán)體內(nèi)再次根據(jù)定義里的 Class 名稱字段,到另一張數(shù)據(jù)庫表 seoclasstx 里讀取 Class 的描述信息。 REPORT z.DATA: lt_dev TYPE TABLE OF tadir, ls_dev TYPE tadir, lv_text TYPE seoclasstx-descript.SELECT * INTO TABLE lt_dev FROM tadir UP TO 200 ROWS WHERE object = 'CLAS' AND author = sy-uname.LOOP AT lt_dev INTO ls_dev. SELECT SINGLE descript FROM seoclasstx INTO lv_text WHERE clsname = ls_dev-obj_name AND langu = sy-langu. WRITE:/ 'class name: ', ls_dev-obj_name, ' text:', lv_text.ENDLOOP. 這樣應(yīng)用服務(wù)器總共會(huì)對(duì)數(shù)據(jù)庫服務(wù)器造成 1 + 200 = 201 次讀取操作。 我詢問 ChatGPT 以上代碼是否存在可以優(yōu)化的地方,ChatGPT 的回復(fù)一語中的,排在第一點(diǎn)的建議就非常切中要害:將第二個(gè) SELECT 語句放在循環(huán)體之外: 我再對(duì) ChatGPT 發(fā)出了指令: ChatGPT 也完美的完成了任務(wù): 將第二個(gè) SELECT 語句提至循環(huán)體外,現(xiàn)在數(shù)據(jù)庫服務(wù)器總共的讀取次數(shù)從 201 次降低到了 2 次。 作為一個(gè)年過四旬的程序員,我的記憶力尤其是王二小過年——一年不如一樣了。正則表達(dá)式的語法,我總是今天用了明天就忘,每次要用都得去網(wǎng)上查。 有了 ChatGPT 之后,正則表達(dá)式的編寫和理解,我都交給 ChatGPT 了。 下列這兩段正則表達(dá)式是我負(fù)責(zé)的 SAP 電商云前臺(tái)登錄頁面里,用戶名和 password 兩個(gè)字段驗(yàn)證值合法性的正則表達(dá)式: export const EMAIL_PATTERN = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; // eslint-disable-line export const PASSWORD_PATTERN = /^(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[!@#$%^*()_\-+{};:.,]).{6,}$/; 我直接讓它告訴我這些正則表達(dá)式的設(shè)計(jì)思路: 程序員是一門需要活到老,學(xué)到老的職業(yè)。當(dāng)一個(gè)老程序員工作的部門,需要切換到一個(gè)新的技術(shù)棧時(shí),老程序員對(duì)他的上級(jí)說,我年齡太大了,學(xué)不動(dòng)這些新技術(shù)了。這可能嗎?有條件要上,沒條件創(chuàng)造條件也要上。 比如我使用 Angular 開發(fā)已經(jīng)有一段時(shí)間了,現(xiàn)在我想學(xué)習(xí) React,因此向 ChatGPT 咨詢,讓它給我建議一些 React 的學(xué)習(xí)要點(diǎn): 作為一個(gè)已經(jīng)有 Angular 基礎(chǔ)的前端開發(fā)人員,我最感興趣的是 Angular 和 React 二者最大的區(qū)別是什么?從 ChatGPT 那里我得到了一些解答。 雖然我明白 ChatGPT 的回答只能作為參考,但至少它能夠給我很多啟發(fā)和靈感,作為我進(jìn)一步到 React 官網(wǎng)開始精讀和深入學(xué)習(xí)的指引。 盡管 Google 搜索也能某種程度上滿足我的需求,但是 Google 搜索需要我精心選擇關(guān)鍵字,然后從搜索結(jié)果列表里手動(dòng)篩選出需要繼續(xù)閱讀的網(wǎng)頁。并且上面幾個(gè)例子里正則表達(dá)式的解讀,單元測(cè)試代碼的自動(dòng)生成,代碼重構(gòu)和性能優(yōu)化的建議,現(xiàn)階段 Google 還無法像 ChatGPT 這樣能夠以交互式的方式完成我發(fā)出的指令。 當(dāng)然除了 ChatGPT 之外,我今年也用了其他的 AI 工具,比如 Microsoft New Bing,來輔助我的工作。 比如我提問:SAP ABAP 里有幾種生成 PDF 的技術(shù)? 回答如下: 在 SAP ABAP 中,有這幾種生成 PDF 文件的技術(shù)。SAP 提供了 PDF1 設(shè)備類型(也稱為"PDF 轉(zhuǎn)換器"),您可以使用它將 OTF 或列表文檔轉(zhuǎn)換為 PDF 格式。當(dāng)您打印 SAPscript 或 Smart Form 時(shí),您可以選擇獲取 OTF 格式的生成文檔,然后以編程方式將 OTF 轉(zhuǎn)換為 PDF 二進(jìn)制。此外,從 NetWeaver 2004(版本 6.40)開始,SAP 提供了一種名為"SAP Interactive Forms by Adobe"的技術(shù)(通常稱為 Interactive Forms, Adobe Forms 或 PDF Forms) ,它允許您在不使用任何中間媒介的情況下本地生成 PDF。 大家注意上圖綠色高亮區(qū)域的注解"1", 指明了答案關(guān)鍵點(diǎn)的出處,即來自索引 1 指向的網(wǎng)頁。而索引 1 即是 SAP 社區(qū) wiki,點(diǎn)擊上圖黃色區(qū)域即可打開。 我們可以將 New Bing 的回答同 ChatGPT 的回答做一些比較: (1) 有朋友抱怨 ChatGPT 的回復(fù)是"一本正經(jīng)的胡說八道",比如問它如何用 ABAP 給 PDF 生成水印,看似回答得頭頭是道,實(shí)際上給出代碼里包含的那些 ABAP 類,在系統(tǒng)根本不存在。而 New Bing 的回答,關(guān)鍵點(diǎn)都提供了出處,點(diǎn)擊超鏈接即可閱讀原始網(wǎng)頁,這種有理有據(jù)的回答方式,比起 ChatGPT 更令人信服。 (2) 上圖序號(hào)為 2,3,4 的其他網(wǎng)頁,New Bing 認(rèn)為同用戶提的問題的答案非常相關(guān),故也羅列在結(jié)果里供提問者參考。 上圖藍(lán)色區(qū)域是 New Bing 認(rèn)為同 SAP ABAP 里有幾種生成 PDF 的技術(shù) 這一問題和答案相關(guān)的其他提問,點(diǎn)擊之后即可向 Bing 發(fā)起新的提問。 我們打開 New Bing 給出的答案的出處 1,即 SAP 社區(qū) wiki. 簡(jiǎn)單瀏覽后,發(fā)現(xiàn) New Bing 給的答案確實(shí)質(zhì)量非常高。這個(gè) wiki 頁面是 SAP ABAP PDF 專題頁面,里面干貨很多。 再看排在 New Bing 回答結(jié)果出處第二順位的這個(gè)網(wǎng)頁,從網(wǎng)址看是一個(gè)知乎專欄鏈接: 打開一看,這不是筆者本人的知乎專欄嗎?我的知乎專欄能出現(xiàn)在 New Bing 搜索結(jié)果排名這么靠前的位置,感謝 Bing 對(duì)我文章的認(rèn)可。 排在出處第三位和第四位的,分別是兩篇 CSDN 博客,介紹了如何將 Smartform 生成 PDF 并通過郵件發(fā)送的實(shí)現(xiàn)。兩篇文章一上來就直入主題,提供了 ABAP 生成 PDF 的實(shí)現(xiàn)代碼,沒有廢話。 至少在今年,AI 工具并沒有搶走我的飯碗。即便 AI 將來某一天終究會(huì)干掉程序員,但是在這一天到來之前,我仍然會(huì)始終保持積極的心態(tài),利用 AI 不斷提高自己的開發(fā)效率,盡量延長(zhǎng)自己的編程壽命。 與各位同行共勉。 |
|