Saturday, May 14, 2011

程式設計師懺情錄(下)

發信人: xeon.bbs@bbs.tnfsh.tn.edu.tw ()
日期: Fri Mar 29 12:05:03 2002
標題: [轉貼] [轉錄]程式設計師懺情錄(下)

作者: erictsai (連備取都沒有的白痴!) 站內: TFcis
標題: [轉錄]程式設計師懺情錄(下) --eric要我轉的
時間: Thu Mar 28 20:54:37 2002

※ 本文轉錄自 [erictsai] 信箱

作者: eric (認真的艾瑞克)
標題: 程式設計師懺情錄(下)
時間: Thu Mar 28 20:52:31 2002

王森專欄> 不賣雞排也可以 - 程式設計師真情懺悔錄(下)

續上期

所以從今天開始,如果你對程式設計有一股熱愛,那麼我們一起努力,
做個真正的程式設計師,而不要做一個雜碎且破壞別人的程式設計師.
做一個真正寫的出有用軟體的工程師,不要做一個只會寫程式的程式
設計師.當然,如"意外的電腦王國 / 聯經出版社"一書所言,很多技
術都是用來原本沒有預料到的地方而大行其道.許多科學研究無法有
立即的貢獻,但是影響深遠,我們也期許有意從事基礎研究的科班研究
生,認真的作研究,不要老是研究一些別人已經研究過的研究,不要老
是冀望騙國科會等研究機構的經費,到了最後計劃結案時,才匆匆忙
忙交出另外一篇騙更多錢的計劃書,或是拿不出檯面的研究.

最後,我們反省自己是不是也是一個只會"寫程式"的程式設計師呢?
請自行測驗底下幾個問題,這些問題都不可能有客觀的答案,所以每
個問題都附上筆者主觀的答案,作為筆者自己的反省.

Q1: 你尊重專門技術嗎? 換句話說,你認為術業有專攻嗎?
當你接受外面的教育訓練課程時,你總是崇拜看起來什麼都懂的老師?
換句話說,你認為那些遇到課外問題就跟你說他不懂的講師是爛老師?

-你老覺得真正的高手應該精通各門各派的技術,如果你會XML,他不會,
你就覺得你比他厲害.你覺得他的履歷上寫的技能太少,證照太少,所以
你認為你比他優秀?

有人老是覺得自己蠻會用MFC開發軟體,所以直覺認為那些只喜歡,或是只
會用VB的人程度應該不高.問題是,有人會用VB,當他覺得元件不好用,所
以自己寫程式處理HTTP,因為他懂HTTP協定的運作方式.工具裡附的瀏覽
器太爛,就自己用功能語法不是很頂尖的Basic來寫parser.相反的,有人
號稱會用MFC,但是除了靠Help找出名為Cxxxxx的類別來用,再自己補上事
件處理的部分之外,其他什麼事都做不出來.

有人認為寫Java程式應該善用工具,用UltraEdit根本是重新造輪子的行
為,所以一開始就學JBuilder的使用,其實他用JBuilder寫了老半天GUI
程式,哪天回頭叫他用文字編輯器寫個簡單的Frame + Button他卻寫不
出來,因為他從沒弄懂過Java的事件處理模型. 他只會不斷地: 選擇元
件->放在容器裡頭->調整位置和大小->調整屬性->按兩下->填寫事件處
理函式,成為一個名副其實的"程式女工".

有人覺得他精通各家廠商的資料庫,所以看不起那些只會下SQL指令或是
只會寫store procedure的人,因為他可是精通ODBC, JDBC, ADO, ADO.NET
各種程式的寫法.問題是,一個精通SQL的專家和只會寫SQL指令的人,在資
料庫表格交互參考,資料量很大的時候,要從中取出我們需要的資料,所下
的指令在效率上是幾秒鐘和幾個小時的差別.SQL也是個專門學問,要能夠
巧妙的操作它,必須下非常多功夫做研究,而且一研究可能就是十幾年.如
果貴公司的專案老是苦於資料庫存取的效能不夠,你猜老闆會花錢找一個
有能力徹底改善所有SQL命令之中效能問題的稀有專家,還是再找一個號稱
他什麼都會,結果一點用場也派不上的"資料庫女工" ?我們常常看到某人
列出他的履歷,好像會很多就是很厲害.但是當我們完全深入一項技術時
(喔,我是說你真正下工夫的時候),通常我們會越來越感覺到自己的渺小.

蔡學庸先生就是一個非常尊重專業技術的例子.
我們看到他在 http://www.csdn.net/expert/cxy/ 上寫的,他說他只精通
lots of Java APIs.我和學鏞聊過三次,有一次,我聽他說:"幹麻叫我搞
Linux,我又不懂Linux!"如果是你聽到這句話,你會不會真的以為他玩起
Linux來肯定比你遜色?筆者突然想起神雕俠侶裡頭的獨孤求敗,晚年只會
拿樹枝和別人比武,可是你拿再厲害的刀劍就是無法打敗他.所以,請尊重
專業技術,不要以為人家沒說他會,你就比他厲害.真正厲害的人很多都不
在檯面上,而是躲在後面偷偷笑我們呢!而我們一輩子也不知道我們被別
人偷偷取笑了.中國文化數千年都是文人相輕的歷史,夠了,大家尊重專業吧!

Q2: 你覺得演算法和資料結構無三小路用,因為你從沒使用過?

-我們承認"無招勝有招"是內功心法的最高境界,但是在信手拈來之際,後
面所代表的是對各家武功路數的徹底了解.由於台灣幾乎只有應用軟體的
開發需求,沒有系統軟體的需求,所以大多數的程式設計師都是站在"程式
女工"的角度看世界,只要有元件,有什麼搞不定的. 但是今天如果你想設
計一個XML parser,不懂資料結構和演算法可以嗎? 好吧! 你說我們不該
重新造輪子,我們應該站在巨人的肩膀上看世界,如果什麼都自己硬幹,世
界是會退步的. 那麼試問,當你在使用Java提供的Collection Framework
時,你了解ArrayList, LinkedList, TreeSet, HashSet之間的差別嗎?
你知道他們的優缺點嗎?你知道他的特性嗎? 不了解ArrayList和LinkedList
的差異,用哪種去寫程式執行結果都一樣,可是效率差很多. 大多數的人
連了解特性都談不上,更別說很多每天想發展自己的語言,自己的編譯器,
自己的作業系統的人,沒有基礎學問的了解,如何去設計一個Collection
Framework或STL?你說資料結構和演算法沒有用,你去做看看現在IDE中普
遍有的code insight功能看看?以Borland C++ Builder來說,要在短時間
內搜尋所有的標頭檔並找出某函數的prototype,如果沒有對資料結構和演
算法有充分了解,一樣做的出來,只是產品會賣不出去罷了.我在課堂上常
常舉一個scalability的例子給學生看:我希望寫一個1+2+3 ... + 100的
程式,大多數的人都是寫

int sum = 0 ;
for(int i = 1 ; i < 101 ; i++)
sum = sum + i ;

而真正受到數學觀念薰陶的人會寫成

int sum = 100(100+1) / 2

前者是O(n),後者是O(1),當項數很多時,運算時間是不是差很多?這些都是
我們的教育所產生的問題(當然筆者也是受害者之一),但是從今天開始,我
們可以認真思考每行程式.

想想發展MP3演算法的人和寫WinAmp的人,哪個比較厲害? 你會說都很厲害,
可是沒有前者就沒有後者,前者搞不好還可以坐收權利金,後者只能苦哈哈
的賺些小錢或等人購併.我們停留在崇拜應用程式技巧的階段,而真正值得
崇拜的是那些難得一見的創意.

筆者遇過一個朋友,叫他撰寫一個費式數列的小程式,比請他寫一個可以瀏
覽資料庫表格內容的程式還難.(請不要與我討論費式數列的小程式沒有實
用價值的問題,這裡討論的重點不是這個)前者需要稍微動點小腦筋,後者
只要會拖拖元件,設定property就搞定. RAD本身不是罪,但是沒學好九陽
神功就妄想幾小時練成乾坤大挪移.最後只會走火入魔而死,徹底變成一個"
程式女工".


Q3: 你常常以科班和或非科班自居?

-你是科班生,瞧不起非科班生? 因為你是正統?你是非科班生,瞧不起科
班生?因為你覺得會的東西比科班生的還多.爛學校會出現好學生,好學
校也會有爛學生.因為比例一樣多,所以我們不能以偏概全.

如果仗著受過幾年正規教育,自己又從未好好深入學習,就自己為是正統
,比較學術的說法這叫做"陽具文化".有些創新的idea是一般制式腦袋的
科班學生很難想出來的,因為專家是訓練有素的狗.如果你是學電信的朋
友,你發現交換機是一個葬儀社的老闆因為生意被別人搶走而發明的,那
你會不會氣死?如果自學有成的程式設計師仗著自己會的東西比較多,你
說你精通Java的各種技術,但是卻沒想過發展Java的Games Golsing博士
是一個正統出生的科班生,知道了這件事情,會不會讓你更加尊重專業?

Q4: 你是學計算機科學的,可是邏輯能力並沒有比較好,還常常受騙?

Q4-1:你會被潮流所鼓動嗎? 你常常被別人的思考牽著走?人家鼓吹Linux
多好多好,你的腦袋連轉都沒轉過就發憤努力地考Linux認證 ?

-別人把公司裡的server全換成Linux,用戶端也都改成Linux,公司仍然
正常地運作,結果你學了Linux之後,看到電視上BSA同法務部做的廣告嚇
的你冷汗直留.深怕明天去住套房.

Q4-2:Sun跟你說Java跨平台,你沒試過也跟人家說跨平台的優點?

-Borland已經可以做到一份光碟裡同時附上Solaris、Linux、Windows、
MacOS X的JBuilder,你卻為了EJB無法deploy到不同公司的Application
Server忙的像無頭蒼蠅.

Q4-3:之前一窩峰人鼓吹XML,結果你盲目追求流行,做出來的東西tag比
data還多?

-會用的人徹底了改變了公司裡資料交換的流程,而你整天只會SAX來,DOM
去的寫XML資料庫(用XML來儲存資料的資料庫)

Q4-4:微軟的廣告告訴你XP和IE將不支援Java,你都還沒試過就跟別人嚷嚷
Java已死?

-套句BBS上moga先生的名言:"那我現在在Windows 2000上跑的Java程式是
神跡?"現在一票人每天宣傳web service的好處,你連想都沒想過就急著想
要把公司的舊系統全部改成web service來做,結果浪費一堆錢,糟糕的速度
讓你每天被客戶臭罵 ?

Q4-5:Web service當然是美好的前景,但是並非適用於每個角落,目前世界
上並不存在完美的solution.人家說不能寫程式一輩子,寫程式的人生命週
期很短,你也跟著別人開始往SA/SD前進 ?

-如果世界上每個工程師都可以經由經驗就成為優秀的SA/SD人員,那麼
理論上咱們應該有些像樣的軟體產品才對. 有些人寫了幾十年,還是一
個優秀的程式設計師,你問問他,如果沒有遇到糟糕的老闆,糟糕的待遇
和糟糕的制度,他願不願意寫一輩子程式?

我願意.

Q4-6:顧問告訴你要多用RAD,不該重新造輪子,所以你努力的問how而不問why ?

-結果真正賺到錢的都是那些像JReport做軟體元件的軟體公司.微軟說
J2EE Blueprint的Pet Store,用.NET技術做比用J2EE做還要快許多,然
後你就相信了,最近, IBM和Oracle重新加強Java版的Pet Store,讓它比
.NET版的還要快18%~22%,你又改口說Java比較好.

Q4-7:一個系統在設計的時候有很多考量,有人以擴充性為主,有的以安
全性為主,有人以效能為主.如果沒有設計理念,大家程式裡頭的function
全部改成inline就好了,管他編譯出來的執行檔有多大.系統只以效能
做考量,我們還需要Design Pattern做什麼?

-那些王八蛋數據和我們選舉時的民調一模一樣...對一個腦袋清楚的人
完全沒有參考的價值.當然,以情感因素來看民調的人例外.如果你沒有經
過自己的自主判斷就盲目的跟隨潮流,那麼下次當你看到有人排隊買米酒
,買蛋塔,搶購衛生紙的時候,請不要投以排隊的人們奇怪的眼光.

Q5:你尊重老前輩嗎?

我們都相信,世界上唯一不用努力就可以獲的東西就是老.所以吃過的
鹽巴比你吃過的米還多的人,沒有任何值得尊重的.我們更相信,資訊業
永遠是年輕人出頭,而英雄少年也長在心裡想:"李杜詩篇萬口傳,至今
已覺不新鮮,江山代有才人出,各領風騷數百年."

但是我們認真想想,從Apple 2的時代到現在隨便一顆CPU都是1 GHz的
時代,計算機的本質有什麼改變嗎? 不就是一台不斷對記憶體作處理
和I/O動作的機器.你笑那些只會用Fortran或COBOL的老前輩,那你學
的Java或C#比起這些老語言又高明到哪裡去?寫程式不過是 宣告,迴
圈和函式三大要素.時間久了,產生了一堆新名詞,配上一些新的發展
理念但本質上沒有改變.如果你是推倒前浪的後浪,當你看到李維先
生撰寫的 "[長篇] 我的回憶和有趣的故事"或侯捷老師最近兩期在
Run!PC撰寫的"侯捷觀點"這些老前輩寫的文章,你有把握寫出比它們
更高明,更有深度的東西嗎?

最重要的問題,

Q6:你騙過老闆嗎?

-你在履歷上寫的十八般武藝樣樣精通,結果是梧鼠技窮(註:比喻技能
雖多,而不能專一),一錄取之後什麼東西都做不出來,筆者至少聽過
20個老闆跟我講過這件事情.

Q6-1:你以為你的身價比較高,只因為你從事"軟體研發"的工作?
-然而現實的生活中,"獲利"是真正決定成敗的關鍵.除非你的東西幫
老闆賺了錢. 如果沒有,你憑什麼要求更多薪水,憑什麼要求50張價
值數千萬元的股票?如果你寫的東西品質很差,bug超多,客戶抱怨不
斷,老闆賺不到很多錢,你還老是在外頭痛罵老闆不尊重技術人員.如
果把行業換成色情行業,那老闆不就等於被乾洗?這樣看來,程式設計
師和詹惠華(黃顯洲3P案女主角)幹的事情有什麼兩樣?如果這樣的人
多了,真正要去賣香雞排的,不是寫程式的人,而是僱用了這些雜碎的
老闆才對.

............全文完

No comments: