當程式師已經處於中級時, 應如何提高自己?有很多關於“學習程式設計”的資源, 能夠讓人從0到新手(雖然這些資源中大多數的品質是值得商榷的), 但是怎麼樣才能將中級水準提高到專家級?如何構建允許我在高級別編寫代碼的心理模型?
在這篇文章中, 我將討論關於普遍性能改進的一些理論, 然後討論一些程式師用於實踐的方法(以及我對這些實踐的想法), 然後是我對改進成為中級或更優秀程式師的最佳方法所作出的結論。
關於普遍性能改進的快速指南
我最近一直在閱讀大量關於性能改進的內容, 大多數文獻使用K. Anders Ericsson的研究作為起點。 他是性能研究的傑出面代表, 幾乎在所有涉及這個主題的書中都被引用。 他今年發表的書《Peak: Secrets from the New Science of Expertise》, 濃縮其30多年的研究, 易於理解, 這也是我推薦給大多數新手的單個最佳資源。
簡要總結上下文:
改進任務的執行來自于開發更好的心理模式,
為了能夠實現改進, 必須能夠定義什麼構成改進性能並且分解實現步驟。
實踐和性能是不同的, 最好的實踐方法幾乎從不是性能。 例如:一個想要提高擊中的棒球運動員應該花費30分鐘在練習場中練習200個投球(實踐), 而不是用2個小時去比賽中觀看15個投球(性能)。
提高方法
我發現人們建議的大多數關於程式設計的改進方法就是基於性能的。 閱讀代碼, 閱讀關於代碼的內容, 編寫代碼, 做項目, 談論代碼等等。 如果他們在自己的工作之外做這些事情, 那麼程式師基本上肯定會有所提高, 但似乎不是很有效率。
如果我想更擅長於程式設計,
那麼, 我們如何得到我們作為程式師的性能回饋迴圈?是的, 我們有特定片段代碼的回饋迴圈, 無論代碼是否工作, 它的性能和健壯性如何等等。
下面是我用來學習程式設計的方法, 有些地方很不錯, 也有些地方值得改進:
通過程式設計挑戰實踐
我享受於程式設計挑戰, 但一般來說, 我發現它們不值得去接觸一種新的程式設計語言。 它們提供弱回饋迴圈——你的程式要麼產生正確的輸出要麼不產生——並且不會給你對設計過程的回饋。 這個方法可能會介紹一個新的演算法或一個你不熟悉的語言的新功能, 但在實踐方面, 很弱。 比起“實踐”, 它更接近於“性能”, 並且你處理的是人為的問題,
我發現的一個例外是由@ericwastl的Advent Of Code。 程式設計問題很好地模擬了現實生活中的問題(需求定義明確, 但是邊緣情況沒有寫入規範並且必須隱含), 並且對於解決方案有多麼設計良好具備即時回饋, 因為對每個拋出額外需求或一些其他困難的問題有part 2, 這意味著你必須重新評估你的原始解決方案有多少精心設計。 這並不完美, 但我喜歡看到我的解決方案具有挑戰性, 並且經常不得不重新考慮我的解決方案的結構和設計, 當我達到part 2的時候。
做業餘項目
做業餘項目, 如果你有一個的話, 將是投入額外程式設計時間的偉大方式;如果你做一些你喜歡的事情的話, 你就不會覺得這像工作。 不幸的是, 因為項目參差不齊, 所以你可能不會真正學到東西。如果你的業餘項目與想要學習的程式設計內容相一致的話,那麼恭喜你,這是一個好選擇,否則它只是性能vs實踐的另一個版本。即使在最好的情況下,如果主要目標是生產某種東西,那就意味著實踐和學習得排在後面。
閱讀關於程式設計實踐的書
閱讀程式設計書籍是一個快速提升知識的很好方式,我認為它應該是幾乎任何“提高程式設計”方案的一部分。然而,它並非是讓人能夠一勞永逸的銀彈。純粹的知識獲取可以幫助你知道有哪些可用的選項,當你碰到某個問題的時候,但知識不能代替更好的心理模型。
最終建議
不幸的是,我沒有能夠得出具體的結論。也許答案是,需要有程式設計教練或導師,以便可以得到針對性的回饋和具體的實踐建議。也許這學科還太年輕,沒有正式的性能改進方法,不像古典音樂訓練和運動訓練。
在評論中告訴我你的想法。我特別想聽聽那些通過教學/訓練/指導而高水準產出的程式師的看法,或者在這樣的老師下學習的人。
所以你可能不會真正學到東西。如果你的業餘項目與想要學習的程式設計內容相一致的話,那麼恭喜你,這是一個好選擇,否則它只是性能vs實踐的另一個版本。即使在最好的情況下,如果主要目標是生產某種東西,那就意味著實踐和學習得排在後面。閱讀關於程式設計實踐的書
閱讀程式設計書籍是一個快速提升知識的很好方式,我認為它應該是幾乎任何“提高程式設計”方案的一部分。然而,它並非是讓人能夠一勞永逸的銀彈。純粹的知識獲取可以幫助你知道有哪些可用的選項,當你碰到某個問題的時候,但知識不能代替更好的心理模型。
最終建議
不幸的是,我沒有能夠得出具體的結論。也許答案是,需要有程式設計教練或導師,以便可以得到針對性的回饋和具體的實踐建議。也許這學科還太年輕,沒有正式的性能改進方法,不像古典音樂訓練和運動訓練。
在評論中告訴我你的想法。我特別想聽聽那些通過教學/訓練/指導而高水準產出的程式師的看法,或者在這樣的老師下學習的人。