《程序員》2007年2月刊,第135頁有篇郭安定寫的《面試極短篇——境界》,其中將程序員分為五種境界,分別如下:
??? 五流程序員比技術和工具
??? 四流程序員比整合和管理
??? 三流程序員比創意和設計
??? 二流程序員比溝通和性格
??? 一流程序員比態度和方法
??? 超級程序員比思想和素質
??????? 比來比去,我覺得我挺符合超級程序員的:)“程序只是語言的表達,而語言則是思想的淬煉?!蔽乙步洺E艿紺SDN、Blogjava還有其他的論壇去看程序員們的討論,有時候看到一些什么“C語言就是無敵的”“Java就是騙人的”“Java是萬能的”“使用匯編和DOS才是高手”之類的,真是覺得好笑,說這些話的,肯定都是剛剛入門的菜鳥,或者就是還沒入門就知道些“江湖謠傳”的外行。
??????? 大多數人都愿意把編程比作修煉武功,以前看過一個帖子講什么最高水平就是練成葵花寶典,文章寫得很是不錯。習武大抵也是這么幾個境界,先是會一套掌法或一種兵器,有的人就永遠停留在這一層次了,覺得七節鞭是世界上最厲害的武器或者什么拳是天下無敵的;然后大部分人融匯貫通,會了好幾種掌法好幾樣兵器,并且覺得武林絕學都是相通的,慢慢不用師父教照著劍譜就能練出來。這時一部分也停了下來,覺得自己擁有了超強的自學能力,天下武功不過爾爾,他們以為武功就是招式(甚至是基本動作)的堆疊;然后又有一部分人開始發明新的套路掌法了,他們善于觀察對手,以最少的動作解決戰斗,穩準痕。一部分人到這對自己已經很滿意了,他們發現自己可以在打斗中冷靜度戰,將對手的招式看的一清二楚,找準空檔一招制勝,真是了得;但是有些人開始跳出武功,開始研究武功與書法,武功與音樂,武功與醫學,互相借鑒,參悟至深。少部分又向前邁進一步,開始思考武功與生命、生活,塵世間的打打殺殺已經不能進入他們的法眼了。
???????? 將編程比作修煉武功有正確之處也有不可取的地方。武功一定是一點點練出來的,只會使用一套刀法的人可能理解不了高人所講的武器只是工具,拿刀拿槍只是工具不同而已。會使用好幾種兵器但不精通的人理解這句話是最容易偏激的,高人所講的武器只是工具是站在一個很高的層次上講的,絕不是練會幾樣兵器那么簡單,因為只是多會幾樣兵器的人可能只是在用使用刀的方法使用槍,用使用槍的感覺在使用劍。這種思想在很多人心中都有,以為會使用VB就會使用Delphi了,會使用Java了,實際上他們只是用VB的方法使用Delphi和Java。高手們也會說編程語言不過是工具,算法和數據結構是靈魂,或者業務需求和領域模型是靈魂,但是那種意味則完全不同,你明白我的意思了嗎?另外一些人以為能用VB編程就是精通VB了,這一點也是和武功不太好比,因為精通VB的含義太復雜了。要了解Win32,了解計算機體系結構,了解算法和數據結構,這些可以說是練武人的內功,而對于VB而言,則要知道它是如何進行抽象的,理論和實踐的相互作用的結果,比如VB是如何封裝windows API的,VB是如何訪問內存的,如何實現各種數據結構的等等。
??????? 練武功不能跳級,編程也不能,我真的不懂不會編程的人怎么做設計,雖然在領域建模和設計建模時可以與程序無關,但是沒編過程直接去領悟設計思想,是有點難。起碼我沒使用Delphi OO技術時無法理解Delphi面向對象規則,在編寫大型J2EE項目之前無法理解《Core J2EE Pattern》在說什么,甚至于那樣做有什么好處,在學習C++和編寫大量產品級程序前我甚至看不太懂《設計模式》,沒有認真思考過怎么設計能使耦合更小,復用性更強之前,我看不進去《重構》,而思考過后,發現很多重構方法順理成章,甚至就是我平常所采用的做法。
??????? 在看《AJAX in action》時,譯者序中提到了軟件工程與軟件工藝,Martin Fowler這樣的大師也都視編程為藝術。我喜歡從音樂中獲得編程的靈感,從生活中發現軟件工程的真諦。編程,是一個人思想的高度的體現。我時常都在思考這些問題,我原來覺得作為一個優秀的程序員(這是借用Fowler在《Refactoring》中對自己的說法,他說自己不是天才程序員,只是一個擁有良好編程習慣的優秀程序員,因此,這就成了我的奮斗目標),而非天才程序員(指的是像Rasmus Lerdorf那樣的,不過后來看了他自己回憶創造PHP的過程,覺得他也是凡人一個),應該具備的素質包括超強的學習能力,和完整的計算機認識,但是最近我覺得,這些還不足以成為Fowler,BOB大叔,Rod Johnson那樣的大師,這些人還要有廣泛的愛好和廣闊的胸襟,要有大視野。我常發現周圍的一些人看不到那么員,他們會像我前面所講的,練武練到一定程度,就上不去了,他們看不到山頂在哪。偉大的程序員要有偉大的胸懷,當然我指的不是那些窩在某個角落編出超強軟件的人。我已經看到了山頂,希望自己能早日到達~