碼農近況與ChatGPT雜感

Patrick Su
浣熊派🦝🥧
Published in
6 min readFeb 17, 2024

近況:

本來是去年準備跳槽一波帶走後想寫一篇分享一下,但各種拖延加上面試瘋狂被拒所以作罷。2023實在起起伏伏,年初公司裁員,中間被告知進PIP,後來瘋狂投履歷未果,最後因為部門有人離職又成功苟延殘喘,直至最近仍在佛系求跳槽中,畢竟在待遇方面試一輪下來覺得非常有成長空間,公司除了全遠距跟有額外每個月一個週五彈修之外,薪資福利十分雞肋。

不知道最近在面試的各位有沒有覺得,比2022難非常多,JD上的要求技能與年資卡得很嚴,加上面試種類實在太多了,刷題,系統設計之外,常有一些匪夷所思的回家作業甚至是整個下午的Live Coding。不知道是不是大廠裁員或不太招人導致市場上人才太多,刷Linkedin整個荷蘭一天軟工缺大概也只有500個上下,扣掉重複的,年資要求差太多,Freelancer不給簽證外的,剩下的實在不多啊。目前刷題比較順之外,常在後面幾輪技術面試搞得疲於奔命,還好有ChatGPT能快速修改履歷與產出Cover Letter節省不少時間。

ChatGPT — 你最好的廉價勞工:

買了GPT4以後幾乎天天都是寫代碼小幫手,寫unit test這種基本操作之外,Ticket Refinement,對需求提出疑義,Code Review等等。

我常用生成Cover Letter的Prompt舉例:
Act like an experienced job-hunting coach. Generate a cover letter for the job application based on the information about my {CV} and the {job description}. The letter should be less than 400 words with 4 paragraphs, be concise, be creative, use easy words, explanation, and context should be based on my skill and how it matches the {CV} and the {job description} Makes me stand out, and be prominent among all candidates. Saying that <一些公司對公司的了解與動機>. {CV} :
{job description}:

最近的想法是如何用ChatGPT來幫助你從零開始執行一個新的Side Project。
舉例:
You are a staff Java developer, I am a software engineer who wants to start a side project using Java, Spring Boot, Postgresql, docker, etc to build projects related to banks, payment, and fintech domains. The project needs to show my skill in building production and enterprise-level distributed microservices independently. I found a related project on github with the README: ``` PaiP2P is a P2P platform providing secure financial services. It uses advanced tech solutions for interface standard, authentication, distributed messaging, task scheduling, and database sharding. Updated Tech Stack and Features: Spring Boot: The core framework for creating stand-alone, production-grade Spring-based Applications. Spring Cloud Gateway: A modern, high-performance API gateway built on Spring Framework 5 and Project Reactor. Spring Security Oauth2: For robust authentication and authorization using JWT and OAuth2 standards.
…下略

經過幾番來回討論,的確是能弄出個合理的架構並開始寫代碼。但中間不免遇到寫出來code鬼打牆的問題(對話太長翻不出例子)。深究原因是因為使用了自己不熟悉的框架,又因為我無法把問題拆分足夠細而導致回答的東西underfit。這個特性相當有趣,在一些概略性與較為general的問題,其實能有收斂與歸納問題的特性,但是當進入工程實現細節時,不把完整的需求定義清楚,又容易出現過於概略性的代碼。加上其記憶特性為,越接近的prompt資訊越容易利用,所以常會出現健忘的情況,得要自己手動置頂並請他summarize目前情況來解決。

以程式語言或軟體開發技能學習上,這已足以是個顛覆性的存在。ChatGPT能大幅加速與強化超速學習書中提到兩個重要原則:

  • 反覆操練(Drill)
  • 意見回饋(Feedback)

一般學習程式的方式不外乎:

  • 網路影音課程
  • 官方文檔
  • 實際Hands-On

其中又以運用想學習的程式語言或框架實戰一個項目最為有效,雖然也最痛苦。藉由不停試錯,不停Google找答案,直到實現出來為止。但是中間常會有某個東西看了基本範例但無法套用到自己程式的情況,或者使用較為不熟悉的框架,檢查了半天卻找不到Bug的情況,以上問題都是ChatGPT所擅長的。如此一來就能加速每個練習 -> 犯錯 -> 回饋 -> 改善的迴圈。從錯誤中學習也是最能深化記憶的方式之一。

觀察大量代碼,並實際套用也能最大化的提升練習量。學習程式很像開車,量變產生質變,是個原始但有效的方式。

藉由縮短實戰演練的回饋週期,可以大幅減少此法學習的痛苦指數,也能學習如何拆解問題,讓問題定義明確到能讓ChatGPT從你給他的骨幹產生血肉,也是重要的解決能力。此外,節省大量Google時間,大幅提高資訊獲得的訊雜比也是相當重要。以我自己來說,一天能接收的資訊,跟工作記憶都是有限,不停Google又看太多不是目前問題所需的資訊是很累的。

當然,要產生好的Prompt除了坊間的Prompt Engineering 一些guideline之外,Domain Knowledge的輸入也是關鍵。先利用ChatGPT縮小知識技能的範圍,閱讀相關參考資料,再提問,再請他給出下一步指示如此的迴圈可以快速收斂與歸納知識。

小結:

解決問題的能力一直都是個很空泛的詞,從如何定義問題,如何拆解,到如何Google,可能要加入如何寫好的Prompt,這些都需要大量練習。雖然有了這個利器,寫程式的技術門檻能大幅降低,剛開始我也因為能這樣快速使用沒學過的框架與程式語言而達到愚昧之巔,但還是得回歸本質,了解背後底層邏輯與隱含的知識,而不是複製貼上了卻不知其所以然。

--

--

Patrick Su
浣熊派🦝🥧

Software Developer @ NL | Here’s to the ones who dream, Foolish as they may seem