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

程式設計能力的四種境界[轉]

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

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

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

階段一:無意識,無能力

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

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

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

約翰是無意識的無能力。

階段二:有意識的無能力

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

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

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

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

馬克是有意識的無能力

階段三:有意識的有能力

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

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

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

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

階段四:無意識的有能力

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

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

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

結束語

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

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

相關推薦

程式設計能力境界[]

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

程式設計能力境界()

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

C#批量插入數據到Sqlserver中的方式 -

大數 sqlserve 情況下 時間 void tor schema ase ble 先創建一個用來測試的數據庫和表,為了讓插入數據更快,表中主鍵采用的是GUID,表中沒有創建任何索引。GUID必然是比自增長要快的,因為你生成一個GUID算法所花的時間肯定比你從數據表中重新

學習程式設計的N境界(青銅如何成為最強王者)

(素數求解的N種境界) *引子 《俺的招聘經驗【4】:通過筆試能看出啥?》   【 思路和想法】》【對錯】    試除法+初級篩法 (需求1)||(需求2) *試除法 境界1(需求1) #include<stdio

JS非同步程式設計方法

一、回撥函式,這是非同步程式設計最基本的方法 假定有兩個函式f1和f2,後者等待前者的執行結果,如果f1是一個很耗時的任務,可以考慮改寫f1,把f2寫成f1的回撥函式。 function f1(callback){   setTimeout(function () {    //

Socket程式設計通訊方式

Socket程式設計 TCP和UDP區別 TCP協議中伺服器端和客戶端必須建立起連線才能收發資料 UDP協議中伺服器端和客戶端不需要建立連線,根據IP和埠號就能收發資料 1.基於連線和不連線 2.對系統資源的要求(TCP較多,UDP較少) 3.UDP結構簡單 4

web前後臺數據互動的方式()

1.利用cookie物件  Cookie是伺服器儲存在客戶端中的一小段資料資訊。使用Cookie有一個前提,就是客戶端瀏覽器允許使用Cookie並對此做出相應的設定。一般不贊成使用Cookie。 (1)後臺程式碼 1 2 Cooki

人活著的三境界[帖]

  人活著的三種境界   力瑾   王國維在《人間詞話》中曾經說過這樣的話:“古今之成大事業、大學問者,必經過三種之境界:‘昨夜西風凋碧樹。獨上高樓,望盡天涯路’。此第一境也。‘衣帶漸寬終不悔,為伊消得人憔悴。’此第二境也。‘眾裡尋他千百度,驀然回首,那人卻在,燈火闌

C# 使用委託實現非同步程式設計方式

一、關於委託 1、委託概念:委託是一個類,它定義了方法的型別,使得可以將方法當作另一個方法的引數來進行傳遞      個人角色這個概念有些晦澀難懂,大家可以把委託當成一個方法的指標就好了,可以指向一個方法。或者通過(+=)的方式指向多個。 2、四種宣告方式 1)直接用del

Java併發程式設計執行緒池及自定義執行緒使用教程

引言 通過前面的文章,我們學習了Executor框架中的核心類ThreadPoolExecutor ,對於執行緒池的核心排程機制有了一定的瞭解,並且成功使用ThreadPoolExecutor 建立了執行緒池。 而在Java中,除了ThreadPoolExecutor ,Executor框

守破離——程式設計的三境界

作為軟體工程師的三種境界:守、破、離 第一步:守。 找經典著作,把裡面的知識點一個個揉碎,攻破,做到徹底理解。把裡面的經典程式碼手敲幾遍,逐漸培養起程式設計的感覺,學習高手、大師的程

頁面的方法

window.location.href="http://www.baidu.com"; $(location).attr('href', 'http://www.baidu.com'); $(window).attr('location','http://www.baid

C++中的型別

在C++中一共有四種強轉型別分別為:static_cast,const_cast,reinterpret_cast和dynamic_cast 型別轉換的一般形式為:cast-name<type&

Jsp 方式

四種跳轉方式request.getRequestDispacher().forward()跳轉:(1)伺服器端跳轉。(2)執行後立即跳轉。<jsp:forward>跳轉:(1)實際上是對上面 forward 方法的封裝,屬於伺服器端跳轉,跳轉之後位址列不改變。(

程式設計能力心理境界

如果想弄清楚理解它們跟我們的思想、感覺、認知、判斷和動機(這些在我們每日生活、職場中裡的關鍵因素)有什麼關聯,我們可以把自己想象成一個冰山。 冰山的尖端,唯一能從水面看到的一部分,可以當作是我們的的意識。 它是有邏輯、有組織的,可控的,但這部分很小。而龐大的水下部分則是我們的潛意識。 它們是無組織、無邏輯、

常見的POST提交數據方式【

一個 完全 介紹 傳輸 不同 ins http 避免 rac 我們知道,HTTP 協議是以 ASCII 碼傳輸,建立在 TCP/IP 協議之上的應用層規範。規範把 HTTP 請求分為三個部分:狀態行、請求頭、消息主體。類似於下面這樣: <method> <

】【Python】Python發送郵件(常見郵件內容)

.cn .com pytho html 常見 body gpo 詳細 tle 感謝:夢琪小生的《【轉】【Python】Python發送郵件(常見四種郵件內容)》 裏面詳細介紹了Python中發送郵件的方法,以供自己參考【轉】【Python】Python發送郵件(常見四種郵件

SQL的連接查詢(

tail gin nsf bubuko wid adding 四種 ria HA 原文轉自 https://blog.csdn.net/wangjingna/article/details/48765931 SQL的四種連接查詢(轉)

Map獲取key和value值的方法,以及對map中的元素排序(

compareto map.entry 排序 區別 sta hashmap 得到 package log 獲取map的值主要有四種方法,這四種方法又分為兩類,一類是調用map.keySet()方法來獲取key和value的值,另一類則是通過map.entrySet()方法來

js 時間轉換毫秒的方法(

lpad 如果 class code 時間轉換 因此 ble string sha 將時間轉換為毫秒數的方法有四個: Date.parse()Date.UTCvalueOf()getTime() 1. Date.parse():該方法接受一個表示日期的字符串參數,然後嘗試