AlphaCamp_DevC3 完課心得

By Po-Ming Chen in Career

August 29, 2024

相較於 C2 課程 (連結) 所有知識點都是新的,AC_C3 討論的內容,縱使不像前端一樣,有透過使用網頁經驗冥冥中的熟悉感,但是因為從前有接觸過 Git,目前資料分析的工作也在使用 SQL,倒也有一些既熟悉又陌生的感覺。

課程的一開始就安裝了許多東西,並且複習稍有經驗的 Git,像是 npm, node.js, 甚至還有樣版引擎 handlebars,這樣的過程,也滿好奇那完成這個 C3 課程後,自己可以實現怎麼樣的 Web Application!?

那就一樣用 ORID(Objective/Reflective/Interpretive/Decisional)來反思這堂課的收穫吧!

Reflective

不知不覺!?C3 課程也花了 6 週左右的時間,才把整個教案都走完,在前幾週的工作坊回放影片,AC 助教把整個網頁開發專案的過程,比喻為開餐廳,覺得很有意思!

客人點菜,就像是前端發送了請求(Request)給伺服器,後端依照 Request 的內容,到資料庫(食材庫房)撈取出資料並加工料理後出菜,回應(Response)所需的資訊給瀏覽器並且渲染成使用者看到的畫面,完成一個 Request/Response Cycle。

而隨著客人數量變多,服務生(前端)收單,廚師(後端)料理的過程就會發生更多互相等待的過程,如何恰當地、有效率地處理這些程式執行過程的『非同步』,也就是學習『非同步』操作 Callback,Promise,async/await 議題的重要性。

Reflective1_Web App

C3 課程的重頭戲,就是要能夠自己在本機建立好 Node.js 伺服器,然後透過 Express 框架,快速有效地架構網頁的路由(Routing),根據使用者不同的 Request,給他對應的 Response,然後配合準備好的資料與前端頁面,完成一個 self-contained 的小小網頁應用。

電影清單的教案中,從介紹抽象的路由系統(我認真覺得這個很抽象 XD)開始,然後用 MVC 架構(Model, View, Controller)貫穿整個實作:

  • As 產品經理,如何界定產品的 User Story ?

  • As 工程師,如何搭建這個網頁應用的基礎架構(Scaffold)?

  • As 開發者,如何依照 Product Spec 做好產品功能?

一點一滴跟著把網頁應用給做出來,也是滿有成就感的過程。

這對於後來在『密碼產生器』的 Mini Project 指標作業,可以比較有頭緒地,懂得先拆分 User Story,把一些基礎環境(包含網頁佈局、外部資料引入、 Bootstrap)先搭建好,然後才開始進行功能的開發,實現所列的 Product Spec,甚至有意識地考量實作功能的相依性。

Reflective2_資料庫

雖然 C3 教案和指標作業內打造的 Web App,沒有真的連動到特定資料庫去操作,也還沒有討論如何用 Node.js 內的 Sequelize 去操作特定資料庫,但是相信往後很快就會遇到了。

學習前後,我覺得更理解以下幾個概念是其中的最大收穫:

  • 外鍵(Foreign Key)

  • 如何處理資料的多對多關係(通常會需要一張關聯記錄表,像是紀錄消費者與購買的產品,中間通常再需要一張訂單表)

  • 畫 ERD(Entity Relationship Diagram)

  • 資料庫正規化

  • SELF JOIN

目前工作中,資料庫都是收前端系統的原始資料,而前端系統的資料表都是該系統 SA(System Analyst)設計的,如果具備這方面的知識,等於是對資料庫有基礎的了解,就能夠更有效率地跟對方交流,確認特定資料表之間建議的串接方式,避免繞遠路。

不過還是有一些因為工作上不常用(像是 DML 的 INSERT/UPDATE/DELETE),所以有點陌生,甚至像是索引(Index)、Foreign Key Constraints、Transaction,之前僅是聽過,透過教材才第一次接觸到它的內涵。

透過指標作業,也才練習到有些 Entity 本身就是跟其他 Entity 沒關係(像是後台管理員),或者如何有效率設計資料表,來應對使用者可以互相 following 的功能時,可能會有別於典型資料多對多關係,額外再加一張關聯記錄表的作法。

只能說關於資料庫,自己有一些概念,但還有許多在實作中才能累積快速的知識和經驗可以補強哈哈,而且也意識到瞭解資料庫,僅是成為一位優秀後端工程師的其中一個環節而已 XD

Reflective3_非同步操作

雖然在教案中,討論 JS『非同步』議題的章節篇幅最短,但是我認真覺得它是其中最抽象的@@,甚至好像得稍微放下,理解自己終究不會在第一次接觸就理解得非常通透。重點可能是先放在 JS 這個程式語言的本質,以及為什麼會有不同語法的演進。

常見的非同步語法有:

  • Event Listener

  • callback function

  • setTimeout

JS 是一個單執行緒的程式語言,他會把非同步的東西丟給別人處理(像是煮菜),然後自己繼續做自己的事(像是帶位、點餐),直到他有空了,才去處理非同步語法返還回來的東西,所以如果沒有恰當地等待非同步的東西返還後,再執行下一步,就會導致結果不如預期。(就像是送單請廚師煮菜,自己繼續帶位或招待其他客人,又沒有在適當的時間順序安排後續送餐,給客人的東西很可能就是空的)。

實務上,可能渲染網頁的結果就會怪怪的,或者每一次重新整理的結果都不一樣。

簡言之,遇到非同步語法,JavaScript 不會等待它們完成,而是繼續執行接下來的程式碼。當這些非同步操作完成後,他們會再被加入到事件循環(event loop)中,等待被執行。

而至於會有 Callback,Promise,async/await 的語法演進,主要是為提升程式碼的易讀性,讓有『非同步』議題的程式碼,可以變得更易維護。 async/await 是讓程式碼變得更趨近由上而下執行的過程,但是要留意 async/await 只有遇到非同步語法時,他會暫停後續的程式碼,先等待這個非同步操作完成後再繼續;反之,若async/await 遇到的是同步語法,並不會改變它們的同步性,直接是依序執行。

Interpretive

完成了 C3,後續要進到 AC 課程最後一個部分(C4),需要決定一個前後端專修課程,也趁這個機會記錄自己在依序完成 C2, C3 前後端開發實作後,體感怎麼判斷要先往哪一邊持續去累積技能…

完成後端實作後,想想 AC 的教案設計,有依序安排前端實作和後端實作的作法是滿酷的!未來工作上,如果身為後端(或前端)能夠對合作另外一方在做什麼有經驗,也比較能夠換位思考,合作愉快。

後續在 C4 會選擇其中一個做專修,也不代表一日前端,終生前端;搞不好,在工作上因為需要,也得暫時角色轉換,支援後端的工作,這時候如果有一些後端的知識,確實是會滿有幫助的。

從完成 C2, C3 後的反思,自己接下來會先從比較擅長、目前學起來比較有共鳴的後端出發,一方面是因為目前自己在資料分析的工作,其實對幾個後端的知識點已經有些概念和興趣,甚至是好奇後端工程師是怎麼面對當使用者規模,同時在線人次提升的同時,可以持續維持穩定的服務。

期待後續可以繼續深耕,從扮演好『資料與前端之間的橋樑』的角色開始。然後在工作內外擴展前端的知識和經驗,最後進展到有辦法勝任全端的工作,成為一個能夠提供『全端網頁開發』解決方案的專業工作者。

Decisional

進入 C4,也意味著在可見的將來,完成所有的課程後會開始轉職、面試等,在這一兩年 AI 的浪潮下,很難不去聯想到,這個時候想從資料分析轉到(後端)軟體工程師,究竟是否真的是一個好的決定…

(其實更應該自我對話『好』的定義又是什麼?)

不否認地,體感也覺得 AI 浪潮下,學習一個程式語言的門檻和方式,跟沒有像 ChatGPT 這樣的服務以前,兩者是落差許多的(教案看不懂或噴錯的時候,我大概是先丟進去 ChatGPT 請他解釋或生成示範的程式碼,然後再透過『追問』,甚至聊聊不同寫法的可能性,去加深對這個知識點的理解。我相信許多人也是這樣做,甚至做得更好。)

不時也會聽到,在很快的未來,軟體工程師也會被 AI 取代,當然也有人說,其實是那些會用 AI 的人,會取代那些不會使用 AI 的人。

不論如何,終究是得承認 AI 浪潮下,市場對 Junior 軟體工程師的期待會拉高,技能樹那麼多,剛踏入這片叢林的我,可能得更恰當地讓自己可以在適當的時間內變得 qualified,更步步為營地點擊技能樹。

Be qualified 是重要的;同時也得自問在這個 AI 浪潮下,同時符合自己天賦(Strength)與熱情(Passion)的職涯路徑,還有具備市場潛力或價值(Value)的交集,又會變化成什麼樣子?

加上如果要延續 【V018用經營公司的思維經營你的人生】的概念,可以的話,讓自己儘早地往『個人 as 產品』的後面階段邁進(像是賣解決方案的專業人士,甚至是賣產品的經營者)…

綜合這兩個概念,找到自己天賦熱情與市場的交集,像是對自己的橫切面,先組合自己面對市場、創造價值的武器,那往『個人 as 產品』後面階段邁進的過程,像是把這組武器不斷地投入市場的洗禮,讓他變得鋒利而可以應對不同的挑戰,像是『動態地』找到天賦熱情與市場的最大交集。

在 AI 浪潮下轉職工程師的同時,持續去對焦、嘗試實踐這些底層人生原則,感覺真的不是很容易,我想不妨就趁著推進 C4 課程的同時,持續思考『下下一份工作』自己想要什麼樣的工作型態、內容、生活型態,來回推接下來轉職時候,要鎖定哪一種類型的工作或職缺,持續摸著石頭過河吧!

Posted on:
August 29, 2024
Length:
1 minute read, 200 words
Categories:
Career
See Also: