電視《雍正王朝》講了這么一個(gè)故事:大將軍年羹堯奉命到青海平叛,清軍因路途遙遠(yuǎn),軍耗巨大,因此力求速戰(zhàn)速?zèng)Q。但叛軍避開(kāi)鋒芒,東躲西藏,年羹堯沒(méi)有辦法找到叛軍決戰(zhàn)。這時(shí),朝廷內(nèi)外壓力越來(lái)越大,年羹堯陷入困境。這是一位謀士對(duì)年說(shuō):我知道叛軍在那里。年大喜。這位謀士指出,敵人就在不遠(yuǎn)處的一座皇封寺廟里。年不信,謀士不慌不忙地說(shuō):這就是燈下黑,離自己越近就越不可能意識(shí)到,但卻是最可能的地方。果然,大軍一出,大獲全勝。
我想講一些關(guān)于程序員對(duì)自身認(rèn)識(shí)的故事,這些故事都和燈下黑有關(guān)。只要正確認(rèn)識(shí)自己,道理非常簡(jiǎn)單,但是,到處都可以看到燈下黑的故事。
某程序員,有一天接到一個(gè)任務(wù):公司的有一個(gè)產(chǎn)品的文件太大了,要求采用壓縮算法,減少尺寸,最好能壓縮20%。
程序員興高采烈地接受了任務(wù):以前沒(méi)玩過(guò)壓縮算法,這下可以學(xué)習(xí)新東西了!研究了幾個(gè)月后,他覺(jué)得差不多了,就交給了項(xiàng)目經(jīng)理。項(xiàng)目經(jīng)理正等著呢,高興壞了,拿著演示文件就去找產(chǎn)品經(jīng)理。產(chǎn)品經(jīng)理開(kāi)始挺高興,看完臉就拉下來(lái)了。打開(kāi)文件,把所有的文件尺寸一算,很淡淡的說(shuō):“才壓縮了10%,有什么用啊!”
程序員愣住了,“不會(huì)吧!我看過(guò)的,壓縮了 20%!”
產(chǎn)品經(jīng)理指著文件列表說(shuō):“你看,某文件是壓縮了20%,可你的壓縮算法增加了一個(gè)動(dòng)態(tài)庫(kù)文件,尺寸還不小,總共加起來(lái),不就只減少了10%嗎?”
各位看官,這是不是軟件公司里經(jīng)常發(fā)生的情形?
這種失敗的成因當(dāng)然是復(fù)雜的,有溝通管理方面的問(wèn)題,也有程序員能力的問(wèn)題。我今天想要說(shuō)的是程序員認(rèn)識(shí)方面的問(wèn)題。
繼續(xù)故事:
項(xiàng)目經(jīng)理很沒(méi)面子,回去就和程序員找原因。項(xiàng)目經(jīng)理是老程序員了,直話直說(shuō);終于弄清楚的事情的本質(zhì):
第一,這位程序員一個(gè)的時(shí)間讀了很多關(guān)于壓縮算法的書(shū),會(huì)了不少算法??墒菑膩?lái)沒(méi)比較過(guò)算法的優(yōu)劣。這老兄覺(jué)得研究算法很有趣,樂(lè)此不彼,寫了好幾個(gè)實(shí)現(xiàn)。
第二,這位老兄在最后幾天才想起來(lái)20%的目標(biāo),也沒(méi)太放在心上,看看差不多就拿出來(lái)了。
這是典型的程序員的認(rèn)識(shí)問(wèn)題,重知識(shí)而輕技術(shù)。
先從是么是知識(shí),什么是技術(shù)說(shuō)起。
知識(shí)就是知道,你知道了某件事是怎么回事,就是有了知識(shí)。
技術(shù)就是你能做出來(lái),做得好叫技術(shù)好,做的不好叫技術(shù)差。
怎么寫操作系統(tǒng)?看完操作系統(tǒng)原理,再苦讀完源代碼,這叫有知識(shí)了。如果有本事把任務(wù)調(diào)度、內(nèi)存管理、IO什么的都寫出來(lái),還能寫得穩(wěn)定,快速,可擴(kuò)展,那是有技術(shù)。有知識(shí)和有技術(shù)可差遠(yuǎn)了。早年我在工廠實(shí)習(xí),要挫一個(gè)圓孔,拿著內(nèi)銼刀干了一天,只挫了一個(gè)橢圓;師父來(lái)了,三分鐘,比沖床沖出來(lái)還圓!我是個(gè)好學(xué)徒,使用銼刀的知識(shí)全記住的,可以寫一篇內(nèi)圓挫使用大全。知識(shí)是有了,可沒(méi)這個(gè)技術(shù)。
程序員也一樣。什么C++,Java,.net,什么STL,Struts,Spring,就是門門都滿分,這也就是有知識(shí)。算不算技術(shù)好呢?差遠(yuǎn)了。軟件工程師界就專門出這種不會(huì)寫程序的“高手”。我遇到一位老兄,精通Java知識(shí),從虛擬機(jī)到各類框架,概念,無(wú)所不同,談起Java來(lái),沒(méi)人說(shuō)的過(guò)他??墒撬拇a永遠(yuǎn)Bug最多,而且都是最簡(jiǎn)單的Bug,什么邏輯不對(duì)啊,功能沒(méi)實(shí)現(xiàn)啊,UI不對(duì)啊。他的領(lǐng)導(dǎo)只有又好氣又好笑。問(wèn)下去,發(fā)現(xiàn)這老兄寫了幾個(gè)程序文件以后,就不感興趣了,因?yàn)樗玫募夹g(shù)沒(méi)什么不知道的了。所以馬馬虎虎交差。
說(shuō)到底,寫程序是個(gè)手藝活,就和古代的匠人一樣,是要講工藝的。比如一個(gè)玉匠,能打造栩栩如生的玉孔雀,那得打的好!要是一個(gè)玉匠說(shuō),這些手藝我都知道了,重復(fù)做東西沒(méi)勁,將就著給客人做出來(lái)吧!那他還不吃西北風(fēng)!
可是,十幾年來(lái),程序員界有的是這樣的人,還引發(fā)大規(guī)模爭(zhēng)論。象什么C++和Java之爭(zhēng)啦,J2EE和.Net之爭(zhēng)啦。你看里邊的帖子,不停有人賭這個(gè)陣營(yíng)那個(gè)陣營(yíng),有發(fā)誓一輩子做C++的,有發(fā)誓打倒.Net。我還奇怪了,專門沒(méi)人效忠機(jī)器碼的,那不是最難最有“學(xué)問(wèn)”嗎?這都是在爭(zhēng)論什么知識(shí)最重要??墒前?,很少有人談?wù)勗趺醋龊卯a(chǎn)品的。
現(xiàn)在程序員最大的問(wèn)題就是太看重知識(shí),拼命追逐新玩意,而忽略了身邊的夠得著東西。好,什么C++,Window API都知道了,東西也弄出來(lái)了,可是三天兩頭崩潰,還找不到原因?為什么?有沒(méi)有看看代碼,看看是不是某函數(shù)寫了2000行,自己都看不懂?是不是全局變量亂用?是不是沒(méi)考慮前后兼容性?沒(méi)考慮冗余和故障恢復(fù)?
末了再回到開(kāi)頭的故事:
項(xiàng)目經(jīng)理回去和程序員再重新設(shè)計(jì),又多花了一個(gè)月,終于達(dá)到了目標(biāo)。但因?yàn)檫@個(gè)部分是一個(gè)大項(xiàng)目的一部分,整個(gè)項(xiàng)目不得不延遲了一個(gè)月。
年底考評(píng)的時(shí)候,項(xiàng)目經(jīng)理給程序員打了一個(gè)及格;程序員不服,告到總經(jīng)理那里??偨?jīng)理說(shuō):“你知足吧,給你打及格已經(jīng)看在你干的很辛苦的份上了,因?yàn)槟銢](méi)有按時(shí)完成,整個(gè)項(xiàng)目延遲了一個(gè)月,這帳都沒(méi)找你算呢。”程序員頹然。
聯(lián)系客服