AlphaCamp_DevC2 完課心得

By Po-Ming Chen in Career

July 8, 2024

從 AC_DevC1 完課後 (連結),邁入了 DevC2 前端開發實作(Practical Front-End Development Course),難度真的躍升了許多,畢竟相較於之前專注在 Data-Programming 的經驗,很快地就進到全然陌生的領域,所有的知識點,對我而言都是新的。

趁著完課沒多久,想說就用 AC 教案會鼓勵大家定期做的 ORID(焦點討論法)來看看自己走了多遠,接下來又要往哪裡去吧!

ORID 是什麼 ?

ORID 焦點討論法,將整個討論、回顧過程分為四個部分:

  • Objective(客觀事實)

  • Reflective(感受反應)

  • Interpretive(詮釋意義)

  • Decisional(作出決定)

如果以回顧學習歷程的話,大概可以轉換成幾個常見的問題:

  • 你這次/這週,學了什麼?有沒有達到你預期的目標?

  • 經歷這一系列的學習,你的感覺如何?有哪些是偏向正面的?哪些又是偏向負面的?這背後是有什麼可能的原因嗎?

  • 這樣的感覺對你來說是什麼?要如何去延續好的部分、改善不好的感覺?

  • 後續的學習你打算做什麼?(像是微調自己的學習方式?專注突破哪些挑戰?)

Objective

推進 C2 的過程,也完成了預先安排的出國走走、教召(學的東西一下子忘了大半 XD),『指標作業』也都順利 Meet Expectations ,並完成助教回饋的訂正或反思。

撇開教案裡面提供回放的工作坊影片,畢竟想專注在每週推進一個『指標作業』,所以就先割捨;整體來說,滿開心可以在一定時程內完課的=)

Reflective 1

關於 DOM

關於收穫,從第一週開始接觸 DOM Manipulation,基本上就是全新的學習了,從前接觸了一點 HTML/CSS,聽過 DOM Tree,但是 DOM 的全名叫做 Document Object Model 也是碰了這堂課才知道的哈哈哈

DOM 不僅是瀏覽器解析完 HTML 文件的結果,DOM 其實也是一個介面(Interface),讓程式語言(像是 Javascript)可以跟瀏覽器解析後的網頁成果進行互動,進而動態改變網頁內容或行為。

HTML 文件(Document)中的每一個網頁元素,就像是變成一個物件(Object)一般,擁有豐富的屬性(Attribute)、方法(Method)可以對其操控,像是用來選取網頁元素的 querySeletorquerySelectorAll

關於 Template Literal

年輕的時候(!?)愛看 Yahoo 娛樂新聞,有時也會逛一下電影評論,曾經想到工程師該不會要緊盯最近有哪些電影準備上映、上映的時間、地點,然後把握黃金時間,人工把電影封面照和簡介,上架到對應的區域吧?

感覺就很累,沒辦法準時下班,應該有更有效率的做法吧?只不過不知道是什麼 XD

Template Literal 是一個可以依照資料,迭代產生 HTML 程式碼進而動態渲染成網頁內容的作法,隨著資料增減,有效率改變前端顯示的內容,才不用一部電影要上架/下架了,還要每次都人工調整。

不過若要處理更複雜的前端使用情境,可能單純用 Template Literal 會有點不足,或許就需要運用到像是 React, Vue.js 的框架了。

關於事件驅動程式設計

基本上就是在聊掛上事件監聽器(addEventListener)的概念和眉眉角角,包含:

  • 事件監聽的類型(clickdblclicksubmitinput 等)

  • 初期多善用 console.log(this),以及 console.log(event.target) 去測試目前的監聽機制是否合乎預期

  • 事件傳遞機制(Bubbling 由下而上 v.s. Capturing 由上而下)

透過這幾個概念,感覺是能夠稍稍體會,那些點來點去的網頁小遊戲,背後主要就是依賴這些機制;也趁著教案實作,練習一個小小的 計分板(雖然監聽設計和函數寫法還有重構的空間就是了…)

Reflective 2

教案進入到後半之後,也開始接觸第三方 API 和透過 AJAX(Asynchronous JavaScript and XML)來實現非同步請求。主要是用 axios 套件。

關於非同步請求(Asynchronous Request)

一直以來,我都覺得臉書動態可以一直往下滑,彷彿不會窮盡,有點妙~其實是因為使用者向伺服器(Server)進行了請求(Request)後,非同步請求的技術讓網頁可以繼續做別的事,甚至可以將請求返還的東西再融入網頁內容之中,而不用單調地等待返還的東西,而讓使用者等待,降低了使用者體驗。

教案到這,『指標作業』就是透過 Template Literal 動態產生歌單,然後配合『事件驅動程式設計』去綁定監聽器,當點擊歌名時候會驅動請求,透過第三方 API,將歌詞返還並且展示出來。

等於是把教案目前學到的東西都嘗試綜合在一起 (連結)。能夠順利完成也是鬆了一口氣 XD

關於 Local Storage

Local Storage 是 HTML5 提供的一種在使用者瀏覽器中儲存資料的一種技術,並不需要伺服器支援,這些數據在瀏覽器關閉後仍然存在,不會消失。

這也讓 Local Storage 成為在用戶端保存數據的一個簡單有效的方式。簡單的購物車功能大概是可以用 Local Storage 來實作,我覺得很酷!不過有優點就有缺點,它比較不適合儲存機敏的資訊,而且容量有限,也沒辦法跨裝置共享。

關於 MVC 架構

從前有稍微接觸過 Python 的物件導向程式設計,大概知道封裝(Encapsulation)的概念,曾經也看過別人在 Github 上公開的 Repo,通常都會很完整地定義一塊一塊的程式碼,或者說 Object。透過教案,感覺到之前的經驗,跟 MVC 架構是有一定的相似。

MVC 架構,完整叫做 Model, View, Controller,其中:

  • Model 主要在處理資料的取得、加工、儲存

  • View 主要是處理使用者視覺上看到的一切

  • Controller 主要作為 Model 和 View 的橋樑,並且監聽(事件驅動程式設計)使用者的特定行為,進而動態改變 Model 的內容,然後再透過 View 更新網頁呈現。

透過 MVC 架構,也可以讓程式碼分成更容易維護的區塊,各自區塊的目的也不同,除錯或開發新功能的時候,才不用所有的程式碼都要重新看過一遍。

整個教案的最後,也稍微演練了用 MVC 架構,完善一個包含搜尋、收藏、分頁功能的電影清單 (連結)

Reflective 3

天阿不知不覺 Reflective 寫得有點多!

學到許多,只不過挫折感(或者說知道自己還有許多不足的感覺)也沒少過…

寫 JS 我覺得比較有邏輯性,但是關於切版,我覺得目前還是滿卡的,連標配的 flex system 或 Bootstrap 也沒有到很熟悉,想要用上,都得反覆查找文件,所以只要教案實作需要連 HTML/CSS 一起架構,大概就得多花一倍的時間,才能搞定那些『理論上沒有那麼複雜』的 layout。甚至有點想逃避@@

對於 JS Array, Object 常見的操作手法像是 somefindmapreduceincludes,也還沒有很能靈活應用這些常見的處理函數。通常還是得搭配 ChatGPT 看一下示範,然後才能照 sample code 依樣畫葫蘆,雖然不用追求都記起來,但終究是有一個熟悉度的差異,自然也會影響到怎麼 prompt。

三元運算子(Ternary Operator),在教案的後期才有聊掉,可以更簡約地完成邏輯判斷,不過也還沒有熟到可以游刃有餘地用出來。

//簡單條件判斷
let isLoggedIn = true;
let greeting = isLoggedIn ? 'Welcome back!' : 'Please log in';
console.log(greeting); // 輸出 'Welcome back!'
//複合條件判斷
let score = 85;
let grade = score >= 90 ? 'A' : score >= 80 ? 'B' : score >= 70 ? 'C' : 'F';
console.log(grade); // 輸出 'B'

只能說,這終究是一個實作經驗夠不夠的問題。

Interpretive

整體來說,完課是踏實的,也必須稍微放下 XD

想一次就學好所有的知識點總是不太可能,一定會有些部分,需要靠實作經驗來累積的,重點是刻意練習,然後慢慢來比較快。

後來針對前端切版的不熟,我發現若把既有畫面截圖&現有程式碼,一起丟進去 ChatGPT,然後儘可能問他一個小而精準的(切版)問題,效果好像都還不錯,就繼續邊走邊看,觀察一個更進階學習切版的時機。

Decisional

未來開發環境將以 VSCode 為主,我覺得一個視窗寫程式,一個視窗做教案筆記,一個視窗問 ChatGPT,有點不是太有效率,加上久仰 GitHub Copilot 大名~決定邁入下一階段的學習,也來摸索如何跟這個副駕一起協作,提升自己的開發效率、品質。

另外,針對教案補充的延伸閱讀(Further Reading),因為之前主要都是專注在推進度,想要每週完成對應的『指標作業』,所以一些延伸閱讀就先跳過,不過這『很公平地』反應在,若面對教案以外的世界,個人的知識之網是否夠廣、夠扎實,進而能夠面對未知的情境?

所以我覺得,就算延伸閱讀沒有辦法馬上讀,還是值得把這些東西備在更容易取得的地方,方便必要時查找。

就先寫到這吧,Keep Going~

Posted on:
July 8, 2024
Length:
2 minute read, 329 words
Categories:
Career
See Also: