對於剛接觸程式語言的人,比較推薦的是先理解程式語言的由來、訓練邏輯表達與理解程式語言的基礎用法。
瞭解程式語言的由來的在於它能夠幫助你理解學完這個程式語言後 能應用在那些場景?,而這正是我們學習一項程式語言的目的之一。如果你現在的目標是 想開發出提升網頁互動性的程式,那麼挑選 JavaScript 是一個不錯的開始,而我也會在後續篇章中陸陸續續提到有關 JavaScript 的由來與小故事。
接著,訓練邏輯表達我認為是一個很重要的環節,因為這牽扯到後續解決問題的相關策略。
在認知心理學(cognitive psychology)中,我們主張了將認知的心理歷程透過具體的呈現與實驗來證明有關思維、記憶、決策等等議題,而非透過「內省」的方式來詮釋。
對於解決問題的策略我們可以參考 解決問題的週期,這個週期過程中涉及了以下的環節:
對於剛學習程式語言的人來說,最困難的部分往往會在於 定義問題與形成策略:
Davidson 和 Sternberg(2003)研究指出,結構清楚的問題(well-structured)具有相對清楚的解決問題路徑;而曖昧不明的問題(ill-structured)則沒有清楚的解決問題路徑。
而這兩者問題解決方式也大不相同,對於後者來說要每次一有新的問題出現時都要重新思考不同的策略或頓悟(insight)才能解決問題。
因此我們可以藉由將抽象的邏輯拆解成具體的流程問題,使得我們能夠檢視 具體的脈絡 來修改原先可能有問題的邏輯盲點。
由於我們還沒有開始學習 JavaScript,因此我們需要考量到是「預先訓練」的部分,也就是說訓練的部分,你可以先使用中文來訓練,主題的話可以從日常生活情境開始,比如說幫助一個正在超商裡面的機器人來決定要不要買東西吃:
這是一個簡易版本的流程圖,當然他還可以涉及更多的決策!
除此之外遊戲化學習(learning through play)這個概念也是越來越夯,所以你覺得上述方法相較無聊你也可以考慮以下的方式進行:
像這樣子訓練自己在邏輯上的思維,有助於後續實作上的呈現,因為到時候我們要透過類似的方式來描述我們的解決方案,直到我們可以順利的透過抽象思維就能解決問題為止,除了問題涉及範圍較大時,我們還是能夠藉由架構圖、流程圖來進行分析。
最後一點我所推薦的是理解語言的「基礎用法」,前期你能知道這套程式語言能做什麼,做到多少,會決定了你對它的「看法」與後續解決問題上的「考量」,所以一些較為基礎的用法還是得要慢慢學習。
以決策領域上來看待解決問題的「策略」要如何形成,擴散性思考(divergent thinking) 是非常重要的一個環節,因為它可以幫助你尋找到各種解決方案,所以知道得越多你便能夠擁有更多種不同的策略來挑選。而至於後續要挑選哪個解決方案,則屬於收斂性的思考(convergent thinking),而收斂性的思考需要透過不斷的練習、實作與參考他人的做法等等長期的經驗中才能 慢慢 訓練的,所以這個階段中暫時不用強求一定要採用最佳解。
所以別再怪 Malcolm Gladwell 說為什麼要有一萬小時了,因為一萬小時中的差異確實是能幫助你在發散性思考與收斂性思考中擁有顯著性的差異。
所以如果你正處於這個階段的話,我會推薦你練習完上面的訓練後,先行透過如 w3schools 或是小犀牛書籍的教學後,再來閱讀本系列文的第二、三章節,會對於本系列中所講解的概念會更加的深刻!