位元詩人 技術雜談:Exercism - 充滿測試驅動開發風格的程式設計練習網

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

在學完程式的語法後,若能搭配練習題或是小型專案,能使我們對自己所學的程式更加了解。不過,有時候手上剛好沒有可以拿來練功的專案;這時,透過一系列設計過的習題,也可以達到類似的效果。已經有一些線上網站做到這種性質的服務,像是 LeetCode 或是 HackerRank;不過,我們在這裡要介紹 Exercism 這個網站。和上述網站不同的是,Exercism 的練習題是下載後在本地端做,而不是透過練上編輯器完成。雖然要自行建置環境有點麻煩,但是,試著自行建置開發環境,也是練習的一環,這種方式,也較接近真實的情境。

Exercism 號稱有 30 種語言的練習題,雖然沒有去細數,看了一下,的確非常豐富。許多主流的程式語言都有相關的練習題可做,而且,也包括像是 Lisp 或是 Erlang 這種相對冷門的語言。練習的方式,是透過該網站提供的命令列工具,也叫 exercism 來下載題目。每一道題目,會有一個未完成的 code 及相關的 unit test 程式,我們的目標,就是實作程式以符合該 unit test 的要求,完成後,可再利用同一個命令列工具上傳檔案,接著,再下載另一道題目。不過,Exercism 似乎不會針對上傳的程式再檢查,而是會將程式碼上線,供其他人觀看和給予建議。實際上,上傳的人蠻多的,別人回顧到自己程式碼的機會不多,還是想辦法符合 unit test 比較實際。

解題的線索,主要是透過閱讀 README 和 test suite,這種先有測試程式,再完成實作的練習方式,的確有一些測試驅動開發的風格,筆者覺得這種方式很好,可以同時練習到閱讀和撰寫程式碼。一開始前面的題目相對簡單,後來的題目會越來越有挑戰性,而需要花費更多時間完成。不過,Exercism 的重心是在程式設計,而非資料結構和演算法,所以,大部分的練習題使用的演算法還算簡單。如果目的是為了熟悉某個新的語言,倒也不必做完全部的習題,只要有一定份量的練習,對於該語言自然會有一定的熟悉度。

筆者自己透過這個網站,練習了包括 Python 和 Go 等數個語言,練習的效果還蠻好的。希望透過本文介紹的資源,可以讓更多人學會程式設計。