1. 程式人生 > >程式設計能力的四種境界(轉)

程式設計能力的四種境界(轉)

人類心理學研究中的一個基礎支撐科目就是分析人的潛意識和意識。 弗洛伊德是最早的一位能夠清楚的認定和描述我們的心理活動“領域”的人。 在他這著名的一生的早期,他就指出我們的意識裡分“潛意識”,“前意識”,“意識”。

如果我們想能清楚他們分別跟我們的思想、感覺、認知、判斷和動機(這這些在我們每天的生活,職業生活中都是關鍵因素)有什麼關聯,我們可以把我們自己描述成一個冰山。 冰山的尖端,唯一能從水面看到的一部分,可以當作是我們的的意識。 它是有邏輯、有組織的,我們可以控制它,但這部分很小。這龐大的水下的部分是我們的意識不到的。 它們是無組織、無邏輯、無關聯的,但它們取能決定我們的行為特徵。

現代心理學上一直試圖通過觀察一個人能夠在這個冰山上打多深的孔來分析一個人能夠什麼程度的掌握一種技能。 人們把一個人能夠到達的能力描述成四個階段。 這篇文章裡,我將試圖把這種分類應用的我們每天都會應用的技能上,它就是程式設計。



階段一:無意識,無能力
約翰是一個年輕的網站開發者。 他以前是一個法律科的學生,但是他認為他的錢途不在這方面,所以他眼睛一轉,做了轉行的決定。他曾經幫他的朋友修過計算機,而且很成功,所以他認為這方面應該都很容易。他很快找的了一些能夠讓他學習這些工作的地方(當然,都是靠近他家的地方)。六個月後,他開始聲稱自己是個網站專家了,他的簡歷上已經列舉了不少程式語言、應用程式,以及開發平臺。

約翰,實際上,是一個冷酷的“拷貝/貼上”者。 他以為能夠成功的顯示一個windows提示框,就表示對Javascript已經掌握了。 PHP? 簡單:他成功的安裝了Wordpress。 Linux? 他從LiveCD上啟動了Ubuntu系統,他能夠搭建一個Apache負載均衡叢集伺服器。 他的意識告訴他,他已經無所不知了。

問題就在於,約翰沒有意識到他可以學到更多的東西,所以他就簡單的停止學習了。他一直處在一個氣泡中,他經常訪問的線上論壇和郵件列表裡有很多人都非常客氣的告訴他,他的問題在於他膚淺的知識,但沒有人能捅破他的氣泡。而且更悲哀的是,他在論壇裡的能力值比你我加起來都高。

約翰是無意識的無能力。

階段二:有意識的無能力
馬克是個數學老師。 他在一個小鎮的大學裡工作,他希望他的大學裡能夠擁至少是五倍於現有數量的資料庫。他知道在科技領域方面他的大學先對於其他研究機構落後很多,所以他決定自己動手去做這個工作。 他想建立一個線上平臺,能在社團裡共享他們的課程。

馬克是天生的邏輯型的思維。 他知道為了實現這個東西,他需要去做研究,蒐集資訊。 他的搜尋從維基百科開始,但最終在大量的瀏覽閱讀後他明白其實世界上已經有不少團隊對他的這種問題提供了開源方案。

他從那些工程中選擇了一個最能滿足他的需求的一個。 他開始著手閱讀在它的網站上找到的文件和手冊,最後他把源程式下載下來。他的興奮狀態逐步退去,因為他看到了’資料庫連線錯誤’。 他試了又試,不至三次的檢查他的每一步驟,還是不成功。馬克並不惱怒,因為他知道自己在這個領域並不是專家。

他開始轉向它郵件列表平臺,在裡面,他用他所知道的(其實很少)最精確的語言描述了他的問題。 他提醒每個人,他並不清楚他所做的這個東西,所以,他希望能得到更多的文件去閱讀,或人們給他提供這方面的提示。 他不需要等待很久就能得到解決方案,因為他採取了正確的方法。

馬克是有意識的無能力

階段三:有意識的有能力
自從阿德拿起他的第一本HTML書至今已經有兩年了。 很顯然這是一條不歸路,對於阿德來說,每天思考的問題都是如何去提高自己喜愛的這個專業。在他拿起第一本書幾個月後他得到了他第一個作為自由工作者的身份開發一個網站的工作,他投入了極大的熱情,不管這個工作的薪酬有多低,這個工作有多基礎(甚至是對於他的水平)。

他深信一點:最好的學習的方式就是堅持不懈,屢戰屢敗,屢敗屢戰。 他經常去研究如何以最好的方式執行一個功能,因為他知道最好的程式碼不是第一次就能獲得的。 他必須去優化程式碼,他一遍又一遍的審查。 他一次又一次的修正。

之後,他又給他自己寫了一個大概有30到40行的程式。幾天之後,他忍不住感到失望,因為他在上網時發現了一段更省事的、而且更簡潔的程式,程式碼行只有他的一半。他渴望知道何時他才能輕鬆的寫出如此高質量的程式碼。 然而,經過一段思考之後,他開始分析他自己的程式碼。他知道必須去重寫這些程式碼,否則睡覺都不會安穩。 他不願意去拷貝貼上它們。

阿德正走在成為一個優秀的專家的路上,但他不會給自己加上這個稱號,他願意去等。
阿德是有意識的有能力。

階段四:無意識的有能力
這是程式設計水平的終極階段。 它不僅僅是知識積累的結果,更是一系列的邏輯規則在數年裡慢慢的刻印到一個人的腦海裡的結果。

我們面對這樣的一個人時不得不由衷的佩服他對如此複雜的問題能更如此輕鬆的應對。 這種程式設計者看起來就像是能夠嗅出問題的解決方案,而不是思考出的。

優化的編寫,可維護的、安全性的程式,應用各種設計模式,使用正確的開發工具組合,這些會自動的在他的工作中體現出來。 這種人能夠輕鬆的使用多種語言在多種作業系統平臺上工作。

結束語
經過閱讀上面的例子,我希望你能夠跟我一樣信服:心理學的這種分類模式用在我們這個特定的專業領域是有效的。

值得一提的是,一些作者提出第五中階段:成熟的有能力,定義為有能力去教育和傳承他所學的、甚至是還未意識到的知識。 我們可以從一些才智超凡的人哪裡看到這些特徵,他們可以教學和講解(甚至在大廳廣眾),這些很顯然是後天培養的技能。