Blueimp 論壇首頁
  首頁  | 討論區  | 最新話題  | 搜尋  | XML  |  登入

此話題中所有文章數: 1 [ 話題狀態: 一般 ]
上一話題 此文章已經觀看 3498 次 而且有 0 篇回應 下一話題
會員大頭照
男寶寶 jieh 《騎士團團長》
文章: 6857
v3.8.8

【轉載】程式設計師真情懺悔錄(下)

(續上期)

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

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

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 功能看看? 以 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 的 James Gosling 博士是一個正統出身的科班生,知道了這件事情,會不會讓你更加尊重專業?

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:微軟的廣告告訴你 Windows 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 案女主角)幹的事情有什麼兩樣? 如果這樣的人多了,真正要去賣香雞排的,不是寫程式的人,而是僱用了這些雜碎的老闆才對.

............全文完
昇陽電腦教育訓練中心 王森
----------------------------------------------

來自 JAVA週報
----------------------------------------
支持小惡魔
BTC : 19tn3RnCuwZVukXAwyhDWZD4uBgUZoGJPx
LTC : LTFa17pSvvoe3aU5jbmfcmEpo1xuGa9XeA
知識跟八卦一樣,越多人知道越有價值;知識最好的備份方法,散播!
藍色小惡魔(林永傑): 臉書
----------------------------------------
[編輯文章 3 次, 最後修改: jieh 於 2010/5/22 上午 12:58:26]

[2010/2/21 下午 04:26:11]   [返迴此篇文章頂端 ]  回到頂端