第一篇:程序員是這樣煉成的10
程序員是這樣煉成的(10)-現(xiàn)在我們能做些什么?
前天在1+1<2里面談到的那個麻煩今天被解決了,最后還是以AB兩組雙贏為目,相互合作,兩組和二為一,共同完成項目,這個是最好不過的結(jié)局了。今天的文章是寫給一位網(wǎng)友的,因為他問了我一個問題:“現(xiàn)在我們能做些什么”?
其實我以前也常有這樣的感覺:茫然,麻木,不知道自己要做些什么?也不知道自己能做些什么? 有時候一天下來,雖然一直在忙碌不停,但是工作都會自動的膨脹到占滿我所有的時間,包括我休息的時間。有時候我常問自己為什么會這樣?是我們的項目計劃出了問題?還是我們的任務(wù)量在增加?都不是,其實是時間在我們身邊偷偷的溜走了。我以前做項目的時候有個壞毛病,項目的前80%的時間,被我浪費在所謂需求分析和程序設(shè)計上,(實際上沒有花這么多時間,花時間在偷懶上了),到了最后的20%的時候,時間已經(jīng)非常緊迫,這個時候我會發(fā)現(xiàn)編程的狀態(tài)完全不一樣。原因是,項目的dead line要到了,我們沒有機會拖延時間了,已經(jīng)沒有時間讓我拖著熬著不作出決定,沒有時間讓我去組織無聊的項目會議,沒有時間讓我去接聽一些莫名其妙的客戶電話,我更沒有時間呆坐在電腦面前思考如何去躲過這無聊的工作,我必須要全力以赴在第一時間完成工作。其實當這個項目完成時,我再回頭想想,并不是我在最后的時候“蓋茨附體”,“圖靈重生”,而是一種危機感和急迫感讓我的效率提高了兩三倍,讓我在一些徘徊猶豫的問題上花費的時間變少了。我相信很多軟件工程師都有這樣的感觸。事實很明顯,我們的問題是在于我們能做很多,只是我們都沒有做,我們只動嘴,卻沒有動手。
在我的公司有一個這樣的故事,某幾位同事負責一個項目,項目的進展一直都不是很理想,不久公司公布半個月后集體outing的消息(就是集體旅游,還是公費),為了保證項目的完成時間,一些項目拖延的員工需要駐守大本營,繼續(xù)奮斗。本已經(jīng)被我們放棄的那幾位同志,盡然在短短的半個月中,完成了1個月的工作量,提前的把項目完成了。看來小宇宙爆發(fā)的威力真的很恐怖,可憐公司測試部的MM們,被那幾個家伙拖著天天加班:)。可見,有時候工作雖
然讓我們很頭疼,但我們不應(yīng)該把問題高高掛起,或者因為官僚作風,或者以召開分析會,技術(shù)評估的名義去拒絕問題,其實很多的困難都可以在我們的日常工作的空隙去完成的,沒準是一杯咖啡或者一根煙之后,我們就可以做出選擇。程序員應(yīng)該學會選擇和面對。
我們不是不知道我們能做什么,而是我們沒有學會面對和抉擇,沒有想去做。附: 有的朋友問我,為什么每次更新文章的時間都很晚,實在抱歉4-6月我有一個開發(fā)項目要完成,周一-周四一般都在加班基本上10點才能抵達小窩,請諒解。
程序員是這樣煉成的,每天深夜寫作,已經(jīng)過了十章完成了一半,雖然很累,謝謝一直支持和鼓勵我的同事和網(wǎng)友們,我不會半而廢的!
第二篇:程序員是這樣煉成的12
程序員是這樣煉成的(12)-勇于面對開發(fā)失敗
個人一輩子不犯錯很難,作為一個程序員要每天不制造程序錯誤更難。今天跟大家討論如何面對失敗和錯誤,大到一個項目的開發(fā)失敗,小到幾行代碼中的bug,都是我們在日常開發(fā)中經(jīng)常要面對的問題。
有一家這樣小公司,測試部和軟件開發(fā)部是獨立的兩個部門,有各自的部門經(jīng)理。老板總是喜歡給下面的員工施緊箍咒,施加壓力,又是能力評估,又事績效考核,于是某一年,在領(lǐng)導(dǎo)們別出心裁的領(lǐng)導(dǎo)下,公司出臺了軟件開發(fā)工程師的考核制度,制度明確規(guī)定:將程序員開發(fā)項目和軟件的測試一次通過率和項目中的bug個數(shù)納入開發(fā)人員的年終績效考核,由測試部門進行考核和執(zhí)行。(所謂一次通過率,就是軟件提交測試后,一次通過的概率,一次測試就通過的軟件/提交測試申請的軟件數(shù)*100%)新法頒布后,測試部大呼過癮,軟件開發(fā)部一片嘩然,第一年的過去了,果然“成績喜人”,全公司的軟件一次通過率達到了97%,無數(shù)未經(jīng)測試軟件被偷偷發(fā)布給了客戶。第二年領(lǐng)導(dǎo)們在吸取了第一年的經(jīng)驗和教訓后,毅然的修改了考核標準,在統(tǒng)計bug個數(shù)的同時融入了代碼行數(shù)的概念,bug個數(shù)/100行代碼 *100%來,進行年終考核,第二年過去了,軟件開發(fā)部門戲劇化的以100行代碼0.5的bug數(shù),高效的開發(fā)質(zhì)量給了領(lǐng)導(dǎo)們一個有力的答案。這是一個真實的事故,一個三流的軟件公司的開發(fā)水平和軟件質(zhì)量已經(jīng)“超越了”微軟和google,我相信現(xiàn)在仍然還有很多公司在進行類似這個的考核。
這樣的小公司把軟件開發(fā)和測試部門獨立本身就是一種錯誤,嚴重的影響的開發(fā)和測試的時間,兩個部門相互扯皮,項目進展一拖再拖。
其次,兩個部門工作的出發(fā)點也錯了,兩個部門的工作重心是交給客戶盡善盡美的軟件產(chǎn)品,而不是為了應(yīng)付考核和被考核。
第三大錯特錯的是考評制度,一看這樣的制度,多半都是事不關(guān)己高高掛起的人出的主意,開發(fā)軟件能一次就通過嗎?寫出來的代碼能沒有bug存在嗎?公司要提高產(chǎn)品質(zhì)量,不把注意力放在項目管理人,開發(fā)人員的能力培訓上,開發(fā)規(guī)范和文檔管理上,想憑借一紙空文,或者員工的主觀能動就達到一個“質(zhì)”的飛越,實在愚不可及!軟件工程師在把軟件測試N次以后才敢把軟件提交測試,幾行代碼就能完成的完成功能,引用了很多填充行數(shù)的無效單元。
最可惡的是,使所有的開發(fā)人員,散失了面對失敗和錯誤的勇氣!為什么不改面對呢?一面對就要扣工資和年終獎,誰還敢去面對啊?于是,整個開發(fā)風氣就是:開發(fā)人員私下放行軟件給客戶成風,不經(jīng)過任何測試。程序員有了錯誤死有的不承認,有了bug支支吾吾。不但開發(fā)水平提升不上去,常見的開發(fā)問題還沒有被公開和分享解決,導(dǎo)致產(chǎn)品質(zhì)量嚴重下降。
大家都應(yīng)該知道在開發(fā)的過程中,越早發(fā)現(xiàn)軟件的問題,軟件就更加的完善。而不是藏著掖著,或者添上一抔土把這個“地雷”埋著,留著讓用戶踩去吧。正確的心態(tài)是:測試人員越早發(fā)現(xiàn)我們開發(fā)軟件中錯誤,我們應(yīng)該越高興,因為不僅可以彌補我們的思維漏洞,讓我們的代碼更加完美,更加減少了我們挽救這個問題的開銷。不敢直面bug的程序員,算不上真正的程序員,如果你沒有闖過雷區(qū),沒有被炸了個人仰馬翻,沒有給你留下深刻的教訓,那么下次你仍然會不知道代碼的隱患在哪?仍然不會學會選擇趨吉避兇之道。仍然會被炸的死去活來。
寫代碼有經(jīng)驗的人,對異常處理都很有一套,知道大概這一塊要保護起來,那一塊要加一個判斷,這里要驗證下是否存在或已經(jīng)被銷毀。如果程序員沒有很好的對未能遇見的故障做好防御工作,那么產(chǎn)品帶給用戶的錯誤提示或者死機,將讓客戶連殺了你的心都有。記得好多年前,在一個網(wǎng)吧找了一臺賽揚上網(wǎng),打開IE,自動彈出網(wǎng)頁,然后就報錯系統(tǒng)級的錯誤了,還無休無止,CPU直接滿上,然后死機,當時又好笑又好氣,你寫個彈窗軟件,偷偷彈就算了,代碼都沒寫好,結(jié)果害網(wǎng)吧老板重裝系統(tǒng):)
看過武俠的都知道,危難關(guān)頭,出現(xiàn)異常的時候,才是檢測一個真正武林高手水平的時候,平時的舞蹈練劍都是假把式,最多只能算是基本功,補救危局,化腐朽為神奇才能顯示技藝的高超。有多少人會記恨千年蟲問題是哪個混蛋帶給我們的?但是解決千年蟲問題軟件工程師們都是英雄。所以放心的動手開發(fā)
吧,即使你犯了錯誤,被罵成狗熊,也沒有人會記住你。問題被解決后一切釋然。
是人都會犯錯誤,對別人犯錯誤評頭論足的人愚昧。用發(fā)布制度來阻止別人放錯誤的人愚蠢,因為害怕放錯誤,而畏手畏腳不敢創(chuàng)新和向前的人則更加愚上加愚。錯誤面前我們要敢于應(yīng)對:
1、對錯自在人心。
當然你發(fā)現(xiàn)問題后,請馬上提出,不要企圖隱瞞問題,越早發(fā)現(xiàn)問題,那么損失就越小,抗震救災(zāi)有黃金72小時,軟件開發(fā)也有黃金72小時。我們在解決陳年詬病的時候,通過要花上數(shù)倍的時間,來回憶當時的開發(fā)心境和設(shè)計意圖。
2、接受批評。
如果這個問題跟你有關(guān)那么就是你的問題,千萬別動念頭找到一只替罪羊,出現(xiàn)問題后,重要的解決問題,不是秋后算賬,更加不要交纏不清推脫問題。
3、向解決的方向前進。
如果你不能馬上解決這個問題,那么請你把這個問題向解決的方向推進,如果你無法推進問題去解決,那么請不要讓這個問題繼續(xù)惡化。讓大家都知道這個問題的存在。
4、尋求幫助。
請不要讓自己的自尊心作祟,拒絕別人的幫助,一個好漢三個幫,放下那所謂的自尊,去聽取團隊和伙伴的建議。
每個人對錯誤的處理方式不同,會產(chǎn)生不同的結(jié)果,問題處理的好,會使得團隊更加信任你,甚至比遇到問題之前,更加信任你,要是處理的不好,不但摧毀了大家的信任,還會讓人覺得你難以擔任重任。
第三篇:程序員是這樣煉成的5
程序員是這樣煉成的(5)-海納百川 做程序員要“海納百川”,其實就是建議各位要做一個通才。當然做通才是有條件的,我總結(jié)了下前提有三:
1.你已經(jīng)是一個專才。熟練操作學一門像樣的編程語言。
2.有穩(wěn)定的工作和收入支持。
3.想得更多的挑戰(zhàn)和機會。
作為項目經(jīng)理和管理者而言,坦白的說,比較喜歡的還是專才,因為專才聽話,你在他知曉的領(lǐng)域劃一個圈,他能保證幫你完成任務(wù),而且還不給你添麻煩,專才們在各自的領(lǐng)域的努力才會推動項目前進。那在項目中,通才的表現(xiàn)又如何呢?你給他畫一個圈,他會給你考慮到圈子以外的事,甚至跳到別人的圈里子耍弄一番。他就像潤滑劑一樣,提出很多創(chuàng)新的idea,雖然老是給項目管理者帶來不少的麻煩,但是總能讓整個項目更加協(xié)調(diào)。其實項目管理者討厭他,但又離不開通他,他的鬼點子時常能優(yōu)化各個結(jié)構(gòu)和模塊。更重要的是當管理者被提升,要選擇接替者一般是一個會顧大局,協(xié)調(diào)眾多專才的通才。
在所有的項目管理者或者teamlead的心里,肯定都有一種軟件工廠的構(gòu)思或者布局。大意就是整個部門各個人都各施其職,讓整個軟件開發(fā)的過程,就像一個生產(chǎn)工廠一樣運轉(zhuǎn)。招來的程序員都是生產(chǎn)線上的工人。他們不需要想太多,照任務(wù)單做就是。客戶需求就像產(chǎn)品訂單一樣進來,需求分析師開始根據(jù)訂單安排我們要生產(chǎn)的產(chǎn)品規(guī)格滿足客戶的需求,系統(tǒng)架構(gòu)是開始把這些規(guī)格加工成工廠生產(chǎn)計劃或者價格框架。設(shè)計師拿著詳細的設(shè)計文檔來往這個框架里面套,剩下的就交給代碼機器人們填充內(nèi)容,然后到質(zhì)量工位,檢查貼牌,然后出廠。整個過程每個工位都是專才,在領(lǐng)導(dǎo)的構(gòu)想中,他們每天都只需要做重復(fù)的勞動就好了,如果他們想辭職了,也不會帶走我們?nèi)康纳a(chǎn)機密,更重要的是這樣的工人很廉價,找一個替換品不難。但是實際上管理者的春秋大夢很難實現(xiàn),原因是軟件這個產(chǎn)品具有可復(fù)制性,也就是軟件可以copy.在軟件工廠里,生產(chǎn)兩個完全一模一樣的產(chǎn)品是沒有意義的。客戶的需求都是很柔性的,每次都會不一樣,大大小小的改變是避免不了的,管理者們費盡了心血設(shè)計的一套生產(chǎn)流程,竟然只能生產(chǎn)一件產(chǎn)品?(去過生產(chǎn)線的朋友應(yīng)該都知道,一旦生產(chǎn)的流程有所
變化,線上的工人們基本上都不知道怎么開始干活了,要重新培訓上崗,因為他們從來就沒有想過,半成品是從哪來的,又是干什么去,一直都在做機械的勞動。)但是我們的管理者們,他們肯定不會罷休焦頭爛額,會再一次優(yōu)化生產(chǎn)流程。到下一個新的產(chǎn)品,又會繼續(xù)把生長線從頭至尾優(yōu)化一下。某一天管理者突然頓悟,我們?yōu)槭裁疵看味际职咽值母恳粋€人安排任務(wù),每次都親自設(shè)計整個流程,我應(yīng)該去辦公室里面喝喝茶,上上網(wǎng)。這個時候他會想到誰?毫無疑問,肯定不是專門,他需要的是一個能走通每一個環(huán)節(jié)的通才。
小時候我經(jīng)常聽我老爸說:“不要半桶水,不要什么都懂點,什么都不專”這句話就是用來貶低通才的,在這里我要為通才平凡。我的一個軟件項目曾經(jīng)出了一次事故,整個汽車的生產(chǎn)線面臨停產(chǎn),幾次電話支持的效果都不理想,需要一個技術(shù)人員立馬去現(xiàn)場解決問題。軟件用delphi開發(fā)在windows平臺運行,oracle數(shù)據(jù)庫,通過進口的硬件,用客戶的線束跟汽車通信,操作員是個新手,電腦硬件是我們提供的,現(xiàn)場環(huán)境惡劣。我思索了每個可能出現(xiàn)問題的可能,客戶能提供的有效信息太少,連軟件的日志文件都無法取出來(USB端口封閉,車間信息嚴格保密)。我不可能同時派一個軟件工程師,數(shù)據(jù)庫DBA,IT,或者硬件工程師奔赴現(xiàn)場。最后我選擇去的是一位軟件工程師,他很快找出來原因,是客戶的線路沒有按照我們的電路圖制作,關(guān)鍵線一條線是斷開狀態(tài)。我相信他,不是因為他是我們公司最厲害的程序員的,而是他懂技術(shù)領(lǐng)域的比其他人要多。其實在整個項目開發(fā)過程,除項目經(jīng)理外,不可能每個人都會一直忙忙碌碌,無論是程序員,測試員,設(shè)計師,架構(gòu)師,你總會有一段時間無所事事,除非你同時加入很多的項目。希望你能在有空的時候關(guān)注下你的同事們在做什么?你能不能幫助下或者學習下。做了這么多年的程序員,我們可能都常有一個共同的擔心,這個擔心是什么呢?我們一個項目或者我們公司的的關(guān)注點,研發(fā)的中心開始轉(zhuǎn)移出我擅長的技術(shù)領(lǐng)域。我們害怕自己發(fā)揮不了作用和特長,害怕我們對公司沒有價值,也就是意味著我們漲工資的幅度要比別人小了,或者沒有工資加了。其實這個擔心還不是最要命的,最要命的是,我們要精簡團隊的時候,你才發(fā)現(xiàn)自己比較單純,只會測試或者編碼,很多平時做其他工作的同事都能做你的替代者,那么你就要被over了。
說了這么多的苦口婆心勸大家做一個海納百川的通才,大家肯定會問,我覺得我在我的team里面已經(jīng)算了百事通,萬事通了,我應(yīng)該怎么繼續(xù)豐富我們的技術(shù)領(lǐng)域呢? 夜深了,還沒洗澡,我在這里不打算多說了,我請問各位幾個問
題,希望可以為你指點方向:
1.你有沒有想過在公司里,你計劃的職業(yè)階梯的各個領(lǐng)導(dǎo)每天都在干什么嗎? 你的boss,你boss’boss…..?(拿破侖不是說過將軍和士兵之類的名言….)
2.你知道你的一個組的同事在干什么嗎,每天?
3.你知道哪幾種操作系統(tǒng)平臺,軟件開發(fā)平臺?你會通過別的路徑走到羅馬嗎?
4.軟件工程師你知道你要用的數(shù)據(jù)是哪來的怎么來的嗎? 數(shù)據(jù)庫管理員你知道你的數(shù)據(jù)是去哪里的嗎?為什么人家裝個oracle一下就搞定,我寫了一輩子連oracle的程序連個listener.ora都不會配。
5.程序員知道你開發(fā)的軟件,打包后是怎么安裝注冊的嗎? 那般客戶的是什么折騰你的寶貝軟件的嗎?
6.有沒有約個罵你的杰作的客戶出來吃吃飯,聽聽他的用戶體驗?
希望我們都能明白自己缺少的是什么?如果程序員想找一份工作,做一個專才足矣,如果想把事業(yè)做好你最好做一個通才。
第四篇:Java高級程序員是這樣煉成的 - 文庫課程
Java高級程序員是這樣煉成的-文庫課程 Java基礎(chǔ)篇:J2SE基礎(chǔ)入門系列
學習課程:《JAVA語言基礎(chǔ)與OOP入門》
您可以學到:
?
?
? 面向?qū)ο驩OP入門 Java中的實用類與集合 繼承與多態(tài)、接口...參加課程
本課程由北風網(wǎng)資深講師鳳舞煙老師主講,通過理論+上機練習的模式,全面細致的講解了java入門技術(shù),課程涵蓋內(nèi)容包括:Java中的實用類與集合詳解、以及Java中的oop思想,課程配合2個項目,進行教學,讓學生可在最短的時間內(nèi)掌握java。22小時18816人已學習
學習課程:《JDK5.0新特性培訓》
您可以學到:
?
?
? 泛型類型及繼承的使用 枚舉的應(yīng)用 EnumSet和EnumMap 參加課程
JDK是針對Java開發(fā)員的產(chǎn)品;自從Java推出以來,JDK已經(jīng)成為使用最廣泛的Java SDK。JDK是整個Java的核心,包括了Java運行環(huán)境、Java工具和Java基礎(chǔ)類庫。
5小時913人已學習
學習課程:《Junit測試驅(qū)動開發(fā)》
您可以學到:
? JUnit4中的注釋講解
?
? HttpUnit TDD思想 參加課程
JUnit是Java語言事實上的標準單元測試庫。JUnit的易用性無疑是它受歡迎的主要原因。也許你會這樣想:它做的事情不多,僅僅是做一些測試然后報告結(jié)果,JUnit應(yīng)該是很簡單的。
4小時867人已學習
學習課程:《ANT使用全攻略》
您可以學到:
?
?
? Ant屬性Ant數(shù)據(jù)類型 Ant測試和JUnit Ant的結(jié)構(gòu)化構(gòu)建 參加課程
ANT是使用最廣泛的Java項目構(gòu)建工具,具有跨平臺、易于擴展、簡單和快速的特點。它伸縮性好,小到個人項目,大到多團隊J2ee項目,在各種規(guī)模項目中都可一顯伸手。并且,最重要的是,它易于掌握。
7小時1033人已學習
Java WEB篇:深入淺出Java web開發(fā)之JSP應(yīng)用系列
學習課程:《深入淺出學Java中級教程》
您可以學到:
?
?
? JSP語法 BBS項目實戰(zhàn) MVC實例-在線通訊錄 參加課程
本課程重點在項目實戰(zhàn)培訓,主要采用MVC設(shè)計模式進行開發(fā)。通過本次課程,您能很好地掌握MVC下Web項目設(shè)計方法,在JSP+servlet講解中,主要結(jié)合論壇項目,讓您通過切實的項目去掌握知識。
33小時5266人已學習
Java框架篇:深入淺出框架實戰(zhàn)開發(fā)
學習課程:《2013版Struts2.X深入淺出》
您可以學到:
?
?
? MVC思想簡介 Struts2配置 學生信息管理系統(tǒng)實戰(zhàn) 參加課程
本課程是2013版Struts2.X深入淺出系列,課程配合一個Strus2實現(xiàn)學生學籍管理實戰(zhàn)項目,課程深入淺出,全面解析了Struts2.X的應(yīng)用,相比市面上的課程,更具有實用性質(zhì)。
15小時1354人已學習
學習課程:《2013版Hibernate深入淺出》
您可以學到:
?
?
? Hibernate基本配置以及...ORM之映射關(guān)聯(lián) Hibernate與struts2的整合 參加課程
2013版Hibernate深入淺出(詳解Hibernate3.X及Hibernate4新特征結(jié)合學生學籍管理系統(tǒng)),課程全面講解了Hibernate3.X以及Hibernate4的區(qū)別,是目前市面上Hibernate最新的版本,也是目前國內(nèi)唯一一套講解完整細致的教程。
18小時3009人已學習
學習課程:《2013版Spring3.0實戰(zhàn)開發(fā)系列》
您可以學到:
?
? 屬性注入方式以及模擬...Spring與Hibernate集成? Annotation方式實現(xiàn)...參加課程
本課程是2013版Spring3.3實戰(zhàn)開發(fā)系列(SSH版學籍管理系統(tǒng)、Ant部署、SSH常見面試題),課程涉及內(nèi)容包括:控制反轉(zhuǎn)(IoC)、面向切面編程(AOP)、IOC使用的兩大關(guān)鍵技術(shù)和一個設(shè)計模式(與Hibernate類似)。
14小時1021人已學習
Java實戰(zhàn)篇:項目實戰(zhàn)企業(yè)設(shè)備點檢系統(tǒng)
學習課程:《J2EE平臺下的企業(yè)設(shè)備點檢系統(tǒng)》
您可以學到:
?
?
? 需求分析的制作 核心代碼的編寫方式 數(shù)據(jù)庫設(shè)計 參加課程
本課程主要對企業(yè)設(shè)備點檢系統(tǒng)的開發(fā)過程進行講解,企業(yè)設(shè)備點檢系統(tǒng)是根據(jù)企業(yè)的實際要求和實際需要進行對設(shè)備、備件、人員等方面的素質(zhì)化信息管理平臺,它可以為企業(yè)解決流程、成本、設(shè)備的檢修維修等方面的問題。
15小時1503人已學習
查看文檔來源:http://wenku.baidu.com/course/theme/java?fr=search
第五篇:程序員是怎樣煉成的
在成為程序員的道路上,要經(jīng)歷四個坎坷,讓我們用四個境界來標明他們。
【第一境界】掌握一門或者幾門編程語言,會模仿例子來實現(xiàn)程序代碼,并且讓代碼在計算機系統(tǒng)中運行起來。達到這種境界的人,還不算真正意義上的程序員。而僅僅是掌握了一種或者幾種工具的工匠。他們中的熟練者能夠快速模仿現(xiàn)成的例子,以實現(xiàn)自己或用戶的軟件模塊。
第一境界的特質(zhì)是對語言工具的掌握,在這個境界的高手,會強調(diào)自己對語言如何如何的熟練,因此這個境界可以用“知器”來表示。
【第二境界】第二境界里,我們要學習的是分解問題和推理的技巧,學習用邏輯的語言來精確地表達一個命題。在這個境界里,軟件工作者掌握的是一種分析具體事物的方法,他們不再一味地模仿,而是開始對一個又一個具體問題思考并嘗試用自己的方法來更好的解決。
在這個層次里的“程序員”開始關(guān)注解決問題的思路,并且關(guān)注分析和推理的數(shù)學技巧。他們中的優(yōu)秀者熟知各種算法善用各種各樣的命題推理來分析并解決問題。他們同樣善于借鑒前人的例子,但是往往能夠根據(jù)問題的特點進行有效的改進,并且能夠在嘗試改進的過程中得到創(chuàng)新的成就感和新的經(jīng)驗。在這個層次里的人,對語言工具的認識比第一境界更加深刻,他們是真正知道如何利用手中語言工具的特點更好地解決問題的人。但是他們并不會強調(diào)自己對于語言如何熟悉,也不再熱衷于宣揚掌握如何如何多的語言,在他們眼里,語言僅僅是一種工具而已,真正重要的是分析問題的方法。
第二境界的特質(zhì)是對具體問題的分析,在這個境界的高手,往往善于從具體問題中分析出合理有效的解決方法。因此這個境界用“格物”來表示。(第二境界里有真正對如何用程序來解決問題經(jīng)驗豐富的人,這些人能出色地勝任編碼工作,因此我們稱他們?yōu)镃oder,或者初級程序員。)
【第三境界】第三境界里,我們要學習的是抽象思維和找出事物表象后面的規(guī)律。在這個境界里,軟件工作者不再針對一件一件具體的事物來分析,而是嘗試理解事物表象下的本質(zhì)。在這個層次里的人,開始關(guān)注事物的共性,并且逐漸掌握歸納和總結(jié)的方法。“模式”開始出現(xiàn)在他們的頭腦里。
“設(shè)計模式”是軟件領(lǐng)域的“三十六計”,是經(jīng)過抽象總結(jié)而歸納出來的真正的思想精華。第三個境界的軟件工作者開始接觸并且理解“模式”,學會靈活運用模式和抽象思維來解決“某一類”問題。
第三個境界的特質(zhì)是對事物本質(zhì)規(guī)律的認識,在這個境界的高手,往往能夠快速地抽象出問題的本質(zhì),從而用最合適的方法來解決問題。這個境界我用“明理”來表示。
達到第三境界的程序員,是天生的設(shè)計師,他們對問題的本質(zhì)的領(lǐng)悟能力幫助他們用優(yōu)美簡潔的代碼來解決問題,他們的代碼中充滿設(shè)計思想。他們是真正能夠享受到程序設(shè)計的藝術(shù)魅力并且充滿成就感的一群人。這個境界里的程序員真正當?shù)闷餻rogrammer的稱號。
在這個境界之上,依然存在——
【第四境界】第三境界程序員中的極優(yōu)秀者,并不滿足專家的地位和高薪,他們開始向第四境界艱難地前進。第四境界是程序設(shè)計領(lǐng)域的最高境界,要達到這個境界,只需掌握一樣東西,然而這個東西并不是尋常之物,而是許多人窮盡一生也無法得到的這個世界最為深邃的秘密。這樣的東西,叫做“道”。
所謂道,是天下所有規(guī)律的總和,是最根本的法則,只要能夠了解道,就可以明了世間所有的一切。掌握了“道”的程序員,才是真正的程序設(shè)計大師,能夠創(chuàng)造出流芳百世的作品。對第四境界的程序員來說,“思想”已經(jīng)已經(jīng)不再是很重要的東西,因為他們對程序本質(zhì)的理解已經(jīng)超越了問題本身。在他們的代碼里,有的只是自然,現(xiàn)實和虛幻的邊界都已經(jīng)模糊,一個完美自治的系統(tǒng)在剎那見誕生,卻仿佛從亙古時刻起便存在著、運動著,從簡單而質(zhì)樸的規(guī)律中涵蓋者世間萬物的本質(zhì)。因此,這個境界,我稱之為“成道”。