Spread the love
最近持續在上Launch School的課程學習Ruby,在課程中我們定期都必須繳交作業給TA評鑑。不過有趣的是,coding這件事本身並沒有所謂的標準答案,重點是你是否能夠解決問題。而且也許我目前還算是在課程比較前期的部分,所以TA並不會對我的coding架構有太多的修正,只要跑得順、沒有太大的問題都可以。
但是也因為如此,我一直在思考一些事,像是「如果我現在就養成壞習慣,之後怎麼辦?」和「我沒有一個好的效仿對象,我怎麼知道自己的coding好不好?」等等。既然我們學習的目的,就是希望技能能為我們所用,並且最好還能夠用得有模有樣,那找出一個讓自己受益的學習方法和楷模的重要性自然不不言而喻。
有效的學習方法-實作
在A Mind For Numbers: How to Excel at Math and Science這本書中,作者Babara Oakley提到了一個很有趣的觀點,她說:『接受測驗本身是個非常有效的學習方式。』
Testing is itself an extraordinary powerful, learning experience.If you compare how much you learn by spending one hour studying versus one hour taking a test on the same material, you will retain and learn far more as a result of the hour you spent talking a test.
一般來說測驗有效的原因就在於,他讓受測者試著整合過去所學習到的知識,“實際的“去解決生活中所遇到的問題,而不只是不停的學習或閱讀,但卻沒有實踐。最簡單的例子就是讀了一堆英文沒開口和平常天天開口的區別,當你真的實際使用你的所學,你才會知道過去的學習有哪裡不足。
什麼是像專家一樣生活?
而所謂的像專家一樣生活,其實跟接受測驗很類似,都是學習如何解決真實世界的問題。而跟接受測驗不同的是,像專家一樣生活是先藉由探索如何解決真實世界的問題,再一步一步回頭補足自己哪裡不足。也就是說,我們藉由事先了解專家做事的原則、要求自己的標準、如何解決問題等等,然後開始模仿他們的行為,讓自己有朝一日也能達到他們的水準。而不是事先花大量的時間慢慢的學習所有的知識,然後再開始實作。而在我先前的一篇文章“輸出倒逼輸入”也有提到不少像專家一樣生活帶來的好處。
這就像是說,如果我要成為一個programmer,我不見得要事先修普物、微積分和線性代數再開始學寫程式,而是直接從我要學習的語言開始(假如是Ruby),然後像那些工程師一樣直接用Ruby來解決我生活中遇到的問題。在這個過程中我必然會遇到很多困難,但是我可以迅速瞭解專家們如何做事,並且補足我所不足的知識,而不用過度花費時間練習基礎知識,但卻遲遲沒有實踐。
你需要事先了解的事
所以在我們像個專家一樣生活之前之前,我們有必要事先了解這個領域的一些基礎必要問題,讓自己可以快速進入狀況。這些問題像是(以學習Ruby為例)
1.Ruby是什麼?
2.Ruby可以解決什麼問題?
3.怎麼學習Ruby
4.Ruby的資源去哪裡找?
5.怎樣才是一個好的Rubyist
6.怎樣的code才算是好的code?
在瞭解了這個領域的基礎知識、相關知識還有專家的標準之後,你在學習的過程中就可以不斷的透過這些要點,來檢視自己的學習狀況,或是否真的了解這個領域。若是沒有則修正,有則繼續保持。
而為了了解到底怎樣的code才是好code,我在google輸入了以下的句子”How good programmer code”,結果我在stack overflow上找到了這個網頁,其中票選回答票數最高的答案是
- Good code is well-organized. Data and operations in classes fit together. There aren’t extraneous dependencies between classes. It does not look like “spaghetti.” (良好的結構)
- Good code comments explain why things are done not what is done. The code itself explains what is done. The need for comments should be minimal..(最好用code來表達,而不是靠註解。)
- Good code uses meaningful naming conventions for all but the most transient of objects. the name of something is informative about when and how to use the object.(好的命名規則)
- Good code is well-tested. Tests serve as an executable specification of the code and examples of its use.(經過反覆測試的考驗)
- Good code is not “clever”. It does things in straightforward, obvious ways.(好的code易於瞭解、表達明確,而不一定要看起來好棒棒)
- Good code is developed in small, easy to read units of computation. These units are reused throughout the code.(unit可重複性高、易於使用、不要太肥大)
所以在未來coding的時候我就必須知道,我要用以上的標準來要求自己,因為這些都是所謂“好的programer”會做的事情。
小結
在我們學習的過程中,若是有仿效的對象還有參考的標準,就能夠讓我們認清自己還有哪些地方需要加強。如果沒有學習對象,我們難免會像無頭蒼蠅一樣亂闖亂撞,耗費了大量的時間還有注意力。而像專家一樣生活可以幫助你提前活在未來,少走冤枉路。
所以,先花點時間研究你想要專研的領域,看看專家們都怎麼做事,然後用他們的生活方式生活、用他們的標準要求自己,這才是最有效的學習方法之一。
而其實,像專家一樣生活,還有另外一個巨大的好處,那就是-提前成為未來的你。