程式學習之旅:回顧自己的進步

William Tsou
Jun 13, 2021

距離上一篇回顧文又過了一個月,是時候再次檢視自己這一個月的成長與變化,並且構思未來持續前進的方向了。

一、前言

這一個月發生了很多事情,所幸當初在規劃學習進度時,就決定一邊完成主要進度的內容,一邊預習下一階段的課程,再加上心態似乎調整得不錯,所以這一個月的學習狀況並沒有像上一個月那樣充斥著焦慮與煩躁。

即使在預習階段三時,遇到超乎想像的難題,花了比預期更多的時間完成作業或教案,因為超前進度的緣故,依然可以游刃有餘地完成目前的階段二進度。先暫時從困境的泥淖脫離,過幾天再回頭去思考、拆解階段三遇到的難題。

接下來,我會透過 ORID 焦點討論法來回顧自己從 5/9 ~ 6/9 這一個月的學習情況,所謂的 ORID 即是:

  • Objective : 客觀、事實
  • Reflective : 感受、反應
  • Interpretive : 反思、經驗
  • Decisional : 決定、行動

二、學習情況

  1. Objective
  • 完成了相當著名的 JS 30 挑戰,只能說是大開眼界,沒有用到任何的框架、套件,僅僅是使用原生的 HTML、CSS 和 JAVASCRIPT 便能做出這麼多花樣繁多、功能各異的網頁。
  • 完成 alphacamp 學期 2–2 的前三週進度,也在自己的作業中加了些小巧思,把課外學到、自己突發奇想的功能學以致用。
  • 學會使用 axios 串接第三方 API。
  • 使用 bootstrap 快速開發網頁,透過串接 API 取得的資料渲染網頁內容,實作出分頁功能、搜尋功能與收藏功能。
  • 預讀 alphacamp 學期 2–3 後端伺服器與資料庫的課程內容,使用 node.js 及 express 架設伺服器並開發網頁。
  • 學習使用 mongoDB ,以及透過映射工具 (ODM) mongoose ,在伺服器端操作資料庫。

2. Reflective

  • 隨著課程難度的提升,常常看完教案,也跟著影片、文字說明操作一遍後成功實作出一樣的成品,卻在準備動手寫作業時,依然陷入腦袋一片空白,不知道從何下手的狀況。
  • 以前通常只是完成題目的需求後就繳交作業,但是看見其他同學的作品不但達成要求,還添加了許多個人巧思後,也開始要求自己每份作業都要在達成基本要求之餘,也要盡力加上一些新功能或優化。
  • 發現自己遇到困難的時候,依然會堅持要靠自己想出答案,必須完成作業或是功能可以按照預期的運行後,才可以去觀摩別人的作業,從中獲取一些新技術、優化的方向以及比較程式碼的差異…等。
  • 這一個月寫作業所花費的時間明顯變長了不少,雖然卡在困境,搜尋了幾個小時也找不到頭緒,生不出半行程式碼的時候很痛苦,但花了好幾天總算完成一項作業後,也能獲得前所未有的成就感。

3. Interpretive

  • 雖然有注意到 side project 的重要性,但卻一直沒有動手去作,總覺得自己才學到一點皮毛,好像還不夠格作出什麼像樣的作品。但在 2–2 觀摩同學作品的時候,我突然意識到,學得不夠多什麼的也許只是合理化自己懶惰的藉口而已,而且透過實作 side project 來學習新技術,跌進從沒踩過的坑再爬出來,才是最有效率的方式之一。
  • 寫作業的時間變長了不少,甚至要花好幾天才能寫完。但現在仔細一想,絕大多數的時間其實都耗費在不知所措、查詢錯誤訊息和構思程式碼的邏輯上,而且隨著作業的架構和功能越來越複雜,寫完作業也要花時間回頭重構程式碼。所以實際上,真正動工寫程式碼的時間其實並不多,如果能減少浪費在構思、查詢階段的時間,應該可以加快程式碼的生產效率。
  • 透過助教的回饋,發現自己在 const, let 的宣告,以及在檢驗使用者輸入內容的部分,依然有很大的改進空間,雖然作業的程式碼可以順利運行,但其實只要面臨到一些 edge case,或是較為怪異的輸入內容,就很容易跑出非預期的結果。

4. Decisional

  • 下一個月的學習進度,除了會持續預期剩下的 2–3 內容外,預計也會在 7 月初開始預習學期三,依據這個月的學習狀況和反思,未來撰寫每一份作業前,應該要求自己使用流程圖、虛擬碼或任何習慣的方式來規劃撰寫程式的流程,並且在資料夾內新增一份 readme 詳列要開發的功能以分配進度,減少腦袋一片空白的時間,迅速掌握狀況。
  • 未來的教案難度只會越來越高,因此還是要培養拆解問題、鎖定關鍵與搜尋資料的能力,才能加快開發的速度。另外,也要把遇過的問題和解決的過程紀錄下來,以備未來再次遇到類似問題的時候可以參考,節省時間。
  • 如果依然沒有什麼 side project 的靈感,也可以先從優化作業,或是新增一些有興趣的小功能開始著手,或許可以從中挖掘出一些想法,或是未來想好寫什麼 side project 時,可以搬用並修改已經寫過的功能。
  • 只要是需要使用者輸入內容,並且依據內容作運算處理時,都要記得撰寫函式去驗證使用者輸入的內容是否合乎格式,尤其是進入後端伺服器與資料庫的世界時,輸入的資料必須合乎資料庫設定的格式,所以一定要有合理的驗證程序。另外,也要在輸入內容不合乎格式時,透過前端介面提醒使用者。

三、結語

從三月開始正式上課以來,程式學習之路已經走過三個月的旅途了。雖然難免會有越是學習就越發現自己好像懂得更少、越想深入理解就越覺得自己很蠢的焦慮,但透過回饋和紀錄自己曾經學過、作過的事情,只要確信自己每天都有往前邁進,總有一天就可以擺脫學習曲線中的絕望沙漠。

--

--

William Tsou

紀錄在alphacamp學習的點點滴滴,以及邁向前端工程師的沿途風景