在《The Clean Coder》書中,Bob大叔談到程式設計前,必須藉由練習提升專業技能,並以武術中Kata(對打)來做為比擬,書中談到「Kata是一套設計好的、用來模擬搏鬥一方的招式。目標則是要逐步把整套招式練習到純熟……為了真正搏鬥時能正確應對……」不單是武術,各個領域的專家也會藉由練習來提升專業技能,程式教育訓練時,也可以Kata的概念來設計實作課程。

實作前的教材設計
進行技藝練習時,練琴會有琴譜,練棋會有棋譜,在剛開始進行Kata練習時,由於要練習的招式多,有個適當的教本作為指引會有所幫助。大多數程式實作教材的目的,多半是希望使用者在自學時,也可照本操課。坊間紙本技術書籍多半將觀念與實作內容同時撰寫,也就是一邊講解觀念,一邊提示必要的實作步驟、展示必要的程式碼或圖片。

這種設計的好處是,對於講述觀念為主的書籍來說可節省篇幅,壞處就是對練習的輔助效果不佳,就像在看運動教學書一樣,有時兩個動作之間如何連結,單看書中的動作分解圖,實在難以揣摩。

另一種設計方式,是將觀念講解寫為一本,實作內容獨立為另一本教材,這種設計的好處是,設計實作手冊時只有一個目的,清楚說明實作步驟,讓實作得以順利完成,實作手冊中可使用逐步(Step by step)方式來說明每個操作,程式碼部份也可從預先準備好的檔案中,以複製方式完成。

這類教材的好處是,只要照本操課,學員實作完成度就高,可避免不少因忽略操作細節而引發的錯誤,即便是不熟練的講師在備課時也輕鬆許多,壞處就是製作時間冗長,且容易因為技術版本遷移,而必須調整實作教材內容,因為要獨立出一本實作教材,坊間紙本技術書籍不太會採用這種方式,多半見於專門以教材訓練為生的單位。

如果想不受篇幅限制,可採用電子文件或教材方式,如此一來,可撰寫詳細實作步驟、展示逐步操作畫面,或甚至以錄影方式設計。實際在紙本技術書籍中,也可採用錄影方式搭配,放置在書附光碟或提供網路下載,以輔助書中實作之進行。

錄影的好處是,可完全重現實作示範時的每個細節,缺點是要做好錄影內容是另一種技能,對缺少影片製作經驗的講師來說並不容易,也容易因為技術版本遷移而需重製影片內容。

實作時的環境設施
不少單位有錯誤的觀念,認為進行教育訓練時,只要有電腦就夠了,忽略了相關環境設施,讓實作訓練的效果大打折扣。

就硬體設施來說,最重要的其實並非電腦,而是開放的網路環境,不少單位因為資訊安全管制等理由,進行到場(On-site)訓練時的網路環境受限重重,像是大規模(且莫名)地封鎖網站,或者網路速度過份受限,這不單限制了實作過程中援引網路資料的管道(像是查詢API文件的網站亦被封鎖),也會導致必須從網路獲取相關資源的實作失敗。

給實作時一個獨立且開放的網路環境,對實作進行絕對是有幫助的,如果真的因資訊安全管制嚴格,而無法提供開放的網路環境,那麼向外租用專用電腦教室,會比勉強實施到場訓練有效果。

就軟體設施來說,能夠部署單純、與設計實作教材時相同的軟體環境,基本上是有助於實作練習的順暢進行。

專門的教育訓練單位若有專用電腦教室,通常也能提供課程環境部署,讓學員、講師的軟體環境能與教材設計時一致,為了避免干擾,課程進行期間不安排其他課程同時進行,或是使用可抽換硬碟,讓每個學員的軟體環境獨立;不過,不應矯枉過正,只為管理方便,而一味僅能部署當時設計教材時的固定軟體環境。

有些到場訓練沒辦法做到軟體環境一致,像是還原電腦並僅部署課程所需軟體,也可能是學員自行攜帶筆電,基本上這不是壞事,因為,適當地讓學員遇到一些環境干擾問題,並瞭解如何解決,也可視為機會教育。

但軟體環境不一致的缺點是,講師協助排除問題時負擔較重,而且會有環境因素太複雜,而令實作完全無法進行之風險。

有些單位,一整年都不對電腦教室的軟體環境,進行整理或重置,軟體環境中其他程式佔用太多資源,使得實作時必須使用的工具,無法獲取必要資源,而導致一些工具異常問題,經常令學員的實作明明是正確的,卻無法呈現正確結果,練習無法得到正向回饋,反而有損學員信心。如果學員羞於請求講師協助,那實作對於增進熟練度的目的來說,更完全是反效果。

練習、遭遇問題並解決

許多尋求教育訓練的客戶,總希望能讓學員實際完成一個應用程式。當然,寫出應用程式,瞭解組合方式與過程是實作目的之一,但不是主要目的。

畢竟,如果只是要組合出應用程式,設計一本逐條列示步驟的實作教材、挖空練習用程式碼,與配合剪貼程式片段方式,就可達到目的。如果學員連剪貼都會有錯誤,提供每個練習階段成果,在每個新階段都以上階段成果作為開始,要組合出程式基本上是件簡單的事。

就如《The Clean Coder》中提到:「練習Kata並不是為了舞臺表演,訓練意識和身體是為了在真正搏鬥時,能夠正確應對」,我在實作課程時總告訴學員:「讓你們把東西做出來不是實作主要目的,練習之目的,是讓你們能遇上問題並嘗試解決!」這也是Bob大叔在書中說的:「程式設計的Kata,也是一整套敲擊鍵盤和滑鼠的動作,用來模擬程式設計問題的解決過程」。

看得懂講師的實作示範是一回事,親自動手做又是另一回事,講師實作看似簡單,也應該嘗試一遍,才會親自遇到一些問題,才有嘗試解決的機會。

就有如學習小提琴時,看著老師示範上弓、下弓,似乎只是一上一下拉動琴弓,然而右手手指擺放、右手的高度、上下拉動距離、左肩夾小提琴的力道、眼睛觀看琴弦的角度,往往在親自練習之時,成為老師糾正的細節,也只有在反覆遇到問題並解決之後,才能讓身體熟悉,自然且協調地將每個動作要點連貫起來。

前面在談實作教材的設計時,其實忽略了一種設計方式,就是教材上只提供應用程式設計時的需求,並由講師示範過後,學員憑藉方才示範的操作流程記憶,重新嘗試相同實作,教材上不會有逐步實作提示;有時連必要的實作步驟也沒有,遇到問題時就是嘗試自行解決,或者請求同學、講師協助,反覆地遇上問題,反覆地解決問題,久而久之,解決問題的邏輯就會建立起來。

重複練習以連貫成流暢套路
在所有實作結束後,我會告訴學員,日後有空應該再拿出相同實作來反覆練習,目的不在完成同一個應用程式,因為應用程式在課程中已經完成過了,目的是藉由重複練習,再試著去遇上其他問題並解決。

雖然我這麼告訴學員,不過想必真正實行的應該沒幾個,也許真正有反覆練習的是我自己,相同或類似的課程練習不知重複了幾次,學員各種千奇百怪的實作問題尋求協助時,幾乎都是立即、反射性地選擇所要的動作與決策。

重複練習的好處在於你會發現,許多問題並不在程式碼本身,而在多個環節的連結之間。就如Bob大叔談到:「它特別有利於在潛意識中構築『通用的問題』與『解決方案』間的聯繫,以後如果在實際的程式設計遇到問題,你就知道要如何解決」。

專欄作者

熱門新聞

Advertisement