2011/01/27

程式設計師真情懺悔錄

昇陽教育訓練中心經理 王森




前言:
不久前,蔡學庸先生發表了兩篇分別叫做"程式與香雞排","再論香雞排"
的文章,受到的迴響之大,據說連作者本人都接到該文的轉寄。足以見
得該文的內容道出了台灣程式設計師心裡最深處的想法。所以,本文想針
對台灣程式設計師來做討論,看看身為一個程式設計師,究竟犯了什麼
過錯,導致大家寧願賣雞排也不願再繼續寫程式。璩美鳳小姐為自己驚
動台灣社會的行為寫了真情懺悔錄,我們也該真誠地檢討一下自己。

本文:
在台灣,大部分的人都有個認知,就是"搞硬體的比搞軟體的要好賺",
"做SA/SD比coding地位要高"。那些做ID Design的傢伙待的公司所發的
股票,永遠比搞Software Design的人待的公司發的還多,股價也高出好
幾倍。搞SA/SD的人,在公司地位好像也比單純寫程式的人高。於是我的
父親有一次問我:"是不是搞硬體的人智商比較高?","是不是搞分析設計
的人比較有地位?"

事實上,在學生時期我就認識不少人,有的人因為程式寫不過別人,所
以轉換跑道專攻硬體;也有人覺得每天面對示波器和邏輯分析儀讓他們頭
痛,工程數學也學不過人家,所以轉行搞軟體。到了實際上面對許多前
來接受教育訓練的學員之後,發現有人是因為寫了十幾年BIOS和driver,
覺得乏味而沒有前途,所以想試看看應用程式的開發;有人則是因為受不
了客戶每天改需求,而且寫BIOS和driver的人好像比較少,價格比較高,
因此想學習如何撰寫系統軟體。詢問那些上高階課程的朋友,有的人發
現自己只會胡做SA/SD唬爛老闆和客戶,所以希望重新打好基礎,從基本
的coding做起;有的人則因為寫程式寫太久,覺得應該往上走向SA/SD的路
子,畢竟老了程式就寫不動了。這個世界上什麼樣的人都有,絕對不能以
小羨大。就很像搞政治的老是騙我們台灣只分成外省人和本省人;搞幫派的
人告訴我們警察是帶著槍的流氓。實際上,每個族群大家在沒有被分化之
前都相處的和樂融融,而雖然有警察擄妓勒索,上班時間跑去聚賭,但是
也有開我們罰單時酌情輕罰的警察,和保護我們身家性命的警察。

即使如此,身為一個程式設計師還是要問,那為什麼寫程式的好像地位就
是比較低? 筆者認為,這是進入門檻的問題。會做相同事情的人多了,就
會削弱那樣技能的價值。就很像考過MCSE/MCSD證照的人,通常比起考過
SCJP/SCJD證照的人要來的沒價值,前者因為考過的人實在太多,而後者考
過的人少,僅是如此而已。但是絕不是代表考過MCSE的人,素質就比考過
SCJP的人要差,也不代表考過SCJP的人,實力真的比較高段。相信求學的
時候您一定遇過一種人,他實力也不怎樣樣,可是考試的時候他x的就是考
的比我們高,怎麼我們心裡就是不服,可是大多數老師偏偏就是比較喜歡
分數高的人。因此,滿坑滿谷的人自稱會寫程式,老闆不愁找不到可以做
project的人,你要求的薪水和價格很高? 沒關係,找個學校剛畢業的小子
,寫的比你快,寫的比你好,用的技術比你新,更重要的,價格比你這個
老屁股便宜一半。所以程式設計師在雇主心中的地位日益低落,自然有跡
可循。

"那麼,為什麼寫程式的進入門檻比較低?"

在各位資訊從業人員的身邊,非科班出生的比率非常高(當然沒還賣雞排的
高),科班出生的學生,搞不好在老闆眼中的地位,還比不上一個半路出家
的自學者。那位自學者會ASP、JSP、PHP、C++、C+、Java、Linux、Windows
、Oracle...等,十八般武藝樣樣精通。而我們科班出生的學生,只會離散
數學、資料結構和演算法,Visual Basic搞不好沒有用的沒人家熟,網站的
架設搞不好也沒人家熟,更何況科班出生的學生,他的基礎學問搞不好根基
也不紮實(問看看您身旁的科班學生),難怪最常見的就是很多非科班的"高
手"看不起科班的學生,覺得他們無三小路用,連個Windows操作都比他們差
,甚至有的還大言不慚的說:"我這輩子寫程式從沒用過書上的資料結構和演
算法,讀那些幹啥?"。 長期下來,科班的學生也開始質疑自己的所學,甚
至考慮轉行,當然,也有曲高和寡,孤芳自賞之人。 總之,沒辦法受到老闆
垂青,薪水永遠那麼少,想賣雞排的念頭就開始萌生。

之所以會有這種情況,筆者個人認為有兩種主要原因,一是技術的流通性,
二是台灣軟體市場的需求。為什麼技術的流通性可以產生大量半路出家的非
科班生? 這都要感謝台灣大量作者,寫出大量的入門書籍,大幅減低的進入
程式設計領域的門檻。即使在各位眼中,繁體中文的爛書很多,而且非常。
但是,大家眼中的爛書,常常是再版多次的入門書,對某些人認為是垃圾的
東西,常常是另外一批人進入資訊業的最佳踏腳石。不信各位到書店看看,
是"24小時學C++"、"快快樂樂學Java"的書比較多,還是"輕輕鬆鬆學微分方程
式"、"21天學複變"、"電子學不求人"的書多? 兩者的差距是 N:0。是微分方
程式和複變比C++,Java難學嗎?筆者兩個都學過,至少我可以發誓,就一個有
基本學習能力的人來說,難度是一樣的,學成所需要的時間和功夫也是一樣的
。再看我們的公開討論區(BBS或Forum),我們可以看到大量的軟體技術討論區
,卻看不到硬體技術討論區(喔,請別跟筆者說那些每天問哪家主機板比較好,
哪台燒錄器較穩定、或者說CPU時脈越高速度就越快越好,或是說x86的Out-Of-Order
Executon是"故障執行" 這一類渾話的討論區和我說的硬體技術討論區是一樣
的喔!)書籍和討論區促進知識的流通,造成了大量的軟體人才,更何況,學習設計
軟體只要一台PC就能寫出好用的軟體,而學習硬體設計,需要的設備更是天價。
更重要的一點,就是學軟體的人,充分發揮儒家分享的精神,只要不是在BBS上
冒充小妹妹想要騙取大哥哥的同情來幫你寫程式作業,只要不是很差勁的亂問
一通,通常至少會有熱心人士願意留下一個URL,讓我們可以找到參考文件,更
具熱誠的,如新竹師院BBS站Java版的TAHO先生,還擅用很多生動的比喻讓初學
者體會技術的真義。在這種知識充分流通的環境下,當然產生出非常多的資訊
從業人員,每買一台PC,上頭各種軟體的需求是無窮無盡的,每天都有各行各
業的人需要各種軟體,所以程式設計師的需求有一定的量。難怪有人說:"寫程
式的人餓不死,但是也不會發大財。"




再來就是台灣軟體市場需求所引發的問題.
一般我們把軟體分成系統軟體(System Software)和應用軟體(Application Software).
編譯器,組譯器,除錯器,作業系統,驅動程式,都是屬於系統軟體的一部分.
台灣除了硬體廠商,IC Design House之外,甚少有撰寫驅動程式的需求.
前幾年Linux被炒的熱時,也有許多高手投入作業系統,編譯器以及簡化標準函式庫的研究.
而台灣所需求的軟體,極大多數是屬於應用軟體,這些需求的應用軟體其中很大比例
是和資料庫有關係的(其實不只是台灣,其他地方也是約略相同的情形).
所以VB,Delphi和PowerBuilder這類IDE大行其道,因為他們容易上手,可以快速開發資料庫應

用程式,相關入門書籍很多,會的人更多. 因此符合我們前面所說的:"會的人越多,價值就越
低"的理論.

但是別忘了,系統軟體有部分是偏向應用軟體的,比方說開發軟體用的JBuildr和Visual Stud
io;
製圖用的AutoCAD;一套IC Design用的Xilinx或Altera;做OOA/OOD的Rational Rose和Togeth
erJ,
筆者習慣稱這些軟體叫做"軟體的軟體"(Meta Software).
在一般程式設計師眼中,這類軟體"理所當然"地認為都是由國外所發展.
這類軟體有極高的進入門檻,所以國外這類軟體公司的獲利率很高,所以該公司的
程式設計師可是身價非凡. 要知道,先前在媒體上有報導過,能夠讓Microsoft買軟體來用的�
膝q,
只有Rational Rose(當然,不可能只買Rose來用). 如果做IC Design的人沒有你的軟體就沒�
鴘k
做事,身為一個程式設計師,你會覺得你的身價和地位比做IC Design的人低嗎? 如果你做的�
n
體像SoftICE或DriverWorks那樣被做硬體的工程師大量地倚賴,你會覺得搞硬體的人比你厲�
`嗎?
問題是,知道該如何設計一套這類軟體的人,恐怕才是真正的異數. 而且需要跨領域的專才.
要不是許多OpenSource的project(例如:KDeveloper)正在進行,恐怕很少人知道該如何設計�
@套
IDE. 既然會製作這類軟體的人在國內少之又少,那麼他們的身價高嗎?
很抱歉,台灣沒有公司發展出足以和國外大廠競爭的開發工具.
舉IDE為例,國內早期有家公司開發出一套名為DBtools的產品勉強可以算的上是這類產品,
旗標也曾為它出版過入門手冊,可是使用這套軟體的人好像...沒看過
(如果該產品有不錯的佔有率,請原諒我是井底之蛙),
沒有市場,公司無法賺錢,即使你是少數能做製作某類型產品的高手,公司最後關門大吉了,
您也只能算是"少數能讓公司賠錢的程式設計師"罷了.
所以我大膽假設, Games Golsing或Anders Hejlsberg如果學李敖一樣50年不離開
這個小島,大概早餓死了.

以上的討論,真正優秀的高手看了之後,或許會產生有時不我予,不得已必須
遠渡他鄉的想法. 程式設計師的價值就如同書的價值一般,國內和國外有不
同的看法.國內教科書比較便宜,應用的書比較貴.國外教科書比較貴,應用的
書比較便宜. 國外重內容,薄薄一本How Debuger Work可以賣44.99美金.而國
內,都是看頁數來計價(侯俊傑先生的書有努力在打破這個頁數的迷思,也做的
蠻成功).有很多原因導致這兩種文化之間的差異,但是,市場因素肯定是其中重
要的一項.

好了,程式設計師價值低落的原因討論過了,如果您同意筆者的論點,
那麼不禁疑惑,大家彼此毫不保留地讓知識得以流通,技術得以擴散,本意是好的,
結果反到造成自己和別人身價的低落,這樣我們是不是從此不再和別人分享我們
的心得? TAHO先生看過本篇上半部之後,發表了底下內容:
--------------------------------------------------------
發信人: TAHO.bbs@bbs.nhctc.edu.tw (癡人)

> 哈 恭喜TAHO兄上Java週報了...
> 通常至少會有熱心人士願意留下一個URL,讓我們可以找到參考文件,更
> 具熱誠的,如新竹師院BBS站Java版的TAHO先生,還擅用很多生動的比喻讓初學
> 者體會技術的真義。

@@".....
光看這一段 好像是褒獎
不過看了整篇文章...
突然發現......
原來我是讓程式設計師不值錢的兇手之一....
真是罪該萬死啊....
--------------------------------------------------------

但是mue先生接下來的發言,說卻命中本文真正的核心價值觀:

--------------------------------------------------------
發信人: mue.bbs@bbs.im.tku.edu.tw (閒人)

: @@".....
: 光看這一段 好像是褒獎
: 不過看了整篇文章...
: 突然發現......
: 原來我是讓程式設計師不值錢的兇手之一....
: 真是罪該萬死啊....
不會啦..要是每個程式師都死守自己所會的..讓所謂的專業門檻更高的話..
就很難進步了..就是讓本來難的變簡單..自然就會有更難更深入的東西出現..
這樣社會才進步的快丫..
--------------------------------------------------------

做應用軟體的人真的沒價值嗎? 有些靠應用軟體賺了不少錢的朋友開始偷笑了.
軟體必須加上專業知識,才能夠發揮價值. 換句話說,如果您真的只會"寫程式",
那,卻沒有配合各種領域的專業知識,"寫程式"這項技能本身根本毫無價值可言.
就很像你的電腦裝了瀏覽器,可是卻沒有對外連線的網路一樣,如果沒有網路本身,
瀏覽器一點價值也沒有,更不需要一家公司大費周章地利用平台優勢去整倒另外一家公司.
我們可以把程式設計師比喻成架子上滿滿的資訊相關書籍,而顧你的老闆就是前來買書的讀�
�.
你不能否認這麼一堆書裡頭,有好書,也有爛書,你也不能否認你心中的爛書是一本書,
但是你卻不能否認書裡面教你如何寫Java程式的內容是錯的.
可是,購書的讀者壓根兒根本覺得某幾本書一點價值也沒有.
我們只能說,太多只會"寫程式"的程式設計師打爛了市場,就像一牛車的爛書一樣,
你不能說爛書沒有價值,可是爛書會讓你對架上其他書籍的價值大打折扣.
除非,你之前看到別人口耳相傳這本書是好書.
大家或許不相信"只會寫程式"的程式設計師存在於這個世界上,所以筆者舉個
簡單的例子說明之:很久以前, BBS上有人發表了post,內容大該是說某公司在
整理舊的程式碼時,發現了一則奇文,奇文內容如下:
-----------------------------------------------
//底下是一個判對某個整數是不是奇數的程式碼
public static bolean isOdd(int n)
{
while(true)
{
if(n==1) return true;
else if(n==0) return false;

n=n-2;
}
}
------------------------------------------------
您說撰寫這個程式碼的人不會寫程式,他又好像會寫,
你說他會寫程式,你又不服氣,覺得這個傢伙根本在胡搞一通.
看過這則奇文軼事之後,當您下次聽到某公司抱怨他們的程式設計師
做出來的軟體一堆bug,速度出奇的慢,產品永遠賣不出去,害公司快經營不下去了,
所以他們認為程式設計師一點價值都沒有,只是一堆勞碌命的雜碎時,
您會不會更加懷疑,是一堆莫名其妙的程式設計師,把你的行情給搞爛了?




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

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

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

洪志鵬:「不要學電腦、不要學英文」

給幼稚園爸爸媽媽的演講稿 【洪志鵬】

我想講的重點只有兩個:一個是「不要學電腦」,另外一個是「不要學英文」

各位小朋友的家長大家好。

跟各位一樣,我的小孩今年剛進幼稚園。第一天帶他到學校,在我們大人離開的時
候看他眼淚都快掉出來了。如果我是他,我也會嚎啕大哭,不過我哭的原因跟他不
太一樣。我哭的原因是從此之後,就在踏入幼稚園教室這個時刻起算,面對的是短
則十幾年,長則幾十年的學校生活。能夠每天無憂無慮在家裡玩玩具、吃飽睡、睡
飽吃、四處閒晃的快樂日子到此結束,從此以後每天要早睡早起、要跟老師同學整
天坐在教室裡,然後寫作業、考試這些東西一個個就冒出來了。進了學校、混進人
群中,你再也不是在家裡三千寵愛集於一身的神奇寶貝,要獲得老師的寵愛、同儕
的認同,就得表現良好、討人喜愛,跟在家裡面打個滾、跺個腳,玩具、糖果就送
上門來的待遇完全是兩回事。如果是我,知道接下來面對的是什麼,我一定比所有
第一天上學的小朋友都哭得更傷心。

不過大家可能心裡有個懷疑,我跟大家一樣,小孩剛進幼稚園,所以應該也沒有什
麼經驗,又不是什麼幼兒教育專家,怎麼有資格站在這裡跟大家演講?這點請大家
放心,不懂的事情我絕對不敢吹牛。今天我要跟大家分享的內容很簡單,我想講的
重點只有兩個:一個是「不要學電腦」,另外一個是「不要學英文」。對於這兩個
主題我應該還不算班門弄斧,電腦算是我的本行,在研究所學的是這個,也靠這個
工作賺錢了快十年;我的英文也應該還算不錯,至少回英文email跟人吵架沒有問

題,或是可以隨時上台跟一堆老外做簡報,還能從頭到尾笑聲不斷,最後大家還起
立鼓掌叫好。所以針對這兩個主題,相信我還可以給大家一些有用的資訊。況且大
家每天看報紙看電視,不三不四記者的報導、亂七八糟的談話節目都在花時間看
了,我相信我的東西一定比他們要有水準得多。

我們先來看看坊間的幼稚園廣告,英文和電腦應該是兩個宣傳的重點。只要打出
「全英文學習環境」的招牌,每個月學費加個萬把塊不是問題。如果又是外籍教師
授課,跟「貨真價實俄羅斯金絲貓為您服務」的意思一樣,費用還可以往上加。電
腦教學也是一樣,強調有電腦教室、會用電腦畫畫,又可以加個幾千塊。如果是又
有用電腦英文教學軟體,那真是金剛合體、雙效合一,每個月的學費絕對就比大學
剛畢業的社會新鮮人的薪水還要高。大家都知道,賺小孩子的錢最容易,因為現在
的爸媽都很捨得把錢花在寶貝兒子、女兒身上,所以這些不肖業者才會如此肆無忌
憚。但是,各位偉大的爸爸媽媽們,如果花大筆的錢對孩子有好處,當然很好,但
要是花了錢又對小孩有害,是不是賠了夫人又折兵,當冤大頭又花錢找罪受?我認
為給幼稚園的小朋友學英文跟學電腦,就是在花錢找罪受,對孩子未來的發展不但
沒有幫助,反而會害了他們。我先從學電腦談起。

電腦其實是個笨東西

講到電腦,一般人的感覺都好像是很了不起的東西。

中國大陸的專有名詞翻譯很多都跟我們不一樣,有些真的翻得很好笑,例如軟體設
計裡的物件導向(Object Oriented),他們翻成「對象面向」,迪士尼卡通的白
雪公主(Snow White)翻成「雪姑七友」);但是至少有一個重要的名詞對岸比我

們翻得好多了,就是「Computer」這個字,人家就直接翻成「計算機」,我們卻翻
成深不可測的「電腦」。「電腦」給了我們太多不實的想像,好像這台機器就真的
跟人腦一樣,或是跟電影裡的電腦一樣,聰明絕頂還有人性。所以會「玩電腦」是
很酷的事情,所以「學電腦」是如此地重要,小孩子要趁早學,不要輸在起跑點
上。

但是學過最基本的計算機概論的人都知道,所謂的電腦其實是很笨的東西。它認得
的數字只有兩個--就是0與1,簡單來講就是開和關兩種。因為電腦只懂0和1,所
以所有的數字都是轉換成只用到0和1的二進位來做計算。電腦之所以好用是因為它
的運算速度很快,所以雖然方法笨,但是可以很快算出結果。所有我們看到那些新
奇好用的電腦應用系統,其實都是勞苦功高的程式設計師們的傑作。電腦本身是一
隻笨牛,程式設計師下一道指令就好像是揮一下鞭子,這隻笨牛才懂得走一步。所
以真正聰明的是我們人類,是我們指揮電腦去執行這千變萬化的動作。電腦只是工
具,我們可以利用它來做很多事。就好比筷子是工具,我們利用它來吃很多東西,
但沒有人會去崇拜筷子,所以大家也不必去崇拜電腦。

因此,不必急著學電腦的原因實在太簡單了,因為這種技術等到要用的時候花一點
點時間去學就會了。像我的兒子,一直到一歲多頭髮還長得很稀疏,牙齒也沒長出
幾顆。我太太當時曾經擔心他頭髮和牙齒長得太慢,我就跟她說:「妳到任何一間
小學看看,找找看有哪一個小孩是光頭或是沒牙齒的。」我的意思是這些東西遲早
都一定會長出來,根本不用著急。學電腦也是一樣,它只是一個工具,學一、兩下
就會了。孩子這麼小就急著讓他學,等到長大了每一個人遲早都會這些東西,早學
頂多只是現在可以在客人面前炫耀,但是隨之而來的害處要遠大於這些一時的虛
榮。

首先,幼兒用電腦對身體健康有害。先來看我們大人好了,電腦螢幕看久了眼睛會
累、會乾澀、會頭昏眼花;然後滑鼠、鍵盤用久了會肩膀痠痛,手臂、手肘加手指
痠痛,這種疾病的正式名稱叫做RSI(Repetitive Strain Injury),中文翻成重
複施力傷害,包括手腕神經壓迫症、脊椎神經傷害、頸部和腰部痠痛等等;傳統的
螢幕顯示器有輻射線,現在的液晶螢幕照樣有光點閃爍造成的眼睛疲勞。大人覺得
不舒服會自動休息、自動去看醫生,但是小孩子玩得高興很可能就不理它了。而且
現有的電腦設備都是根據大人的體型來設計的,什麼人體工學電腦椅、人體工學滑
鼠加鍵盤,都是大人的尺寸。然後螢幕擺放的高度和角度,很少因為要給小孩子用
特別來做調整。小朋友發育還不完全,這時候就用這些高科技的產品來操他們,真
是非常殘忍的事。我常常看到小朋友仰著頭、拉長脖子、目不轉睛盯著電腦螢幕,
小手用力地推著滑鼠、小手指吃力地按著滑鼠按鍵,按一下都很費力了,有時候還
得「雙擊」,就是很快按兩下,這樣操下去對肌肉發展有好處嗎?對骨骼生長有好
處嗎?對視力發展有好處嗎?看到這種情景真是叫人痛心。

然後,太早用電腦會阻礙學習。我們回想在學習過程中,大部分重要的知識,不管
是靠老師講解或是靠自修,大都是從書本上得來的。所以自己從書本上的文字、圖
片上學習的能力是很重要的。我們看看這些小孩子所謂玩電腦是在玩些什麼,除了
電腦遊戲以外,就是那些所謂「益智性」的所謂幼教光碟。這些「益智性」的教學
軟體也是設計的跟遊戲一樣,有可愛的造型和炫麗的聲光效果,目的是要孩子們
「從遊戲中學習」。比如說學ㄅㄆㄇ,最後還是跟Hello Kitty一起跳來跳去;或
是學123,最後還是跟天線寶寶一起爬山、翻滾。

有句話叫做「由儉入奢易,由奢返儉難」,這個道理用在學習上也是一樣。在一開
始學習的時候,就讓他們習慣這種嘻嘻哈哈、聲光炫麗的學習方式,是不是以後學
每樣東西都得像這樣生動好玩才能學?我一直認為從圖片培養想像力,然後培養從
文字閱讀中獲得樂趣的能力是很重要的。

所以我認為,不管是從幼兒身體健康的觀點,或是心智成長和學習能力的培養方
面,給幼稚園的小朋友用電腦並不是明智之舉。

我知道很多家長很喜歡這種幼教軟體,因為小孩子會喜歡玩,所以在家裡面可以隨
時打開電腦讓他玩上一陣子。相信有小孩的人都知道這代表了什麼,就是小孩可以
自己玩,不會來煩我們,大人們就可以做自己的事,所以這是多麼偉大的發明。小
孩都喜歡看電視,但整天看「迪士尼頻道」或是「東森幼幼台」也有看煩的時候,
現在又有這些電腦幼教軟體,電視看累了就來玩電腦,從電視螢幕前面搬到電腦螢
幕前面,還可以贏得「學電腦」的美名,對家長們來說是多麼方便又美好的事。

我想講幾句重話,不想陪小孩、懶得自己教小孩,就不要生小孩。既然已經生了,
就要花時間去陪他,自己去教他。不是小時候丟給要花錢的菲傭或是不必花錢的阿
公、阿嬤,長大一點就丟給幼稚園老師,或是乾脆把小孩擺到電視螢幕或是電腦螢
幕前面,然後自己就沒事了。

我自認還算是個稱職、有經驗的資訊從業人員,所以請大家認真思考我的話。電腦
操作這些技巧只不過是雕蟲小技,操作滑鼠、開關視窗、點選主選單,還有最傷手
指肌肉的「雙擊」等等,都是沒什麼大不了的東西。另外像是製作文件、簡報資料
等工作,也都是按表操課的一般技術,智商再低都學得會。拿「會用電腦打報
告」、「會上網看網站」這種東西來炫耀,實在會笑掉人家的大牙。

我要強調的是,電腦是很重要沒錯。我自己就是在資訊界工作,使用電腦是各行各
業每一個人都必備的技能。但是使用電腦這種工具的能力要培養非常容易,可以說
要用到的時候再來學都來得及。小朋友們可以做的事情很多、可以玩的東西很多,
學電腦可以等長大一點再來。況且現在急著學,學到的也不是什麼了不起的東西。
打電動、上網每個人都會,中文打字、用電腦畫圖,甚至做投影片當報告,這些哪
一個是不得了的東西?大家想想,中文! 打字最快的、創世界紀錄的,都是出自哪
些了不起的學校的學生?所以這些是了不起的技術嗎?我現在都還是用這個奇笨無
比的微軟新注音輸入法,照樣可以打完整篇文章。這些沒什麼學問的東西就這麼急
呼呼要小朋友們去學,到底是為了什麼?

英文有這麼嚴重嗎?

再來談談學英文。我的意見也是很簡單,就是幼稚園的小朋友不必急著學英文。
前陣子在電視上看到一個廣告,一個戴眼鏡、乾瘦的男孩搖頭晃腦,身體劇烈擺
動,用誇張的手勢和語調進行英文演講。這原來是一家知名兒童英語班的廣告,記
得它的旁白好像是「這個孩子為什麼這麼優秀」,可是我的感覺卻是「這個孩子為
什麼這麼惹人厭」。小時候如果班上有這種同學,不召集兄弟們每天照三餐修理他
才怪。為了練英文弄成這副德性,人緣又不好,實在是划不來。

問題是「有這麼嚴重嗎?」學英文一定得搞成這樣嗎?看美國人講話,沒人像這樣
誇張吧。學習另外一種語言,應該不是這麼嚴重的事吧。

相信現在大家都有共識,就是新一代的中文程度越來越差。沒有閱讀興趣,閱讀能
力下降,寫作能力當然也跟著變爛。滿嘴可以稀哩呼嚕講個不停,卻不知所云,一
拿起筆就像拿鋤頭千斤重,連寫通順的文句都有問題。接下來如果從幼兒就開始教
英文,以後他們的中文程度會更差。因為學習的時間就是這些,要學的東西越多,
當然就瓜分掉原來學習項目的時間。

見過很多電腦程式設計師,自稱會很多種不同的程式語言,但是後來我們發現這些人對每種程式語言都只懂得皮毛,雖然看起來會很多,履歷表列出來滿滿一大
段,不過只會寫很簡單的程式,進階的運用根本沒辦法。真正的高手有的只會一、
兩種程式語言,但是鑽研得很深,所以可以運用自如、無所不能。相信任何公司要
找人,都會要找後者。而且我們都知道,只要已經熟透某一種程式語言,要再學一
個新的程式語言就不是難事。我認為學人類的自然語言也是一樣的道理,總得先有
一種語言的基礎,再來學第二、第三種語言。這樣對本國語言、文字的運用已經嫻熟,看得懂艱深的文字,寫得出通順、優美的文句,以這個為基礎來學外國語,才能學得好。不然每種語言都懂得很膚淺,就好像只會用多國語言來說你好、再見、
吃飽沒,我們要培養的就是這樣的下一代嗎?

幼稚園還好,過一、兩年開始唸小學,大家就會親身體驗這些所謂教改學者的可
怕。應該很多人都知道美國人的數學程度很差,不過大家可能很難想像到底有多
差。我曾經參與過一個開發美國學生數學教學軟體的專案,他們的大學申請入學是
根據一個叫做SAT的考試,裡面有數學這一科,它的數學程度就甚至比我們當時國
中數學還簡單。一元一次方程式、二元一次方程式、最基本的圖形幾何,就是這樣
而已。所以說我們的國中生數學程度就比他們的高中畢業生還好,事實就是如此。
但是現在我們的數學教材一直修改,目標竟然是要和美國的教法看齊。像是不必背
九九乘法、要用加法來算乘法、用減法來算除法,搞得中小學老師們無所適從。

這種新數學搞到最後發現中小學老師們叫苦連天、學生叫苦連天、家長們也叫苦連
天,唯一因為這些建構數學受益的人,竟然正是那幾個始作俑者的教改學者。他們
可以打著建構數學的招牌在外面開班授課,更厲害的是他們不只教學生,還可以開
另外一種班,教家長怎麼回去教小孩。本來教改是要讓學生減輕補習壓力的,結果
反而讓家長也有補習壓力,讓這幾個大學教授們賺得更過癮。

反正這些半吊子學者的理想,就是要把台灣的小朋友都教成像美國人。英文能力要
跟美國小孩一樣好,數學能力要和美國小孩一樣爛。

等上了高中、大學,因為要讀原文書,所以非得看懂英文才行;在工作上要跟外國
人溝通,所以非得會講英文才行。但是幼稚園的小朋友們為什麼非得要學英文?為
什麼非得要跟老外聊天?有的小孩連台灣話、客家話都不會講,跟阿祖、阿公、阿
嬤都沒辦法溝通了,還要急著去跟老外打屁?

大家說要儘早學英文,因為現在英文是國際語言,美國是世界強權。所以能夠越早
學英文,就能從小就開始像美國人,長大之後才不會輸給別人。

但是所謂的「美國人」,真的就是這麼優秀的民族嗎?我們就得樣樣跟他們看齊
嗎?

我不知道大家有沒有看過美國的一些現場討論的節目,如果有看過,您就會知道一
般美國人的水準有多差。我們的電視台也有很多Call-in節目,或是像全民開講那
種主持人煽風點火、來賓和觀眾吵成一團的現場節目。您以為這種節目夠沒水準了
吧?其實不然,如果跟美國的現場討論節目相比,我們這些還算是水準不錯了。美
國收視率高的這類節目像是「Jerry Springer」、「Maury Povich」等等(這些節
目名稱都是用主持人的名字)。我們的這類型節目討論的主題不外乎是阿扁總統又
講了什麼話、然後對岸的老共又生氣了等等,這些雖然無聊,不過至少是和國家大
事或公眾事務扯上一點關係。但是美國那些節目討論的題目不外乎像是「我和我太
太所有姊妹上過床」,或是像「我男朋友在拉皮條」這種題目。每集都會邀請號稱
有切身經驗的人當特別來賓,先是台上來賓對罵,然後開始讓台下觀眾問問題,台
上台下互相叫囂,常常還會上演全武行,不分台上台下扭打成一團。像這樣的節目
收視率很高,由此就可以看出美國平常老百姓的水準。

「美國」之所以能夠成為世界強權,最重要的因素是它成為自由的象徵,能夠兼容
並包,吸引世界各國的菁英融入這個國家。所謂「美國夢」,代表沒有不可能的
事。所以我們看看美國各個學術領域的菁英,大家可以發現很多人的姓氏都不是我
們一般熟悉的美國姓氏,因為大部分傑出的學者都是非美國本地人。歐洲各國去
的、以色列去的、印度去的、日本、中國、台灣去的……這些「外來政權」組成美
國 最傲人的菁英階層,而原本土生土長的美國人裡面,愚夫愚婦佔的比例非常高。

所以如果從小到大就接受美國那一套教育體系,很容易就培養出我們熟悉的美國學
生:數學很爛、井底之蛙、然後又夜郎自大。他們學的就是所謂的「新數學」,就
是那種不用背九九乘法、然後用分組討論的方式來學習的「新數學」。然後那些從
世界各國移民美國的頂尖學者之所以能有這樣的學術成就,都是從小時候學「舊數
學」一步一步培養出來的。美國學生現在要急起直追,要跟日本、韓國,還有我們
的數學教學來學習,反倒是我們要去學人家失敗的東西,這不是很好笑嗎?

我的舅舅是研究美國教育的專家。每次他談到目前台灣的教育改革,都是捶胸頓
足、搖頭嘆息。講到為什麼這些學者專家會做出這樣的決策,他的結論我覺得非常
有道理。他跟我說我們這些學者大都是留學美國的,依這些人的年紀,在美國唸書
的時候當時正是這種新數學盛行的年代。雖然後來新數學造成全美學生數學能力低
落,並且在現在逐漸受到質疑、修正,但是這些鍍金回來的學者記得的還是當時那
一套。他告訴我一句話,「聰明的人留學是去學做學問的方法,笨蛋去留學只學了
當時老師教的內容」。所以當時去學了新數學回來,到現在還是只會這一套。

語文只是一個工具,更重要的是具備某一個專業領域的知識。比如說要跟美國人進
行貿易談判,即使英文再好,如果沒有國際貿易這方面的專業知識,根本輪不到你
上場。像進了大學都要讀原文教科書,英文再好只是基本功夫,困難的是去了解數
學、物理、政治學這些學科的內容。如果會的只是英文本身,那未來的發展還是很
有限。看看以前吹捧得多麼厲害的什麼英文小魔女,托福考滿分還出國留學當了哈
佛小魔女,最後回來不過只是在電視上穿得花枝招展教小朋友英文;搞了半天,到
最後也不過如此而已。

所以我覺得,實在不必急著讓小朋友學英文。取個英文名字好玩就可以了,像我兒
子在迷「建築師巴布」的時候就要叫自己Bob,帶他去電影院看完「一家之鼠」就
馬上要改名為Stuart,另外他還會講一個完整的英文句子--「Luke,I am your
father」,這是他看星際大戰學來的。就是這樣,這就是他到目前為止的英文程
度。不過我很有自信,等長大後他的英文程度一定不會輸給現在那些搖頭晃腦、自
稱哈利波特的假洋鬼子。現在只要他愛看書、能夠專心、坐得住就可以了。英文方
面,雖然成串英文聽不懂,只要知道那是外國人在講話,不是狗在叫,這樣就行
了。該學的時候再來學,在幼稚園的時候只要和同學相處融洽、上課乖乖坐著專心
聽講,知道「上學」是怎麼一回事,只要這幾項沒有問題,為父的我就心滿意足
了。

總而言之,我們都知道現在競爭有多激烈,但是請大家把幼稚園當成最後一片淨
土,不要讓那些無謂的壓力這麼早就壓到小朋友身上。有些東西太早學反而會揠苗
助長,雖然一時看起來很風光,但是長期來看對小孩有害無益。

最後,希望我們都能在小孩進小學之前,跟我們的千金小姐、千金少爺一起享受幼
稚園這一段難得輕鬆快樂的學校時光。祝各位偉大的家長們身體健康,小朋友們也
身體健康,不要老是到幼稚園沒學到什麼,只會把感冒帶回家。我就講到這裡,謝
謝大家。

2011/01/16

jQuery Tips

取得點擊事件的目標
<input type="button" id="btn1" value="Button1" />

<input type="button" id="btn2" value="Button2" />

$(document).click(function(e) {
alert($(e.target).val() + " is clicked!");
});

2024年React state management趨勢

輕量化 在過去Redux 是 React 狀態管理的首選函式庫。 Redux 提供了強大的功能和靈活性,但也帶來了一定的學習成本和複雜度。 隨著 React 生態的不斷發展,越來越多的開發者開始追求輕量化的狀態管理函式庫。 Zustand 和 Recoil 等庫以其簡單易用、性...