創作內容

23 GP

寫程式的刻意練習

作者:Yotsuba│2019-10-18 03:06:54│巴幣:1,044│人氣:1415
在此我想先推薦一本書《刻意練習》

這本書在我發展專長的路上,提供了我許多幫助

我想分享一下如何盡量使用刻意練習的原則去做好寫程式這件事情


小弟我正邁向自學程式的第三年

在過去的兩年之間,我從零到變成一個有程式背景的人

我自學了 C, C++, AutoHotKey, Python, Java, C# 等等語言

我獨立開發過一些小專案,像是遊戲輔助插件、網頁爬蟲或是邪惡的外掛都有接觸過

我也曾經對應用程式反編譯並且嘗試尋找漏洞,甚至執行過駭客行為

就以一個沒有背景的麻瓜來說,自學兩年後的我認為自己獲得巨大的成功

聽完上述的背景故事,你至少安心的覺得接下來我想分享的東西有參考價值

即使我只是個普通人,朋友圈的電腦達人,巴哈姆特上的活躍用戶而已


很多人會在意自己該學什麼語言好 ? 下一步該學什麼 ?

其實這個問題是模稜兩可的,提問的人應該先搞清楚自己想用程式做到什麼

如果硬要回答的話,我會推薦沒有方向的人學習 Python,因為它夠簡單

我知道大部分人也喜歡循著目標學習,因為那很有安全感,而且看上去腳踏實地

如果真要說出一系列的方向的話,我想會是 :

熟悉語法 -> 物件導向思維 -> 資料結構 -> 演算法

刻意練習也提倡要有一個明確的目標

但是就書中的意思來看,你應該為自己訂下 : 我要在半年內寫出 XXX 專案之類的目標

我提出的東西比較像是學習的順序,刻意練習則是希望以發展技能為導向


刻意練習是刻意進行的,過程中必須全神貫注

我認為有必要時常留意自己對邏輯的詮釋是否正確 ? 是否可以用更簡潔的方法寫 ?

自己的 Coding Style 是否頭尾都一致 ? 變數的命名會不會沒有意義 ?

抓 BUG 的時候是不是一昧的使用 print 大法而已 ?

或者這邊註解一下,那邊先刪除一下 ?

善用該語言提供的 Debugger 去追蹤執行時期的狀態才是更有效的上策

更別說 Debugger 一樣有設置中斷點的功能,何苦用註解並且重複編譯又執行呢 ?

Debugger 發現執行時期與預期相反的地方,可以反映出自己錯在哪裡

而時常留意自己犯錯的地方,提醒自己不要再犯非常重要


刻意練習只有跨出舒適圈才有效,而且過程通常不會太有趣,還會帶點痛苦

記得我當初就連學習 Debugger 都不太願意

因為我很怕麻煩,而且覺得有 print 大法能用就好了,幹麻多學一個東西呢 ?

但是當我習慣用 Debugger 在終端機底下除錯

我才知道工具真好用,覺得相見恨晚


所謂跨出舒適圈,也呼籲到前一個重點「必須刻意進行」

我會要求自己產生新想法,讓自己的手動起來做專案

一昧的死讀書或是吸收知識很沒有效率,還是多寫點程式實在

我也很推薦寫題目,像我個人就很喜歡寫 LeetCode

記住 ! 寫題目也不是一昧的亂寫,善用題目分類可以加強自己不足的地方

比如說你想練遞迴 ? 或者練排序 ? 那就找對應的題目來寫,這樣才是有目標的練習


刻意練習包含意見回饋,並且根據回饋調整努力方向

直觀來說,如果你寫程式的同時有老師盯著你,隨時告訴你哪裡寫得不好

並且告訴你怎麼做更好 ? 這樣學習起來是最舒服的狀態,而且效率極高

畢竟你犯錯的當下就可以馬上訂正,寫對的邏輯也能被加以認證

不過我認為這點是原則中最難以實施的

不是每個人在從事任何練習,都有機會被很厲害的老師指導著

但也不是完全無法辦到,或者說不一定要尋求人的意見回饋


我寫程式的時候非常注意編譯器拋出的錯誤訊息,我認為那就是最好的意見回饋

不管你是少打字或是語法錯誤都好,編譯器會不厭其煩的告訴你哪裡寫錯

經過長時間的練習,我在編譯階段的除錯已經非常快速了

到了執行時期,如果有 BUG 則依靠 Debugger 觀察

這時候自己就是自己的導師,程式設計師總能找到錯誤並且提醒自己該怎麼修改


在這種網路發達的年代,Google 搜尋也是一種意見回饋

擅用關鍵字查資料,或者練好英文看看 Stack Overflow 上的網友怎麼說

如果真的是很棘手的狀況,把程式碼丟到討論區發問也是一種回饋

記得注意「提問的藝術」就好


我覺得《刻意練習》這本書最厲害的地方在於它不會給你心靈雞湯

整本書沒有半點幹話,是用真正的科學方法證明刻意練習能奏效

所謂刻意練習又是什麼 ? 就是從各領域的頂尖大師身上觀察來的特質

這些人都怎麼練習 ? 練習時都有哪些原則 ? 跟一般人的差別又在哪裡 ?

刻意練習的確是一套幫助你成為頂尖大師的練習方法


雖然我的夢想沒那麼偉大,我只是樂愛寫程式的普通人

但就算不當頂尖大師也能這樣練習

以上是我寫程式會注意的細節跟原則

就如開頭所說,我只是「盡量」使用而已

如果你是對刻意練習產生興趣、想知道它的全貌,那就自己去買書看吧 !
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4563635
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 3 篇留言

Ctrl+Shift+W
我學了四年,從 c 逃到 cpp 再逃到 Java 然後放棄要編譯的改玩 Python,後來又退到 JavaScript... 這樣比較起來,你真的很有天份,還有勇氣。

10-18 07:30

Yotsuba
語言本身只是工具,重點還是在於你想開發什麼吧 ~ ?

我覺得可以在每一次想轉換語言的時候,先想想自己為什麼要在這裡放棄 ?10-18 22:12

我完全看不懂API 文件,也完全無法理解物件導向設計@@

10-18 13:11

Yotsuba
可以先思考一下是英文不夠強,或是背景知識不夠等等問題 ?

真的無法理解的片段也可以來資工串發問,看看別人怎麼解讀 ?

至於物件導向思維 ... 我個人覺得應用一下 C++ STL 可以幫助理解物件導向

或者嘗試 Java 這種很物件導向的語言,多寫一點來親身感受10-18 22:18
哥布林鎖鍊旋轉者
我目前也都用print大法
真是說到心坎裡ㄏㄏ

03-27 02:15

Yotsuba
不要逃避開發工具ㄛ,越可怕越要克服它03-27 02:39
我要留言提醒:您尚未登入,請先登入再留言

23喜歡★happy819tw 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:教你自定義 Discor... 後一篇:我寫了神魔之塔的外掛...

追蹤私訊切換新版閱覽

作品資料夾

yvonne40528歡迎來讀新詩ゝω・
是哪一盞清脆光點/指引我穿越一叢叢幽暗怒火/腳步並非已無朦朧/深淵的勸誘依舊格外香甜魅惑看更多我要大聲說昨天13:35


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】