2008/12/26

[C++] Multiple include

#ifndef A_HPP_
#define A_HPP_
#include "B.hpp"

class A
{
public:
//B* bpt;
A();
virtual ~A();
private:
B* bpt;
};
#endif /*A_HPP_*/
=========================================
#include "A.hpp"
#include "B.hpp"
A::A()
{
}

A::~A()
{
}
========================================
#ifndef B_HPP_
#define B_HPP_
#include "A.hpp"

class B
{
public:
//A* apt;
B();
virtual ~B();
private:
A* apt;
};
#endif /*B_HPP_*/
=======================================
#include "B.hpp"
#include "A.hpp"
B::B()
{
}

B::~B()
{
}


即使寫了,#ifnde,#define,#ifndef也無法解決Multiple Inclusions的問題?錯誤資訊如下:
error: ISO C++ forbids declaration of ‘A’ with no type

error: expected ‘;’ before ‘*’
真是非常的奇怪,不過只要使用pre-declare(forward declar)就可以了(如下)。有誰可以告訴我為什麼嗎?

#ifndef B_HPP_
#define B_HPP_
class A;
#include "A.hpp"
class B
{
public:
B();
virtual ~B();
private:
A* apt;
};
#endif /*B_HPP_*/


相關文章:千萬別把function definition & 變數definition寫入.h裡

2008/12/21

你願意用多少錢買"二十元美鈔"?

cited from Sway:The Irresistible Pull of Irrational Behavior

麥克斯‧貝瑟曼(Max Baserman)教授在哈佛商學院開了一門談判課程,課程一開始他都會舉辦一場「二十美元拍賣會」。正是由於這兩股力量的加乘效果,他的學生每年都很難完整保住自己的荷包。有一句俗話說,要從嬰兒手中拿走糖果並不困難,貝瑟曼教授則發現,要從哈佛MBA手中騙走鈔票,也不是什麼難事。

上課第一天,貝瑟曼教授宣布了一個看似簡單的遊戲。他手中揮舞著一張二十元美鈔,說要拿出來拍賣。

每個人都可以參加這項拍賣會,而且拍賣只有兩項規則。第一項規則是,每次出價只能增加一塊錢美金。第二項規則卻有點蹊蹺──最後的贏家可以贏得這張二十元鈔票,但是,出第二高價的人也得付出自己提的標價,但卻得不到任何東西。也就是說,在這個遊戲中,第二名將是最大的輸家。

拍賣一開始,大家都想輕鬆地用低價標得這張二十元美鈔,因此,很多人開始喊價,拍賣會正式開始進行。另一波出價高潮緊接而來。貝瑟曼說:「每次拍賣會的過程都差不多。一開始都有很多人搶標,競爭激烈。但當標價升高到十二美元至十六美元時,氣氛就開始改變了。」

這個時候,每個參加競標的人都發現,自己不是唯一打著如意算盤、想用低價標到那張二十元美鈔的人。忽然,教室中好像出現一陣集體消化不良。那種感覺就好像刮颱風時,大家突然發現家中水位正不斷升高時一樣。學生間開始出現一陣唏唏唆唆的聲音。貝瑟曼教授說:「除了那兩位喊價最高的學生之外,其他人忽然立刻退出了競標行列。」

在不自覺的情形下,那兩位喊價最高的學生顯然受困了。貝瑟曼說:「一個叫價十六美元,一個十七美元。叫價十六美元的人不是得再喊價到十八塊,就是得吞下十六塊美金的損失。」在此之前,每個學生都是存著想賺意外之財的心態,現在,剩下的這兩個人都不想當花錢卻得不到任何東西的傻瓜。這時,這兩位競標者掉進了和足球教練們相同的陷阱。「承諾心態」將使他們進入「只求不輸」的遊戲中。

拍賣會就像啟動了的火車,完全停不下來。競標價躍過十八美元、十九美元,終於到了二十元。價錢愈喊愈高時,其他學生簡直不敢繼續看下去。「當然」,貝瑟曼回憶道:「當喊價超過二十美元時,全班立刻爆出一陣夾雜著笑聲的驚叫。」

從理性的角度來看,這兩位競價者最應該做的決定當然是接受現有損失,在情況完全失控前停止喊價。但說來容易做來難。這兩位學生被拍賣的動力以及只要一喊停就得認賠的巨大的潛在損失及「承諾心態」硬拖著往前走,而損失則隨著每次喊價而愈滾愈大。這兩股力量正在交相作用:「承諾心態」讓他們選擇繼續喊價;但叫價愈來愈高,「迴避損失」的作用力卻又更被強化了。

競標者繼續喊價:二十一塊、二十二塊、二十三塊…… 五十塊、一百塊……,最後來到破紀錄的二○四塊美金。貝瑟曼進行這項實驗多年以來,從沒輸過一毛錢(所有拍賣賺來的錢都進了慈善機構)。不管參與競標的人是誰,不管是大學生或是企業主管,每個人都難逃「思維力」的影響。

2008/11/05

生命是一種長期而持續的累積過程

文:清華大學電機系彭明輝老師

許多同學應該都還記得聯考前夕的焦慮:
差一分可能要掉好幾個志願,甚至於一生的命運從此改觀!
到了大四,這種焦慮可能更強烈而複雜:

到底要先當兵、就業,還是先考研究所?

我就經常碰到學生充滿焦慮的問我這些問題。可是,這些焦慮實在是莫須有的!

生命是一種長期而持續的累積過程,

絕不會因為單一的事件而毀了一個人的一生,
也不會因為單一的事件而救了一個人的一生。

屬於我們該得的,遲早會得到;屬於我們不該得的,即使僥倖巧取也不可能長久保有。如果我們看清這個事實,許多所謂「人生的重大抉擇」就可以淡然處之,根本無需焦慮。而所謂 “ 人生的困境 ” ,也往往當下就變得無足掛齒。

以聯考為例:一向不被看好好的甲不小心猜對十分,而進了建國中學;一向穩上建中的乙不小心丟了二十分,而到附中。放榜日一家人志得意滿,另一家人愁雲慘霧,好像甲,乙兩人命運從此篤定。

可是,聯考真的意謂著什麼?
建國中學最後錄取的那一百人,真的有把握一定比附中前一百名前景好嗎?僥倖考上的人畢竟只是僥倖考上,一時失閃的人也不會因為單一的事件而前功盡棄。

一個人在聯考前所累積的實力,絕不會因為放榜時的排名而有所增減。

因為,生命是一種長期而持續累積的過程!所以,三年後乙順利的考上台大,而甲卻跑到成大去。這時回首高中聯考放榜的時刻,甲有什麼好得意?而乙又有什麼好傷心?同樣的,今天念清大動機的人當年聯考分數都比今天念成大機械的高,可是誰有把握考研究所時一定比成大機械的人考的好?

仔細比較甲與乙的際遇,再重新想想這句話:

「生命是一種長期而持續的累積過程,不會因為一時的際遇而終止增或減」。
聯考排名只是個表象,有何可喜?可憂?可懼?

我常和大學部同學談生涯規劃,問他們三十歲以後希望再社會上扮演什麼樣的角色。可是,到現在沒有人真的能回答我這個問題,他們能想到的只有下一步到底是當兵還是考研究所。

聯考制度已經把我們對生命的延續感徹底瓦解掉,剩下的只有片段的「際遇」,更可悲的甚至只活在放榜的那個 ( 光榮或悲哀的 ) 時刻!

但是,容許我不厭其煩的再重複一次:
生命的真相是一種長期而持續的累積過程 ( 這是偶發的際遇無法剝奪的 ) ,而不是一時順逆的際遇。

如果我們能看清楚這個事實,生命的過程就真是「功不唐捐」,沒什麼好貪求,也沒什麼好焦慮的了!剩下來,我們所需要做的無非只是想清楚自己要從人生獲得什麼,然後安安穩穩,誠誠懇懇的去累積就是了。

我自己就是一個活生生的例子。從一進大學就決定不再念研究所,所以,大學四年的時間多半在念人文科學的東西。畢業後工作了幾年,才決定要念研究所。碩士畢業後,立下決心:從此不再為文憑而唸書。

誰知道,世事難料,當了五年講師後,我又被時勢所迫,整裝出 國念博士。出國時,一位大學同學笑我:全班最晚念博士的都要回國了,你現在才要出去?兩年後我從劍橋回來,覺得人生際遇無常,莫此為甚:一個從大一就決定再也不鑽營學位的人,竟然連碩士 和博士都拿到了!屬於我們該得的,哪樣曾經少過?而人生中該得與不該得的究竟有多少,我們又何曾知曉?從此我對際遇一事不能不更加淡然。

當講師期間,有些態度較極端的學生會當面表現出他們的不屑;從劍橋回來時,卻被學生當做不得了的事看待。這種表面上的大起大落,其實都是好事者之言,完全看不到事實的真相。從表面上看來,兩年就拿到劍橋博士,這好像很了不起。但是,在這「兩年」之前我已經花整整一年,將研究主題有關的論文全部看完,並找出研究方向;而之前更已花三年時間做控制方面的研究,並且在國際著名的學術期刊中發表論文。

而從碩士畢業到拿博士,期間七年的時間我從不停止過研究與自修。所以,這個博士其實是累積了七年的成果,(或者,只算我花在控制學門的時間,也至少有五年),根本也沒什麼好驚訝的。

常人不從長期而持續的累積過程來看待生命因積蓄而有的成果,老愛在表面上以斷裂而孤立的事件誇大議論,因此每每在平淡無奇的事件上強做悲喜。

可是對我來講,每當講師期間被學生瞧不起,以及劍橋剛回來時被同學誇大本事,都只是表象。事實是:我只在乎每天二十四小時點點滴滴的累積。

拿碩士或博士只是特定時刻裡這些成果累積的外在展示而已,人生命中真實的累積從不曾因這些事件而終止或加添。

常有學生滿懷憂慮的問我:
「老師,我很想先當完兵,工作 一兩 年再考研究所。這樣好嗎?」
「很好,這樣子有機會先用實務來印證學理,你念研究所時會比別人瞭解自己要的是什麼。」
「可是,我怕當完兵又工作後,會失去鬥志,因此考不上研究所。」
「那你就先考研究所好了。」
「可是,假如我先念研究所,我怕自己又會像念大學時一樣茫然,因此念的不甘不願的。」
「那你還是先去工作好了!」
「可是。。。。。。。」

我完全會可以體會到他們的焦慮,可是卻無法壓抑住對於這種話的感慨。其實,說穿了他所需要的就是兩年研究所加兩年工作,以便加深知識的深廣度和獲取實務經驗。

先工作或先升學,表面上大相逕庭,其實骨子裡的差別根本可以忽略。在「朝三暮四」這個成語故事裡,主人原本餵養猴子的橡實是「早上四顆、下午三顆」,後來改為「朝三暮四」,猴子就不高興而堅持改回到「朝四暮三」。其實,先工作或先升學,期間差異就有如「朝三暮四」與「朝四暮三」,原不值得計較。

但是,我們經常看不到這種生命過程中長遠而持續的累積,老愛將一時際遇中的小差別誇大到攸關生死的地步。最諷刺的是:當我們面對兩個可能的方案,而焦慮的不知何所抉擇時,通常表示這兩個方案或者一樣好,或者一樣壞,因而實際上選擇哪個都一樣,唯一的差別只是先後之序而已。

而且,愈是讓我們焦慮得厲害的,其實差別越小,愈不值得焦慮。
反而真正有明顯的好壞差別時,我們輕易的就知道該怎麼做了。

可是我們卻經常看不到長遠的將來,短視的盯著兩案短期內的得失:

想選甲案,就捨不得乙案的好處;想選乙案,又捨不得甲案的好處。

如果看得夠遠,人生常則八、九十,短則五、六十年,先做哪一件事又有什麼關係?甚至當完兵又工作後,再花一整年準備研究所,又有什麼了不起?

當然,有些人還是會憂慮說:「我當完兵又工作後,會不會因為家累或記憶力衰退而比較難考上研究所?」

我只能這樣回答:
「一個人考不上研究所,只有兩個可能:

或者他不夠聰明,或者他的確夠聰明。不夠聰明而考不上,那也沒什麼好抱怨的。

假如你夠聰明,還考不上研究所,那只能說你的決心不夠強。假如你是決心不夠強,就表示你生命中還有其他的可能性,其重要程度並不下於碩士學位,而你捨不得丟下他。既然如此,考不上研究所也無須感到遺憾。不是嗎?」

人生的路這麼多,為什麼要老斤斤計較著一個可能性?
我高中最要好的朋友,一生背運:高中考兩次,高一念兩次,大學又考兩次,甚至連機車駕照都考兩次。畢業後,他告訴自己:我沒有人脈,也沒有學歷,只能靠加倍的誠懇和努力。現在,他自己擁有一家公司,年收入數千萬。

一個人在升學過程中不順利,而在事業上順利,這是常見的事。有才華的人,不會因為被名校拒絕而連帶失去他的才華,只不過要另外找適合他表現的場所而已。

反過來,一個人在升學過程中太順利,也難免因而放不下身段去創業,而只能乖乖領水過活。

福禍如何,誰能全面知曉?

我們又有什麼好得意?又有什麼好憂慮?
人生的得與失,有時候怎麼也說不清楚,有時候卻再簡單不過了:

我們得到平日累積的成果,而失去我們不曾努力累積的!

所以重要的不是和別人比成就,而是努力去做自己想做的。

功不唐捐,最後該得到的不會少你一分,不該得到的也不會多你一分。好像是前年的時候,我在往藝術中心的路上遇到一位高中同學。他在南加大當電機系的副教授,被清華電機聘回來給短期課程。

從高中時代他就很用功,以第一志願上台大電機後,四年都拿書卷獎,相信他在專業上的研究也已卓然有成。回想高中入學時,我們兩個人的智力測驗成績分居全學年第一,第二名。可是從高一我就不曾放棄自己喜歡的文學,音樂,書法,藝術和哲學,而他卻始終不曾分心,因此兩個人在學術上的差距只會愈來愈遠。

反過來說,這十幾二十年我在人文領域所獲得的滿足,恐怕已遠非他所能理解的了。我太太問過我,如果我肯全心專注於一個研究領域,是不是至少會趕上這位同學的成就?

我不這樣想,兩個不同性情的人,註定要走兩條不同的路。不該得的東西,我們註定是得不到的,隨隨便便拿兩個人來比,只看到他所得到的,卻看不到他所失去的 ,這有什麼意義?

從高中時代開始,我就不曾仔細計算外在的得失,只安心的做自己想做的事:
我不喜歡鬼混,願意花精神把自己分內的事做好;我不能放棄對人文精神的關懷,會持續一生去探討。

事實單單純純的只是:我只在乎每天二十四小時生命中真實的累積,而不在乎別人能不能看到我的成果。

有人問我,既然遲早要念博士,當年念完碩士就出國,今天是不是可以更早升教授?我從不這樣想。老是斤斤計較著幾年拿博士,幾年升等,這實在很無聊,完全未脫離學生時代「應屆考取」的稚氣心態!

人生長的很,值得發展的東西又多,何必在乎那三,五年?反過來說,有些學生覺得我「多才多藝」,生活「多采多姿」,好像很值得羨慕。可是,為了兼顧理工和人文的研究,

我平時要比別人多花一倍心力,這卻又是大部分學生看不到,也不想學的。

有次清華電臺訪問我:「老師你如何面對你人生中的困境?」
我當場愣在那裡,怎麼樣都想不出我這一生什麼時候有過困境!
後來仔細回想,才發現:

我不是沒有過困境,而是被常人當作「困境」的境遇,我都當作一時的際遇,不曾在意過而已。

剛服完兵役時,長子已出生卻還找不到工作。我曾焦慮過,卻又覺得遲早會有工作,報酬也不至於低的離譜,就不曾太放在心上。念碩士期間, 家計全靠太太的薪水,省吃儉用,但對我而言又算不上困境。一來,精神上我過的很充實,二來我知道這一切是為了讓自己有機會轉行去教書 ( 做自己想做的事 ) 。三十一歲才要出國,而同學正要回系上任教,我很緊張 ( 不知道劍橋要求的有多嚴 ) ,卻不曾喪氣。因為,我知道自己過去一直很努力,也有很滿意的心得和成果,只不過別人看不到而已。

我沒有過困境,因為我從不在乎外在的得失,也不武斷的和別人比高下,而只在乎自己內在真實的累積。

我沒有過困境,因為我確實了解到:生命是一種長期而持續的累積過程,絕不會因為單一的事件而有劇烈的起伏。

同時我也相信:屬於我們該得的,遲早會得到;屬於我們不該得的,即使一分也不可能加增。假如你可以持有相同的信念,那麼人生於你也會是寬廣而長遠,沒有什麼了不得的「困境」,也沒有什麼好焦慮的了。

若要讚美晴天,請等到黃昏之後

2008/11/02

(C++)virtual與pure virtual

virtual function
如果子class 有override virtual function,就會跳到下面的class做,base class不做事
如果子class 沒有override virtual function,base class就要做事
Ex:
class B{
public:
virtual void f(){
cout<< "BBB";
}
};
class A:public B{
public:
void f(){
cout <<"AAA";
}
};
int main(){
B *b = new A();
b->f(); // 印出AAA
return 0;
}

Ex:
class B{
public:
virtual void f(){
cout<< "BBB";
}
};
class A:public B{
};
int main(){
B *b = new A();
b->f(); // 印出BBB
return 0;
}

如果Base Class的function不是virtual,則子class的function無法覆蓋。如下例:
Ex:
class B{
public:
     void f(){ // non-virtual
        cout<< "BBB";
    }
};
class A:public B{
public:
   
    void f(){ // cannot override a
non-virtual function
       cout <<"AAA";
    }
};
int main(){
    B *b = new A();
    b->f(); // 印出BBB
    return 0;
}
 


Pure virtual function
base class的Pure virtual function不實做。
子class一定要override pure virtual function

Ex:
class B{
public:
virtual void f() = 0;
};
class A:public B{
public:
void f(){
cout <<"AAA";
}
};
int main(){
B *b = new A();
b->f(); // 印出AAA
return 0;
}

Virtual function: Differences between C++ and Java
C++ Java
Pure Virtual Function vitual void func() = 0; abstarct void func();
Impure Virtual Function vitual void func(); void func();
Non-Virtual Function void func(); final void func();
Hiding Inherited Names Yes No
Prohibiting Inheritance No final class

2008/10/27

別再掉進DLL地獄的陷阱裡(DLL Hell)~.NET解決之道

資策會數位教育研究所講師 王芳芳


Introduction

DLL 陷阱是一個惡夢, 是一種相當奇怪的問題。

相信很多讀者都有這樣的經驗,如果你的軟體今天原本運作順暢,當你安裝某個新軟體之後,突然間電腦就無法運作了。這絕對不是你的硬體有問題,也不是應用程 式的問題,而是作業系統設計上的缺失,這樣的問題層出不窮,這通常是因為新的應用程式版本覆蓋掉共享的程式庫(DLL),而且往往修改了一些現存應用程式 所必需的「bug」,這個缺失有了一個名字叫做DLL Hell (DLL地獄)。開發人員與系統管理者(以及使用者)面臨最大的挑戰就是版本更新的問題 ,他們花很多時間在 Windows 登錄檔 (Regedit) 上試著解決其問題而吃盡苦頭 。

.在Microsoft .NET的世界裡,軟體元件再也不需要登錄(Registry)了! NET Framework包含了一些功能,可以實際消除「DLL Hell」的問題,一項稱之為「side-by-side」開發模式的新功能。

DLL & DLL Hell

為什麼要使用 DLL (Dynamic Linking Library) - 動態連結檔 ?

微軟當初為Windows設計動態連結檔主要是擷取它的兩項優點:一是動態連結、一是資源共享。資源共享的例子相當顯而易見,例如之前曾經提過 Windows有三個核心的動態連結檔:Kernel主要是負責系統和應用程式的記憶體、行程和執行緒等等的管理工作;User主要負責使用者介面和訊息 的傳遞;GDI則負責系統的任何圖形繪製、顯示等工作。而這些動態連結檔所提供的任何函數都可以在必要的時候,讓每一個Windows環境底下的執行檔使 用。因為DLL具備節省記憶體的特性,因此自從Windows 3.1版以來,它就逐漸成為Windows程式設計的主流


˙動態連結檔可以資源共享

許多大型軟體廠商的眾多軟體產品可能都會有許多可以共用的模組,如果每一套軟體各自擁有一份這些可以共用的模組,不僅會造成磁碟空間的浪費,還會讓維護這 些模組的工作變的既複雜、又凌亂。最好的方法就是僅保持一份程式碼,然後透過共享的方式讓其他自家的應用程式也可以存取其中共用的模組。共用模組的方法之 一就是將模組製作成動態連結檔,然後透過軟體的安裝程式複製到電腦,那麼只要安裝了其中一套軟體之後,其他自家的產品就可以互相共用這一套動態連結檔。

假設有一函數庫X供三個應用程式A、B、C使用,如果函數庫為目的碼或原始程式碼,則程式編譯之後,函數庫X將會各自成為執行檔A、B、C的一部份,而將來如果應用程式A、B、C同時執行,函數庫X也會各自佔用一份記憶體,顯然這是比較浪費記憶體的方式。

如果函數庫為DLL形式,則編譯之後,函數庫並不會成為執行檔的一部分,而將來如果應用程式A、B、C同時被執行,則系統只會載入一份函數庫讓程式A、程式B、程式C共用,如圖。



Figure: 程式與DLL的共用架構圖
 


˙動態連結檔節省記憶體空間

動態連結檔的資源共享可以節省磁碟空間,而動態載入的連結方式則可以節省記憶體空間。動態連結檔採用動態載入的連結方式,動態載入讓程式檔在需要相關的函
數或資源的時候,才載入放置在動態連結檔裡面的函數或資源,這種方式將可以有效地使用記憶體。不論是節省磁碟空間或記憶體空間,都是希望利用動態連結檔所
提供的共享函數與系統資源的方式,降低整個Windows環境對於硬體設備的需求。


DLL的問題 - DLL Hell


˙動態連結檔到底出了什麼問題?

其實DLL的優點(程式碼共用、節省記憶體),正是其缺點的起源。原本是立意良好的DLL,有一天會變成DLL Hell,恐怕是當初DLL的設計者所始料未及的。

而之所以會出現DLL Hell,也是因為動態連結檔可以與其他程式共用函數、共享資源所引起,可謂「成也共用、敗也共用」。此話怎講呢?為了要讓其他程式共用動態連結檔所提供 的函數或資源,動態連結檔的設計者必須相當謹慎地、縝密地考慮到功能的一致性、回溯相容等細節問題,否則一旦程式所使用動態連結檔沒有提供所預期的功能, 那麼使用者就會為此而掉入地獄了。

但是要完全考慮到一致性或回溯相容,實在是困難重重,就算真的要做到,也會讓利用動態連結檔的軟體廠商付出相當的成本;但,有必要付出這些成本嗎?想想現 今的電腦執行環境,與當初微軟設計動態連結檔的時候已經有相當、相當大的變化。現在的硬體比起當初已經便宜太多、太多了,個人電腦的記憶體都是從64MB 起跳,配備128MB記憶體的電腦更是比比皆是,而硬碟容量更是以GB計算。在如此的硬體環境之下,Windows程式設計師還需要這麼刻苦地考慮共用的 問題嗎?而且動態連結檔的動態載入,其實已經替Windows系統節省了不少系統資源,因此微軟也重新調整動態連結檔的設計理念,而且也針對作業系統進行 改善,希望不要再有任何使用者掉入因為共用動態連結檔而起的地獄深淵。

˙數種DLL Hell 的狀況


讓我們想一想,如果某一副程式或物件類別有90%符合我們的需求,卻有10%不符合,怎麼辦呢?對副程式來說,大概只有修改「原始程式碼」一途。

假設程式A會使用物件X,在程式A安裝到系統時,會同時安裝物件X,假設另一個程式B也會使用到物件X,那麼程式B直接複製到硬碟中即可正常運作,因為物 件X已經存在於系統中,這聽起來很好,因為程式A與程式B可以共用物件X。然而對程式A來說,原本在安裝後,執行得好好的,卻可能在未知的一天變成無法執 行,這就是所謂的DLL Hell。以下為描述DLL Hell的兩種狀態。


狀況 1. 動態連結檔沒有善盡回溯相容的責任

如果程式A使用的是1.0版的物件X,而程式B使用的是 2.0 版的物件X(通常是因為程式B開發的時間較晚,使用較新的版本),結果會怎樣呢?結果在程式B被安裝到系統時,物件X 2.0版也必須安裝到系統中,此時系統中 1.0 版的物件X將會被 2.0 版所取代。

在大部分的情況下,物件X 2.0版相容於1.0版,所以程式A依然可以正常運作,但有時候卻會出現 2.0 版及 1.0 版不相容的情況,此時程式A便無法正常執行了。此種DLL Hell的起因則是的設計者,原因在於動態連結檔沒有善盡回溯相容的原則。試著想想A.exe 需要 X.dll 所提供的功能,但是在新版的 X.dl l裡面,功能竟然被取消了,這時候也極可能發生DLL Hell。

但是誠如之前所討論,有時往往很難保證百分之百的回溯相容,而且目前個人電腦的硬體配備已經不再像以前簡陋,因此微軟也提出了所謂Side-By- Side的動態連結檔,讓程式都能擁有自己專屬的動態連結檔,進而減少共用動態連結檔以避免這種DLL Hell的發生。


狀況 2. 動態連結檔善盡回溯相容的責任, 但動態連結檔本身出現bug

另一種情況,物件X的提供者確實考慮到版本相容的問題,而根據物件的規格來看,新舊版也的確相容,但程式A使用新版的物件X就是有問題,畢竟程式A並沒有與新版的物件X一起運作過,誰知道會發生什麼情況?
 



Client

Server DLL (X.DLL)

Server Codes


程式 A 用 X 1.0

(X 1.0) (原始版本)


Public SetValue(ByVal Value
As

Integer)


If Value < color="#0000ff">Then

Value = 0


End
If


m_Value = Value


End

Property


程式 B 用 X 2.0

(X 2.0) (更新版本)


Public SetValue(ByVal Value
As

Integer)


'Fix the bug


If Value < color="#0000ff">Then

Err.Raise Number:=APP_ERROR, Description:="Negative Value "


End
If


m_Value = Value


End

Property



如上表所發生的不幸的事, 縱使 X 2.0 的開發人員小心翼翼透過 VB6.0 的二進位相容模式控制DLL版本,且所有的內部GUID值與方法和參數都完全相同,由於X 1. 0 之中有一個名為 Value 的屬性名稱, 當此一屬性設為負數時, 該屬性就會變成零, 但卻不會出現錯誤訊息。這個做法是錯誤的, X 2.0版將此臭從解決了- 若將Value屬性設為負數, 則會拋出錯誤。

當程式 B 以 X 2.0 散佈時, 這支程式B 當然也可以正常運作。不過, 如果將 X 2.0 安裝在系統之中, 程式A 會當掉。之前程式將Value 屬性設為 -1 不會有問題, 但現在會出現執行時期的錯誤。同時程式 A的開發人員並未在這設計錯誤檢視的機制。

在許多真實的案例中, 要善盡二進位相容模式控制DLL版是非常困難的, 亙何況即使是二進位相容模式控制DLL版本還是有可能造成DLL Hell。

.NET 如何解決DLL Hell 的問題

自我描述的Assembly(Self-describing Assembly)

Assembly(組合)是簡化部署與版本管理的關鍵。Assembly是部署與版本管理的基本單元,其中包含一群資源(Resource)與型別 (Type),以及它們內含的Metadata,同時也包括此組合在建造時所依賴的其他組合的版本資訊。有了獨立完整的組態資訊,同一組合的不同版本也可 安裝在同一部機器上,搭配共通語言執行環境具備根據各組合的組態資訊,載入正確版本的依賴組合(Dependent Assemblies)的能力,安裝與解除安裝的過程,就如同複製檔案與刪除檔案一樣單純,以往因先後安裝彼此覆蓋而產生的所謂“DLL Hell”的版本失控的現象不復存在。




Figure . Self-Describing Assembly 可包括多個檔案

Metadata(定義)是Assembly能自我描述的關鍵。Metadata是編輯器在產生執行碼時,伴隨產生的定義性資訊,舉凡元件所使用的型別、 屬性、方法、事件甚至輔助與備註等資訊都可包含在內,而且保證與執行碼的一致性,完全取代並且超越了傳統分離式的IDL(Interface Definition Language) 檔案與型別庫(Type Library)所扮演的功能,同時元件服務要求與執行所需的資訊皆動態來自Metadata 。.asseembly directive 作為辨識 assembly 本身 , .assembly extern directives 定義此 assembly 所依賴的其他 Assemblies。



Figure . 可使用 IL Disassembler (Ildasm)呈現 DLL 的 metadata


簡化的部署與版本管理

˙Application-Private Assemblies (Isolated Assembly)
Application-Private Assemblies (or 被隔離的 assembly) 只能被一個應用程式所使用- 它不能被其他的應用程式所共用。隔離 assembly 讓程式開發者有著對應用程式絕對的控制權,這也是 .NET應用程式的預設方式。

開發好的Application-Private Assemblies 要在另一個 .NET 環境進行安裝時,手續只有一個,就是Copy And Paste。只要把編譯好的程式,無論是EXE執行檔、DLL元件、ASP.NET的.aspx網頁或Web Service的.asmx檔,全部都是以複製/貼上的方式部署在和應用程式相同的目錄,這些檔案複製完成後,不需額外註冊或設定。.NET程式執行時, 如果需要額外的元件,首先會自本身執行檔下的同一目錄開始尋找,因此,每套應用程式預設都是使用本身同一目錄下的元件,不同應用程式間不會相互干擾,也消 除了DLL Hell 的困擾。(註: The CLR finds these assemblies through a process called probing. Probing is simply a mapping of the assembly name to the name of the file that contains the manifest.)

˙Shared Assemblies - Side by side execution (並排執行)
然而,應用程式共享 assembly 還是有其必要性, 因為讓每個應用程式都有自己一份 copy (如 System.Windowns.Forms, System.Web or a common Web Forms control )是件很奇怪的事 。

為了解決DLL Hell的問題,.NET增加了一種新的技術,稱為Side by side execution,意思是應用程式可以擁有各自版本的DLL,例如程式 A使用版本1.0的物件、而程式B使用版本2.0的物件,1.0版與2.0版的物件可以同時在系統執行。

透過Side by side execution的技術,應用程式只要安裝成功之後,就不用擔心DLL更新版本,或規格的改變,因為就算DLL改朝了,應該程式也不用換代。以下簡述 Side by side execution的過程圖 及應用步驟:



Figure . Process for implementing strong names

step 1. create a key pair using the Strong Name tool (Sn.exe) .

Sn –k MyKey.snk
嚴格名稱(Strong names)是一種在.NET 架構下可減少 .NET DLL 陷阱的功能

(註: The author of an assembly generates a key pair, signs the file containing the manifest with the private key, and makes the public key available to callers by the Strong Name tool. The key pair is passed to the compiler using the custom Assembly attribute )


Step 2. sign an assembly with a strong name and version number:

In Assemblyinfo.vb,


Step 3. Install Assembly to Global assembly cache (GAC)
gacutil /i:myassembly.dll

(註: See the .NET Framework SDK documentation for a full description of the options supported by gacutil.)



Figure : Global Assembly Cache

Step 4. 應用程式與 Assembly 的 版本繫結 (Version Policy)

.NET 提供有組態設定機制可以控制Assembly 的繫結, 故在程式中可以載入相關 Assembly的升級版本。組態設定機制是由XML設定檔來負責,透過這種安全機制可以控制程式的安全、版本以及遠端的功能。每一個應用程式可以有XML程式設定檔來指定應用程式所要繫結Assembly的不同版本

程式設定檔的檔案名稱為程式名稱加上 .config 副檔名, 如 Myapp.exe.config。

的標記用來指是 .NET 載入更新版的 Assembly 。

例如以下範例設定檔會載入MarineCtrl 版本 5.0.0.1 而非版本 5.0.0.0




Summary

The .NET Framework NET Assembly 自我描述與版本管理功能讓 zero-impact 的部署安裝成為可能,同時也終結了DLL Hell 。
Application-Private Assemblies (or 被隔離的 assembly) 只能被一個應用程式所使用 - 它不會被其他的應用程式所影響。 隔離的 assembly 讓程式開發者對應用程式有著絕對的控制權,開發好的Application-Private Assemblies只要部署在和應用程式同一目錄即可。

透過Side by side execution的技術,應用程式只要安裝成功之後,就不用擔心DLL更新版本,或規格的改變, 它允許 一個 assembly 的多個版本在一個機器上同時被安裝並執行, 而且每一個應用程式都可以要求和不同的 Assembly 版本繫結。

The .NET Framework 紀錄應用程式版本資訊,並在執行應用程式時使用此資訊載入應用程式所需依賴的正確版本的 Assemblies。

2008/10/15

C/C++中的日期和時間 time_t與struct tm轉換

作者:吳文力

摘要:
本文從介紹基礎概念入手,探討了在C/C++中對日期和時間操作所用到的數據結構和函數,並對計時、時間的獲取、時間的計算和顯示格式等方面進行了闡述。本文還通過大量的實例向你展示了time.h頭文件中聲明的各種函數和數據結構的詳細使用方法。

關鍵字:UTC(世界標准時間),Calendar Time(日歷時間),epoch(時間點),clock tick(時鐘計時單元)


1.概念
在 C/C++中,對字符串的操作有很多值得注意的問題,同樣,C/C++對時間的操作也有許多值得大家注意的地方。最近,在技術群中有很多網友也多次問到過 C++語言中對時間的操作、獲取和顯示等等的問題。下面,在這篇文章中,筆者將主要介紹在C/C++中時間和日期的使用方法.

通過學習許多C/C++庫,你可以有很多操作、使用時間的方法。但在這之前你需要了解一些「時間」和「日期」的概念,主要有以下幾個:

Coordinated Universal Time(UTC):協調世界時,又稱為世界標准時間,也就是大家所熟知的格林威治標准時間(Greenwich Mean Time,GMT)。比如,中國內地的時間與UTC的時差為+8,也就是UTC+8。美國是UTC-5。

Calendar Time:日歷時間,是用「從一個標准時間點到此時的時間經過的秒數」來表示的時間。這個標准時間點對不同的編譯器來說會有所不同,但對一個編譯系統來說,這個標准時間點是不變的,該編譯系統中的時間對應的日歷時間都通過該標准時間點來衡量,所以可以說日歷時間是「相對時間」,但是無論你在哪一個時區,在同一時刻對同一個標准時間點來說,日歷時間都是一樣的。

epoch:時間點。時間點在標准C/C++中是一個整數,它用此時的時間和標准時間點相差的秒數(即日歷時間)來表示。

clock tick:時鐘計時單元(而不把它叫做時鐘滴答次數),一個時鐘計時單元的時間長短是由CPU控制的。一個clock tick不是CPU的一個時鐘周期,而是C/C++的一個基本計時單位。

我們可以使用ANSI標准庫中的time.h頭文件。這個頭文件中定義的時間和日期所使用的方法,無論是在結構定義,還是命名,都具有明顯的C語言風格。下面,我將說明在C/C++中怎樣使用日期的時間功能。

2. 計時

C/C++中的計時函數是clock(),而與其相關的數據類型是clock_t。在MSDN中,查得對clock函數定義如下:

clock_t clock( void );

這個函數返回從「開啟這個程序進程」到「程序中調用clock()函數」時之間的CPU時鐘計時單元(clock tick)數,在MSDN中稱之為掛鐘時間(wall-clock)。其中clock_t是用來保存時間的數據類型,在time.h文件中,我們可以找到對它的定義:

#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif

很明顯,clock_t是一個長整形數。在time.h文件中,還定義了一個常量CLOCKS_PER_SEC,它用來表示一秒鐘會有多少個時鐘計時單元,其定義如下:

#define CLOCKS_PER_SEC ((clock_t)1000)

可以看到可以看到每過千分之一秒(1毫秒),調用clock()函數返回的值就加1。下面舉個例子,你可以使用公式clock()/CLOCKS_PER_SEC來計算一個進程自身的運行時間:

void elapsed_time()
{
printf("Elapsed time:%u secs.\n",clock()/CLOCKS_PER_SEC);
}

當然,你也可以用clock函數來計算你的機器運行一個循環或者處理其它事件到底花了多少時間:

#include 「stdio.h」
#include 「stdlib.h」
#include 「time.h」

int main( void )
{
long i = 10000000L;
clock_t start, finish;
double duration;
/* 測量一個事件持續的時間*/
printf( "Time to do %ld empty loops is ", i );
start = clock();
while( i-- ) ;
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "%f seconds\n", duration );
system("pause");
}

在筆者的機器上,運行結果如下:

Time to do 10000000 empty loops is 0.03000 seconds

上面我們看到時鐘計時單元的長度為1毫秒,那麼計時的精度也為1毫秒,那麼我們可不可以通過改變CLOCKS_PER_SEC的定義,通過把它定義的大一些,從而使計時精度更高呢?通過嘗試,你會發現這樣是不行的。在標准C/C++中,最小的計時單位是一毫秒。

3.與日期和時間相關的數據結構

在標准C/C++中,我們可通過tm結構來獲得日期和時間,tm結構在time.h中的定義如下:

#ifndef _TM_DEFINED
struct tm {
int tm_sec; /* 秒 – 取值區間為[0,59] */
int tm_min; /* 分 - 取值區間為[0,59] */
int tm_hour; /* 時 - 取值區間為[0,23] */
int tm_mday; /* 一個月中的日期 - 取值區間為[1,31] */
int tm_mon; /* 月份(從一月開始,0代表一月) - 取值區間為[0,11] */
int tm_year; /* 年份,其值等於實際年份減去1900 */
int tm_wday; /* 星期 – 取值區間為[0,6],其中0代表星期天,1代表星期一,以此類推 */
int tm_yday; /* 從每年的1月1日開始的天數 – 取值區間為[0,365],其中0代表1月1日,1代表1月2日,以此類推 */
int tm_isdst; /* 夏令時標識符,實行夏令時的時候,tm_isdst為正。不實行夏令時的進候,tm_isdst為0;不了解情況時,tm_isdst()為負。*/
};
#define _TM_DEFINED
#endif

ANSI C標准稱使用tm結構的這種時間表示為分解時間(broken-down time)。

而日歷時間(Calendar Time)是通過time_t數據類型來表示的,用time_t表示的時間(日歷時間)是從一個時間點(例如:1970年1月1日0時0分0秒)到此時的秒數。在time.h中,我們也可以看到time_t是一個長整型數:

#ifndef _TIME_T_DEFINED
typedef long time_t; /* 時間值 */
#define _TIME_T_DEFINED /* 避免重復定義 time_t */
#endif

大家可能會產生疑問:既然time_t實際上是長整型,到未來的某一天,從一個時間點(一般是1970年1月1日0時0分0秒)到那時的秒數(即日歷時間)超出了長整形所能表示的數的范圍怎麼辦?對time_t數據類型的值來說,它所表示的時間不能晚於2038年1月18日19時14分07秒。為了能夠表示更久遠的時間,一些編譯器廠商引入了64位甚至更長的整形數來保存日歷時間。比如微軟在Visual C++中采用了__time64_t數據類型來保存日歷時間,並通過_time64()函數來獲得日歷時間(而不是通過使用32位字的time()函數),這樣就可以通過該數據類型保存3001年1月1日0時0分0秒(不包括該時間點)之前的時間。

在time.h頭文件中,我們還可以看到一些函數,它們都是以time_t為參數類型或返回值類型的函數:

double difftime(time_t time1, time_t time0);
time_t mktime(struct tm * timeptr);
time_t time(time_t * timer);
char * asctime(const struct tm * timeptr);
char * ctime(const time_t *timer);

此外,time.h還提供了兩種不同的函數將日歷時間(一個用time_t表示的整數)轉換為我們平時看到的把年月日時分秒分開顯示的時間格式tm:

struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);

通過查閱MSDN,我們可以知道Microsoft C/C++ 7.0中時間點的值(time_t對象的值)是從1899年12月31日0時0分0秒到該時間點所經過的秒數,而其它各種版本的Microsoft C/C++和所有不同版本的Visual C++都是計算的從1970年1月1日0時0分0秒到該時間點所經過的秒數。

4.與日期和時間相關的函數及應用
在本節,我將向大家展示怎樣利用time.h中聲明的函數對時間進行操作。這些操作包括取當前時間、算時間間隔、以不同的形式顯示時間等內容。

4.1 獲得日歷時間

我們可以通過time()函數來獲得日歷時間(Calendar Time),其原型為:

time_t time(time_t * timer);

如果你已經聲明了參數timer,你可以從參數timer返回現在的日歷時間,同時也可以通過返回值返回現在的日歷時間,即從一個時間點(例如:1970年 1月1日0時0分0秒)到現在此時的秒數。如果參數為空(NULL),函數將只通過返回值返回現在的日歷時間,比如下面這個例子用來顯示當前的日歷時間:

#include "time.h"
#include "stdio.h"
int main(void)
{
struct tm *ptr;
time_t lt;
lt =time(NULL);
printf("The Calendar Time now is %d\n",lt);
return 0;
}

運行的結果與當時的時間有關,我當時運行的結果是:

The Calendar Time now is 1122707619

其中1122707619就是我運行程序時的日歷時間。即從1970年1月1日0時0分0秒到此時的秒數。

4.2 獲得日期和時間

這裡說的日期和時間就是我們平時所說的年、月、日、時、分、秒等信息。從第2節我們已經知道這些信息都保存在一個名為tm的結構體中,那麼如何將一個日歷時間保存為一個tm結構的對象呢?

其中可以使用的函數是gmtime()和localtime(),這兩個函數的原型為:

struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);

其中gmtime()函數是將日歷時間轉化為世界標准時間(即格林尼治時間),並返回一個tm結構體來保存這個時間,而localtime()函數是將日歷時間轉化為本地時間。比如現在用gmtime()函數獲得的世界標准時間是2005年7月30日7點18分20秒,那麼我用localtime()函數在中國地區獲得的本地時間會比時間標准時間晚8個小時,即2005年7月30日15點18分20秒。下面是個例子:

#include "time.h"
#include "stdio.h"
int main(void)
{
struct tm *local;
time_t t;
t=time(NULL);
local=localtime(&t);
printf("Local hour is: %d\n",local->tm_hour);
local=gmtime(&t);
printf("UTC hour is: %d\n",local->tm_hour);
return 0;
}

運行結果是:

Local hour is: 15
UTC hour is: 7

4.3 固定的時間格式

我們可以通過asctime()函數和ctime()函數將時間以固定的格式顯示出來,兩者的返回值都是char*型的字符串。返回的時間格式為:

星期幾 月份 日期 時:分:秒 年\n\0
例如:Wed Jan 02 02:03:55 1980\n\0

其中\n是一個換行符,\0是一個空字符,表示字符串結束。下面是兩個函數的原型:

char * asctime(const struct tm * timeptr);
char * ctime(const time_t *timer);

其中asctime()函數是通過tm結構來生成具有固定格式的保存時間信息的字符串,而ctime()是通過日歷時間來生成時間字符串。這樣的話,asctime()函數只是把tm結構對象中的各個域填到時間字符串的相應位置就行了,而ctime()函數需要先參照本地的時間設置,把日歷時間轉化為本地時間,然後再生成格式化後的字符串。在下面,如果lt是一個非空的time_t變量的話,那麼:

printf(ctime(<));

等價於:

struct tm *ptr;
ptr=localtime(<);
printf(asctime(ptr));

那麼,下面這個程序的兩條printf語句輸出的結果就是不同的了(除非你將本地時區設為世界標准時間所在的時區):

#include "time.h"
#include "stdio.h"
int main(void)
{
struct tm *ptr;
time_t lt;
lt =time(NULL);
ptr=gmtime(<);
printf(asctime(ptr));
printf(ctime(<));
return 0;
}

運行結果:

Sat Jul 30 08:43:03 2005
Sat Jul 30 16:43:03 2005

4.4 自定義時間格式

我們可以使用strftime()函數將時間格式化為我們想要的格式。它的原型如下:

size_t strftime(
char *strDest,
size_t maxsize,
const char *format,
const struct tm *timeptr
);

我們可以根據format指向字符串中格式命令把timeptr中保存的時間信息放在strDest指向的字符串中,最多向strDest中存放maxsize個字符。該函數返回向strDest指向的字符串中放置的字符數。

函數strftime()的操作有些類似於sprintf():識別以百分號(%)開始的格式命令集合,格式化輸出結果放在一個字符串中。格式化命令說明串 strDest中各種日期和時間信息的確切表示方法。格式串中的其他字符原樣放進串中。格式命令列在下面,它們是區分大小寫的。

%a 星期幾的簡寫
%A 星期幾的全稱
%b 月分的簡寫
%B 月份的全稱
%c 標准的日期的時間串
%C 年份的後兩位數字
%d 十進制表示的每月的第幾天
%D 月/天/年
%e 在兩字符域中,十進制表示的每月的第幾天
%F 年-月-日
%g 年份的後兩位數字,使用基於周的年
%G 年分,使用基於周的年
%h 簡寫的月份名
%H 24小時制的小時
%I 12小時制的小時
%j 十進制表示的每年的第幾天
%m 十進制表示的月份
%M 十時制表示的分鐘數
%n 新行符
%p 本地的AM或PM的等價顯示
%r 12小時的時間
%R 顯示小時和分鐘:hh:mm
%S 十進制的秒數
%t 水平制表符
%T 顯示時分秒:hh:mm:ss
%u 每周的第幾天,星期一為第一天 (值從0到6,星期一為0)
%U 第年的第幾周,把星期日做為第一天(值從0到53)
%V 每年的第幾周,使用基於周的年
%w 十進制表示的星期幾(值從0到6,星期天為0)
%W 每年的第幾周,把星期一做為第一天(值從0到53)
%x 標准的日期串
%X 標准的時間串
%y 不帶世紀的十進制年份(值從0到99)
%Y 帶世紀部分的十制年份
%z,%Z 時區名稱,如果不能得到時區名稱則返回空字符。
%% 百分號

如果想顯示現在是幾點了,並以12小時制顯示,就象下面這段程序:

#include 「time.h」
#include 「stdio.h」
int main(void)
{
struct tm *ptr;
time_t lt;
char str[80];
lt=time(NULL);
ptr=localtime(<);
strftime(str,100,"It is now %I %p",ptr);
printf(str);
return 0;
}

其運行結果為:
It is now 4PM

而下面的程序則顯示當前的完整日期:

#include
#include

void main( void )
{
struct tm *newtime;
char tmpbuf[128];
time_t lt1;
time( <1 );
newtime=localtime(<1);
strftime( tmpbuf, 128, "Today is %A, day %d of %B in the year %Y.\n", newtime);
printf(tmpbuf);
}

運行結果:

Today is Saturday, day 30 of July in the year 2005.

4.5 計算持續的時間長度

有時候在實際應用中要計算一個事件持續的時間長度,比如計算打字速度。在第1節計時部分中,我已經用clock函數舉了一個例子。Clock()函數可以精確到毫秒級。同時,我們也可以使用difftime()函數,但它只能精確到秒。該函數的定義如下:

double difftime(time_t time1, time_t time0);

雖然該函數返回的以秒計算的時間間隔是double類型的,但這並不說明該時間具有同double一樣的精確度,這是由它的參數覺得的(time_t是以秒為單位計算的)。比如下面一段程序:

#include 「time.h」
#include 「stdio.h」
#include 「stdlib.h」
int main(void)
{
time_t start,end;
start = time(NULL);
system("pause");
end = time(NULL);
printf("The pause used %f seconds.\n",difftime(end,start));//<-
system("pause");
return 0;
}

運行結果為:
請按任意鍵繼續. . .
The pause used 2.000000 seconds.
請按任意鍵繼續. . .

可以想像,暫停的時間並不那麼巧是整整2秒鐘。其實,你將上面程序的帶有「//<-」注釋的一行用下面的一行代碼替換:

printf("The pause used %f seconds.\n",end-start);

其運行結果是一樣的。

4.6 分解時間轉化為日歷時間

這裡說的分解時間就是以年、月、日、時、分、秒等分量保存的時間結構,在C/C++中是tm結構。我們可以使用mktime()函數將用tm結構表示的時間轉化為日歷時間。其函數原型如下:

time_t mktime(struct tm * timeptr);

其返回值就是轉化後的日歷時間。這樣我們就可以先制定一個分解時間,然後對這個時間進行操作了,下面的例子可以計算出1997年7月1日是星期幾:

#include "time.h"
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
struct tm t;
time_t t_of_day;
t.tm_year=1997-1900;
t.tm_mon=6;
t.tm_mday=1;
t.tm_hour=0;
t.tm_min=0;
t.tm_sec=1;
t.tm_isdst=0;
t_of_day=mktime(&t);
printf(ctime(&t_of_day));
return 0;
}

運行結果:

Tue Jul 01 00:00:01 1997

現在注意了,有了mktime()函數,是不是我們可以操作現在之前的任何時間呢?你可以通過這種辦法算出1945年8月15號是星期幾嗎?答案是否定的。因為這個時間在1970年1月1日之前,所以在大多數編譯器中,這樣的程序雖然可以編譯通過,但運行時會異常終止。

5.總結

本文介紹了標准C/C++中的有關日期和時間的概念,並通過各種實例講述了這些函數和數據結構的使用方法。筆者認為,和時間相關的一些概念是相當重要的,理解這些概念是理解各種時間格式的轉換的基礎,更是應用這些函數和數據結構的基礎。

2008/09/30

留學新加坡:學習是一種享受

/徐虹

新加坡崇尚精英主義,其精英教育培養出高素質的人才,使新加坡進入世界發達國家的行列。而隨著出國熱潮的高漲,新加坡必然成為中國學生出國留學的熱點之一。近日,記者對部分在新加坡留學的中國學生進行了採訪,他們的生活、學習以及對未來的打算等,可供擬到新加坡留學的各界人士參考。

陳寬,來自廣東深圳,原就讀于深圳外國語學校,初三畢業後去新加坡留學,現在就讀于新加坡萊佛士書院中四。在新加坡讀書已經有一年零四個月了。留學新加坡充滿了挑戰

在這一段時間當中,我經歷了不少,感覺也成長了很多。我對在新加坡的學習以及生活都十分滿意,充滿了挑戰。

初三畢業的時候,班主任按照中考成績推薦我考新加坡。新加坡學校的條件十分的誘人:學費住宿費全免,同時每年還有2200新幣的零用錢。許多去英國、美國留學的同學,因為負擔著龐大的留學費用,心理壓力無比沉重。相比之下,我感覺自己輕松許多。

東方教育以及西方教育有很大不同。新加坡的教育制度與英國劍橋大學的LEVEL接軌,學位證書得到整個西方社會承認。教育體現人性化,自由度十分高。讓學生自己發揮的空間很大。年終的學習成績不僅參考期末成績,平時的成績更為重要。平常的每一次作業,每一次小測驗,都會記入年終的總成績。

新加坡學校的課外活動團體有著極其嚴格的評分標準,並作為往後升學的重要考核之一。每一個學生都必須至少參加一項課外活動團體,可以是籃球、足球、橄欖球、管樂隊、弦樂隊等等。每周有固定的訓練時間,從校外請來專業的教練進行指導,有全國性的比賽以及表演等。培養一技之長,有時比學習本身更為重要。

盡管學段內學生十分忙碌,但是兩個長假時學校則極少布置作業,讓學生真正意義上的休養生息,放松頭腦,安排自己的時間。生活上,因為獨自在外求學沒有父母的幫忙,經常要自己處理各種各樣的問題,有助于提高生活自理能力和待人處事的能力。有一次,存錢時因為機器出現故障而有1300元新幣被扣,必須自己打電話到銀行進行交涉。

新加坡的生活充滿關愛。我們的監護人藍南順主任以及副校長對我們非常好。我們幾十個來自中國的學生,每個人生日的時候都會收到主任為我們買的蛋糕。逢年過節的時候,藍南順主任會安排我們到新加坡本地人家中過節,讓我們有家的感覺。而副校長也經常和我們一起踢足球,關係十分融洽。新加坡本地同學對我們也十分友善,經常邀請我們到他們家去玩。

我就讀的萊佛士書院以培養領導人為宗旨,如今已經培養了三位總統、兩位總理,在歐美的名牌大學當中也極負盛名。英語是這邊的主要工作語言,也是這邊的教學語言,在這裏學習英語為我們往後走向西方搭上了一座橋梁。同時,作為一個華人佔大多數的國家,這裏體現著濃厚的儒家氛圍以及中華文化底蘊,感覺非常熟悉,也讓我們有更多的時間和空間來適應環境。

如果要選擇來新加坡,就準備好接受挑戰。我們在這裏的成績以及各方面表現都將被新加坡教育部記錄,若結果不盡如人意的話有可能會被送回中國。來到這裏,周圍很多來自中國、馬來西亞、印度尼西亞等國家的獎學金得主,你將會發現自己正生活在一群最優秀的人群當中。宋超倫,17歲,來自中國吉林省吉林市,到新加坡已經一年零四個月,現就讀于萊佛士書院初四年級。生活從來就不單調

我對新加坡的生活相當滿意,我們的監護人藍主任和副校長都很照顧我們,讓我體會到了家的關愛和溫暖。

學校為了幫助我們提高英語水平給我們額外補習英文,數理化方面都還不是太困難,我們基本上都在初中學過了,但是是英語教學。學校特別開設了中華文學課,還從國內請來了極負盛名的老師。

選擇在初中畢業出國留學現在仍不被大家所認可,因為這個階段剛好是世界觀人生觀形成的時期,一個良好健康的社會環境很重要。但是新加坡社會風氣積極健康,而且華人居多不會有種族歧視,所以父母很放心。此外,新加坡東方文化和西方文化相輔相成、水乳交融,一點也不感覺陌生,很快就能融入其中。

至于留學費用,所有的學費、住宿費、夥食費都是免費的。去醫院看病、開藥也同樣免費或是日後報銷,需要住院的話只需要交住院費的20%。除了這些免費政策,我一年還有2200元新幣的生活費。我的一些朋友能夠很合理的用錢,在保證生活質量的同時,還有余額購買往返回國的飛機票。在這邊我們學會了如何合理支配用錢,也理解了掙錢的不易,培養了我們節省的美德。

教育質量環境可以說是一流的。我所在萊佛士書院佔地面積有10公頃,綠茵茵的足球場、蔚藍的遊泳池、籃球場、網球場應有盡有。每個教室都有電腦和電教設備。從空調吹來的爽爽的涼風也給我們提供了良好的學習場所。樹陰下的長凳更是有些學生的鐘愛。我們學校的圖書館是新加坡最古老的圖書館,藏書數量有一萬多本。圖書館配備的電腦同樣可以提供上網查找資料的方便。我們的老師都是從一流大學畢業的。

我覺得任何國家的基礎教育都沒有中國那麼牢固,我也是受益匪淺。但是中國的教育太格式化了,學生都被固定在一個框框裏面,缺乏創新思維和那種敢于嘗試的勇氣。新加坡教育就靈活了很多。以我就讀的萊佛士書院為例,學校實行英才教育,注重培養學生的領袖氣質,學校也開設培養領導才能的課程,讓每一個學生都有機會接受這種訓練。而且注重團隊精神,很多活動或者是課題的研究都是以小組的形式出現,大家在研究的過程中互幫互助,相輔相成。另一點,就是新加坡很注重學生的實踐能力。在課堂上老師就拓展學生的發散思維,啟發創新精神。更重要的是學生在學會理解知識之後,懂得學以致用。

新加坡這邊社會風氣積極健康,是個法制社會,很安全。在來新加坡之前,最好將從小到大所接種的疫苗記錄下來,以免再接種一次。簽證和護照新加坡方面會幫助處理的,只要保存好就可以了。

新加坡是一個東西方文化融合的社會,在這個國家有不同種族的居民,大家不同膚色,不同語言,在一起和平共處。在這個多種族、多文化的社會中,你首先就學會了怎樣尊重別人,如何能友好的和別人一同生活,知道如何尊重別人,也就贏得了別人的尊重。

新加坡的生活是平淡而又充滿快樂,在這邊有可能會遇到很多困難,尤其是父母不在身邊,一切都要自己抉擇,這將是一段不可磨滅的成長經歷,過早的離開父母注定我們會更加成熟。自己一個人在外學會了照顧自己,也多了份戀家的情節。為了能更好地適應英文環境,最好不要把自己局限在中國留學生這個圈子裏,擴大自己的接觸面,有助于英文水平提高,你也會驚喜地發現世界的廣大,有很多東西等待你去發現。劉英,22歲,來自中國成都。目前正在新加坡管理學院念商務學位三年級,今年6月畢業。

新加坡非常適合國際學生學習生活

我對新加坡的學習生活很滿意,新加坡很清潔、安全、美麗。新加坡的教育體係很卓越,非常適合國際學生生活學習。新加坡的留學申請非常方便,新加坡的留學費用相對美國、英國、澳大利亞都便宜。

在中國,學生沒有太多的選擇,在新加坡選擇很多。新加坡的學生很多來自不同的國家,教育背景完全不同。但是在中國,因為人口多,激烈的競爭給學生很多無形的壓力。新加坡是個良好的、適合生活的地方,生活非常舒適。

在新加坡留學,不要僅限于與中國留學生交流,要用一種開放的心態多認識新加坡的社會和文化。勇于嘗試健康的新鮮事物,不要以自我為中心。學習很重要,但是也要花時間和功夫去學習一些國內學不到的東西。不能懶惰,積極勤懇。要有一定的自我約束力,不要放縱于電腦遊戲、煙酒等不良事物。獨自在外求學,需要比較好的生活自理能力。

2008/09/29

程式與香雞排

本文作者:蔡學鏞
清華大學資訊工程碩士。曾任軟體工程師、大學資訊系兼任講師、專欄作家、技術顧問。著有《爪哇夜未眠》,譯有《深入淺出設計模式》等書。

當程式員很可憐,在台灣當程式員尤其可憐。薪資低、工作量大、地位不高、技術又容易被淘汰。難怪有人半開玩笑地告訴我,他以後不寫程式要改行去賣香雞排。

照理說,軟體開發是很專業的領域,越是專業的領域,越是處於金字塔的尖端,應該薪資很不錯才是,但不知怎地,台灣的程式員就是從來未獲重視。我們不要表面上的重視,我們要薪資上的重視。據我所知,大陸程式員的薪資水平,比起我們台灣高出許多(從國民所得、物價、房價來比較),美國程式員的薪資更是高得讓我猛嚥口水。

想想看,如果你在台北市租一間會漏水的小公寓,月租兩萬元(管理費和水電另計)。莫名其妙的多元入學方案實施之後,小孩壓力更大,要補習的東西更多。如果你有兩個小孩,每個月的補習費共要花上五千元。小孩要學費、生活費,又是另一個五千元。(乾脆含淚將小孩送人扶養。)

長得不怎麼好看的老婆就只會天天敷 SKII 面膜,因為她妄想 SKII 獨特的 Pitera 成分可以讓她的皮膚水水嫩嫩的,就和鄭秀文一樣。明明身材不好,卻又特別喜歡買 DKNY 昂貴的流行服裝。

光是這些支出加上你自己的支出,就已經超過五萬元了。你認為軟體公司會花五萬元請一個程式員嗎?在台灣,程式員要有五萬元以上的收入,恐怕要另有兼職才行。

於是你到歐萊禮兼職翻譯書,拼了老命把下班後的時間和假日的時間都拿來翻譯書,結果超過半年才翻譯完一本,還好歐萊禮仁慈不扣你延遲交稿的違約金。但這半年來身體變差了,微薄的稿酬光是拿來扣掉白蘭式雞精和補藥的支出,平均一個月也只多了約一萬元的收入,但總算因此達到收支平衡。

但這倒也不算真正的收支平衡,意外的收入支出也是有的:統一發票中獎收入平均一個月進帳 200 元,但偶而被倒會,加上有某個不長進的親戚時常來伸手要錢,你每個月還得多支出 5,000 元。婚喪喜慶的禮金支出、平常還要繳這個稅和那個稅、這個費和那個費的 ... 每每讓你心疼地暗暗叫苦。

台灣的軟體公司一向不肯好好地花錢雇用優秀的程式員,還奢談什麼知識經濟。在寫程式與賣香雞排之間作抉擇,如果我要留在台灣,我可能會選擇賣香雞排,如果我要出國謀生(美國、新加坡 ...),我會選擇寫程式。畢竟,要寫程式,就要到一個尊重程式員專業能力的地方。寫程式的薪資不高,就沒辦法吸收好的人才,至少我就不打算在台灣寫程式寫太久。興趣當然重要,但付不出帳單光靠興趣撐著,你認為能撐多久?賣香雞排稱不上是知識經濟,但只要不炸得太難吃,至少收入比寫程式好。

所以我覺得,到夜市賣香雞排的提議還真是可以考慮考慮,畢竟在台灣當程式員,一家大小在除夕夜如同賣火材的小女孩一般餓死凍死的機會很高。賣香雞排,雖然辛苦,但看著香雞排老闆們眉開眼笑的,荷包滿滿的,還可以趁著傍晚開市前,開著賓士轎車帶著全家出遊呢。

台北市饒河街夜市的攤販告訴我,攤位租金一個月一萬元出頭,我估算了一下,如果我平均一天擺攤 6 小時,賣了香雞排 300 個,每個淨賺 13 元,一個月淨賺 117,000 元,扣掉攤位租金 15,000,可以收入約十萬新台幣(免稅),實在比程式員普遍的月薪 30,000~40,000(未稅)好太多了。而且香雞排的炸法不會每年推出新版本。

在台灣的軟體公司內部,有許多非科班出身的程式員,他們的薪資低廉,通常又很努力。軟體公司就算聘到了這種便宜又努力的程式員,也不要太高興,因為這樣的程式員,通常都只是把目前的公司當一個學習的過渡階段,等到學得差不多,拍拍屁股就走人了,才沒打算一輩子接受這樣的低薪。但可悲的是,大部分的公司都沒有良好的程式員生涯規劃制度,反正大家互相利用。所以這些程式員很可能在做計畫的過程中,學不到東西又磨得身心俱疲。

所以,何苦來哉!不如我們通通去賣香雞排吧!但是你們只能到通化街夜市和士林夜市賣,不可以到我屬意的饒河街夜市和我搶生意(我打聽過,饒河街的攤位租金是三者中最便宜的)。我的攤位名稱要取做什麼?... 嗯!就叫做「Java 雞排」好了,以紀念我曾有過的 Java 程式員身份。我打算把雞排分成三種大小,最大到最小分別叫做 J2EE、J2SE 以及 J2ME。哪天你到饒河街夜市,發現了一個乾乾瘦瘦、看起來營養不良的少年頭家用著生硬的台語在吆喝著:「來呦!來呦!好呷的香雞排,J2EE 一塊 50,J2SE 一塊 40,J2ME 一塊 30......」請你也來光顧一下吧!... 看在 Java 的份上。


再論香雞排

網路上到處張貼轉寄「程式與香雞排」一文,使得該文章在網路上引起程式員廣大的迴響。當「該文作者」在 BBS 各版和各種網頁討論區都看到自己的文章被人到處張貼討論時,驚駭莫名。更荒謬的是,該文章居然還繞了一圈被人轉寄到「該文作者」的 email 信箱中。該文章引起迴響的程度遠遠超出「該文作者」的預期。

有的人對於「該文作者」寄予無限的同情,畢竟該文章內容寫得太負面了。Oh! No. 你們搞錯同情對象了,事實上該文並非「該文作者」的寫照,畢竟「該文作者」未婚(不用擔心 SKII 和 DKNY 的支出),也還沒未婚生子(不用擔心多元入學方案和補習費),也從不標會(對高風險事物沒興趣),也從不對統一發票的中獎號碼(這點小錢根本不放在眼裡),也沒有不長進的親戚敢上門伸手要錢(言語犀利苛薄,親戚躲他像躲鬼一樣避之唯恐不及),也不是非科班出身的便宜程式員(雖然沒本事取得博士學位,但好歹也是個清華大學的資訊碩士),也在台灣和大陸的 Java 圈子都小有名氣(但不排除有些人孤陋寡聞)。橫看豎看,「該文作者」都不算是一個受到壓榨的程式員。甚至「該文作者」經常逛街瘋狂瞎拼買到手軟,出門懶得擠公車只坐計程車,在路上看到賣口香糖的老人或殘障人士一定會捐錢,...... 這麼努力花錢,但不知怎地錢就是花不完,所以「該文作者」可以說是生活得相當優渥的。而且「該文作者」還得寸進尺,常嚷嚷不想工作,宣稱以後要辭職回家變賣家產,靠父母親一點一滴掙來的財產來過無憂無慮的生活。你一定想問:既然如此,「該文作者」幹嘛寫了一篇胡亂抱怨的文章,無端惹來你掬一把同情之淚?我希望你不要因此怨懟「該文作者」欺騙你的感情,「該文作者」只是利用文學中「示現修辭格」的手法來撰寫該文章,以求得強烈的閱讀效果,這和「十八歲賺一億」一書作者蓄意欺騙的行徑是完全不同的。「該文作者」悲天憫人,對於許多程式員的遭遇感同身受,透過該文章,將他所知道的一切披露出來,代替許許多多台灣的程式員發聲。

夠了!我們不要再談論「該文作者」了!免得讓你因為過度羨慕他而開始哀聲嘆氣,畢竟這麼有福氣又囂張的人實在不多。該文作者「托夢」請我整理這些日子以來讀者的看法,我無法拒絕這樣的請託,因為我和「該文作者」的關係實在太密切了。

有一些有志進入軟體產業的在學學生憂心忡忡,表示看了該文章之後,信心開始動搖,有幻滅的感覺。我認為,幻滅是成長的開始,早點經歷幻滅總是好事,才不會一廂情願地只看到事物好的一面,也因此會多做好一些準備(不管是心理上的準備或技能上的準備),成功的機會就會大幅提高。學生距離就業還有許多年的光景,只要好好把握這些年充實自己,其實以後你們在軟體產業的發展前途仍然是很不錯的。至於程式與香雞排的作者,則是一個「先天下之憂而憂,後天下之樂仍憂」的一個「馬不停蹄地憂傷」的小子,所以你們不要把他那過度負面的看法放在心上。香雞排,你們負責吃就好了,要賣也是我來賣。

也有許多讀者對於該文章感到心有戚戚焉,這類的讀者以程式員居多。我要警告這類的程式員,如果你平常不好好加強自己的分析設計技巧、管理能力、或其他技能,當程式員當了五年後仍然只是最低階的程式員,還得親自寫程式,辛辛苦苦地追著瑣碎的技術跑,那麼你就真得要小心考慮,賣香雞排或許真的比較適合你。

也有人的薪資不止五萬元,質疑該文章太悲觀。一般來說,這種人可能在外商公司、或者已經脫離程式員等級、或者在不太軟的軟體公司(例如 chip design),或者在非軟體公司的 MIS 部門。我認識一個年資約兩年的程式員,在一家不太軟的外商軟體公司當程式員,月薪約 6 萬台幣,但這樣的價碼可是大多數的程式員都無法達到的。薪水這麼高的程式員,不需要轉行賣香雞排。

有些人則沒有受到「該文作者」的恫嚇所打擊,仍堅持要繼續在軟體行業走下去,我很佩服這樣的人,因為你正是軟體產業需要的人。你不把錢看得太重,而且肯努力、有興趣,只要繼續持之以恆,我相信你在未來的報酬自然也不會太差的。但是你千萬要慎選公司,選擇一個有發展前景又願意栽培你的公司,否則你最後還是可能會去賣香雞排的。

還有一些讀者提出許多有建設性的寶貴意見,這些意見包括了:「雞排一塊不只賺 13 元,一天不只賣 300 個,十萬元的估計太保守」、「珍珠奶茶其實更有賺頭,每杯淨賺八成」、「滷味不需要技巧,比較適合程式員轉行」、「當靈修講師不需要大學學歷,輕輕鬆鬆月入七萬元」。但不管怎樣,我還是對賣香雞排情有獨鍾,我兩小時前才剛到饒河街夜市吃了一個香雞排,此刻仍然齒頰留香,回味無窮。賣香雞排的收入也有很大的差異,有些香雞排的攤位門可羅雀,有些香雞排的攤位生意好到老闆累得一邊吊點滴一邊炸香雞排。前陣子我看到電視新聞採訪一位在新竹科學園區附近賣香雞排的女老闆,她說她每個月賺 45 萬元以上。她還告訴記者香雞排好吃的秘訣在於醬料,但任憑記者怎麼追問,她仍不肯透露醬料的作法。急於開店賣香雞排的我對此婆娘小氣之舉很不以為然,我悻悻然地自言自語:「哼!秘訣?你以為我無法得知你的醬料配方?」我決定重金禮聘擅長偷拍的「郭女士」出馬,先接近該香雞排店的女老闆成為她的靈修姊妹淘,取得信任之後,再潛入該女老闆的廚房裝設針孔攝影機。我相信,以郭女士純熟的偷拍手法,醬料的配方會落入我手中。有了她的醬料,加上我獨門研發使用高筋麵粉和數十種珍貴藥材做出來的銷魂蝕骨酥皮,我寫程式的苦日子即將結束,我終將成為香雞排大亨的。想到這裡,我喜孜孜地笑了。

香雞排三部曲:完結篇

我所撰寫的香雞排首部曲(程式與香雞排)在台灣程式員圈子造成一股轟動,幾乎每個程式員都讀過,成了網路上的熱門話題。香雞排話題太過度發酵,是我所不樂見的。每當有程式員感嘆自己的收入太低時,就會丟出一句「不如改行去賣香雞排」以為自嘲,香雞排儼然是軟體產業主管最不願意碰觸的禁忌圖騰。

據我所知,許多程式員讀過該文章之後,紛紛開始自怨自艾,不想在這個圈子繼續待下去。我自感罪孽深重,所以連忙以比較樂觀的態度寫了香雞排第二部曲(再論香雞排),希望達到平衡作用。但是現在,我必須告訴你,香雞排第二部曲太過於樂觀,我必須寫下這篇香雞排第三部曲,也就是香雞排系列的完結篇,告訴你其實也不要太樂觀。為了提高可信度,本文章會提出許多數據,以為佐證。

根據我多方打量,在台灣,大學畢業,具有工作經驗一年的程式員,約 30,000~35,000 新台幣(月薪),我們就姑且取最高值 35,000 新台幣來估算好了。而在中國大陸,大學畢業,具有工作經驗一年的程式員,(月薪)薪資差異頗大,有 2,000 人民幣的,也有 4,000 人民幣的,我取估計值為 3,500 人民幣,約等於 14,000 新台幣(人民幣幣值以新台幣四倍估算)。

你很覺得很更高興嗎?因為你的薪資是大陸程式員的 2.5 倍(35,000 / 14,000 = 2.5)。先別高興,你必須把物價和國民所得也考慮進去才行。

考慮物價因素。台灣電腦雜誌的售價 200 元新台幣,大陸電腦雜誌的售價 10 元人民幣,約 40 元新台幣,是台灣的 1/5。台灣電腦書籍的售價 600 新台幣,大陸書籍的售價 30 人民幣,約 120 新台幣,是台灣的 1/5。也就是說,台灣的資訊出版品售價約為大陸的 5 倍,但台灣的程式員薪資只有大陸的 2.5 倍。也就是說,在台灣的程式員買一本書,在大陸的程式員可以買兩本書。

考慮國民所得因素。台灣國民所得年平均近 15,000 美金,約等於 525,000 新台幣,是台灣程式員月收入的 15 倍。大陸國民所得年平均近 1,000 美金,約等於 35,000 新台幣,是大陸程式員月收入的 2.5 倍。簡單來說,大陸程式員工作 2.5 個月,就能賺到大陸民眾一整年的所得;台灣程式員工作 15 個月,才能賺到台灣民眾一整年的所得。比較起來,大陸程式員賺錢的速度是台灣程式員的 15 / 2.5 倍,也就是 6 倍。

因為大陸的都市生活水平比未開發的地方高出許多,貧富差距、城鄉差距很大,為了減少誤差,我們必須把這些因素所造成的影響也算進去。我不知道大陸的房租、交通費、餐飲費用為何,所以無法比較。但我估計,這會使得前述的「6 倍」數字稍微降低一點,所以我把「6 倍」降為「5 倍」,這樣的估算應該算合理,差距 5 倍耶!如果你的薪水原本是四萬元,五倍就是 20 萬新台幣。想想,在台灣,一個月有了二十萬的進帳,日子豈不快樂似神仙。

台灣程式員的薪資水準比人家差五倍,難道能力也比人家差五倍?我不這麼認為,我反倒認為台灣的程式員普遍能力比大陸程式員好,因為台灣的資訊產業、資訊教育很早就開始了。像我這種寫了近 19 年程式的人也不是很少見,有過十年以上程式經驗的人更是比比皆是。

香雞排三部曲系列文章不是為我自己抱怨,因為我對自己的未來有一套規劃,不打算讓自己陷入「富爸爸,窮爸爸」一書所謂的「mouse race」中。只是,有多少程式員會有這樣的規劃。台灣的程式員就像是在被熱水緩慢地煮熟的青蛙。而我就像是一隻已經跳離開鍋子,開始尋找水塘的青蛙,我寧願在夏天發燙的柏油路上,被川流不息的來車壓成扁扁的「青蛙乾」,也不願意當一隻任人烹煮的青蛙。

我知道我這篇文章又會引起一些人的抗議,特別是資訊產業主管的抗議。如果你是這樣的主管,我勸你先別找我興師問罪,因為根據我的判斷,這篇文章效用只有短暫的。原本不自覺水溫上升的青蛙,在讀過這篇文章之後開始騷動「你說什麼!鍋底正在加熱!」... 一陣子緊張之後又漸漸歸於平靜,或許是因為已經習慣這樣的環境了,或許是因為擔心出了鍋子會找不到水源而乾死,所以青蛙繼續待在鍋內,真正跳出鍋子另覓水塘的青蛙只有極少數。而有趣的是,勸青蛙不要跳出鍋子的那些主管們,本身可能也是一隻待煮熟的青蛙呢!

拿起溫度計,現在就量一下你周圍的水溫有多少度?攝氏 60 度?攝氏 70 度?

2008/09/13

健康的迷思:土雞蛋真的更有營養嗎?

  講究綠色原生態的時代,也流行起了鄉村的“土東西”。“土雞蛋(柴雞蛋)味道好營養豐富”,很多人到鄉村旅遊點,點上一盤炒土雞蛋,方便的話,帶些土雞蛋回家。這種農村的土雞蛋能僅憑所餵養飼料的不同,而比飼料雞蛋營養豐富嗎?中國農業大學食品學院營養與食品安全係副教授范志紅提出,農家土雞蛋也許口感更好,營養卻不比普通蛋豐富,還有可能會帶來一些健康以及衛生問題。

問題一:可能被農藥污染

大家看中土雞蛋的一種重要原因是它們是土生土長的“走地雞”,吃的是田間雜草、糧食顆粒,似乎比飼料養雞的蛋更加綠色環保,范志紅卻有不同看法,她提出:既然在鄉村中,雞被農藥毒死的事情屢見不鮮,那麼雞蛋被農藥污染的危險不能忽視。農家散養的雞經常有機會接觸農藥、化肥、鼠藥、殺蟲劑等化學用品,其危險性甚至可能高於雞場所產的雞蛋。

問題二:蛋殼太臟清洗不易

從衛生角度來說,土雞蛋也有隱患。土雞蛋蛋殼上的一般沾有各種臟東西,如果不經仔細清洗,很容易污染剩蛋容器、水池和手,想想你在烹飪的時候還會用手做其他食物,用到水池、廚具,稍不留意就給食品衛生帶來隱患。還有些人會直接把雞蛋放入冰箱,更加會造成整個冰箱的污染。所以拿過雞蛋應當仔細洗手,磕碰蛋殼的地方也要擦洗乾淨。

蛋黃顏色深的就是土雞蛋嗎?

很多人根據蛋黃顏色更深而判定是否是土雞蛋。其實,蛋黃的顏色與飼料原料有關,和養殖方式無關。蛋黃顏色深淺通常僅表明色素含量的多寡,飼料中增加青菜葉、藻類、玉米等有色原料,或特意喂一些類胡蘿蔔素物質,則蛋黃顏色自然變深。而有些色素如葉黃素、胡蘿蔔素等可在體內轉變成維生素A,因此,在無污染情況下,蛋黃顏色較深的雞蛋營養稍好一些。這種雞蛋不一定就是土雞蛋。

而根據畜牧學方面的研究資料和食品測定數據,土雞蛋和飼料蛋相比,蛋白質和脂肪含量差異不大,維生素AD含量略低,omega-3脂肪酸比例略高,風味較好。可以看出兩者營養差異不是很大,那麼又何必放著好好的雞蛋不吃,千方百計找農家雞蛋呢?況且要補充對人體心血管有益的omega-3脂肪酸,多吃魚肉效果更好。

范志紅最後指出,從營養價值上來看,重要的問題是雞吃什麼,雞的生活狀態是否健康。是否農家養的土雞蛋,並不那麼重要。相比之下,一些經過認證的綠色雞蛋較為令人放心。這些雞蛋不是關在籠子裏,其活動區域更安全,蛋殼往往還經過處理,衛生條件較為令人放心。同時,品牌雞蛋都有生產日期,有利於了解雞蛋的新鮮度。

夏季天氣炎熱,細菌活動猖獗,范志紅建議,無論你購買哪種雞蛋,建議你少買一些,短期內吃完,避免雞蛋回家之後繼續久存,發生散黃甚至變質的現象。

2008/09/08

如何成為一位傑出的工程師

如何成為一位傑出的工程師
How to be a Star Engineer
Robert E. Kelley, Carnegie Mellon University
(Robert E. Kelley, "How to be a star engineer," IEEE Spectrum, pp. 51-58, Oct. 1999.)
翻譯:馬仕毅

在1985年,我被問了一些問題,從那時起,我就開始找尋真正的答案。提出問題的是貝爾實驗室(那是仍然是AT&T的一部分,現在屬於 Lucent Technologies Inc.)。貝爾實驗室由全世界最好的大學中聘用了最優秀,最聰明的畢業生,然而, 最後只有少數的人真正發揮他們的潛力而成為卓越的工程師。大部分的新進人員發展成可以穩定地完成任務的執行者,生產力並沒有特別突出,無法幫助貝爾實驗室 在提昇AT&T的市場競爭力方面,做出顯著的貢獻。

貝爾實驗室想要知道的是:傑出的工程師和普通的工程師到底有什麼不同?傑出與否是由天份來決定?還是可以經由學習得來?可不可以設計一套提昇生產力的計畫來幫助表現平平的員工成為傑出的人才?

不只有公司才會尋求這些問題的答案。由1985年開始,幾乎所有我遇到的工程師都希望能夠增加自己的生產力。他們覺得自己也可以出類拔萃,他們不喜 歡被同事的光芒所掩蓋。因此他們不斷地努力求進步。在現今的職場中,資源越來越少,工作的要求卻越來越多。全球化的競爭,購併風氣,企業裁員使得每位員工 所承擔的責任越來越重大,而可利用的資源卻比以前少。環顧你的四周,和五年前比較,那位不是比以前工作更努力,工時更長?誰不是待完成的工作一堆,好多的 電話和電子郵件還沒回?大家都在暗自擔心,如果不能再提高生產力,下一個被裁員的會不會是自己?誰不希望能夠重新掌握自己的生活-在工作和個人生活中取得 一個更好的平衡點?每個人都聽過:更聰明地工作(work smarter),只是似乎沒人知道那是什麼意思

我和我的同事從那時起就開始研究公司和個人生產力的問題。來自貝爾實驗室,3M,及惠普公司總計超過一千位工程師在這個研究的過程中,同時扮演了研 究夥伴及受試者的角色。為了瞭解傑出工程師的秘密,我們使用了問卷調查,直接觀察,工作日記,焦點團隊(focus groups),以及面試等方法來收集資料。並在適當的時候使用統計分析,內容分析(content analysis),及反覆的模型建立(iterative model building)等方法。

許多其他的公司也都參與了這個過程,包含了以電機工程師為重心的Analog Devices, Fore Systems, Air Touch,以及一些包含其他領域工程師的公司如Shell Oil, Kimberly Clark等。這些公司採用了我們的生產力提昇計畫。有效地將表現普通的員工轉換成傑出的工程師,而在這個過程中,也讓我們對於產生傑出表現的關鍵因素有 了更多的了解。

通往傑出之路

Lai及Henry在進入貝爾實驗室時,兩人的背景近似。都是由頂尖的大學畢業,平均成績3.8(GPA)。都曾經在電腦公司做過暑期工讀,而且都 獲得教授的全力推薦。然而,在剛進公司的前六個月,兩人採取了截然不同的態度來面對公司指派的工作。上午的時間,他們需要上有關電話技術以及貝爾實驗室工 作流程的課。下午的時間則參與一些暖身計畫(break-in projects),這是一些需要完成的次要工作,即使是做得很差也不至於對重要的計畫造成影響。

Henry像在寫畢業論文或是準備考試似的將自己關在辦公室中。他收集了許多的技術文件以深入了解最新的技術進展,只有在上廁所或是參加必要的會議時才會離開辦公室。他記得當時的想法是『最重要的事情是:我是否可以證明給我的同事看,在技術上我真的很行』

Lai每個下午安排的三個小時的時間來完成指派的工作以及增進技術上的技能。一有多出來的時間,她會向其他的同事自我介紹,同時了解一下他們正在進 行的計畫。如果有同事需要幫忙或是時程的壓力很大,她會自告奮勇要幫忙。雖然她對新的工作環境文化不熟,她的同事們還是覺得很窩心。特別是這些本來不是她 的問題。

有一天下午,有一位同事正在和一個困難的程式奮戰,而整個軟體計畫的時程只剩一週了。Lai以前在修一門高等課程時學過一個新的程式工具,她覺得應 該可以應付這個程式,所以她主動提出要幫忙寫這個程式,這樣她的同事就可以專心應付更大的計畫。另一次,有一些複雜的軟體工具需要安裝在每個人的PC上。 依照以前的作法,是由每個人自己在電腦上安裝,有問題自己解決。Lai在以前暑期工讀的時候也曾遇過類似的狀況,她覺得由一個人來安裝這個軟體到所有的電 腦上比較合理。因此她主動建議由她來做。但是這個安裝的動作比想像中要困難,總共需要兩週的時間。比她原先估計的四天要多出很多。她原本可以放棄這個建 議,但是她仍然將這個工作實行完成。雖然她有好幾天必須提早到公司並且加班到很晚,才不會影響到白天的上課及計畫的進度。

六個月之後,Henry和Lai都完成了他們的技術課程以及第一個任務。他們的計畫執行成效都被評估為良好而且具有技術上的競爭力。實際上,Henry的計畫成果在技術上可能要比Lai來的高明一些。

然而在同事之間的認同度方面,Henry顯然比較不足。雖然大家都覺得他還好相處,同事們還是認為他比較像獨行俠。對於技術的部份相當熟練,但是未必能將他的技能和其他的同事分享。他的行事態度還是和在學校時一樣,只在乎個別的表現。

在另一方面,Lai給別人的印象就比較主動積極。她肯主動發掘並解決問題,即使那並不在她的責任範圍內。同事們都覺得她好像進入實驗室不只六個月了。當然,經理們也注意到了Lai具有成為傑出工程師的特質。已經開始考慮要讓她參與更重要的計畫了。

大部分的人(如Henry)都對於傑出工作能力的成因有自己的理論,然而,大多數都錯得很離譜。過去14年來,我們對於傑出工程師的成因,有許多令 人吃驚的發現,也打破了許多很普遍的迷思。我們的第一個發現是:老闆們和同事們眼中的傑出人才往往差異很大。我們首先請經理人列出他們心目中的傑出人選, 然後再建議他們篩選這些人選,請他們想一想如果他們有很重要的計畫要執行,或是重大計畫有什麼緊急狀況,需要特種部隊來解決問題,或是自己要出來創業,需 要聘請一些高手時,誰是最佳人選。當我們將這張表拿給表現傑出的工程師們看時,他們往往對老闆們的選擇嗤之以鼻。『Joe怎麼可能會入選?他已經好幾年沒 做什麼事了。還有,Maria 怎麼沒在上面?每個人有問題卡住了或是需要新點子時都會去找她。』

這個反應的差異讓我們停下來重新思索。我們往後退了一個步驟,重新要求經理人以及工程師中的高手分別列出那些人的績效比其他的同事高出許多。特別是做事方式讓其他人佩服的。我們想要排除那些不擇手段獲取績效的人,往往他們對組織造成的傷害大到可以抵銷他們所有的貢獻。

這個步驟的結果是:兩方所提出來的人選當中,只有大約百分之五十的人是重複的。優秀的工程師和經理人對於誰的表現比較好,大約有一半的機會是看法不一致的。

在我們最早在貝爾實驗室的研究中,我們對受試者做進一步的挑選。只有在經理人及同事們眼中都表現傑出的工程師才會成為我們的研究對象。(在之後研究 3M公司時,我們把客戶的看法也考慮進去)。我們同時也考慮了他們所獲得的獎項,榮譽,及考績獎金的數目等。另外,專利及發表文章的數量也會列入考慮。這 些條件都滿足的傑出工程師就構成我們研究的對象,由其中分析傑出表現的成因。

為了要分出表現平平的表現優異的員工的主要差異,我們請教了高階主管,中階主管,工程師,以及其他研究者的看法。由這些結果中,我們累積了45個主管們及工程師們都覺得會影響傑出表現的主要因素。大致上可以分為四大類:

· 一、認知類的因素:比較高的智商,邏輯推理能力,及創意。

· 二、個性因素:自信,野心,勇氣,以及是否相信可以控制自己的命運。

· 三、社交因素:人際關係,領導能力。

· 四、工作及組織因素:與主管的關係,工作成就感,對於薪資及獎金的態度。

接下來,要找出這45個因素中那些是影響傑出表現的重要因素。我們對數百位表現傑出及表現普通的工程師做了為期兩天的測試。我們同時也做了資料的蒐集及分析,建立詳細的個案歷史資料,和員工及僱用他們的主管面談。同時也請他們提供自傳及個人的檔案資料。

令人困惑的是,經過兩年的研究,我們的資料顯示不論是認知因素,個性因素,社交因素,或是工作及組織因素都無法作為分辨出傑出表現的有效因素。對於 上面列的所有傳統因素,無論是單獨或是合併分析,答案都是一樣:無法藉以分辨出普通工程師和傑出工程師。我們用了十幾種比較資料的方式,將電腦分析應用到 極限,然而,每次的執行結果都讓我們當時覺得:我們的分析方法一定是有什麼嚴重的錯誤。我們找不到任何一個可以分辨一個人是否會有傑出表現的因素。

難道是另有一些關鍵因素我們還沒有發現?難道我們原先以為的主要因素:認知因素,個性因素,社交因素,工作及組織因素完全與傑出表現無關?

我們研究結果的長期效應是打破了一般人對於傑出表現的迷思。而事實上,在我們之後的研究發現:其他的因素也其影響力。只是大部分的工程師在進入職場 時,早已具有足夠的潛力可以表現得卓越非凡,然而最後卻成就普通。成就傑出表現的原因並不在他們擁有什麼,而在於他們如何應用他們所擁有的特質。傑出表現 之謎其實在於如何將他們的天分轉換成生產力:就好像將位能轉換成動能一樣。我們的結論是:傑出的表現是努力得來的,與天份無關。(Stars are made, not born.)

九個工作策略

好了,如果你是一個希望能夠提高生產力,增加自己智慧資產的工程師。你該如何做才能讓別人覺得你表現傑出呢?在我們這個研究之前,這個答案並不存 在。無論是在學校或是在職場中,沒有任何地方在教培養傑出表現的工作策略。大多數的人藉由試誤法來驗證自己的想法。然而,許多計術上極有競爭力的工程師因 為在這個過程中犯了太多錯誤,使得他們的整體表現僅僅比平均稍高一些而已。例如,他們可能沒有採取主動積極的態度,或者是他們在對整個組織重要性不高的方 面主動積極。

我們發現,改變你做事的方法以及和別人共事的方法是有必要的。表現傑出的人事實上做事的方法和其他的人有相當的差異。他們將他們的工作策略融合到每天的表現中,產生一個前後一致的行為準則。任何一位具有足夠聰明和動機的工程師都可以獲得卓越表現的能力。

盡管如此,這種生產力的發揮並不是像大爆炸一樣的釋放出來。也沒有魔法藥丸或是神奇子彈可以讓你瞬間出類拔萃。而是藉由九個互相結合在一起的工作策略為基礎發展起來的。以下依照重要性排列,分別介紹這九種工作策略。

1. 閃亮的軌跡(Blazing trails)

你對於之前提到的Lai和Henry的看法是什麼?你是否覺得Henry被低估了因為他只強調技術上的競爭力並不公平?或者Lai受賞識只因她會閒聊?

一般的員工,如Henry,腦海中的主動積極是:想出一些新的想法可以讓他們的工作做得更好,或是在公司主動幫忙一些額外的事情,例如規劃年度野餐 或是號召同仁去捐血。實際上,Henry覺得他自己很主動,『我收集了最新的技術文件並學習了最新的軟體工具,因而我可以將我的指派工作做得極好。沒有人 叫我做這些。』Henry這樣告訴我。

Lai很清楚而Henry並不了解的一個關鍵是:只有特定的行為才能讓別人覺得你主動積極。主動積極的真正意涵是:

· 主動追求超過自己職權範圍的更大責任(例如Lai主動幫忙安裝新的軟體工具)。同時仍然能夠完成自己的主要任務

· 能夠額外付出心力來幫助其他同事或是團隊,就像Lai主動幫助她的同事應付難纏的程式。

· 當有重要的任務出現在每個人職權中間的灰色地帶時,能夠主動承擔起責任,並且將任務完美達成

對於認定的目標或是計畫,不屈不撓地堅持直到成功地執行完畢。就像Lai在幫忙安裝軟體時以加班的方式完成原先的構想。

在一般人的印象中,唯一值得主動去做的事是發明一個商業上成功的新產品,比如說發明物件導向的Java語言。如果你花了許多心力,卻無法在華爾街日報頭版上刊登一篇讚美重大貢獻的文章,那你主動的努力就白費了。

然而,在我們的研究中,傑出的工程師都堅信:雖然他們非常期望夠主動積極地做出巨大的貢獻,日常中的小貢獻,日復一日地累積起來,也可能造成同樣的 影響力。不只這樣,他們發現通常一個重大的發現是在一連串較小的努力之後,慢慢形成的。如果你自己的工作態度是不注重在小地方採取主動的態度,則你所累積 的貢獻會逐漸乾涸,而重大的突破永遠都沒有機會發生。例如,Lai主動幫助同事處理一個繁瑣的程式,可能可以讓她的同事獲得一個喘息的空間,而這正是在工 作上要產生有意義的突破所需要的條件。

傑出的工程師同時也相信,你可以主動做出貢獻的程度會和你的經驗直接相關。Lai在還是新進人員時,大家並不期望她承擔太大的責任,但是她主動對周 遭的人做出一些小貢獻為她的同事帶來一些意外的驚喜。同時也很快地讓其他人認同她是一位有生產力的工程師。當她越來越有經驗之後,大家才會開始期望她能夠 主動地承擔更高難度,風險更高的任務。

我們對Lai, Henry及其他數百位其他工程師的觀察發現,對於任何一個有競爭力的專業工作者團隊,新進人員必須展現主動積極的精神。這樣的態度不只會讓主管感到滿 意,更重要的是,你的同事和客戶也會因此而欣賞你的表現。同事們期望中的工作夥伴不會將自己侷限在職務說明書中所列舉的任務中。他們希望他們的同事可以像 Lai一樣願意做超過自己職權範圍以外的任務。因為他們知道,如果一個新進的人員的工作份量比自己少,自己就要承擔更多的責任。他們需要能夠延伸自己責任 範圍的工作夥伴,無論是和同事更能搭配,提供客戶更好的服務,或是更能應付市場的迅速改變。

不只是主管和同事,客戶們也會期望他們所接觸的員工具有這些特質。如果一個新進人員沒有辦法滿足這些期望,他們可能會和Henry一樣,被歸類為有能力但是生產力不足的員工,無法對整個團隊做出正面的貢獻。

2. 知道該問誰(Knowing who knows)

一般的員工對於建立人際關係網路的想法僅止於有管道可以得知最新的辦公室八卦,或者是和自己領域中的人及獵人頭公司的主管保持聯絡,以便於日後可以轉換更好的工作。

傑出的工程師除了上述的管道之外,另外維持了一種更重要的人際關係網路。因為他們了解,目前社會資訊過載的程度已經使得很少人具備完成工作所需的所 有資訊。他們可能具備50-80%的知識,但是除非有辦法能夠將剩下的部份補起來,否則他們的工作就無法順利完成。有效的人際聯繫正是他們補足資訊不足的 方法。

善於利用這個聯繫的人很清楚必須事先和各領域的專家建立可靠的雙向聯絡管道。這個聯繫網路中的專家們可以藉由彼此的幫助完成手邊的重要任務。建立這個網路的主要的目的,是希望盡可能地降低本身的知識不足以勝任新工作的機會。

有效的人際網路和一般人的人際關係有兩個最大的不同點:一是有效的人際網路包含了對的人,二是獲得回應的速度快。

他們所認識的專家可以第一時間就提供正確的答案。一般人則比較常得到錯誤的資訊,通常是因為問錯人,或是知道答案的專家並不在他的人際關係網路中。他們可能因而被誤導,或是繼續盲目摸索。

反應迅速的的人際網路可以使得優秀的工程師迅速的獲得自己所缺乏的資訊,而能夠比其他的人更早繼續進行工作。假設他們花了半天的時間來來問到他們所要得答案,其他的人大概要花一兩天的時間,而且通常得到的還是錯誤的資訊。長時間下來,累積的差異相當可觀。

優秀的工程師因為建立了更有效而且更迅速的網路,生產力得以進一步的提昇而能夠超越普通的工程師。即使是具有相同的天份,光靠自己總是有所不足。

Andersen Consulting, 一家國際性的顧問公司,指派公司的一位資訊技術顧問 Claudio 來撰寫一份時限很緊的合約提案。這是一份五十萬美元的合約,內容是提供生物技術公司所使用生物化驗程序的資訊技術支援。

Claudio記得他有一個大學同學現在在生物技術領域中最有名的公司Genentech Inc.上班,因此與她聯絡,而她則介紹了一位專攻生物化驗程序的同事給Claudio。僅僅用了兩通電話,他就獲得了完成他的合約提案所需要的資訊。

發生在Claudio的另一位同事,Newt身上的狀況就不同了。和Claudio一樣,Newt也需要相同的資訊。但是Newt並沒有運用自己的 人際網路,而採用了公司的建議,將他的問題貼在公司內部的電子留言板上。第二天,他發現電腦內有40個回應等著他去處理。這些回應的答案有許多是彼此互相 牴觸的,但是由於他並不認識這些提供回應的人,無法判斷其中回答的品質。他只好一個一個的去了解和確認這40個回應的內容。

因此,當Newt還在為他獲得過多的資訊而傷腦筋時,Claudio已經利用他有效率的人際網路將兩人的差距越拉越大。

針對資訊獲得的問題,目前高級主管們普遍的作法是以改進公司內部電腦網路作為解決方案。主管們花了數百萬美元的經費在新增電腦硬體及軟體上面,相信像Newt這樣的員工可以用email解決他們的困境。

但是成功的人際聯繫通常建立在一對一的直接溝通上,比較不人性的電腦網路廣播往往效果不佳。傑出的工程師會花許多精神在建立,維繫,及運用由一群專家們彼此互通有無所組成的高效率人際關係網路。和其中有沒有使用高科技沒有直接的關係。

3. 主動的自我管理(Proactive self-management)

一般人相信自我管理的意義在於對於時間及計畫的控制。如果他們的工作可以在原訂的時程,預算,及規格之內完成,則他們的自我管理一定沒有問題。

傑出的工程師們知道主動自我管理的真正內涵決不只是時程及計畫管理。這兩項是每個員工都應該做到,而且是公司付錢請他們完成的。傑出的工程師的工作 策略在於主動地創造機會,影響工作上的決策,在工作上表現得極端優異,並且開創自己事業發展的方向。這樣的態度可以使他們加速累積工作經驗和才能,使得他 們在公司中的價值增加。

Elena在一家提供汽車工業先進陶瓷材料的公司從事研發的工作。她向公司提出出差申請,希望能夠去參加一個生產力及品質的研討會。由於這個研討會 的內容和她的工作沒有直接相關,而且出差預算已經快用完,她的上司並不同意。Elena並沒有因為這個決定而打消念頭,因為她相信參加這個研討會會使得她 在公司中更有價值。她用了自己的假期去參加這個研討會,並且自付旅費。

在會中,她發現歐洲正在發展一個新的品質標準ISO 9000。這個標準建立了一些投標要求,目的在確保原料,產品,及生產程序的更高品質,使得歐洲的公司在全球市場中更具競爭力。如果像她公司這類提供原料的公司無法滿足這些要求,將無法參與歐洲的標案。

回來之後,她變得更活躍。她利用自己的時間研究ISO 9000的要求,並且利用午餐會議的時間向她的工作團隊解釋。很快的,她的同事們也開始重視這個議題,並且試著說服他們的上司提早準備歐洲的ISO 9000投標要求對於公司將有很大的幫助。

高階的主管們比較難接受他們的觀點。他們懷疑歐洲會形成制定標準的共識,更別說是強制執行新的標準了。然而,Elena不斷嘗試讓主管們了解,她會 寄一些文章或是她寫的備忘錄給他們,提醒他們第一家符合這個標準的好處。最後,最高主管們看到了一些實質的好處,因此決定採納這個想法。現在,歐洲已經是 他們公司的最大客戶,同時,品質的提昇也對他們的美國市場有幫助。

Elena的自我管理使得公司經營得更成功。即使她的主管並不支持,她仍主動積極地提昇自己的價值。同時,她也看到了提昇公司價值的機會。最 後,Elena的作法強調了各個工作策略是互相結合的。她的自我管理同時包含了主動積極-有意願做超過她的職務範圍,甚至超過她的上司,而達成一個所有人 都受惠的目標。而能完成這些的關鍵在於:她不輕易放棄。

4. 掌握全局(Getting the big picture)

一般人都有目光短淺的問題。他們只由自己的角度看世界,並且將自己侷限在相同的觀點。

傑出工程師反而時常跳脫自己的角度而以許多不同的觀點來看事情。『我的客戶會怎麼想?我的競爭對手的想法是什麼?我的同事呢?我的上司和公司的股東又在想什麼?』由於他們可以用不同的視野來衡量事情的重要性,因此他們能對產品做出改良,或是對問題發展出更完善的解決方案。

傑出工程師的觀點是由累積足夠的經驗而發展出來的判斷模式。Sarah在她獲得電腦科學的碩士學位之後在矽谷找了一個軟體開發的工作。在求學以及工 作的期間,她用一本筆記本來紀錄她對時常發生的問題及解決方式的觀察。每天晚上,她會仔細閱讀她的筆記本,像偵探一樣尋找問題的模式及其中的線索。

依Sarah的實務和經驗,她和其他的新進人員一樣表現不錯。然而,她和其他人最大的不同在於她對於軟體以及電腦邏輯內部的了解。同事們很快就發現 了她的洞察力,當有重大的障礙無法突破時會來尋求她的幫助。而這也提供Sarah一個很好的機會可以接觸到一些她原本工作不會碰到的問題。

在任職滿一年時,Sarah做了一件同事們覺得非常不可思議的事。她請求調到軟體測試部門。測試工作時常被誤認為是次一等而且前途發展有限的。軟體 測試人員的工作主要是檢查其他人的成果,確認軟體的執行和預期中的相同。和其他的研發工作相比,測試工作少了一些開發新產品所帶來的個人成就感。由於他們 總是帶來壞消息,例如軟體的臭蟲或是品質的問題,軟體開發工程師即使知道是必要的,通常也是很不情願,甚至略帶敵意地容忍測試人員的存在。

但是Sarah將測試工作視為一個新的機會,可以從完全不同的角度來了解她自己的工作。她將會廣泛地了解造成軟體錯誤的原因。可以在一兩年之內累積大量的經驗。同時,可以和最重要的客戶合作,一起開發客戶眼中合理的測試程式。

在這個過程中,Sarah可以學到在將來的軟體開發時,如何避免本質上及觀點上所會犯的錯誤。同時,測試工作也使得她有機會了解她同事們的觀點。她由同事們開發軟體的問題及排除的過程中學習到相當紮實的技巧。

兩年後,當Sarah重新回到軟體開發的工作時,她在測試部門的訓練開始展現在工作上。她的同事們很快就認定她是軟體大師。Sarah成為他們公司的軟體專家,帶領著公司在矽谷中力爭上游。

像Sarah這樣的傑出工程師,可以分辨不同觀點中的細微差異。這並不是因為有天份。而是因為他們主動追尋,並且將這個特質轉換成實質的幫助。

5. 正確地追隨(The right kind of followership)

一般的工程師相信,擔任追隨者角色的重點在於嚴守分際,毫不遲疑地接受命令,同時不對主管造成威脅。

然而,傑出的工程師很早就了解到,副手還可以有更正面的貢獻,一個傑出的第二號人物的真義在於專心做出幫助。他們主動而且積極地投入對組織(及主 管)的成功有幫助的事,同時,對於該做什麼及如何做,他們可以做出獨立而決定性的判斷。一個好的追隨者可以和主管充分配合來達成整個組織的目標,即時他和 主管之間的個性及工作文化並不相同。

這點可能會另許多人感到驚訝,因為一般人認為傑出的人應該都是主管或是焦點人物。通常,傑出的副手對主管所做的幫助在於對於可能有困難的地方事先提出警告,做一個心思縝密的共振板,或是質疑主管決定的正確性。

在許多的科技公司中,公司相信客戶真正的需求和知識員工所認為最好的必須做出區別。我常常聽到老闆們和我抱怨當客戶需要的只是一部道奇車,而他的員 工們卻造了一部勞斯萊斯。技術員工往往對於製造出最好的相當執著,他們希望能把最先進的技術都用在產品中,即時這樣會造成時程延誤及增加預算。

但是有時對錯不一定是絕對的,一位貝爾實驗室的優秀工程師在主管質疑他做了額外的功能時據理力爭。他的主管希望能夠在電話交換機中採用簡化的轉接功能來提前完成產品提供給客戶。

她說:『先別管這些額外的功能,這個客戶寧可現在就有一個基本的機器可以用,而不希望因為一個更強的功能多等一個月。』

她的工程師回答:『未必是這樣』。並且和她坐下來討論這個產品對這個客戶及其他客戶的的短期和長期目標。

『沒錯,短期內對這個客戶來說,這樣做可能有好處。』她的屬下說。『但是這樣做也有風險,他們可能會把我們歸類成較低階的產品線。同時,如果我們現 在將這個額外的功能加進去,我們已經在進行中的下個客戶的產品開發會省很多時間。不過,我們還是再和客戶確認一次他們的想法。』

這位優秀的追隨者了解他的主管最關心的問題。同時,他也試著將她的觀點轉移到他們共同的整體目標。在可能的狀況下,傑出的追隨者可以稍微修正他們的方向使得他們的努力和公司的目標吻合。不行的話,他們只好另外找一個更適合的公司。

6. 團隊合作(Teamwork as joint ownership of a project)

一般的員工所了解的團隊合作是在計畫進行中或是解決問題時和他人合作,並且做好自己的部份。

傑出的工程師對團隊合作有更高一層的看法。他們將之視為一連串複雜的技巧,包含了參與設定共有的計畫目標,團隊承諾,工作紀律,時程,及分享團隊成就。同時,這也包含了主動促進團隊的互動–讓每個人都覺得是團體的一分子,處理衝突,並幫助其他成員解決問題。

有一個醫療器材供應商由於醫院對於他們最新型的加護監視器失效十分不滿,因此成立了一個危機處理小組來處理這件事。這個儀器會不定時的發出錯誤緊急的警告,使得病患和醫療人員都很困擾,醫療人員時常匆忙趕來處理緊急的狀況,才發現完全沒有問題。

這個處理小組包含了五個部門的專業人員,包含了生產,研發,及客戶服務的人員。在這個小組的7位成員中,只 Aiden最為優秀,他原本是一個工程師,為了多了解客戶服務相關的事務而調到客服部門。

在小組第一次會議進行到了第 3 個小時的時候,成員們對於該立即採取的行動起了激烈的爭執。Ewing,一位53歲,在公司已經服務25年的生產工程師,希望說服其他人繼續派遣修護人員 到醫院維修。而 Julie,一位研究部門的新進人員,則希望能夠比照嬌生公司處理 Tyleno l事件的先例,全面回收產品。

隨著討論的進行,Ewing 和 Julie 的爭論越來越白熱化,同時也越不文明。Aiden發現他自己以及其他人開始感到沮喪及煩躁。為了不讓這種狀況持續發展至不可收拾,Aiden 將他的感覺提出來,並且建議休會10分鐘,讓大家休息一下來想想有沒有轉圜的方式。

當會議繼續進行的時候,Aiden 請 Julie 來代言 Ewing 的意見,同時請 Ewing 替 Julie 的看法辯護,試著利用這種方法來打破僵局。雖然 Julie 和 Ewing 有點不太情願,這個策略有效地削減了逐漸升高的緊張及憤怒。這時,其他的小組成員開始腦力激盪,提出可能的想法。一位很有經驗但是害羞的設計師 Eloise,坐在角落的位置而且整天都還沒有發言。她用很溫和的聲音提出她的看法:『由於並不是每一家醫院都有相同的抱怨,我們是不是該先找出為什麼這 幾台機器會持續發生問題?或許這些機器本身一開始就有故障,也可能是這些機器安裝的醫院有一些特殊的地方。與其全面回收所有的產品,不如只將有問題的機器 收回來,同時檢查所有的設定資訊來查出到底問題出在那裡,說不定是磁場太高之類
的現象造成的。』

她講完時,並沒有其他的成員回應她的想法。討論繼續進行了幾分鐘之後,Aiden 加入討論並提醒大家:『我不確定是不是每個人都聽到剛剛 Eloise 的建議,我想她的方法應該可以幫我們解決這個事件,現在是不是可以請妳再說一次給大家聽?』

Eloise 再一次地提出她的想法,Aiden 注意到這個建議不但展現了對客戶的問題認真回應,同時也比全面回收成本低。其他的小組成員開始支持 Eloise 的方法來化解僵局,然後開始討論後續的議題。

如果不是 Aiden 出面干涉,Ewing 和 Julie 可能還在爭吵,Eloise 的意見可能永遠不會被注意到,整個小組不知道還要掙扎多久。雖然 Aiden 在小組中的角色是客戶服務部門的代表,他做了超越他職責的努力而增進了團隊的效能。

7. 小領導者的領導風格(Small-l leadership)

一般人很著迷於大領導者的領導風格 (Big-L Leadership): 大願景,大魅力,大成功。對他們而言,領導能力是與生俱來的天份。擁有這種天份的人能透過掌權來炫耀自我,對最重要的事情有決定權,同時對於向下授權之類的事並不感興趣。

傑出的員工則將領導能力視為一種工作策略,運用於自己的專業能力及影響力來說服一群人團結起來,一起完成重要的工作。這項工作包含了許多方面的努 力:幫助團隊創造一個清楚的願景,建立信任並獲得承諾來努力完成任務。爭取足夠的資源以順利達成目標。同時指導整個計畫的進行直到順利執行完畢。

我們都知道有些人非常聰明,卻沒辦法領導最小的計畫。除了智力之外,還要具備其他的能力才能展現小領導者的領導風格(Small-l leadership)。小領導者了解人與人之間微妙的關係,而大領導者則專注在自己的想法,自己的工作風格,與自己的目標。小領導者知道他們必須考慮所 有團隊成員的需求,技能,渴望,及權力。

這種將注意力放在自己以外的領導風格在職場現實上是比較有生產力的。小領導者通常對於他所領導的團體沒有正式的職權。同事們只有在確定團隊中的領導 者對於自己和其他人的利益一樣重視時才願意參與。因此,要將團隊組合起來需要和所有的成員互動,溝通,這對於大領導者而言,是浪費寶貴的領導時間。然而, 一個願意和所有團隊成員同甘共苦的小領導者,往往比最有魅力的大領導者主管更能獲得成員的忠誠及信任。

傑出領導者的最大秘訣,也是和大領導者及表現普通的領導者最大的差異,在於他們不會假設他們對於其他人的一切事情都能完全掌握。大多數的大領導者相信自己是無所不能的,他們知道什麼是對成員及狀況最好的處置。

傑出的小領導者總是會先詢問成員的意見,即使他們覺得他們已經知道結果。Anithia, 一位德商公司在美國的軟體設計師,在開始計畫之前一定會先驗證她對同事們想法的假設是否正確。當她被指派去帶領一個開發網路軟體的計畫時,她在第一次的會 議就先詢問成員們對於工作角色和任務的意見。

『John, 在上次和你一起執行計畫時,你曾提到你希望能有更多的硬體經驗,目前還是這樣嗎?因為這個計畫硬體的部份非常重要。』

Anithia像一個認知心理學家一樣暫停自己的假設,提出一些開放性的問題,讓成員們可以表達他們目前具備的技能以及他們對於計畫的期望及需求。 因此,她可以將任務的分配和成員的能力及興趣做更好的配合。她希望能夠避免將她的同事定型,不要像好萊塢製作人一樣製造演員的刻板印象。

當然,身為員工不可能總是獲得所有想要任務與福利。但是,沒有正式職權的小領導者可以藉由真誠的聆聽及試著滿足部份的需求來贏得認同。同時這個努力 溝通的過程也可以為計畫打下互信的基礎,幫助度過計畫遇到困難時無可避免的壓力。在某一個技術領域展現優越的實力可能可以幫助一個傑出的工程師被指派為團 隊的領導者。但是小領導者知道階層的力量並不能延伸到人際關係這一方面。他們會試著創造出一種氣氛,讓成員們感受到『我們是在同一艘船上』。

Anithia所領導的計畫後來客戶的反應非常好。在年終慶功的晚宴上,北美部門的總裁對Anithia大加讚賞,邀請她一起到台上來表揚這個計畫 及她以前所領導計畫的成功。他說:『如果我們公司有500個像Anithia這樣的人,控制整個北美市場是遲早的事。』然後,他請Anithia講幾句 話。

就像許多演員獲得奧斯卡獎時一樣,Anithia可以很快的講一些感謝上司及成員的話。而她卻不是這樣做。她邀請了所有的團隊成員一起到台上來,請 其中的一位將所有的人介紹給大家,然後她說:『這個計畫是我們共同努力的成果,沒有每一個人的貢獻,不可能有今天的成功,我們對於這個計畫感到很驕傲,非 常高興你們也這樣想。』然後他們一起對大家鞠了一個躬。

8. 精明(Street smarts)

一般人多半太專注在討人喜歡,以為這樣是在職場中快速升遷的方法。他們要不就是對於辦公室內的政治問題太過關心,要不就是故意裝作完全不在乎。

傑出的員工了解任何的組織中都有許多正當而互相競爭的利益。藉由他們對組織運作的理解力,可以幫助他們在這些互相牴觸的競爭中,促成合作,凸顯衝突 的部份,並且讓任務順利完成。這個動作包含了具備處理個人及團隊動態的傑出運作能力,知道何時該避免衝突,何時該正面對決,同時知道如何將可能的敵人轉化 為盟友。

記得Sarah嗎?在第4項工作策略中提到的傑出軟體開發工程師。雖然她的同事都覺得她瘋了,她仍然自願請調到測試部門。這個動作不但讓她對她的工 作有不同的觀點,她同時也知道那些人會和她日後的工作相關,並開始建立良好合作的關係。這種組織上的聯繫不但可以提高她的地位,還可以讓日後工作上的互動 更加順利。

在第3項工作策略中提到的Elena,運用了大量的組織運作機智來影響她的公司,將營運的焦點轉移到ISO 9000及歐洲市場的機會。首先,她利用午餐會議的機會將她在研討會中學到的傳授給她的同事。在她對這個議題更加了解之後,她舉辦了更詳細的訓練課程。同 時,她向她的上司仔細解釋這個特殊標準對公司的好處,並且藉由寄送關於業務及營收潛力的相關文件及備忘錄慢慢遊說管理階層。當然,在和更上層的管理者接觸 之前她一定會先得到她上司的准許。接著她開始訓練她的其他同事如何贏得歐洲客戶的標案。由此可看出,在她試著推銷她的想法的同時,她將這個想法和公司的重
要目標結合在一起。同時也很注重組織運作的禮儀。

9. 呈現(Show and tell)

一般員工認為呈現就是利用炫目的簡報,長篇的備忘錄,或是公開展示自己的成果來吸引管理階層的注意。他們的重心擺在自己的形象以及自己所要傳達的訊息,而不是擺在聽眾。

傑出的工程師則會仔細篩選所要表達的資訊,以最有效,最友善的格式來傳遞訊息並說服特定的聽眾。就最高層次而言,呈現的意義在於對於特定的聽眾選擇適當的訊息,或是對特定的訊息選擇適當的聽眾。

呈現的重要性是無法迴避的。一位專業人員如果無法有效地以簡報的方式傳達自己的想法給其他的人,在現今的職場中要生存是相當艱苦的。對於大多數的知 識工作者而言,這裡討論的重點並不是大型的演說,像比爾蓋茲在超大型的會議中心以最先進的多媒體設備及電腦特效所做的展示。而是針對在公司內部的小型會議 室中,對5至20位聽眾所做的簡報。簡報的聽眾多半是同事,上司,或是客戶。而內容多半是技術性的或是與產品相關的議題。

對傑出的專業人員而言,簡報準備的過程比較複雜。我們的研究觀察到呈現的表達方式會逐漸修正,由單純的傳達資訊轉變為對訊息的塑造。傑出的工程師通常精通將訊息傳達給特定的對象,說服聽眾接受所要表達內容,及事先對可能產生的批評做出準備的能力。

一般人最常見的錯誤會發生在由單純的資訊傳達,提升到試圖運用這個訊息發揮影響力時。在這個過程中,他們聽眾的組成已經大不相同了。然而,他們呈現的風格及的結構卻維持和原來一樣。

一位財星500大企業的勞工關係經理在和公司的工會協商新的合約時,面臨了必須降低醫療照顧成本的問題,他以極佳的呈現方式來解決這個問題。在這個協商的過程中,他所擬定的計畫必須同時被公司的最高主管及工會接受。

他的主要處理方式是將相同的資訊塑造成完全不同的表現方式。首先他針對一群較低階的工會職員進行為期一週溝通,每天簡報一小部份的資訊。他發給他們 清晰而容易閱讀的講義,讓他們可以複製給所有的工會成員。講義的內容淺顯得讓人可以快速理解。這個呈現的主軸在於傳達一個訊息,如果工會同意改變醫療照顧 的計畫。公司承諾將所省下來的資金用來更新老舊的工廠設備,使得工廠更具競爭力。同時降低關場及失業的風險。

而他稍早對公司的執行長及副總裁所做的簡報基本上含有相同的資訊,但是卻用完全不同的方式來包裝。首先,和對工會簡報相比最大的不同是互動的時間少 了很多。因此,大部分的資訊包含在一份詳細的報告中。他以其中有一個很具有說服力的章節來建議接受新的計畫。此外,他有一個小時的時間可以對公司的執行長 及董事長進行簡報來加強他的論點。

他在簡報中強調,如果管理階層執意改變醫療照顧計畫而沒有任何有創意的補償計畫,工會將不會同意而使協商幾乎不可能進行。他提醒公司目前才剛進入一個快速成長期,股東們可能無法忍受員工罷工。

雖然雙方陣營都對他的計畫有一些批評,然而,這位優秀的協商者已經將這個計畫的基礎打得很穩固了。到了最後,管理階層及工會都接受了他的建議案,只做了小部份的更動。

在這個案例中有許多值得學習的呈現技巧。但是其中最重要的,也是一般人和高手最大的不同點在於:了解你的聽眾,並且藉此塑造所要傳達的訊息。

Meara的工作是設計影像傳輸軟體,可以透過電話線路在醫院的急診室之間傳遞X光片,心電圖指數,及即時的電視畫面。她用了一個電視短片作為簡報 的開頭,來對急診室醫師及醫院主管介紹她的團隊所設計的最新軟體。短片以汽車的緊急煞車聲和救護車的警報聲開始,一個小孩被緊急送入急診室,一位醫師開啟 她們公司的儀器並且說他只有幾分鐘的時間可以來挽救一條年輕的生命。

她說:『我們目前的進展可能可以挽救這個孩子,或是你的孩子的生命。在我們計畫進行中,我們不斷的觀看這個短片來提醒自己,盡量將產品做到最好有多重要。現在,請和我們分享我們的成果。』

為了展現新的軟體和之前版本的差異,Meara使用了電子計時器搭配心跳聲做示範。首先,她使用舊版的軟體,在所有的聽眾還在等待螢幕上慢慢傳來的 畫面時,計時器已經跑完了,心跳聲停止了,手術室的警告燈也熄滅了。而當使用新的軟體展示時,畫面傳輸的速度變快,在計時器停止之前已經完成影像的傳輸。

然後Meara向她的聽眾解釋在產品開發的過程中為了縮短傳輸時間所做的努力。包含了那些嘗試是有幫助的,那些則沒有用,以及其中的原因。她將技術上的論點和醫療專業人員挽救性命的過程戲劇化地編織在一起。

Meara藉著讓她的聽眾們感受到自己的孩子被送進急診室的恐懼,吸引聽眾們的注意力到公司的產品。然後戲劇性地展示了新產品的價值。

成為閃亮的明星

我們對於我們的生產力提昇計畫做了長期的成效評估。觀察工程師們在學習了這些工作策略之前和之後生產力的差異。在過去的7年之中,有超過 1000 位美國及歐洲的專業工作者受過這個訓練。這個訓練課程曾經授權給專業的訓練機構,同時也有大學將這套計畫用於課堂上以及職員的成長計畫。

為了提供評估的基準,我們訪問了主管,傑出的工程師,及一般的員工,請他們列出明顯顯示出生產力提昇的衡量標準。在經過許多次的反覆實驗之後,我們確認了滿足這些衡量標準的員工,在生產力上確實有明顯的提昇。

然後我們訪問了 300 位參加者及 300 位沒有參加人員的直接主管,根據這些衡量標準來評分,第一次評分是在參與計畫之前,第二次則是在完成計畫之後 8 個月。

在這個主管評分的分析中,參與計畫的人員在生產力上都有顯著的提昇。參加過這個訓練的工程師不但解決問題的速度變快,工作產出的品質也提昇了,同時不斷地讓他們的客戶感到驚喜。

這個傑出工作策略的計畫並不是用來矯正生產力低落的員工。參與計畫的人員中,有30%是本來表現就已經很優秀了。然而,他們生產力的提昇仍然是相當顯著。

生產力提昇最顯著的是女性及少數民族的工程師。根據他們上司的說法,參與計畫前後的生產力差異平均值可以達到400%。

這個訓練計畫的成功驗證了我們研究的主要發現。要大幅提昇生產力並不需要魔法。當一個工程師表現平平時,通常不是因為他的能力不足。而是因為他從來沒有學過可以提高他生產力的工作策略。一旦他了解了這些策略,他就開始邁向傑出之路。

2008/09/04

Thumbs.db是什麼?

這是由整個資料夾的圖檔做成的縮圖索引,美其名是快取。但是在資料傳遞時,總是會有些困擾。

1.請到控制台/資料夾選項/檢視 第一個不要快取縮圖打勾,然後確定就不會再生出來啦


2.做一個簡單的批次檔 可以一次將整個硬碟裡的Thumbs.db清除掉

用記事本新增一個新檔案,將下列線內文字複製上去(線不要)存成 DelThumbs.bat

底下會刪掉C/D/E/F/G/H/I各磁碟裡所有的Thumbs.db

DelThumbs.bat
------------------------------------------------------------
FOR %%I IN (C: D: E: F: G: H: I:) DO (
%%I
cd\
attrib -s -h -r Thumbs.db /s /d >nul
del Thumbs.db /s
)
------------------------------------------------------------

3.執行 DelThumbs.bat

2008/09/03

秘密:The Secret影片







  一位澳洲電視工作者,有一年,父親突然身故、工作遭遇瓶頸、家庭關係也陷入僵局,就在人生跌落谷底、生活即將崩潰時,偶然間讀到一本百年古書, 發現了一個生命中的重大祕密,而過去知道這個祕密的,竟然都是歷史上的偉大人物:柏拉圖、莎士比亞、牛頓、雨果、貝多芬、林肯、愛默生、愛迪生、愛因斯 坦。她不禁要問:「為什麼不是每個人都知道呢?」

健康的迷思:用植物油炒菜比較健康?

源自 自然醫學博士陳俊旭醫師

  小玉是個新婚的家庭主婦,出嫁前媽媽叮嚀,結婚後要相夫教子,孝順公婆,而且要煮一手好菜,抓住先生的骨。媽媽擔心從小只會唸書的小玉沒進過廚房,不會煮菜,所以婚前送小玉去烹飪班學三個月。結婚半年來,小倆口倒也恩愛,但婆婆卻常向兒子告狀,說媳婦做菜很固執。經過小玉先生仔細追問,才發現小玉的婆婆喜歡用豬油炒菜,小玉卻堅持烹飪班教的,認為豬油不健康,應該改用沙拉油炒菜較好。到底誰的說法才對呢?小玉的先生不禁左右為難起來。

  台灣在民國八十五年時曾經做過一個調查,發現零售市場賣掉的食用油品中,有60%是沙拉油、12%是葵花油,13%是老一輩婆婆媽媽們習慣用的豬油。十年後的今天,沙拉油、葵花油和橄欖油,是現今台灣家庭中最常用的烹飪油,橄欖油尤其炒得很熱,使用率大幅提升。但豬油卻越來越少用了。

  到底該用哪一種油炒菜,是陳醫師演講時最常被問到的問題。小玉與婆婆之間的戰爭,沒有絕對的對與錯,端看小玉所用的植物油是哪一種,炒菜的溫度在幾度,但如果用錯植物油炒菜,還不如用婆婆的豬油。

什麼是油的「冒煙點」?

台灣人最常見的烹煮方式還是煎、煮、炒、炸為主,青菜大多是用大火快炒,而且多數是使用玉米油、葵花油之類來炒菜,甚至炸排骨也是用這類植物油,這真是個嚴重的錯誤。為什麼呢?因為每一種油耐受的溫度不一樣,未精製的葵花油在攝氏一百零七度就開始帽煙變質了,如果拿來炒菜甚至炸排骨,會產生許多毒素。因此,在選用油品之前,必須先了解什麼是「冒煙點」。

每一種油的冒煙點(介於熔點與準點之間)都不盡相同,任何油類只要達到冒煙點以上,就會開始變質,甚至起火燃燒。所以我鼓勵大家不管炒什麼都加一點水來炒,因為水分會將溫度拉低到一百度左右。我這種加點水來炒的炒法稱之為「水炒」。所有的食用油類的冒煙點都在一百度以上,所以炒菜時只要能把溫度控制在一百度,油就不會變質,吃了也不會有害。很多液態植物油,例如菜籽油和葵花油,冒煙點都在一百零七度,通常大火一炒,一下子就會超過冒煙點,開始變質,吃下這種油,對身體反而有害,但若是拿來涼拌東西就會很好。

油的商品名稱非常混淆,例如台灣與大陸很多食用油是菜籽油,或是菜籽、玉米與大豆的混合油,但廠商並不標示清楚,而常用「沙拉油」這個名稱代替。其實,沙拉油是一種通稱,凡以拿來涼拌沙拉的油就可以叫做沙拉油。所以在還弄不清楚油種之前,最好先不要拿來炒菜,橄欖油、花生油、芝麻油的冒煙點約一百六十度,可以炒菜,但還是加一點水比較好。椰子油的冒煙點更高,在二百三十二度,拿來炒菜最適合,但是記得要買未精製的椰子油。所以,買哪一種油炒菜是一門學問,我特別整理了一份各種未精製油脂的冒煙點,提供給大家購買與烹飪時參考。

各 種 油 脂 的 冒 煙 點

葵花油 Sunflower oil
107℃ (225℉)

紅花油 Safflower oil
107℃ (225℉)


亞麻仁油 Flax seed oil
107℃ (225℉)

菜籽油 Canola oil
107℃ (225℉)

大豆油 Soybean oil
160℃ (320℉)

玉米油 Corn oil
160℃ (320℉)

冷壓橄欖油 Olive oil
160℃ (320℉)

花生油 Peanut oil
160℃ (320℉)

胡桃油 Walnut oil
160℃ (320℉)

芝麻油 Sesame oil
177℃ (350℉)

奶油 Butter
177℃ (350℉)

酥油 Vegetable shortening
182℃ (360℉)

豬油 Lard
182℃ (360℉)

馬卡達姆油 Macadamia oil
199℃ (390℉)

棉花籽油 Cottonseed oil
216℃ (420℉)

葡萄籽油 Grapeseed oil
216℃ (420℉)

杏仁油 Almond oil
216℃ (420℉)

榛子油 Hazelnut oil
221℃ (430℉)

椰子油 Coconut oil
232℃ (450℉)

橄欖渣油 Pomace
238℃ (460℉)

茶油 Tea oil
252℃ (485℉)

米糠油 Rice bran oil
254℃ (490℉)

酪梨油 Avocado oil
271℃ (520℉)

註:涼拌(<49℃/120℉),水炒(100℃/212℉),中火炒(163℃/325℉),煎炸(190℃/375℉)

油脂的四種烹飪方式

  國外把油脂的烹飪方式分為:Cold Preparation(Condiments & Salad Dressings) , Low Heat(Sauces & Baking) , Medium Heat(Sauteing), High Heat(Browning & Frying),我們可以把它們對應在涼拌、水炒、中火炒與煎炸四種烹煮方式。

  適合涼拌(攝氏49度以下)的油:除了常溫下固體的奶油、豬油、椰子油、酪梨油之外,幾乎任何食用油都適合。

  只適合水炒(攝氏100度、華氏212度)、不可用中火炒的油:包括葵花油、紅花油、菜籽油。亞麻仁油雖然也算,但因為營養價值太好了,建議生吃才不容易破壞它。

  只適合中火炒(攝氏163度、華氏325度)、不適合煎炸的油:包括大豆油、玉米油、冷壓初榨欖油、花生油、胡桃油、芝麻油、奶油、豬油、馬卡達姆油。酥油是糕餅業者最常使用的油,因為是人造的反式脂肪酸,問題極為嚴重,我堅決反對使用。另外,棉花籽油通常拿來做餅乾,由於對身體有毒性,會殺精蟲,我也不建議食用。

  可以用大火炒或煎炸(攝氏190度、華氏375度)的油類:包括杏仁油、榛子油、椰子油、茶油、酪梨油。椰子油和棕櫚油的耐熱點都在兩百多度以上,煎、炸都沒問題,但我發現國內這兩種油都是用酸價高的原油再精製而成,不符合我的「好油」標準。如果讀者可以找到未精製而香味濃厚的椰子油,我會建議把它當作煎炸油的首選。葡萄籽我聽說過去採收時會噴保鮮劑,容易殘留在油品中,這問題現在是否解決了我並不清楚,所以暫時無法提供參考意見。

買對的油、用對的方式烹飪

  油的學問真的很大。除了選對油品之外,是否經過精製,也是決定好油與否的標準。台灣的油品有許多障眼法,例如只加了一點橄欖油,就號稱是橄欖x酚油,其實是菜籽油。而大部分廠商為了迎合台灣人喜歡大火炒菜的習慣,都把優良的進口橄欖油或其他食用油在台精製。這麼做其實非常可惜,因為精製過的油,就不能算南我們說的「好油」了。精製是現代油品的三大問題之一。

  台灣人買到的植物油一般都是精製過的。拿精製油炒菜,又多了一道氧化的過程,等於錯上加錯,對身體更加不好。最正確的做法、能確保身體健康的烹調方式是,買未精製的橄欖油、麻油來做中溫烹煮之用,若要炒菜或煎魚,如果買不到好的椰子油或棕櫚油的話,寧可選用豬油、奶油或茶油。

  因此所謂的好油,就是當你買到也買對了的時候,還要用對的方式去烹調,才能保持它原來好油的成分。所以用沙拉油炒菜實在很冒險,炒菜一定要清楚所用油的冒煙點在幾度,將炸菜時的溫度控制在冒煙點以下,那就是安全的。現代人慢性病、發炎、過敏、婦科疾病……毛病一籮匡,都和吃錯油很有關係。



陳博士 聊天室

最簡單的用油方法

 最簡單的用油方法,其實就是最好的方法。簡單來說,不要買精製油,買一瓶未精製的冷壓初榨橄欖油。青菜盡量用燙的,燙好再拌橄欖油加點芝麻和調味料,就會很好吃。若真要炒菜,加點水降溫,用橄欖油還可以應付。盡量還是不要吃油炸物,非不得已時,可以考慮用椰子油或豬油,用老台灣人的老方法。豬油最好用無污染的。另外,除了食用油,我建議補充富含Ω3的亞麻仁油、深海魚油、海豹油。魚油記得要選購衛生署檢驗合格、無重金屬污染的。

健康的迷思:別碰豬油和牛油?

源自 自然醫學博士陳俊旭醫師


  小琳是用功的高三生,與其他同學每天猛K書、考大學不同的是,她每天花好幾個小時看英文報、看美國ABC電視新聞,準備暑假後到美國唸大學。有一天,她在報紙上讀到“French Paradox”(法國矛盾)這個詞,百思不解,上網查詢之後,才發現一項令她顛覆傳統思考的事實。

  「法國矛盾」指的是法國人比美國人多吃兩三倍的奶油、豬油、牛油這些飽和脂肪酸,但罹患心臟病的機率卻只有美國人的三分之一。吃傳統油膩膩食物的法國女性,罹患心臟病的機率竟是西方國家中最低的。這到底是為什麼呢?至今美國科學界還是無法完全解釋,因此稱為「法國矛盾」。



「法國矛盾」帶來的省思

  五十年來,美國人把造成心臟病、高血壓、腦中風的元兇指向奶油、豬油、牛油這些動物性油脂,因此才有人造奶油的發明正植物油精煉工業的興起。反觀法國人,至今吃的大豆油等精煉植物油比美國人仍然少很多,所以「植物油比動物油健康」這個理論,遇到法國人就講不通了。

  不只法國人,南洋各國的人們,每天常吃的都是椰子油、棕櫚油,這些油也和豬油、牛油一樣,是美國人避之唯恐不及的「飽和脂肪」。幾個世紀以來的海上爭奪霸業,船上載著的食用油,就是一桶一桶的豬油或牛油。還有台灣的阿公阿媽,吃了一輩子的豬油,也沒有聽說有什麼問題,這,到底是怎麼回事呢?

植物油與動物油優劣互見

  其實,現代人海中「少吃豬油、牛油比較健康」這個觀念,頗有爭議性。道先,我們必須認清的一點是,油脂對人體是非常重要的。無污染的豬油、牛油,並不比大賣場裡熱銷的植物油差。

  橄欖、芝麻、花生、茶籽這些含油量高的種子,是用傳統的冷壓方法,將油從種子裡壓榨出來。這些壓榨出來、未經精製處理的油,都是陳醫師心目中的好油,也是世界各國傳統的製油方式。但是你知道大豆、玉米、菜籽是怎麼做成油的?這些含油量低的種子,必須先曬乾,再用化學溶劑(通常是己烷或汽油)浸泡,將油脂萃取出來。由於化學溶劑內的己烷、苯、甲苯具有毒性,殘留量必須控制在幾十個PPM之內,因此煉油工業的水準與油的品質很有關係。

  凡是經過人類食用幾千年的食物通常不會太差,豬油一直是台灣農業社會的主要食用油,因此,它反而比剛被發明的精煉大豆油、氫化植物油(反式脂肪酸)來的令人放心。

  豬油、牛油這些飽和脂肪裡面,含有花生四烯酸,這是它最被詬病的地方,因為花生四烯酸會促使身體發炎。但如果多吃蔬果,少吃精緻澱粉,就可以抵銷它的壞處。我們的祖先就是這樣吃豬油的。其實,這些油雖然含有花生四烯酸,但是,它們也還有一些有益身體的優質成分。例如豬油、椰子油、棕櫚油中含有月桂酸,它可以抗菌、抗病毒、提升免疫力,這是其他不含月桂酸的液態植物油所水有的優點。

  此外,豬油、牛油在常溫下是固態,穩定性高、可耐久保存、不易變質,較耐高溫烹調,比液態植物油(如葵花油、沙拉油)更適合用來炒菜,更不容易氧化產生自由基。所以,下次如果你有機會吃到豬油拌飯或是豬油拌番薯葉,就不必罪惡感太重了。

健康的迷思:人造奶油比奶油安全?

源自 自然醫學博士陳俊旭醫師


  大明的阿姨八年前全家移民南非,媽媽為了讓大明與妹妹小梅學英文、熟悉外國環境,每牛暑假,總是讓他們到南非找阿姨。阿姨很喜歡這兩個外甥,所以每天都把他們餵得飽飽的。

大明與妹妹小梅剛從南非回來時,各胖了三、 四公斤 ,媽媽趕緊帶兩兄妹去給 陳醫師看診。看診的原因不是因為變胖,而是鼻子過敏的問題越來越嚴重,無時無刻都必須張口呼吸、鼻子已經完全不通了。不但如此,大明的注意力也很不集中,記憶力很差,一個月可以丟掉三把鑰匙,上課也 常被老師點名。一問之下,才發現大明與妹妹都偏好奶製品,尤其是人造奶油。在南非的二個月,大明每天喝二大杯牛奶、幾條小乳酪,還喜歡在烤麵包上塗人造奶油、熱騰騰的馬鈴薯切開、加一塊人造奶油。回到台灣後,大明還常叮嚀媽媽要多買一些人造奶油,因為阿姨說人造奶油是植物油,對身體很好。

  近二、三十年來,有越來越多的台灣人,受到西方飲食影響,以烤麵包加奶油當早餐,而且聽說奶油不好,就改吃人造奶油。長期下來日積月累的結果,造成很多問題,例如高血壓、高血脂、心藏病、中風、各類過敏、自體免疫疾病、免疫力下降、肥胖……等等。



反式脂肪千萬吃不得

  「人造奶油比奶油安全」這個觀念,其實是個天大的錯誤。人造奶油又稱為乳瑪琳,自從一百年前被發明以來,都是以液態的植物油「氫化」而成,所以屬於「氫化植物油」,含有反式脂肪酸。反式脂肪酸在自然界幾乎不存在,人體不會自行分解,比毒蛇猛獸還可怕,所以碰都不能碰,但卻有很多人誤以為它是好東西,大吃特吃。

  氫化植物油在 陳 醫師的壞油排行榜中位居第一名,只要是過敏、自體免疫、心血管疾病的病人,一定要停止吃反式脂肪酸,配合其他療法,身體才有機會恢復正常。這一點絕對要做到、完全沒有妥協餘地。

無法代謝的反式脂肪酸

  既然人造奶油不好,為什麼會被發明出來呢?當然,科學家剛開始並不是這樣想的。早在一百多年前,美國人開始認為奶油、豬油、牛油這些動物性油脂,吃了容易堵塞血管,所以應改吃植物油。偏偏美國人又喜歡吃烤麵包塗奶油或烤馬鈴薯包奶油,食品業者為了迎合廣大消費者的喜好,便把大豆油、玉米油、菜籽油等液態植物油,在實驗室中經過「氫化」過程,使其呈固態狀,然後再加些人工色素和香料,味道就跟天然奶油很接近了。

  業者原先以為,這樣的人造奶油沒有動物性油脂的缺點,卻沒想到,最近的研究結果發現,人造奶油的問題遠比動物性油脂還要嚴重。奶油雖燌有花生四烯酸的問題,但是只要多吃蔬菜水果,適度運動,就可以抵消它的缺點。反觀人造奶油,因為經過氫化過程,油脂已成為人體無法代謝的反式脂肪酸,是體內的定時炸彈,反而比奶油還要糟糕。最近由於反式脂肪酸逐漸被大眾所摒棄,業者已經開始改良乳瑪琳的配方,很有可能使用其他的固態油脂製成人造奶油,可以不含反式脂肪酸。





陳博士 聊天室

反式脂肪酸與過敏

 反式脂肪酸會造成的眾多問題,其中之一就是皮膚過敏。西醫對皮膚過敏沒什麼好辦法,只能擦類固醇或吃類固醇,但是症狀壓下去了,過一陣子又發作,而且比上一次更嚴重。擦過類固醇的皮膚和原來皮膚不一樣,照到陽光或接觸到冷熱水的反應,與健康皮膚大不相同,因此, 陳 醫師相當反對使用類固醇。臨床上, 陳醫師看過太多皮膚過敏的案例。在美國時, 陳 醫師看過好幾個「體無完膚」的小朋友,全身包得密不通風,被小兒科醫師轉診過去 陳醫師那,因為西醫已經拿他們沒辦法了。在 陳 醫師的觀念裡,皮膚過敏其實是皮膚裡面有毒素(或是心理壓抑),而反式脂肪酸就是毒素的一種。

  皮膚裡的毒素首先會讓人發癢,其次會在手肘內窩、膝部膕窩或是在頸部接觸到衣領的地方起疹子。肘窩和膕窩因為容易流汗與細菌滋生,因而刺激皮膚,誘發皮下的毒素發作。頸部接觸到衣領處容易過每的原因是,夏天流汗後、汗滲透到衣服裡面,把未洗淨的、殘留在衣服上面的洗衣粉溶解出來,刺激皮膚,造成皮膚過敏。如果體內毒素累積太多,皮膚甚至會流汗、起疹塊或結疤。 陳 醫師治療皮膚過敏的原則是,體內與體外都要排毒,身心內外清爽,過敏就好了。

  以上是從巨觀來看,如果從細胞的微觀層次來看,吃了壞油的人,他的細胞膜就是用比較多的壞油所構成,所以細胞膜比較不穩定,一遇到過敏原,就容易啟動過每反應,產生紅腫、流汁等現象。總之,不論是皮膚過敏、鼻子過敏、慢性中耳炎、氣喘……那一種過敏,它們在細胞分子層面的機制都是很類似的,而避開毒素或過敏原,都是最基本的方法。

健康的迷思:素食對健康大大有益?

源自 自然醫學博士陳俊旭醫師



  美惠從小乖巧孝順,高三那一年,母親得了乳癌,動手術搭配生機飲食後,治療效果不錯。為了還願,也為了健康,美惠陪母親吃全素。二十二歲那一年,與在佛學研習營認識先生結婚,生下小華。美惠聽說小孩子吃素不錯,因此讓小華從嬰兒期開始也吃全素。公公婆婆卻認為吃素會營養不良,除了常與媳婦討論,希望恢復正常飲食之外,也心疼孫子,偷偷給他吃雞蛋、瘦肉、牛奶。雖然表面上大家還算和氣,但是心理面卻造成美惠不少困擾。

  這是 陳 醫師在飛機上遇到的真實故事。當時小華已經四歲了,長得斯文乖巧,雖然機艙中擁擠無聊,但他不太會吵鬧。美惠這四年來,雖然一直堅持給小華吃全素,但心中也不免擔心,從小吃素是否真的會營養缺乏呢?



  針對美惠的回答, 陳 醫師的回答是:吃素可以吃得很健康,也可以吃得很不健康。



台灣的素食者吃得並不健康

  素食雖然是一個健康的觀念,但是在台灣,素食人口多數卻吃得很不健康。許多統計發現,台灣素食者罹患心血管疾病的比例,比一般人還高。最近,慈濟大林醫院分析三千六百八十九位健檢民眾發現,吃素女性的三酸甘油脂比葷食女性高,好膽固醇也比較低。香港也是如此,二○○六年,香港中文大學醫學院發現,長期吃全素的人,維生素B12缺乏,同半胱氨酸(Homocysteine)升高,血管比一般人更容易硬化。

  很多人吃素是為了健康,沒想到卻反而更不健康,實在很諷刺。其實,如果吃素吃得正確,的確可以降低乳癌、直腸癌、子宮肌瘤、動脈硬化、腦中風、糖尿病、類風濕性關節炎……等等慢性病的罹患率。但是如果吃得不正確,卻會導致動脈硬作、糖尿病、缺鐵型貧血、惡性貧血、憂鬱症、厭食症、代謝症候群、生殖功能衰退……等等問題。

  我們再回到大林醫院的調查來看看,為什麼吃素的女性反而好膽固醇太低、壞膽固醇升高呢?那是因為她們吃了太多氧化油脂與氧化膽固醇的關係。台灣的食者通常吃得很油,不論是素食餐廳或家裡的素菜都炒得太油,而且絕大多數都是用精製植物油或冒煙點很低的植物油,這些油不是本來品質就不好,要不就是大火一炒就氧化了。這還不打緊,節省的家庭主婦通常還有清剩菜的習慣,於是再把一盤盤變質或氧化的油全掃下肚。

  再者,台灣的素食者喜歡吃素雞、素魚這些豆類再製品。業者深怕口感不好或不夠香,常常以油炸、煎炒的方式處理這些素料。加上很多素食者或老年人口味較重,動不動就用植物油油炸食物,例如炸香茹、炸茄子、炸甜不辣……等等。總之,吃了這麼多的氧化油,如果新鮮蔬果又吃不夠,壞膽固醇怎能不升高?至於三酸甘油脂過高的原因,則是因為吃了太多澱粉的關係。

生機飲食比較好嗎?

  國外的素食者就吃得健康多了,他們的蔬菜多以涼拌或生吃為主,是真正的生機飲食。 陳醫師在美國唸書時,有不少同學吃素,他們通常是新鮮蔬菜一袋一袋拿來就吃的。台灣的素食者則習慣吃炒青菜,因為台灣地處亞熱帶,氣候溼熱,微生物較多,所以蔬菜習慣洗過、煮過才吃,吃生菜沙拉的習慣沒有歐美國家普遍。其實,要解決這個問題很簡單,只要將蔬菜洗淨後用滾水川燙十到二十秒,撈出來拌一些冷壓橄欖油即可。陳醫生個人很注意蔬果的生鮮度,不論你現在吃素或吃葷, 陳醫師都建議每餐一定要吃新鮮的蔬菜或水果。生吃蔬菜營養價值高,現在科技發達,可以用蔬果機、臭氧機把細菌處理掉。蔬果最好是吃有機栽培的,才不會吃到農藥與化肥。但是有機蔬菜因為沒有噴灑農藥,常會有細菌的問題,所以要洗乾淨,並燙個十到二十秒把大部分細菌殺死。如此一來,不但不用擔心細菌的問題,而且蔬菜的營養素也都能保留下來。

食物比例要吃得正確

  素食者還有另一個問題,那就是食物比例通常不對,這個現象,不只台灣,全世界各國的素食者都一樣。因為吃素者一旦避開肉類,蛋白質與脂肪的攝取就會比較缺乏。很多初學素食者都會犯這個毛病,而出現血糖不穩、膽固醇過低、甲狀腺低下或血清素缺乏的問題。所公素食者必須特別注意蛋白質與脂肪的補充,三餐都要有,而且比例要對。這個比例必須經過精密檢測與計算,結果會因為每個人體質不同而有明顯差異。有些人會因此很容易吃素,有些人則會吃得很痛苦,這與每個人天生體內代謝澱粉、蛋白質、脂肪的不同傾向有關,也和血型與體質酸鹼性有一點關係。吃對食物比例以後,精神會很好,體力充沛,不容易餓,體重會很標準,也不容易生病。但如果吃錯,身體就會出現問題。

適時補充營養素

  長期吃素的人,建議要定期抽血檢查體內的鐵質與維生素B12含量,這二種都是肉類含量較多、蔬菜含量較少的營養素。鐵質缺乏容易貧血,維生素B12不足會造成惡性貧血與動脈硬化。另外,由於植物性蛋白質不像肉類或蛋的動物性蛋白質那麼完整,建議豆類與殼類應搭配一起食用。

  從中醫的角度來看,大部分的蔬果性味偏於寒涼,肉類則偏溫,所以虛寒體質的人如果吃素,要注意每一餐的食物屬性,多攝取一些性屬溫熱的蔬果、堅果、辛香料,並且要多運動以提高基礎代謝率,才不會越吃體質越寒。

  至於孕婦與嬰幼兒是否適合吃素,我認為,孕婦與嬰幼兒要特別注意營養的問題,因為懷孕期及哺乳期,母親與嬰兒對養分的需求比較特殊,需求量也比較高,如果吃全素,臨床上發現,比較可能有熱量、蛋白質、鈣、鐵、鋅、維生素B12、維生素D攝取不足的情形。 陳 醫師建議不妨補充吃些雞蛋和鴨蛋,可能會好一些。



總之,台灣的素食者如果要吃得健康,必須注意以下問題:

第一, 農藥與化肥殘留。

第二, 素肉的製作是谷有許多人工添加物。

第三, 素食餐廳或家庭烹飪的用油問題。

第四, 優質蛋白質與好油是否足夠。

第五, 維生素B12與鐵質是否缺乏。

第六, 體質與食物的寒熱屬性是否平衡。

健康的迷思:多喝牛奶才能補充營養?

源自 自然醫學博士陳俊旭醫師

  小琪今年五歲,上幼稚園中班,很會畫畫,體能也很好,但就是語言表達比同學差了一些。小琪最喜歡上幼稚園的原因是可以吃點心,尤其園裡最近經費充裕,每天會給小朋友兩杯鮮奶、好幾包餅乾與乳酪條。老師告訴媽媽,小琪最近懶懶的,和以前好像不太一樣,聽力也比較差,常常沒聽到同學或老師在叫她。

  媽媽帶小琪看小兒科醫師後,才發現小琪有嚴重的中耳炎、耳膜有破洞,要趕緊服用抗生素,而且有可能要做引流手術。小琪媽媽一聽到要動手術,不免擔憂心急起來,只怪自已平時太專注於工作,沒有注意到小孩。現在回想起來,難怪最近小琪常會挖耳朵,而且有臭味,媽媽以為是洗澡時水跑進去,原來是耳朵已經化膿。

  媽媽有個高中同學在當護士,建議小琪的媽媽帶去給自然醫學的醫師看看。結果醫師一看,發現是幼稚園的牛奶、餅乾與乳酪惹的禍,要小琪嚴格遵守停吃一切乳製品,並且服用一些天然藥劑。三個星期後,小琪的耳便自然癒合,也不再挖耳朵了。



  上述只是 陳醫師許許多多小病人中的一個。 陳 醫 師和他太太在美逛超市時,常常在賣鮮奶的冰櫃前,看到許多媽一邊推著購物車、一邊選購鮮奶。購物車上有個嬰兒椅,上面坐著臉上長痘痘的小嬰兒。起初 陳醫師會不好意思,後來他 和他 太太都會建議買牛奶的媽媽不要再買牛奶了。

  為什麼大家都鼓勵喝牛奶,而 陳 醫師卻持相反意見呢?因為牛奶是給牛喝的,不是給人喝的。以下是個不應該喝牛奶的理由,大家看了之後,就能明白其中的道理。

一、牛奶中的蛋白質容易使人過敏

  牛奶或乳製品(乳酪、奶油)含有許多蛋白質,容易使人產生過敏(如異位性皮膚炎、鼻子過敏、鼻塞、氣喘、食物過敏、中耳炎、扁桃腺炎、消化不良、腹瀉、腹脹、腹痛、便秘……)與個體免逸疾病(例如多發性硬化、類風溼性關節炎、第一型糖尿病、紅斑性狼瘡……)。根據統計,牛奶是引起慢性食物過敏的排行榜元兇,而慢性食物過敏則是一切過敏的基礎。牛奶所含的蛋白質在人的腸道中,一方面因腐敗而產生毒素,另一方面因過敏產生免疫複合體,引起腸漏症,使更多腸道中未消化完全的蛋白質、過敏原、毒素等滲到血管中,形成更多嚴重問題。

二、90%的成人有乳糖不耐症,缺乏分解牛奶的酵素

  牛奶中的乳糖與酪蛋白,嬰兒體內有特定的酵素乳糖酶(Lactase)與凝乳酶(Rennin)來分解它,但等到三歲乳牙長齊之後,這種酵素就會消失,終其一生不再分泌,因此三歲以後喝牛奶的話,容易引起消化不良。

三、牛奶的蛋白質比人奶的大且緻密,不易消化

  酪蛋白(Casein)佔牛奶的82%,在人胃中極難消化,是造成嬰幼兒消化不良腹瀉的主因。牛有四個胃,透過不斷的反芻,才能把酪蛋白消化,但人只有一個胃,很不容易消化酪蛋白。

四、牛奶中的蛋白質比例與人不同

  人奶中的酪蛋白佔40%,牛奶的酪蛋白卻佔了82%。酪蛋白的最大作用就是會使人快速長大,所以小牛出生後每個月體重增加一倍,滿三個月時已至八倍之多。所以喝牛奶的寶寶長得又白又胖,一點也沒錯,但這種胖是虛胖,不結實,而且喝牛奶的小朋友只長肉不長腦。相反的,喝母奶的寶寶,到六個月大時體重才增加一倍,但卻長得比較結實,反與也比較靈敏。

  此外,牛奶中的白蛋白(Whey)含量才18%,而人奶的白蛋白則高達60%。白蛋白的功能有助於大腦發育和免疫力的提升,在嬰幼兒發育成長的過程中扮演非常重要的角色。另外,人奶中含有大量的牛磺酸(Taurine)與卵磷脂(Lecithin),這兩種養分加上白蛋白,能促使嬰兒腦部快速發育,牛奶則缺乏這些養分,所以喝母奶的小朋友會比喝牛奶的小朋友長得結實又頭好壯壯的緣故就在這裡。

  常常有人問陳醫 師,牛奶不能喝,那羊奶呢?羊奶比牛奶好一點,因為羊奶與人奶比較接近,還有,羊奶不易過敏,牛奶容易過敏,因為牛奶的蛋白非常巨大,而羊奶和人奶的蛋白都小得多,容易被人體分解、吸收。

五、現代牛奶含大量的雌激素、生長激素、殺蟲劑和農藥

  為了要使母牛產出大量乳汁,農夫會在飼料中添加人工雌激素。現代女性初經提前與乳癌患率提高,皆與此大有關係。為了要使牛隻長得又快又壯又不生病,飼料中也會添加生長激素、抗生素和農藥,人喝了牛奶,等於間接的把這些人工添加物統統喝下肚。

六、喝牛奶容易造成骨質流失

  牛奶雖然鈣質含量豐富,但這個鈣卻不容易被人體所吸收,因為牛奶含有大量蛋白質,身體為了中和其酸性,必須從骨中取出鈣進入血液中,因為造成骨質流失。乳酪製品的酸性比牛奶更強,更容易造成骨質流失。全世界牛奶消耗量最大的四個國家(英國、美國、瑞典、芬蘭),同時也是老年人罹患骨質疏鬆與髖關節骨折率最嚴重的四個國家。反觀非洲國家幾乎不喝牛奶,但骨頭卻堅硬無比,老了也不會彎腰駝背,例如班圖人,他們不喝牛奶,但吃大量的蔬菜,而所有的深綠色蔬菜(番薯葉、菠菜)和十字花科類蔬菜(花椰菜、甘藍、芥藍)和豆類,都含有豐富的鈣質,是人類在大自然界的食物裡面,鈣質攝取的主要來源。這也更加能夠證實,要預防骨質疏鬆,應該多吃蔬菜,而不是多喝牛奶。

七、牛奶經過高溫殺菌,許多成分遭到破壞

  現代社會因衛生觀念所致,鮮奶皆經過攝氏一百三十度/三~五秒的「超高溫殺菌」。即使在攝氏七十二度所謂的「低溫殺菌」,溫度也頗高。牛奶在高於攝氏六十二度、華氏一百七十度的溫度下,原有的酵素、乳酸菌與維生素就會被破壞,所以不但不易消化吸收、缺乏營養,而且對健康不利。實驗亦證明,餵給小牛高溫消毒過的牛奶,小牛反而活不到壯年就會死亡。


  以上七大理由,足以說明人類為什麼不適合喝牛奶。但很多人平時喝慣了牛奶,一時難以改變,因此, 陳醫師在美國曾經做過一些實驗,看看能不能找到比較沒問題的牛奶,結果發現,連有機牛奶都通不過 陳醫師的人體實驗,只好建議他們用羊奶或豆漿代替。不過,台灣的市售羊奶經常添加了牛奶,這點要特別注意。

健康的迷思:少吃高膽固醇食物?

源自 自然醫學博士陳俊旭醫師

  酒席上,老王看到滿桌佳餚,直嘆氣:「我年輕時,沒錢吃好的,現在老了,卻膽固醇太高,醫生說我一天最多只能吃一顆蛋。」老張接著說:「我也是。我太太不准我吃火鍋,說肉類膽固醇太高了,會阻塞血管。」老宋也附和:「你們還沒有我可憐呢!除了肉類和雞蛋不准吃太多,連最喜歡的海鮮也被列為禁品。現在的我,簡直就是草食性動物了。」

  我常常在飯局上聽到上述的論調。這個時候,我通常會告訴大家,一天吃五顆蛋也沒關係,只要是水煮的就OK。肉類與海鮮也是,雖然含膽固醇,但只要不高溫炒炸,就比較沒關係。

95%的膽固醇由體內製造

「少吃高膽固醇食物有益健康」是個似是而非的觀念。我有很多病人,總膽固醇偏高,醫生告訴他,不能吃高膽固醇食物,好心的醫生還會給他們一份高膽固醇食物清單,苦口婆心、耳提面命。事實上,食物或油脂吃到肚子裡後,會被膽汁與消化酵素分解為微小的單元,經過吸收與肝臟的合成後,再轉為人體需要的成分。因此,體內95%的膽固醇是由肝臟所合成,而非從食物中直接攝取而來。肝臟每天約合成三千毫克的膽固醇,相當於十顆蛋的份量,所以大家看到海鮮、豬腳、牛肉、雞蛋這些食物,不要馬上跟膽固醇畫上等號,道先你要看它是怎麼煮的,其次,要確定同一餐是否還吃到其他油炸物。換句話說,不要擔心吃下多少膽固醇,而要在意肝臟如何合成膽固醇!

好膽固醇和壞膽固醇

你知道膽固醇有好、壞之分嗎?總膽固醇分為高密度脂蛋白膽固醇(HDL-C)、低密度脂蛋白膽固醇(LDL-C)與非常低密度脂蛋白膽固醇(VLDL-C)。高密度膽固醇是好的,低密度膽固醇與非常低密度膽固醇是壞的。而每個人的身體到底要製造多少好的和壞的膽固醇,肝臟有它自已的打算,不是吃進來什麼就變成什麼。所以就算吃下是高膽固醇的食物,到了體內也會被分解掉或燃燒掉。

那麼,我們應該如何影響肝臟,讓它多合成好的膽固醇,少合成壞的膽固醇呢?在此之前,我們必須了解,肝臟在哪些情況下會形成哪種膽固醇?

第一、 身體的需要。這點就讓聰明的肝臟去判斷。

第二、 也是最重要的,是我們吃下去的膽固醇與油脂沒有沒氧化?也就是自由基多不多,或是會中和自由基的新鮮蔬果吃得多不多?眾所周知,海鮮和雞蛋是膽固醇含量高的食物,但只要不是氧化過的膽固醇,例如水煮蛋、滷蛋、茶葉蛋,一天吃上五顆都沒關係。相對來說,就算一天只吃一顆蛋,可是卻是煎蛋或炒蛋,就比較不好,要趕緊多吃些新鮮蔬果去中和它,因爲膽固醇或油脂一旦氧化了,就會促使肝臟製造多一點壞膽固醇。

  所以,膽固醇的問題,不在含量的多寡,而在於烹飪的方法。當然,我不是說你從此可以肆無忌憚的猛吃水煮蛋或滷豬腳,因為還有其他的因素要考慮。凡事適可而止,採取中庸之道是最明智的。要提醒大家的是,如果你吃了一些油炸的東西,例如鹽酥雞或炸排骨之類的,甚至是炸秋葵或炒青菜,因為它們會產生自由基,就會使壞膽固醇增加。另外,壓力過大時也會產生自由基,也會間接產生壞膽固醇。

健康檢查小撇步

  壞膽固醇容易堆積在受損的血管管壁,形成硬化斑塊,日後脫落形成血栓,堵在心臟就是心臟病,堵在腦血管就是腦中風。但是好膽固醇卻是許多荷爾蒙與細胞膜的原料,不能缺少。台灣的健檢通常只驗總膽固醇,醫生也只籠統地說「你膽固醇過高了」,但這樣的判斷其實是不夠的。歐洲的西醫從2001年開始,不再看總膽固醇,看的是總膽固醇除以高密度膽固醇的比例,因為總膽固醇高並不表示壞膽固醇也高。比值若是三以下,表示很健康;三至五要開始注意;五以上就表示容易罹患心臟病或腦中風。例如,總膽固醇250、高密度膽固醇80的人(比值3:1),比總膽固醇180、高密度膽固醇35的人(比值5:1)健康,但是如果你剛好碰到的是一個比較馬虎的醫生,只看總膽固醇,就會說前者不健康、後者健康,結果,這與事實剛好相反,因為後者罹患動脈硬化與腦中風的機率比前者大很多。因此,下次健檢時,不要忘了應該要司時檢查總膽固醇(TC)與高密度膽固醇(HDL-C)。

  總而言之,膽固醇的食物還是要適當攝取。只要總膽固醇和高密度膽固醇的比值保持在三以下,總膽固醇維持在150至200之間,加上烹飪過程健康、搭配蔬果,你還是可以適量地享用美食。



陳博士 聊天室

什麼是自由基?

  什麼是自由基呢?簡單來說,我們體內的白血球在殺細菌或清理死亡細胞的時候,是以釋放出溶酶體來進行這項工作的。溶酶體裡有鹽酸、雙氧水,會把細菌和老舊細胞殺死、分解掉。就好像你用鹽酸洗馬桶或雙氧水洗傷口一樣,雙氧水與鹽酸就是利用氧化能力很強的自由基達到這個目的。油脂經過煎、炒、炸、烤的過程,會產生很多自由基,一旦吃下肚後,不但會影響膽固醇的合成,更會傷害血管壁和細胞膜,使發炎反應失控,所以是健康很大的殺手。

2008/09/01

年產百篇SCI文章的秘訣

劉明毅 /中國時報/2007.01.20


「如何年生產百篇SCI(Scientific Citation Index )學術研究報告」一直是許多人想明白的大秘密,最近臺灣學術界也一直圍繞在SCI的焦點上。十幾年前我從完全不瞭解何謂SCI,到現在侃侃於解釋我發表過的作品SCI的點數有多高,一共發表過多少SCI的學術報告,似乎我已能適應學術界的比賽規則(或遊戲規則),並且玩得十分自得其樂,來顯現自己真的是所謂優秀學術人才。所以,我努力發表有SCI點數的報告,要能從量化的點數,來反應出對科學貢獻。

記得一九九七年夏天我走訪柏克萊大學,拜訪曾經師事的John E. Casida教授(美國國科院院士、毒理學專家)。當他問起我的研究時,我開玩笑說:「在台灣我們不必長談研究內容,只說我的研究SCI點數有多高,就像數鈔票的心情一樣。」他問我何謂SCI?我回答,「SCI就是你所投稿的雜誌被引用的頻率所反應出來的指數。」

他笑笑的對我說,「你知道嗎?當年你在實驗室所做的研究工作,提出安全農藥高選擇性的概念,使得Neonicotinoids 這類環境用藥在世界上殺蟲劑的市場銷售率從二%提昇到五%,如果你有機會到德國拜耳公司,他們將為你舉辦一個迎賓宴,表達由衷謝意。」

當年在取得博士學位後,到Casida教授實驗室作博士後研究員,我適時參與了對安全農藥重點提出新方向,發表了幾篇相關報告;雖然,其SCI點數不是天數卻有相當的重要性。後來,在回台後寫完最後一篇研究論文報告。我建議Casida教授將報告投稿在SCI點數較高的雜誌上,可是,他反對了。「我們不該將一連續主題的論文,發表在關心這主題的人看不到或不常看的地方。」我於是領悟到從事科學研究的人,實在不該忽略人性化的考量。

在當年曾加入Casida教授實驗室的博士研究生、博士後研究員及訪問學者專家將近二百人,發表SCI學術報告的通訊作者超過六百篇,科學專利超過三十個,國際大獎包括Wolf Award等不計其數。擁有這些人脈廣闊、資源豐富的有利條件,想創造大量的SCI學術報告,事實上並不困難。然而除非自己在整個研究過程中有非常夠份量的參與,Dr. Casida從不讓自己的名字在作者群中出現。

發表SCI報告不可諱言是做科學研究的人不可缺少的工作之一,完成有價值的學術論文走向世界舞臺,總比只交研究計畫報告書更勝一籌。可是,我們又如何能不排除不正常的科學弊端,把SCI這個制度玩的不是太過分?大師真的是依照點數來衡量嗎?無情的現實,常逼得學術界裡的人,尋求生存之道,有時根本不能在乎人性化的學術精神。最後,只能說大家都不笨,你會玩的遊戲,我也會玩。

我記得當我在博士生的訓練過程中曾和Stephen Safe教授(毒理學家,主要工作在戴奧辛的研究)討論:「身為科學家最重要的訓練是什麼?」他說:以他的想法來看,除了專業外就是表達能力,包括口頭,尤其文字的功夫。當時(一九九一年)Dr. Safe告訴我他已經發表了四百多篇SCI報告,可是,他一直努力於寫作的訓練,寫得愈多愈發現自己的不足,因此,他仍舊持續在寫作方面下功夫,一點也不敢懈怠。

我們出身非以英文為母語的科學研究人員,只有在求取碩士、博士學位數年中和英文有較頻繁的接觸,我們的英文能力確實嚴重不足,基本的溝通及達意的程度,真的難以讓國際舞臺上的諸公們,認定我們的學術成就。猶記在柏克萊的日子,Dr. Casida在書寫報告上所展現的說服力及深度,才讓我為之一醒,原來學術這條路是這麼漫長,並且需要心智的成長與不斷的學習。書寫科學論文投稿在SCI的期刊上是非常有挑戰性的工作。

不論如何,能將一個成果變成一個完整的概念來和別人溝通,就是人生一大享受。雖然歷程辛苦,卻也是學術界不可逃避的一項責任。一個實驗技巧極佳的人,不能說一定是好的科學研究者,因為不能說清楚、寫清楚的研究者,只能算是技術人員而已。因此,完全捨棄SCI之功能是說不過去,但是一味以SCI當作學術研究的唯一標準,也是自欺欺人,不是合理的審核標準。

(作者為成功大學環境醫學研究所教授)

當系所評鑑遇到SCI論文

文/劉維琪  高等教育評鑑中心董事長

自從大學系所評鑑實施以來,學術界即對是否應將SCI論文納入評鑑指標充滿了疑慮,議論之聲不曾間斷。回想國內開始重視SCI論文,可追溯到數年前教育部無意間公布了SCI論文排行榜所引發的後遺症,致使許多大小學校都開始要求教師出版SCI、SSCI論文,而且教師升等也以此為標竿。

究竟何謂SCI、SSCI?它是美國湯姆笙(Thomson Scientific)集團下的ISI公司所出版的兩大引文索引資料庫(另有人文藝術學科的A&HCI),最早是為了進行引文檢索而建置,由於其將符合評選標準的期刊收錄進來,收錄內容具有一定公信力,加上又能提供論文被引次數,並可和期刊影響係數相結合,後來便逐漸被廣泛應用在學術評估上。

論文統計≠全部學術成果

由於ISI資料庫建立得相當完整,因而世界上許多新興國家,就以此資料庫作為統計大學學術論文發表情形的工具,但除了ISI之外,世界上還有很多資料庫,包括荷蘭Elsevier公司出版的Scopus,以及Google Scholar等,也都可進行論文篇數及引文次數的統計。然而,無論使用哪一個資料庫,都無法描述學術研究的全貌,資料庫論文統計充其量只能代表某部分的研究成果。

例如社會科學領域的研究有其本土性,非英語國家的研究不容易刊登在SCI、SSCI期刊上;另外如資訊等領域,一篇發表在學術研討會上的論文,其影響力可能比SCI期刊論文來得更及時與重要;一本影響深遠的本土學術專書,其價值也可能遠勝過一篇短篇的英文論文。而人文藝術領域更必須考量它的創作與展演。

再如ISI資料庫所收錄的非英語期刊比Scopus資料庫少,這也因此造成屬於ISI資料庫的SCI、 SSCI論文統計結果較有利於英語系國家的大學,對非英語國家則較吃虧,今年英國泰晤士報高等教育增刊就特別改以Scopus資料庫作為世界大學排名統計,可看出泰晤士報考量更完整學術出版文獻的企圖。

統計結果≠學術目標

由此可知,使用SCI論文統計來「推論」大學教師的學術研究成果是有限制性的,對於理工醫農等領域而言,或許論文評比結果在「某種程度」上仍能推論該校的學術研究成果,但這終究只是個「推論」,只能代表對學術成果的概估。更遑論對以人文社會領域為主的大學而言,用SCI、SSCI論文來推論該校學術成果,可能不具有代表性。

既然如此,為什麼世界上仍有許多機構喜歡用SCI論文篇數去推論一所大學的學術水準?說穿了只是因為它便於統計。甚至為了重質不重量,除了統計論文篇數外,在論文品質的推估上,學術界還採用許多品質指標,譬如被引次數、期刊影響係數,以及最近頗受重視的H指標等。

但無論如何,這些指標只是一種統計,統計有其必要,但也有其限制性。只有了解其限制性,才不會誤用統計結果,學校也不會把統計結果當成學術追求的目標。

SCI論文≠系所評鑑必要條件

在分析了SCI論文的本質之後,我們再回頭探討大學系所評鑑,該不該評SCI、SSCI論文,答案就已經呼之欲出。評鑑中心辦理的系所評鑑是以教學評鑑為主,雖然評鑑項目有一項為「研究與專業表現」,但其評鑑指標係開放系所自訂,評鑑委員只會根據系所自訂的指標進行評鑑。

更詳細地說,系所評鑑實施計畫中所列的「研究與專業表現」項目,其參考效標除了教師的研究論文數之外,還包括參與學術研討會、國際學術交流與合作、產學合作、出版教科書、個案分析、各種創作作品與展演活動,以及根據教師專業所從事的社會服務,例如解決環保問題、參與公共政策制訂等,甚至教師的研究與專業帶給學生什麼收穫、是否因此讓學生與產業界更接近等,都是「研究與專業表現」項目可被評鑑的範圍。

在此原則之下,我們認為,SCI、SSCI論文固然有其重要性,若表現良好可以視為系所評鑑的優點。但對國內大多數非研究型大學而言,SCI、SSCI論文表現結果不理想,並不能當成系所評鑑的缺點,評鑑委員在評鑑非研究型大學時,也不應過度強調SCI、 SSCI論文發表的成果。

2008/08/31

蘋果電腦創辦人Steve Jobs在史丹佛的畢業演講

Steve Jobs' 2005 Stanford Commencement Address

This is the text of the Commencement address by Steve Jobs, CEO of Apple Computer and of Pixar Animation Studios, delivered on June 12, 2005.

I am honored to be with you today at your commencement from one of the finest universities in the world. I never graduated from college. Truth be told, this is the closest I've ever gotten to a college graduation. Today I want to tell you three stories from my life. That's it. No big deal. Just three stories.

The first story is about connecting the dots.

I dropped out of Reed College after the first 6 months, but then stayed around as a drop-in for another 18 months or so before I really quit. So why did I drop out?

It started before I was born. My biological mother was a young, unwed college graduate student, and she decided to put me up for adoption. She felt very strongly that I should be adopted by college graduates, so everything was all set for me to be adopted at birth by a lawyer and his wife. Except that when I popped out they decided at the last minute that they really wanted a girl. So my parents, who were on a waiting list, got a call in the middle of the night asking: "We have an unexpected baby boy; do you want him?" They said: "Of course." My biological mother later found out that my mother had never graduated from college and that my father had never graduated from high school. She refused to sign the final adoption papers. She only relented a few months later when my parents promised that I would someday go to college.

And 17 years later I did go to college. But I naively chose a college that was almost as expensive as Stanford, and all of my working-class parents' savings were being spent on my college tuition. After six months, I couldn't see the value in it. I had no idea what I wanted to do with my life and no idea how college was going to help me figure it out. And here I was spending all of the money my parents had saved their entire life. So I decided to drop out and trust that it would all work out OK. It was pretty scary at the time, but looking back it was one of the best decisions I ever made. The minute I dropped out I could stop taking the required classes that didn't interest me, and begin dropping in on the ones that looked interesting.

It wasn't all romantic. I didn't have a dorm room, so I slept on the floor in friends' rooms, I returned coke bottles for the 5¢ deposits to buy food with, and I would walk the 7 miles across town every Sunday night to get one good meal a week at the Hare Krishna temple. I loved it. And much of what I stumbled into by following my curiosity and intuition turned out to be priceless later on. Let me give you one example:

Reed College at that time offered perhaps the best calligraphy instruction in the country. Throughout the campus every poster, every label on every drawer, was beautifully hand calligraphed. Because I had dropped out and didn't have to take the normal classes, I decided to take a calligraphy class to learn how to do this. I learned about serif and san serif typefaces, about varying the amount of space between different letter combinations, about what makes great typography great. It was beautiful, historical, artistically subtle in a way that science can't capture, and I found it fascinating.

None of this had even a hope of any practical application in my life. But ten years later, when we were designing the first Macintosh computer, it all came back to me. And we designed it all into the Mac. It was the first computer with beautiful typography. If I had never dropped in on that single course in college, the Mac would have never had multiple typefaces or proportionally spaced fonts. And since Windows just copied the Mac, its likely that no personal computer would have them. If I had never dropped out, I would have never dropped in on this calligraphy class, and personal computers might not have the wonderful typography that they do. Of course it was impossible to connect the dots looking forward when I was in college. But it was very, very clear looking backwards ten years later.

Again, you can't connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future. You have to trust in something — your gut, destiny, life, karma, whatever. This approach has never let me down, and it has made all the difference in my life.

My second story is about love and loss.

I was lucky — I found what I loved to do early in life. Woz and I started Apple in my parents garage when I was 20. We worked hard, and in 10 years Apple had grown from just the two of us in a garage into a $2 billion company with over 4000 employees. We had just released our finest creation — the Macintosh — a year earlier, and I had just turned 30. And then I got fired. How can you get fired from a company you started? Well, as Apple grew we hired someone who I thought was very talented to run the company with me, and for the first year or so things went well. But then our visions of the future began to diverge and eventually we had a falling out. When we did, our Board of Directors sided with him. So at 30 I was out. And very publicly out. What had been the focus of my entire adult life was gone, and it was devastating.

I really didn't know what to do for a few months. I felt that I had let the previous generation of entrepreneurs down - that I had dropped the baton as it was being passed to me. I met with David Packard and Bob Noyce and tried to apologize for screwing up so badly. I was a very public failure, and I even thought about running away from the valley. But something slowly began to dawn on me — I still loved what I did. The turn of events at Apple had not changed that one bit. I had been rejected, but I was still in love. And so I decided to start over.

I didn't see it then, but it turned out that getting fired from Apple was the best thing that could have ever happened to me. The heaviness of being successful was replaced by the lightness of being a beginner again, less sure about everything. It freed me to enter one of the most creative periods of my life.

During the next five years, I started a company named NeXT, another company named Pixar, and fell in love with an amazing woman who would become my wife. Pixar went on to create the worlds first computer animated feature film, Toy Story, and is now the most successful animation studio in the world. In a remarkable turn of events, Apple bought NeXT, I returned to Apple, and the technology we developed at NeXT is at the heart of Apple's current renaissance. And Laurene and I have a wonderful family together.

I'm pretty sure none of this would have happened if I hadn't been fired from Apple. It was awful tasting medicine, but I guess the patient needed it. Sometimes life hits you in the head with a brick. Don't lose faith. I'm convinced that the only thing that kept me going was that I loved what I did. You've got to find what you love. And that is as true for your work as it is for your lovers. Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do. If you haven't found it yet, keep looking. Don't settle. As with all matters of the heart, you'll know when you find it. And, like any great relationship, it just gets better and better as the years roll on. So keep looking until you find it. Don't settle.

My third story is about death.

When I was 17, I read a quote that went something like: "If you live each day as if it was your last, someday you'll most certainly be right." It made an impression on me, and since then, for the past 33 years, I have looked in the mirror every morning and asked myself: "If today were the last day of my life, would I want to do what I am about to do today?" And whenever the answer has been "No" for too many days in a row, I know I need to change something.

Remembering that I'll be dead soon is the most important tool I've ever encountered to help me make the big choices in life. Because almost everything — all external expectations, all pride, all fear of embarrassment or failure - these things just fall away in the face of death, leaving only what is truly important. Remembering that you are going to die is the best way I know to avoid the trap of thinking you have something to lose. You are already naked. There is no reason not to follow your heart.

About a year ago I was diagnosed with cancer. I had a scan at 7:30 in the morning, and it clearly showed a tumor on my pancreas. I didn't even know what a pancreas was. The doctors told me this was almost certainly a type of cancer that is incurable, and that I should expect to live no longer than three to six months. My doctor advised me to go home and get my affairs in order, which is doctor's code for prepare to die. It means to try to tell your kids everything you thought you'd have the next 10 years to tell them in just a few months. It means to make sure everything is buttoned up so that it will be as easy as possible for your family. It means to say your goodbyes.

I lived with that diagnosis all day. Later that evening I had a biopsy, where they stuck an endoscope down my throat, through my stomach and into my intestines, put a needle into my pancreas and got a few cells from the tumor. I was sedated, but my wife, who was there, told me that when they viewed the cells under a microscope the doctors started crying because it turned out to be a very rare form of pancreatic cancer that is curable with surgery. I had the surgery and I'm fine now.

This was the closest I've been to facing death, and I hope its the closest I get for a few more decades. Having lived through it, I can now say this to you with a bit more certainty than when death was a useful but purely intellectual concept:

No one wants to die. Even people who want to go to heaven don't want to die to get there. And yet death is the destination we all share. No one has ever escaped it. And that is as it should be, because Death is very likely the single best invention of Life. It is Life's change agent. It clears out the old to make way for the new. Right now the new is you, but someday not too long from now, you will gradually become the old and be cleared away. Sorry to be so dramatic, but it is quite true.

Your time is limited, so don't waste it living someone else's life. Don't be trapped by dogma — which is living with the results of other people's thinking. Don't let the noise of others' opinions drown out your own inner voice. And most important, have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary.

When I was young, there was an amazing publication called The Whole Earth Catalog, which was one of the bibles of my generation. It was created by a fellow named Stewart Brand not far from here in Menlo Park, and he brought it to life with his poetic touch. This was in the late 1960's, before personal computers and desktop publishing, so it was all made with typewriters, scissors, and polaroid cameras. It was sort of like Google in paperback form, 35 years before Google came along: it was idealistic, and overflowing with neat tools and great notions.

Stewart and his team put out several issues of The Whole Earth Catalog, and then when it had run its course, they put out a final issue. It was the mid-1970s, and I was your age. On the back cover of their final issue was a photograph of an early morning country road, the kind you might find yourself hitchhiking on if you were so adventurous. Beneath it were the words: "Stay Hungry. Stay Foolish." It was their farewell message as they signed off. Stay Hungry. Stay Foolish. And I have always wished that for myself. And now, as you graduate to begin anew, I wish that for you.

Stay Hungry. Stay Foolish.

Thank you all very much.


同學們,

一個朋友寄給我以下的講稿,我看了非常感動。但原來的翻譯我讀起來不順,因此我對照原文,重新翻譯了一次。跟大家分享。......火星爺爺

以下是Apple與Pixar執行長Steve Jobs 在2005年6月12日對全體史丹佛大學畢業生的演講內容。

今天,很榮幸來到世界最好的學校之一,參加各位的畢業典禮。我大學從沒畢業,說實話,這是我離大學畢業最近的一刻。今天我只說三個故事,不談大道理,就三個故事。

第一個故事,是關於人生中的點點滴滴是怎麼串在一起的。

我在里德學院(Reed college)待了六個月就休學了,我休學了18個月,直到我真正離開學校。我為什麼休學?

這得從我出生前講起。當時,我親生母親是個研究生,一位年輕的未婚媽媽,她決定讓別人收養我。她執意認為我應該被大學畢業的人收養,所以我出生時,她就做好一切準備,要讓一對律師夫婦收養我。但我出生之後,這對夫妻後來卻反悔了,因為他們想收養的是女孩。在等待收養的名單上有一對夫妻,也就是我的養父母,有一天半夜他們接到電話,有人問他們:「有一個人家不要的小男嬰剛出生,你們要認養嗎?」

他們回答「當然要」。後來,我親生母親發現,我的養母大學沒畢業,我的養父甚至連高中都沒讀完。她拒絕在最後的認養文件上簽字。直到幾個月後,我的養父母同意將來一定讓我上大學,她態度才軟化。

十七年後,我真的上大學了。但我當時很無知地選了一所學費幾乎跟史丹佛一樣貴的大學,我工人階級的父母為了我的學費,花光了所有積蓄。六個月後,我看不出唸大學有什麼價值。那時候,我不知道這輩子要幹什麼,也不知道念大學對我搞清楚要做什麼有任何幫助。而且,我在這裡花光了父母所有積蓄。所以我決定休學,而且相信船到橋頭自然直。那個決定當時看起來可怕,可是現在看起來,那卻是我這輩子做過最好的決定之一。

休學之後,我可以不必再上那些我沒興趣的必修課,我開始去上那些我有興趣的課。

這一點也不浪漫。我沒有宿舍,所以我睡在朋友家的地板上,靠回收可樂罐的的五先令退費買東西吃。每星期天晚上,我會走七哩路橫過市區去印度教的 Hare Krishna 神廟吃頓好吃的,我愛那些食物。我依循自己的好奇心跟直覺,我所涉獵參與的,後來證明都是無價珍寶。

舉例來說:

當時里德學院提供可能是全國最好的書法指導。校園內的每張海報上,每個抽屜的標籤,都是很美的手寫字。因為我休學,不必上正常的課程,所以我就跑去上書法課,學怎麼寫。我學了serif 與san serif 字體,學到在不同字母組合間變更字間距,學到活版印刷的偉大之處。書法很美、有歷史感與藝術感,是科學難以補捉的,我覺得很迷人。

我沒預期,學這些東西在我生活中有什麼實際的用處。不過十年後,在我設計第一台麥金塔時,當時所學的東西全回來了。我把這些東西都設計進麥金塔裡,這是第一台能印出漂亮字體的電腦。如果我沒有修那門課,麥金塔可能就不會有多種字體,以及能變更間距的字體可以用。也因為Windows剛好抄襲了麥金塔,否則 PC也不會有這些字體。要不是我當年休學,我就不會跑去上書法課,那麼世界上所有個人電腦可能印不出這麼漂亮的字體。當然,在大學的時候往前看,是沒辦法把這些點點滴滴串在一起的。但是十年後回顧,一切就變得非常清楚。

我再說一次,你不能預先把這些點點滴滴串在一起;只有日後回顧時,你才會明白那些點點滴滴怎麼串在一起。所以你得相信,你所經歷的點點滴滴,將來多少會連結在一起。你得相信某個東西,膽識也好,命運也好,生命也好,業力也好,什麼都行。這種方法從來沒讓我失望,它也讓我的生命整個變得不同。

我的第二個故事,是關於愛與失去。

我運氣很好,很年輕就發現自己愛做什麼事。我二十歲的時候,跟Steve Wozniak在我爸媽家的車庫裡,開始蘋果電腦的事業。我們拼命工作,蘋果電腦在十年間,從車庫裡的兩個人擴展成一家員工超過四千人、市價二十億美金的公司。在那之前一年,我們推出最完美的作品-麥金塔,我剛邁入三十歲,然後,我被開除。

你怎麼能被你所創辦的公司開除呢?是這樣的,蘋果電腦成長後,我們找了一個在經營公司上很有才幹的人,頭一兩年,他也的確幹得不錯。可是我們對未來的願景不同,最後只好分道揚鑣。結果,董事會站在他那邊,在我30歲那年,把我開除,而且是公開掃地出門。曾經是我整個成年生活重心的東西消失了,我不知所措。

有幾個月,我不知道幹什麼好。我覺得我讓上一代的企業家失望-我把他們交給我的接力棒弄丟了。我見了創辦HP的David Packard跟創辦Intel的Bob Noyce,跟他們說我很抱歉,我把事情搞砸得這麼慘。那是一個非常明顯的失敗,我甚至想離開矽谷。

但漸漸的我發現,我還是喜歡我做過的事,在蘋果所經歷的轉折,絲毫沒有改變這一點。我被否定了,但我還是愛做那些事,所以我決定從頭來過。

我當時沒發現,但現在回想起來,被蘋果電腦開除,是我所經歷過最好的事情。成功的沉重被從頭來過的輕鬆所取代,每件事情不再是如此確定。因而,我得以無礙地進入這輩子最富創意的時光之一。

接下來五年,我開了一家叫做 NeXT的公司,又開一家叫做Pixar的公司,並愛上一個奇妙的女人,也就是我現在的老婆。Pixar製作了世界第一部電腦動畫電影,玩具總動員,現在是世界上最成功的動畫製作公司。然後,經歷幾個戲劇性的轉折,蘋果電腦買下NeXT,我重回蘋果,我們在NeXT發展的技術成了蘋果電腦後來復興的核心。我也和我太太共組了美妙的家庭。

我很確定,如果當年蘋果電腦沒開除我,就不會發生這些事情。這帖藥很苦,但我猜病人就是需要這帖藥。有時候,生命就是會用磚塊砸你的頭。不要喪失信心。我深信支持我一路走過來唯一的原因是,我愛我所做的事。你得找出你所愛的,工作如此,愛情也是如此。你的工作將填滿你一大塊人生,要真正感到滿足唯一的方式,就是去做你認為是偉大的工作。

做偉大的工作唯一的的方法是,愛你所做的事。如果你還沒找到這些事,繼續找,別停頓。你一找到,你的心就會告訴你。就像各種美好的關係一樣,事情只會隨著時間愈來愈好。所以,在你找到之前,繼續找,不要停下來。

我的第三個故事,關於死亡。

當我十七歲時,我讀到一則格言,好像是「如果你把每一天都當生命的最後一天,你就會輕鬆自在。」這對我影響深遠,在過去33年裡,我每天早上都會照鏡子,自問:「如果今天是生命的最後一天,我還想做原本打算要做的事嗎?」當我連續好擠天都得到的答案都是「不」,我就知道我要做些改變了。

提醒自己快死了,是我面臨人生重大抉擇時,用來幫助自己判斷的最重要工具。因為幾乎所有的事-所有世俗的期待、所有名譽、所有對困窘或失敗的恐懼-在面對死亡時,這些東西都會消失,只有最重要的東西會留下來。

提醒自己快死了,是避免掉入「有什麼東西會失去」的陷阱的最好方法。生不帶來,死不帶去,沒什麼道理不跟隨你的心。

一年前,我被診斷出癌症。我早上七點半斷層掃描,在胰臟清楚出現一個腫瘤。我連胰臟是什麼都不知道。醫生告訴我,那幾乎可以確定是無法治癒的癌症,我大概活不超過三到六個月了。醫生建議我回家,把事情交代好,這是醫生對臨終病人的標準建議。那表示,你得把未來來十年裡想跟小孩講的話,在未來幾個月內講完。那代表你得把所有的事情都打理好,讓家人沒有後顧之憂。那代表你得說再見。

我整天想著那個診斷結果。那天晚上我做了一次切片,喉嚨插入一個內視鏡,從胃進腸子,插了根針進胰臟,取了一些腫瘤細胞出來。我打了鎮靜劑,不醒人事,但是我老婆在場。她後來跟我說,當醫生們用顯微鏡看過那些細胞後,都大叫起來,因為那是非常少見的一種胰臟癌,可以用手術治好。所以我接受手術,現在,我好了。

這是我最接近死亡的一次,我希望那也是未來幾十年最接近的一次。經歷過這件事,我可以比之前認為死亡不過是一個有用的抽象概念,更明確地告訴你們:

沒有人想死,即使是想上天堂的那些人,也想活著上去。但是死亡是我們共同的目的地,沒有人躲得過。這是註定的,因為死亡簡直就是生命中最棒的發明,是轉換生命的媒介,它送走老人,把空間留給新人。現在你們是新人,但不久將來,你們也會變老,最後被送出舞台。抱歉說得這麼戲劇化,但是這是真的。

你們的時間有限,所以不要浪費時間活在別人的生活裡。不要被信條束縛,不要活在別人的思考裡。不要讓別人的意見淹沒你內在的聲音。最重要的,要有勇氣跟隨你的心、你的直覺,它們知道你真正想成為什麼人。其他事物,都是次要的。

我年輕的時候,有本神奇的雜誌叫做 Whole Earth Catalog,是我們這一代的聖經之一。那是一位住在離這不遠的Menlo Park的Stewart Brand發行的,他用他獨特的詩意呈現整本雜誌。那是1960年代末期,個人電腦跟桌上出版還沒出現,所有內容都是用打字機、剪刀跟拍立得相機做出來的。雜誌內容有點像印在紙上的Google,35年前出現的Google:理想化,充滿各種新奇工具與神奇的註記。

Stewart跟他的出版團隊出了好幾期Whole Earth Catalog,然後出了停刊號。當是1970年代中期,我差不多跟你們一樣大。在停刊號的封底,有張照片,是晨間的鄉間小路,就是你搭便車旅行時會碰上的鄉間小路,如果你夠喜歡冒險的話。在照片下有行小字寫著:求知若飢,虛心若愚。

那是他們親筆寫下的告別訊息,我總是以此自許。當你們畢業,展開新生活,我也以此期許你們。

求知若飢,虛心若愚。

非常謝謝大家。
(翻譯:火星爺爺)

2024年React state management趨勢

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