程序員是怎樣練成的?

        一些人認爲,掌握一門計算機語言,會編寫幾行代碼並且能夠讓這些代碼在計算機上運行起來的人,就可以稱爲程序員。事實上,軟件行業裏,要成爲真正意義上的程序員,對得起 programmer 這個稱號,還是要花費一番功夫的。

        在成爲程序員的道路上,要經歷四個坎坷,讓我們用四個境界來標明他們。 

        第一境界,就是前面所說的,掌握一門或者幾門編程語言,會模仿例子來實現程序代碼,並且讓代碼在計算機系統中運行起來。達到這個境界人,還不能算是真正意義上的程序員,而僅僅是掌握了一種或者幾種工具的工匠,他們中的熟練者能夠快速模仿現成的例子,以實現自己或者用戶需要的軟件模塊。

        非常遺憾,許多 “程序員”僅僅達到第一個境界,他們根據手中的文檔和參考資料,通過“模仿”來完成工作,他們實現的程序只是無數個前人已經實現過的代碼的翻版組合,雖然其中的熟練者以快速高效率完成任務著稱,然而他們的作品中毫無新意,日復一日地重複代碼,罕有任何可以稱之爲“創新”的東西。第一境界的特質是對語言工具的掌握,在這個境界的高手,會強調自己對語言如何如何熟練,因此這個境界可以用“知器”來表示。

        第二境界裏,我們要學習的是分解問題和推理的技巧,學會用邏輯的語言來精確地表達一個命題。在這個境界裏,軟件工作者掌握的是一種分析具體事物的方法,他們不再一味地模仿,而是開始對一個又一個具體問題思考並嘗試用自己的方法來更好地解決。 在這個層次裏的“程序員”開始關注解決問題的思路,並且關注分析和推理的數學技巧,他們中的優秀者熟知各種算法善用各種各樣的命題推理來分析並解決問題。他們同樣善於借鑑前人的例子,但是往往能夠根據問題的特點進行有效的改進,並且能夠在嘗試改進的過程中得到創新的成就感和新的經驗。在這個層次裏的人,對語言工具的認識比第一境界更加深刻,他們是真正知道如何利用手中語言工具的特點更好地解決問題的人。但是他們並不強調自己對於語言如何熟悉,也不再熱衷於宣揚掌握如何如何多的語言,在他們眼裏,語言僅僅是一種工具而已,真正重要的是分析問題的方法。 第二境界的特質是對具體問題的分析,在這個境界的高手,往往善於從具體問題中分析出合理有效的解決方法。因此這個境界用“格物”來表示。 

        第二境界裏有真正對如何用程序來解決問題經驗豐富的人,這些人能夠出色地勝任編碼工作,因此我們稱他們爲 Coder,或者初級程序員。

        第三境界裏,我們要學習的是抽象思維和找出事物表象後面的規律。在這個境界裏,軟件工作者不再針對一件一件具體的事物來分析,而是嘗試理解事物表象下的本質。在這個層次裏的人,開始關注事物的共性,並且逐漸掌握歸納和總結的方法。“模式”開始出現在他們的頭腦裏。

        “設計模式”是軟件領域的“三十六計”,是經過抽象總結而歸納出來的真正的思想精華。第三個境界的軟件工作者開始接觸並且理解“模式”,學會靈活運用模式和抽象思維來解決“某一類”問題。與表象相比,他們更關注的事物的本質,他們的代碼裏充滿思想和對事物規律的深刻認識,他們熟知各種類型問題的特點和解決技巧。對事物本質規律的認識使他們不再依賴於語言工具,任何一種熟悉或者陌生的程序設計語言在他們的手中都能夠發揮到極致,完美地解決問題。 

          第三境界的特質是對事物本質規律的認識,在這個境界的高手,往往能夠快速地抽象出問題的本質,從而用最合適的方法來解決問題。這個境界我用“明理”來表示。 達到第三境界的程序員,是天生的設計師,他們對問題本質的領悟能力幫助他們用優美簡潔代碼來解決問題,他們的代碼中充滿設計思想。他們是真正能夠享受到程序設計的藝術魅力並且充滿成就感的一羣人。 前面說到了三個境界,層層深入,並且第三個境界的程序員已經當之無愧地成爲軟件領域的專家領袖,然而,“程序員”是否只有以上三個境界了呢?答案是否定的。在這三個境界之上,依然存在有——

        第三境界程序員中的極優秀者,並不滿足於專家的地位和高薪,他們開始向第四境界艱難地前進。第四境界是程序設計領域的最高境界,要達到這個境界,只需要掌握一樣東西,然而這個東西並不是尋常之物,而是許多人窮盡一生也無法得到的,這個世界最爲深邃的祕密。 

        自古以來,有這樣一羣僧人,他們遵守戒律,不吃肉,不喝酒,整日誦經唸佛,而與其他和尚不同的
是,他們往往幾十年坐着不動,甚至有的鞭打折磨自己的身體,痛苦不堪卻依然故我。 
有這樣一羣習武者,經過多年磨練,武藝已十分高強,但他們卻更爲努力地練習,堅持不輟。 
有這樣一羣讀書人,他們有的已經學富五車,甚至功成名就,卻依然日夜苦讀,不論寒暑。 
他們並不是精神錯亂,平白無故給自己找麻煩的白癡,如此苦心苦行,只是爲了尋找一樣東西。 
傳說這個世界上存在着一種神奇的東西,它無影無形,卻又無處不在,輕若無物,卻又重如泰山,如
果能夠獲知這樣東西,就能夠了解這個世界上的所有的奧祕,看透所有僞裝,通曉所有知識,天下萬物皆
可歸於掌握! 
這並不是傳說,而是客觀存在的事實。 
            引自《明朝的那些事兒》 作者:當年明月

        這樣的東西,叫做“”。

靜寂虛無中有奧祕,不靜不動,乃程序之源,無以名之,故曰:程序設計之道。若道至大,則操作系
統至大;若操作系統至大,編譯程序亦然;若編譯程序至大,應用程序亦復如是。是以用者大悅,世之和
諧存焉。 
                ——傑弗瑞.詹姆士

所謂道,是天下所有規律的總和,是最根本的法則,只要能夠了解道,就可以明瞭世間所有的一切。 掌握了“道”的程序員,纔是真正的程序設計大師,能夠創作出流芳百世的作品。 然而怎樣才能“悟道”,我並不知道,也無法描述,因爲“道”實在不是一個能夠輕易得到和理解東西。 對第四境界的程序員來說,“思想”已經不再是很重要的東西,因爲他們對程序本質的理解已經超越了問題本身,在他們的代碼裏,有的只是自然,現實和虛幻的邊界都已經模糊,一個完美自治的系統在剎那間誕生,卻彷彿從亙古時刻起便存在着運動着,從簡單而質樸的規律中涵蓋着世間萬物的本質。因此,這個境界,我稱之爲“成道”。 因此擺在我們面前的道路也是從“知器”、“格物”、“明理”到“成道”的艱難過程,像程序員一樣地思考,紮紮實實地向着更高的層次邁進,纔是正確的學習方法。只要堅持不懈,遲早有一天,你會成爲巨人。 

發佈了34 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章