搜尋全站文章

沒有找到相關文章

試試其他關鍵字或檢查拼寫

找到 0 篇文章 • 包含部落格、筆記、旅遊文章

Medium GitHub LinkedIn

【週間札記】2025 上半年回顧

作者頭像
Sam

2025年6月11日

5分鐘閱讀

對於擔任前端工程師,算是剛邁入一年的時間。因此想要藉由這個空檔,回顧一下上半年的學習和工作。

目錄

  1. 技術概覽
  2. 寫好文件
  3. 可以,但先讓我想想
  4. 通靈師
  5. 學習
  6. 小結

1. 技術概覽

1.1 前端

分類說明
FrameworkNext.js, React + Vite, Astro
UI FrameworkTailwind CSS ,Radix UI, Shadcn UI ,Material UI
State ManagementRedux, Zustand, Jotai, Tanstack Query, Context API
Headless CMSStrapi
MapDeckGL, MapLibre GL
Otheri18n-next, zod, Google Tag Manager, Web Recognization API
內部服務Outline, Docusaurus
TestingPlaywright, Vitest

1.2 後端

有時候像是 Google Translate API 等 Token 適合藏在 Server,或是整個專案的業務邏輯 Google 不到,只有我會寫。因此在不考慮高併發的時候(要花點時間去規劃),會寫一些後端來給自己的前端串接,或是測試一些 MVP。

分類說明
FrameworkNext.js (API Route), Express.js
ORMPrisma, Drizzle ORM
APIREST, GraphQL, Swagger UI, WebSocket
Database ServiceNeon, Supabase, PostgreSQL, MySQL Workbench
MapTileServerGL
Otherzod, jwt, MCP Server, docling

1.3 App

目前的主力還是放在 Web Frontend,不過前陣子因為要寫擴充套件的需求,開始學習一點 Kotlin,發現某些功能的寫法跟 React 很像。還有相較於 Web Vitals,Google Store 也有相對應的評分機制,這點也很有趣。

🔗 Introduction to Kotlin and Android Development

App

分類說明
AppKotlin, kotlin coroutine, Jetpack Compose
OtherRetrofit

1.4 DevOps

現在的公司,不知道是不是比較資深,每個工程師都會管自己的 VM,同時開發初期也需要自己寫 Dockerfile 或是管理 CI/CD 的流程,因此也花了一點時間學習如何處理環境的問題。不過好處是,有時候看到有趣的開源專案,可以很快的自己開一個 EC2 或是 Zeabur 下來玩。

DevOps

分類說明
CI/CDDocker Compose, Gitlab CI
VMUbuntu, VIM
ProxyNginx Manager, Certbot
Cloud Service/BucketAWS(EC2, S3), Cloudflare R2, Digital Ocean, Minio
DomainNamecheap

2. 寫好文件

雖然很多人都說先決定公司,再跟著制度去學習,但就跟買菜一樣,很多事情是可遇不可求的,如果沒以這個環境怎麼辦?

大概有好一陣子,團隊缺少專業的 PM,工程師要直接面對甲方的需求,我也在反思:『要怎麼去框實際的需求?』、『除了 A4 紙草率的紀錄外,什麼是好的文件?』

使用 PRD 去 Google ,並經歷了一番挫折後,找到了一個比較看得順眼的範本(kevinyien: PRD Template)

喜歡的原因是

  1. 簡明扼要
  2. 把團隊的角度考慮進去,例如:有沒有先跟利害關係人溝通
  3. 串接不同需求文件,例如:PRD、設計稿、問題集等等
# \[專案名稱\] ## **\[一行描述\]** \ \ 團隊:\[Awesome\] 貢獻者:\[專案經理\]、\[設計師\]、\[工程師\]、\[分析師\] 資源:\[設計文件\]、\[分析數據\]、\[筆記\] 狀態:**草稿** / 問題審查 / 解決方案審查 / 上線審查 / 已上線 最後更新日期:2020 年 5 月 21 日(星期四) --- # 問題對齊 | 請用 1-2 句話描述我們試圖解決的問題。我應該能夠單獨閱讀這部分,並向他人傳達該問題的價值與風險。這對我們的客戶和業務有何重要性?您有何證據或見解來支持這一點? | |:---| ## 高層次方法 | 描述我們可能解決此問題的大致方向。我應該能夠模糊地看出大致方向。例如,如果問題是"新功能的可發現性",那麼解決方案可能是"一個通知中心來顯示相關功能"。 | |:---| ## 敘述 | (可選)透過假設性故事描述客戶當前的使用情境,展示他們的現況。描述常見和極端的使用案例,以便在設計解決方案時加以考慮。 | |:---| ## 目標 1. *描述高層次目標,最好按優先順序排列,且不要太多。* 2. *包括可衡量(指標)和不可衡量(感受)的目標* 3. *保持簡明扼要* ## ## 非目標 1. *列出我們不計劃解決的範圍* 2. *說明這些範圍為何不在目標內* 3. *這些非目標與目標一樣重要且具有明確性* | 🛑 若所有貢獻者尚未對問題達成共識,請勿繼續。🟢 完成以下表格,並獲得所有審閱者的"簽名"以繼續。 | |:---| | 審閱者 | 團隊/角色 | 狀態 | |:---|:---|:---| | | | | | | | | # 解決方案對齊 | ✅ *劃定範圍* | 🚫 *不要強迫他人定義範圍* | |:---:|:---:| | | | ## 核心功能 正式方案 1. *列出構成解決方案的核心功能* 2. *最好按優先順序排列* 3. *將其視為定義解決方案範圍的方式* 4. *劃定界限,以便團隊可以專注於如何填補這些內容* 5. *對於特別大的專案,請鏈接到詳細的子文件* 6. *挑戰範圍,看看是否可以先獨立推出較小的部分* 未來考量 1. *可選擇性地列出未來可能考慮的功能* 2. *這些可能影響當前的開發方式* ## 核心流程 | 展示客戶的端到端體驗。這可以是書面描述、流程圖、螢幕截圖或設計探索,具體表現形式將取決於專案和團隊。請勿獨自完成此部分,應與設計和工程團隊共同完成。此部分的內容會隨時間變得更具體,可能一開始只是幾個附註的截圖或故事,後續可能發展為具體的需求和驗收標準。請根據團隊的運作方式進行調整。如果設計師願意深入探索每個邊緣情境,就依賴他們;如果工程師希望詳細記錄每種情境,就深入描述驗收標準。這個部分會隨時間變化,這是正常的。當發生變更時,請在 [變更記錄]() 中記錄,並通知所有貢獻者。 | |:---| ## 核心邏輯 1. *列出指導設計和開發的規則* 2. *處理常見情境和邊緣案例* 3. *通常以文字描述這些邏輯比僅依賴設計來呈現每種變化更容易* | 🛑 若所有貢獻者尚未對問題達成共識,請勿繼續。🟢 完成以下表格,並獲得所有審閱者的"簽名"以繼續。 | |:---| | 審閱者 | 團隊/角色 | 狀態 | |:---|:---|:---| | | | | | | | | # 上線計劃 | 定義將產品推向市場的各個階段,每個階段的目的,以及必須滿足的標準才能進入下一階段。強調可能影響時程或進度的風險和依賴關係(以及理想的應對計劃)。以下是示例階段表。 | |:---| ## 主要里程碑 | 目標日期 | 里程碑 | 描述 | 退出標準 | |:---|:---|:---|:---| | YYYY-MM-DD | ✅ 試點 | 僅限內部員工測試 | 連續 7 天無 P0 或 P1 級錯誤 | | YYYY-MM-DD | 🛑 測試版 | 20 名早期客戶 | 至少有 10 位客戶表示如果移除該功能會感到失望 | | YYYY-MM-DD | 🛑 早期使用 | 來自銷售團隊的邀請制客戶 | 在每個主要競爭對手中至少取得 1 項勝利 | | YYYY-MM-DD | 🛑 正式上線 | 所有當前市場的客戶 | 監測並衡量影響 | ## 營運清單 | 團隊 | 提示 | Y/N | 行動(若是) | |:---|:---|:---|:---| | 分析 | 是否需要額外的追蹤? | | 與 \[負責人\] 合作記錄數據 | | 銷售 | 是否需要銷售啟動資料? | | 與 \[負責人\] 合作 | | 行銷 | 是否影響共享 KPI? | | 與 \[負責人\] 合作調整目標 | # 附錄 ## 變更記錄 {#變更記錄} | 日期 | 描述 | |:---|:---| | | | | | | ## 開放問題 記錄開放問題及其解答。 ## 常見問題 (可選)提供常見問題解答,幫助讀者快速理解專案要點。 影響檢查清單 * 權限 * 報告 * 定價 * API * 全球化 ## 示例 PRD 待補

2.1 流程圖:Mermaid、PlantUML

前陣子讀書為了要解釋比較複雜的概念,常常需要畫流程圖,因此開始尋找適合的工具。不知道因為英語相較於亞洲人,更喜歡文字表達的關係,因此常常需要使用圖表來取代 AI 產生的文字。

流程圖

2.2 Postman 文件

這個算是前陣子才發現的技巧,在 Vibe Coding 完之後,可以告訴 Agent:『請幫我總結這次的 API 路徑開發,整理成 Postman 的客戶端使用範例,並提供成功、失敗的範本』

  1. 複製這個 JSON 內容
  2. 在 Postman 中點擊 “Import”
  3. 選擇 “Raw text” 並貼上 JSON
  4. 點擊 “Continue” 和 “Import”
{ "info": { "name": "用戶 API", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, "item": [ { "name": "GET 用戶列表", "request": { "method": "GET", "url": "{{base_url}}/users" } }, { "name": "POST 創建用戶", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"name\": \"張三\",\n \"email\": \"test@example.com\"\n}" }, "url": "{{base_url}}/users" } }, { "name": "GET 單一用戶", "request": { "method": "GET", "url": "{{base_url}}/users/1" } }, { "name": "PUT 更新用戶", "request": { "method": "PUT", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"name\": \"李四\",\n \"email\": \"updated@example.com\"\n}" }, "url": "{{base_url}}/users/1" } }, { "name": "DELETE 刪除用戶", "request": { "method": "DELETE", "url": "{{base_url}}/users/1" } } ], "variable": [ { "key": "base_url", "value": "https://api.example.com" } ] }

終於不用追著後端要 Swagger 了

直觀上也比 Swagger 好操作(儘管 Swagger 的目的不完全一樣,是為了讓後端的 API Spec 文件更完整)

2.3 MCP Tool:Task Master Claude

🔗 Task Master Claude

在前面已經初步擬定好 PRD 後,由於通常專案會有依賴性、先後順序,可以透過 MCP Tool 來分析和拆分任務,算是覺得這陣子最實用的 MCP Tool。

- Parse requirements: Can you parse my PRD at scripts/prd.txt? - Plan next step: What's the next task I should work on? - Implement a task: Can you help me implement task 3? - Expand a task: Can you help me expand task 4?

Task Master

3. 可以,但先讓我想想

大概是半年前,曾經與其他廠商的工程師討論過,他覺得工程師最大的職責是劃定好邊界,還有告訴業主哪些可以做、哪些辦不到。

其實 RD 跟很多人一樣,碰到特定的業務邏輯、或是沒學過的技術,還是要先花時間去研究 API 文件、相關的 GitHub Discussion,才知道特定功能實際上能不能實現,特別是初始的需求很模糊的時後。

以自己來說,如果遇到地圖的需求,第一步會先對於需求做初步的訪談,試著抓出最基本的功能性需求:

  • 需要哪種地圖?離線地圖?
  • 有沒有需要特別的標記?
  • 靜態 or 時序型資料?
  • 2D or 3D?

Research

接著透過假資料,去測試一千台 3D 敞篷車在地圖上,來測試核心功能在最糟糕的狀態下會不會爆炸?或是試想其他沒有在畫面上的考量,例如:caniuse 的支援程度等。

回顧 RD 的本質:應該要先 Research 然後再 Design,即便 AI Agent 盛行,終究 RD 是最後要負責的人。

有點像是回到大二修『社會科學研究方法』的時候,很多問題真的沒有正確答案,需要先釐清假設,然後才去回答。

4. 通靈師

做過社會科學研究的大概都知道,最難處理問題的不是資料,而是『人』,這大概是百工百業不變的課題吧XD

5. 學習

回顧這半年,這些是自己覺得在冥冥之中幫助很大的課程:

  1. 【Frontend Master】Full Stack for Front-End Engineers

對很多前端來說,由於 Vercel 等平台很方便,一建就部署完成,因此 Server 很像一個黑盒子。這個課程算是以前端的角度出發,去完整跑完 Server 架設的流程。

  1. 【書】《React 思維進化:一次打破常見的觀念誤解,躍升專業前端開發者》

這陣子發現不管是 React 或是 Kotlin,最核心的都是如何去設計資料流、畫面重繪(Reconciliation)的邏輯。

  1. 【書】《Beyond XSS:探索網頁前端資安宇宙》

老實說不是因為很實用,而是看過這本書所以知道像是 Worker API、 Backend For Frontend、 iframe 等之前比較少接觸的技術。遇到一些很瞎的需求,腦袋會有警鈴大響這個操作打破了瀏覽器規則。

  1. 【Youtube】How to Get Your Data Ready for AI Agents (Docs, PDFs, Websites)

面對 Agent 系列的產品,除了透過 ExplainThis 電子報、白皮書去補理論外,這一系列的影片算是比較入門怎麼清理資料的影片。

6. 小結

除了推 Git 外,很多時候還是很慶幸生活中的小確幸:

小確幸

淡水老街、七星山、草嶺古道、和平島公園、西子灣、澎湖、九份 …

就像早期的工業革命,取代了生活中很多繁重的勞動,希望未來 AI Agent 也能替我們取代情緒勞動,讓我們有更多時間去投注更有意義的事情。

探索更多精彩內容

繼續閱讀,了解更多技術與個人經歷的精彩文章。