藉「學習鷹架」適應學程式的思維:ALPHA Camp全端網路開發第二學期課程心得(第三部分,前端:啟程)

--

(註,第二學期的課程在2019下半年,即筆者修習此課程後有所調整,除名稱外至少作業和教材內容有所調整,如2020年版前端課程改為第二學期的前半部分
另外為方便稱呼,其實是想偷懶(X),底下以”JS”作為”JavaScript”的簡稱)

前情提要:完成學期一,然後呢?

完成學期一的課程之後,儘管感覺到自己想學寫程式的開關被打開了,卻也發現同時有好幾個擋下直接續報學期二的理由,使我多用了四五月的間隔期先另外說服與充實自己,從而在新階段順利達成目標:加強繼續學習的動力與信心、熟練程式碼與文字輸入、爭取助教回饋與持續修改

自主銜接課程:前端複習與打字訓練

在間隔的二個月起初,我因為覺得下一階段的課程有點貴,而打算先找其他便宜與免費的資源,再次確認自己是否適合與想要學程式,例如買了一套當時正在大特價的前後端課程跟課(細節這邊暫且不多談,以後完成再開坑補述),等於把HTML與CSS再用不同的風格複習一次,並學到如多媒體的語法標籤(如video等HTML5才規範的新項目)、SCSS(舊稱Sass,新版語法與原生CSS相容)等學期一剛好還沒介紹到東西;以及預習JS語法,至少接觸運算語法和一些簡易功能實作(另外還有複習一點Ruby進度)。

另外,我在學期一時已深切感受到「打字太慢」對學程式的負面影響,如依賴語法自動提示、花太多時間在看鍵盤打字,甚至因此想專攻Ruby,反對語法相對較長的JS心生畏懼。 為了克服「手殘」的限制,我開始尋求中英文打字教學網站與軟體的指導,從頭學習中英盲打,逐漸從勉強每秒20字進步到30~40字(打字學習資源未來值得另寫一篇,雖後來輸入順暢或文字簡單時可以達50~60字,還沒87就不能再高了……)。

三階段的學期進度心得回顧

待到五月底,終於具備一邊思考一遍打字的能力,加上覺得前端基礎比較踏實了,於是砸錢刷了二萬一,聽完當年第一場實體充電站分享活動後,正式進入第二學期,體驗比公道價更超值的學習體驗!

(關於學期二過程中的心得感想,先後可以參考這三篇:

前端初階與UI工程:一直切版一直不爽,直到會查Bootstrap

前端中階與JS理論:DOM、資料、API抓抓樂

前端進階與功能演算:一個比一個複雜……

也會大概介紹這門課在上些什麼,如果懶得看就跳過?)

後日談:推遲的期末考作為銜接複習?

作為第二學期的正式收尾,筆者談一下自己是在什麼樣的情境完成期末考、如何解釋期末考的意義,以及也對者個學期的課程安排提出些意見。 先簡單作結,與一般要連續完成的預期狀況不同,我因為個人因素分次在二到四個多月後才算完成,接觸到後端再回顧前端內容,反倒能從比較中對前端概念有新的理解。

由於剛結束學期二課程不久的八月份,遇上家人重病住院近二個月,加上有幾段時間工作相對較忙,平日和假日分別要多花時間在家務與醫院,實在沒太多心力完全投入課程學習,還連帶影響原本早已報名的學期三跟不上進度,只好申請在年底重修一次。 到了十月家人出院且逐漸復健到可以正常日常活動後,我才能在重修前的時間專心思考完成期末考的題目。

挑戰換位思考的期末考

與舊版學期一不同,學期二期末考分為二個部分:「專業知識與技術」與「學習能力與行為」,先說前者。 前者就是典型的小專案作業,三題對應學期主題的核心分別為較複雜得多思考與查詢的API與開發功能、可自選難易版但我都花時間做的DOM與資料操作、搞懂規則邏輯就能寫出的JS語法與演算法(為避免直接協助作弊,不談具體題目),都是只要有確實完成前面所有進度,就能獨立(或自行找方法)寫出的小程式。

後者則可謂是「換位思考」的練習,如ALPHA Camp學期一給我的第一印象「不只是教寫程式」,更要教學習的方法與思維,共有三題(同樣不提具體題目)。 前二題就要求模仿平時改作業的助教角度,分別對模擬與實際同學作業給出具體的互評文字,並補述批改過程中的思路

做這二題後,最重要的啟發是「要能從撰寫者之外的角度理解程式碼」,只是自己會寫與看得懂還不夠,有注意編排與註解雖好,更要具備能對別人的程式碼給出具體評論與建議的能力,進可助於進行多人協作專案時的溝通,退可用於學習時理解與助教同學的討論,加深對實務上程式開發並非閉門造車,造車合轍以“From Trail to Rail”達成團隊目標才是正確的認知態度。

嘗試迂迴秀異的個人答題?

至於最後一題,就是現在讀的這系列文章,與本站產出的原因:提交學習心得部落格。 其實參考其他人的寫法,最多用一二頁面的篇幅,大概敘述上完整學期的課後感想即可。 但,筆者總有個奇怪的想法(中二的概念?),應該要寫些與其他人有區隔性的內容,在網路上張貼才有獨特意義(就像當年讀研究所寫論文時理想的「學術原創性」甚至是「貢獻」),覺得應該要等到自己的能力到一定程度,能寫出所謂不一樣、有價值的東西,甚至還能自架網站時才有資格發表(其實是給自己拖延的正當藉口?)。

直到學期三結束,自認勉強達到當初的自訂高標(能使用GitHub PagesHeroku架簡易靜態網頁/應用程式,並撰寫舊版Codenvy開發操作分享文,以及有其他新想法,但因想先熟悉一般部落格平台功能才用現成的Medium,這部分將在學期三的心得詳述),進入全職學習較有空的時期,才從頭回顧半年以上的學習歷程。

不知「亡羊補牢」是否「猶未為晚」,既然要做就要做好做滿,這系列的心得文,其實目標「不只是心得」,還想把自己對網路開發的學習理解、情境與感想詳細描述,用更多變的篇幅、風格與細節,達到預期的「市場區隔」(這吊點書袋可以稱做「秀異」,distinction……)。 這樣的方式也許顯得冗長,但仍希望藉由多寫一些內容,能便於未來回顧,甚至是他人學習程式開發參考。

結論:踏入前端學習的簡明推薦文

終於到了文末,這邊仍就學期二課程的安排,講一點個人評論與建議。 不同於學期一只有四週的份量且不須先備知識,學期二至少需懂得用HTML與CSS製作簡單靜態網頁,以及用任一種程式語言寫基礎邏輯運算。

既使對上述條件自認不夠熟練,各週課程仍回隨新進度前進,一邊帶入前面的要素,知新的同時一邊也得溫故,再加上準時繳交能從助教得到修改建議,以及章節與學期末都有自我評鑑的要求,只要都能確實完成,都能寫出版面與功能俱全的網頁程式

簡言之,這套課程的各主題可謂建立教育心理學上明確的學習鷹架,第一階段從教材詳細帶過理論、範例與實作的說明,第二階段用作業督促進行練習、回饋與修改的過程,第三階段由回顧前後連結複習、測驗與反思的評鑑,將學習網路開發的重點從遵循教材的典範轉移到培養自學的能力,將來才能擺脫教材自行開發程式,往合格的工程師之路邁進。

最後關於其他課程建議,也許這還是在雞蛋裡挑骨頭,目前想提的主要是從學到學期三後端,對JS的概念與應用有更多了解,覺得有些若在學期二的前端課程就先多提到或強調,感覺會更完整,主要是與非同步(Asynchronous)概念其實相關的回呼函式(callback function)與API:前者主要在學期三後端語法介紹,但在前端寫按鍵功能常用的eventListener在寫法和運行上也是非同步的callback;後者在前端課程時僅先需會使用,但到後端課程學習將資料處理顯示在用戶端網頁,其實就是使用自製API。 如增加如上述舉例補充,也許能把非同步概念在學期(前後端)間更加(佳)的銜接。

良好的課程安排就像是鷹架,能讓學習有恰當引導,更適宜逐步成長(好教育哲學……),取自:https://commons.wikimedia.org/wiki/Commons:Photo_challenge/2015_-_April_-_Back_side#/media/File:Workers_on_metal_pole_scaffold_(Taiwan).jpg

--

--

Bob Yu-Zhen Huang is developing on web

2020年代第一天起,以第一篇廢文開始網路開發的學習紀錄,短期目標是不定期分享關於寫程式,或與資訊、軟體、電腦勉強沾得上邊(?)的學習心得與感想(先定廣一點方便擴張範圍……);長期的話,則是將這個站停掉(!)──待未來自行架設部落格新站後搬過去(開發專案與習作彙整:https://github.com/BOBYZH)。