技能的強大源自於不斷的練習,身為程式設計師也應該嘗試在每天軟體開發前做點日常練習,一來是作為一種儀式代表自己要轉換心情開始軟體開發的工作、二來是幫自己的大腦暖身,切換到程式語言的世界、三來,最重要的是能讓我們不斷熟悉自己沒那麼懂的領域,像是寫測試、設計模式的應用、演算法、還不熟悉的程式語言等等。
練習的方式有很多種,最常見的就是去 Online Judge (像是 UVa Online Judge、LeetCode 等)答題網站挑選題目去編寫,這部分會比較強調演算法的練習,這部分大家應該都挺熟悉的,就不多贅述了。
如果是對實作能力的練習,可以去網路上找 Kata(對打)。Kata 是日語,是指武術中指一套設計好的、用來模擬搏鬥一方的招式,讓著這樣的練習去把整套招試煉受。我們則是透過模擬程式設計問題解決的過程,反覆練習大腦和手指的反應速度於協調。Kata 和 Online Judge 的目的稍微不一樣,後者比較重在思考演算法和刺激大腦去思考怎麼解題,而 Kata 比較像是在練習要解決這個問題所需要的動作和決策,就算原本就知道答案也沒關係。如果覺得 Kata 題目不好找,反覆練習 Online Judge 上解過的題目也是有類似效果的。
至於若想要練習寫測試,就可以考慮找人一起進行 Kata,不一樣的是,會由其中一方編寫測試,另外一方編寫程式讓他能夠通過測試。然後在兩方都寫完後,互換角色另外練習。
若想要增加練習難度,也可以要求使用不熟悉但現在或是不遠的未來開發打算使用的程式語言,讓大家去熟悉。或是讓前端人員嘗試用 PHP、Ruby 寫寫看,讓後端人員用 JS 寫寫看之類的,這樣也可以讓團隊暸解彼此的技能,在未來如果需要幫忙 Code Review 或是請假的代理時都會有幫助。
也可以在每週挑一個時段進行集體練習,挑個練習題目讓某個人開始練習,然後讓它將畫面投影出來讓所有人都能看到他練習的過程,這樣就可以觀察到他使用工具的流暢度、解題的思路、編寫的風格等等,然後讓他解完後大家給予建議或是觀察到可以加強的部分。再換下一個人去解同樣的題目或是不同的題目。透過這樣的集體練習可以在短時間內去彼此切磋以磨合團隊內部的開發風格以及思路,並且讓大家敢於指出彼此的不足,接受自己還有改善的空間,我覺得會是一個屬於軟體開發者不錯且能轉換心情舒壓的練習活動。