作為一個程式設計師的學習思考

2gua發表於2017-04-05

其實關於讀書、學習的那些事情,以前我也陸續叨叨了不少,但總覺得“學習方法”就是一個永遠在路上的話題。個人的能力、經驗積累與習慣方法不盡相同,而且一篇文章甚至一本書都很難將學習方法闡述得清清楚楚、面面俱到。那麼,要為自己找到最優的學習方法其實很困難,要去指導別人怎麼學習那更是相當困難......

大凡提到讀書、學習,都幾乎會提到“計劃”、“方向”、“堅持”、“靜心”、“總結”、“思考”、“實踐”這些個關鍵詞。其實都是沒錯的,如果日積月累下來,你最大的感悟往往也就是沉澱於此。而所謂“知易行難”。

我在這篇文章裡想盡可能從“自己作為一名程式設計師”的角色及歷程——來做些思考,算是對自己學習過程的一個審視。

想了想,我的知識積累過程大抵分為四個階段。

enter image description here

第一階段:困惑期

這個階段往往是小白階段,要麼經驗積累不夠(比如剛畢業),要麼是重大技術轉型階段(顛覆性的,比如由GUI應用模式轉到Web應用模式)。

以前剛出道時,寫的基本是C++的GUI應用和Foxbase管理資訊系統,之後的技術發展逐漸向Web趨勢演進,而Web應用從程式模式到部署模式都完全不同,以至於當年著實跌了不少跟頭。

記得剛涉足Web開發時,即使是拿著一本類似“21天精通”這樣的入門書,也是走得跌跌撞撞。啥IIS、Apache應用伺服器、請求/響應、Cookie/Session、Servlet......陌生到一度讓我懷疑人生。

這個階段也許一個月才能寫出一個聊天HelloWorld程式,心境往往起伏得厲害。但萬事開頭難,這個階段一定是要堅持、堅持再堅持,而且儘量沉下心學會控制情緒,千萬不要怨自己基礎不夠、腦袋不靈光。你咬牙堅持個一段時光,相信就可以進入“發展期”。優秀的人在這個階段:“不貪進度,穩紮穩打,願意打破砂鍋尋到底”

第二階段:發展期

在“打破砂鍋尋到底”的模式下,隨著之前的障礙逐個被擊破,我覺得啃一部入門書確實越來越輕鬆了,這個階段學得快也學得多,而且過程中冒出的問題越來越多,比如“要新增一個圖表咋辦?”、“想整個帶編輯、刪除功能的翻頁列表咋整?”之類的問題。這時候我往往是把這些點記錄下來,但不打斷自己(跟書或跟計劃)學習的節奏,好比“沒學會走之前不要試圖學飛”。

這個階段讓我想到小時候剛學會騎自行車,心裡歡喜得不得了,有一次竟然忘乎所以,豪情萬丈般地撒開手把子想讓車子自己保持平衡,結果一下子連人帶車就扎到路邊土溝裡去了。此時其實就是個“半桶水”階段,摸著了門檻但切勿得意忘形,還是紮紮實實跟著書本或計劃學基礎為妙。

第三階段:瓶頸期

基礎的內容掌握了,積累的困惑又呈現出了越來越多的趨勢。因為我已經不滿足溫飽,想做得更好了。這就是往更高層次發展過程中會遇到的障礙,一種“書我都讀完了也理解了,但就是在實踐中感到無從下手”的感覺。想要進一步提升自己,基本也就是靠“繼續學習深入的知識”跟“不斷嘗試/實踐去解決問題”這兩個方式並重了。如果你完成了第一個翻頁控制元件,是會有不小的成就感的。隨著一方面博覽群書、另一方面不斷勇於解決問題,這個瓶頸期就會在不知不覺中慢慢地度過去。

這個瓶頸期是比較磨人的,因為週期比較長,沒個幾年功夫過不去,三五年一小成,十年八年一大成。但這個過程又是最關鍵的階段,在這裡學到的、掌握到的都是行走江湖的真功夫。而且經歷了這個過程,就基本能把程式設計師分出個三六九等來。

第四階段:自由期

苦盡甘來後發現自己已經到了一個相當高度了。一方面經驗積累得很豐富,另一方面能做到觸類旁通。在這個階段你再學新知識、探索新方向,其實都能進展得比較順利。此時的你厚積薄發,打通任督二脈,原力生生不息。

這個階段基本不會有什麼困惑,而且也更能主動式學習及洞察事物趨勢。一年學個兩門語言不在話下。愛學啥學啥。但如果要深度運用新知識,則仍有一個小週期:進展期->瓶頸期->自由期,只是週期縮短了不少,再也不會像第一次蛻變過程那般痛苦不堪了。

到達這個階段可不容易,可能之前你早已摔得遍體鱗傷了......

其他

階段和過程擺在那兒,但要成就一名傑出的程式設計師、工程師、架構師甚至管理者、創業者,都需要個人具備一些優秀特質:

  1. 能夠沉浸其中,“做一行愛一行”,也就是通俗意義上的“興趣”;
  2. 熟稔總結之道。我一般喜歡聯想,比如這個內容書上是這麼講的,但再延伸一下問題應該怎麼解決呢?或者把模糊之處,自己用文字和程式碼把它展開,甚至封裝起來進一步抽象。把這些方方面面的問題點、難點逐個突破,一點一滴地抽象成自己的知識庫、工具庫,一定程度之後各種現實問題幾乎都能從中挑出答案;
  3. 不滿足現狀。程式能跑了,但能跑得更好嗎?程式碼實現能更簡潔優雅些嗎?就算是生產環境你不能隨意更改,你也應該在自己的環境或測試環境中去嘗試改進程式碼——得出的經驗教訓都是你自己的收穫。而且只有不滿足現狀,你才更可能去主動式思考與學習;
  4. 周邊知識的探索,演算法、架構模式、設計模式、語言/技術新版本、新概念/新架構等等,不要覺得累。一旦你覺得累你就差不多走不遠了;
  5. 充分認識到英語的重要性——這個已經不想多說了;
  6. 鍛鍊身體——比如我現在學習武當太極拳;有一門其他愛好——比如我現在學習武當太極拳。

感覺自己其實也有蠻多欠缺之處,還需要繼續加油努力。但無論多麼模糊,我都始終堅信一點:“無他,但手熟爾”。要堅持這點之前,你還得時刻提醒自己:“你一個砍柴的,他是放羊的,你和他聊了一天,他的羊全吃飽了,你的柴呢?”

enter image description here

相關文章