Exercism - 學習程式語言與英文的神兵利器
這篇文章要介紹給大家Exercism,這是一個我非常喜歡的免費學習平台,目前有 62 種程式語言可以學習,我之前是在上面練習R語言,現在則是將 JavaScript 的基礎完成了。

學習大綱
在大多數的程式語言中,exercism 都有規劃學習的大綱(Syllabus),按照大綱就可以將該門程式語言的基礎用法理解透徹,我們以 JavaScript 作為例子


這些觀念都是互相連結,每個觀念都有一題練習題,我們這邊以Regular Expressions點進去看看,會有該觀念的仔細介紹,在閱讀完該觀念的介紹後,可以點向右側的練習題

他會給你一些指示,這題告訴你說,你被雇用為正則專家幫助公司解決聊天機器人的問題,然後就要用 JavaScript 去解決關於正則的問題。

我都是選擇線上編輯器去開啟試題,還有另一種方式是透過 exercism 的 CLI,就可以在自己習慣的編輯器寫完之後再上傳檔案檢查。

接著就是跟著題意和介紹的觀念用法,嘗試去解題,在解題完成且通過測試之後,有兩個選擇會跟著出現
- 看社群們其他人的解法(view community solutions)
- 尋求導師的協助(request mentoring)

導師談話
我覺得這邊和導師的對話不只可以給有經驗的前輩指導程式碼,也可以讓英文能力有所提升,下面是關於 Regular Expressions 的題目,從我和導師之間的討論擷取。

他提到他可以給我一些吹毛求疵的建議,但實際上,他是給我了專業程式工作者都會有的效能考量,在隨著專案的擴大,同樣是處理 regex,建立一個regExp物件跟使用字串儲存 regular expression,兩種方法再去呼叫test的方法會有顯著上的速度差異。
再來,他給我一些他的測試程式碼

他總結有四種方法可以來做 regex 的判斷
- locally defined with the /regex/ syntax
- locally defined with the new RegExp() syntax
- globally defined
- locally defined, stored in a property on the function, thus static across calls (initialized only once)
並告訴了我他的建議,第三跟第四種比較快,相對地,第一種慢一點,而第二種是最慢的,因此,不要使用第二種(new regExp())。另外,他也針對於我後面程式碼出錯的地方給予了修正建議,這邊就不花篇幅貼上來說明。
收到了這麼多的回饋,當然是會有些不知所措,這個時候,就是要一一修正整理。程式碼修改後,再次 submit,並留下了我的回覆,告訴他我的想法。

不久之後,大概是不到一天,很快地收到了他的回覆(沒錯,就是這麼快,導師們都很熱愛程式與分享)

好的,我放上面這張圖是因為我被導師稱讚了英文還不錯XDD,但是我還是對於英文的 First name, last name 有些霧颯颯,有些地方需要小修正。
在經過幾番來回討論與修正,與程式導師的浪漫對話就差不多到了尾聲,完成他的建議與自己的修正之後,最後就可以結束討論,導師們會收到一些額外的點數,而其實在寫完試題發佈到 community solutions 的時候也會有些微薄點數。這些點數就是好看用,還有可以了解這位導師多麽熱心,和自己的累積成就吧。
深度試題

透過上面的圖片,我們可以看到在 JavaScript 的程式學習軌道上,我完成的大多是基本和簡單的題目,Exercism 裡面還有很多中等或是高等的試題可以去做挑戰,而且有趣的是,每個試題都有些故事,甚至有些是相通的,就等著我們去深入挖掘了。
結論
Exercism 是一個非常適合新手跟有些基礎的程式學習者使用,他不但是能夠練習寫程式,也能夠透過和導師的對話練習英文。同時,他的學習軌道設計得十分良好,可以看見該題目包含了什麼概念,那些概念之間會有連結,也可以透過學習大綱了解到如何快速學習一門程式語言的基礎。綜合以上優點,可以稱其為神兵利器,各位~開始學習了吧!!!
