在此我想先推薦一本書《刻意練習》
這本書在我發展專長的路上,提供了我許多幫助
我想分享一下如何盡量使用刻意練習的原則去做好寫程式這件事情
小弟我正邁向自學程式的第三年
在過去的兩年之間,我從零到變成一個有程式背景的人
我自學了 C, C++, AutoHotKey, Python, Java, C# 等等語言
我獨立開發過一些小專案,像是遊戲輔助插件、網頁爬蟲或是邪惡的外掛都有接觸過
我也曾經對應用程式反編譯並且嘗試尋找漏洞,甚至執行過駭客行為
就以一個沒有背景的麻瓜來說,自學兩年後的我認為自己獲得巨大的成功
聽完上述的背景故事,你至少安心的覺得接下來我想分享的東西有參考價值
即使我只是個普通人,朋友圈的電腦達人,巴哈姆特上的活躍用戶而已
很多人會在意自己該學什麼語言好 ? 下一步該學什麼 ?
其實這個問題是模稜兩可的,提問的人應該先搞清楚自己想用程式做到什麼
如果硬要回答的話,我會推薦沒有方向的人學習 Python,因為它夠簡單
我知道大部分人也喜歡循著目標學習,因為那很有安全感,而且看上去腳踏實地
如果真要說出一系列的方向的話,我想會是 :
熟悉語法 -> 物件導向思維 -> 資料結構 -> 演算法
刻意練習也提倡要有一個明確的目標
但是就書中的意思來看,你應該為自己訂下 : 我要在半年內寫出 XXX 專案之類的目標
我提出的東西比較像是學習的順序,刻意練習則是希望以發展技能為導向
刻意練習是刻意進行的,過程中必須全神貫注
我認為有必要時常留意自己對邏輯的詮釋是否正確 ? 是否可以用更簡潔的方法寫 ?
自己的 Coding Style 是否頭尾都一致 ? 變數的命名會不會沒有意義 ?
抓 BUG 的時候是不是一昧的使用 print 大法而已 ?
或者這邊註解一下,那邊先刪除一下 ?
善用該語言提供的 Debugger 去追蹤執行時期的狀態才是更有效的上策
更別說 Debugger 一樣有設置中斷點的功能,何苦用註解並且重複編譯又執行呢 ?
用 Debugger 發現執行時期與預期相反的地方,可以反映出自己錯在哪裡
而時常留意自己犯錯的地方,提醒自己不要再犯非常重要
刻意練習只有跨出舒適圈才有效,而且過程通常不會太有趣,還會帶點痛苦
記得我當初就連學習 Debugger 都不太願意
因為我很怕麻煩,而且覺得有 print 大法能用就好了,幹麻多學一個東西呢 ?
但是當我習慣用 Debugger 在終端機底下除錯
我才知道工具真好用,覺得相見恨晚
所謂跨出舒適圈,也呼籲到前一個重點「必須刻意進行」
我會要求自己產生新想法,讓自己的手動起來做專案
一昧的死讀書或是吸收知識很沒有效率,還是多寫點程式實在
我也很推薦寫題目,像我個人就很喜歡寫 LeetCode
記住 ! 寫題目也不是一昧的亂寫,善用題目分類可以加強自己不足的地方
比如說你想練遞迴 ? 或者練排序 ? 那就找對應的題目來寫,這樣才是有目標的練習
刻意練習包含意見回饋,並且根據回饋調整努力方向
直觀來說,如果你寫程式的同時有老師盯著你,隨時告訴你哪裡寫得不好
並且告訴你怎麼做更好 ? 這樣學習起來是最舒服的狀態,而且效率極高
畢竟你犯錯的當下就可以馬上訂正,寫對的邏輯也能被加以認證
不過我認為這點是原則中最難以實施的
不是每個人在從事任何練習,都有機會被很厲害的老師指導著
但也不是完全無法辦到,或者說不一定要尋求人的意見回饋
我寫程式的時候非常注意編譯器拋出的錯誤訊息,我認為那就是最好的意見回饋
不管你是少打字或是語法錯誤都好,編譯器會不厭其煩的告訴你哪裡寫錯
經過長時間的練習,我在編譯階段的除錯已經非常快速了
到了執行時期,如果有 BUG 則依靠 Debugger 觀察
這時候自己就是自己的導師,程式設計師總能找到錯誤並且提醒自己該怎麼修改
在這種網路發達的年代,Google 搜尋也是一種意見回饋
擅用關鍵字查資料,或者練好英文看看 Stack Overflow 上的網友怎麼說
如果真的是很棘手的狀況,把程式碼丟到討論區發問也是一種回饋
記得注意「提問的藝術」就好
我覺得《刻意練習》這本書最厲害的地方在於它不會給你心靈雞湯
整本書沒有半點幹話,是用真正的科學方法證明刻意練習能奏效
所謂刻意練習又是什麼 ? 就是從各領域的頂尖大師身上觀察來的特質
這些人都怎麼練習 ? 練習時都有哪些原則 ? 跟一般人的差別又在哪裡 ?
刻意練習的確是一套幫助你成為頂尖大師的練習方法
雖然我的夢想沒那麼偉大,我只是樂愛寫程式的普通人
但就算不當頂尖大師也能這樣練習
以上是我寫程式會注意的細節跟原則
就如開頭所說,我只是「盡量」使用而已
如果你是對刻意練習產生興趣、想知道它的全貌,那就自己去買書看吧 !