程式設計師的燈下黑:重知識輕技術
電視《雍正王朝》講了這麼一個故事:大將軍年羹堯奉命到青海平叛,清軍因路途遙遠,軍耗巨大,因此力求速戰速決。但叛軍避開鋒芒,東躲西藏,年羹堯沒有辦法找到叛軍決戰。這時,朝廷內外壓力越來越大,年羹堯陷入困境。這是一位謀士對年說:我知道叛軍在那裡。年大喜。這位謀士指出,敵人就在不遠處的一座皇封寺廟裡。年不信,謀士不慌不忙地說:這就是燈下黑,離自己越近就越不可能意識到,但卻是最可能的地方。果然,大軍一出,大獲全勝。
我想講一些關於程式設計師對自身認識的故事,這些故事都和燈下黑有關。只要正確認識自己,道理非常簡單,但是,到處都可以看到燈下黑的故事。
某程式設計師,有一天接到一個任務:公司的有一個產品的檔案太大了,要求採用壓縮演算法,減少尺寸,最好能壓縮20%。
程式設計師興高采烈地接受了任務:以前沒玩過壓縮演算法,這下可以學習新東西了!研究了幾個月後,他覺得差不多了,就交給了專案經理。專案經理正等著呢,高興壞了,拿著演示檔案就去找產品經理。產品經理開始挺高興,看完臉就拉下來了。開啟檔案,把所有的檔案尺寸一算,很淡淡的說:“才壓縮了10%,有什麼用啊!”
程式設計師愣住了,“不會吧!我看過的,壓縮了 20%!”
產品經理指著檔案列表說:“你看,某檔案是壓縮了20%,可你的壓縮演算法增加了一個動態庫檔案,尺寸還不小,總共加起來,不就只減少了10%嗎?”
各位看官,這是不是軟體公司裡經常發生的情形?
這種失敗的成因當然是複雜的,有溝通管理方面的問題,也有程式設計師能力的問題。我今天想要說的是程式設計師認識方面的問題。
繼續故事:
專案經理很沒面子,回去就和程式設計師找原因。專案經理是老程式設計師了,直話直說;終於弄清楚的事情的本質:
第一,這位程式設計師一個的時間讀了很多關於壓縮演算法的書,會了不少演算法。可是從來沒比較過演算法的優劣。這老兄覺得研究演算法很有趣,樂此不彼,寫了好幾個實現。
第二,這位老兄在最後幾天才想起來20%的目標,也沒太放在心上,看看差不多就拿出來了。
這是典型的程式設計師的認識問題,重知識而輕技術。
先從是麼是知識,什麼是技術說起。
知識就是知道,你知道了某件事是怎麼回事,就是有了知識。
技術就是你能做出來,做得好叫技術好,做的不好叫技術差。
怎麼寫作業系統?看完作業系統原理,再苦讀完原始碼,這叫有知識了。如果有本事把任務排程、記憶體管理、IO什麼的都寫出來,還能寫得穩定,快速,可擴充套件,那是有技術。有知識和有技術可差遠了。早年我在工廠實習,要挫一個圓孔,拿著內銼刀幹了一天,只挫了一個橢圓;師父來了,三分鐘,比衝床衝出來還圓!我是個好學徒,使用銼刀的知識全記住的,可以寫一篇內圓挫使用大全。知識是有了,可沒這個技術。
程式設計師也一樣。什麼C++,Java,.net,什麼STL,Struts,Spring,就是門門都滿分,這也就是有知識。算不算技術好呢?差遠了。軟體工程師界就專門出這種不會寫程式的“高手”。我遇到一位老兄,精通Java知識,從虛擬機器到各類框架,概念,無所不同,談起Java來,沒人說的過他。可是他的程式碼永遠Bug最多,而且都是最簡單的Bug,什麼邏輯不對啊,功能沒實現啊,UI不對啊。他的領導只有又好氣又好笑。問下去,發現這老兄寫了幾個程式檔案以後,就不感興趣了,因為所用的技術沒什麼不知道的了。所以馬馬虎虎交差。
說到底,寫程式是個手藝活,就和古代的匠人一樣,是要講工藝的。比如一個玉匠,能打造栩栩如生的玉孔雀,那得打的好!要是一個玉匠說,這些手藝我都知道了,重複做東西沒勁,將就著給客人做出來吧!那他還不吃西北風!
可是,十幾年來,程式設計師界有的是這樣的人,還引發大規模爭論。象什麼C++和Java之爭啦,J2EE和.Net之爭啦。你看裡邊的帖子,不停有人賭這個陣營那個陣營,有發誓一輩子做C++的,有發誓打倒.Net。我還奇怪了,專門沒人效忠機器碼的,那不是最難最有“學問”嗎?這都是在爭論什麼知識最重要。可是啊,很少有人談談怎麼做好產品的。
現在程式設計師最大的問題就是太看重知識,拼命追逐新玩意,而忽略了身邊的夠得著東西。好,什麼C++,Window API都知道了,東西也弄出來了,可是三天兩頭崩潰,還找不到原因?為什麼?有沒有看看程式碼,看看是不是某函式寫了2000行,自己都看不懂?是不是全域性變數亂用?是不是沒考慮前後相容性?沒考慮冗餘和故障恢復?
末了再回到開頭的故事:
專案經理回去和程式設計師再重新設計,又多花了一個月,終於達到了目標。但因為這個部分是一個大專案的一部分,整個專案不得不延遲了一個月。
年底考評的時候,專案經理給程式設計師打了一個及格;程式設計師不服,告到總經理那裡。總經理說:“你知足吧,給你打及格已經看在你乾的很辛苦的份上了,因為你沒有按時完成,整個專案延遲了一個月,這帳都沒找你算呢。”程式設計師頹然。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1046817
相關文章
- 好程式設計師雲端計算教程分享Mysql技術知識點程式設計師MySql
- 好程式設計師Java教程分享Java技術知識點總結程式設計師Java
- 程式設計師的技術遺產程式設計師
- 黑馬程式設計師程式設計師
- Java程式設計師如何正確地學習新的知識,擴充自己的技術棧Java程式設計師
- 程式設計師技術入股的那些坑程式設計師
- Java外包程式設計師的技術出路Java程式設計師
- 一、管理認知:程式設計師要不要做技術管理?程式設計師
- 程式設計師【黑話】指南程式設計師
- 程式設計師、技術主管和架構師程式設計師架構
- 軟體設計師:程式設計語言基礎知識程式設計
- Java程式設計師需要學習哪些知識?Java程式設計師
- 好程式設計師web前端分享Cookie知識程式設計師Web前端Cookie
- 好程式設計師Java培訓Java程式設計師必學技術程式設計師Java
- 程式設計師需要了解的硬核知識之CPU程式設計師
- 程式設計師需要了解的硬核知識之磁碟程式設計師
- 程式設計師:學校教的數學知識,程式設計根本用不到!程式設計師
- 程式設計師如何利用技術管理技巧程式設計師
- 一個老程式設計師的程式設計之路,寫給年輕的程式設計師們程式設計師
- 好程式設計師分享Web前端知識之HTML程式設計師Web前端HTML
- 程式設計師筆記(知識)管理的一點經驗程式設計師筆記
- PHP程式設計師遇到問題的冷門知識點PHP程式設計師
- Java程式設計師必讀:最新流行的Java開發程式設計技術Java程式設計師
- 程式設計師週刊(第3期):識別未來新技術的趨勢程式設計師
- 程式設計師如何做好技術規劃?程式設計師
- 2020年Java程式設計師需要哪些技術Java程式設計師
- 程式設計師有哪些常用的技術網站呢?程式設計師網站
- it程式設計師常用的技術社群網站有哪些?程式設計師網站
- 程式設計師到底是幹什麼的?請不要再黑程式設計師了程式設計師
- 好程式設計師前端教程CSS基礎知識點程式設計師前端CSS
- 程式設計師也得懂點兒理財知識程式設計師
- 高階Java程式設計師要具備哪些知識Java程式設計師
- 好程式設計師Web前端分享一些小知識!程式設計師Web前端
- 前端&後端程式設計師必備的Linux基礎知識前端後端程式設計師Linux
- 程式設計師需要了解的硬核知識之控制硬體程式設計師
- 程式設計師需要了解的硬核知識之記憶體程式設計師記憶體
- [譯] C程式設計師該知道的記憶體知識 (4)程式設計師記憶體
- [譯] C程式設計師該知道的記憶體知識 (1)程式設計師記憶體
- Java開發程式設計師:JVM相關的知識講解Java程式設計師JVM