大家好,今天和各位談談“吳軍硅谷來信”專欄裡的一篇文章心得。

之前幾次分享了電腦科學的思維方式,但是科學要透過工程才能變成產品,才有辦法改變世界。做工程時的思維方式又和科學研究有所不同。之前談到提高2倍的速度,對電腦科學來說沒有意義,因為還是屬於同一個量級;但是對工程卻很有意義。如果你的電腦快了2倍,你一定會很有感。今天就從3個方向來分析,電腦科學和電腦工程的差別。

一、方向和道路之分別。

科學是指出正確方向,工程是依據科學指出的方向建設道路。如果沒有電腦科學提供最好的演算法,工程修出來的道路就會缺乏方向性,就可能出現繞路的狀況。因此,由科學先指出正確方向,最後還是需要透過工程,把道路蓋好。

二、科學和工程需要關注不同的事情,工作的環境也不同。

電腦科學家聚焦在量級上提高性能,因此,他們需要構建理想的環境,排除一些不必要的干擾因素,先把主要問題找出來。例如:提高電腦演算法速度時,不過度考慮載入資料的處理器時間、記憶體的極限等邊界效應,想辦法把所有沒必要的資料比較都省略。

但是,在工程上,節省幾倍的時間,甚至是20%的時間,都很有意義。另外,理論上最好的解決方案,遇到很糟的情況時,可能就無法呈現正常的表現;這時候,工程師就必須要有備案。以一位好的工程師來說,他最重要的能力,是瞭解最新的科學進展,並且依據實際狀況,使用最新的技術解決實際問題。

今天中國的大學教育上,有一個巨大的問題,在於科學和工程分不清楚。大學做了許多應該由公司做的事,例如:有一些中國大學對於製造超級電腦感到自豪。這根本就是工程的事情,應該由聯想這類的公司來做。這樣的教育導致創新性的研究非常少,雖然論文發表很多,但是,大多是別人提出問題,並且給出了初步的答案之後,中國的大學來完善。現在中國的電腦工程做的不錯,但是電腦科學水平還是比較弱的。

三、科學家和工程師跟錢的距離不同。

事實上,科學家通常是離錢比較遠的。就算是發明快速排序演算法的霍爾,也沒多少財產。反而在工程上實現了自己所發明的“網頁排名演算法”搜索的佩奇和布林(就是Google創始人),他們就算公司不上市,財富也會多到難以估計。

要當科學家,就要離短期的利益遠一點,這樣才能把目光放遠。不僅僅只是大學教授可能賺的沒工程師多;就算在大公司裡,做研究的收入也經常不如做產品的。吳軍老師在Google賺錢最少的4年,就是做純研究的4年。

然而,科學家想轉行當工程師,也不是一件簡單的事,思維方式必須從理想狀態轉為現實狀態。許多大學教授開公司,生意反而做的比學生差,通常都是因為老師的科學家思維不接地氣。

吳軍老師以自己在Google任職的經歷為例:吳軍老師在Google經歷了科學家和工程師兩種不同的身份轉換,做事時就必須要有相應的做事策略。

27年前,中國語音辨識剛起步,吳軍老師是參與者之一。當時的技術大多是把英語識別技術改成中文識別,這工作算是比較偏向工程一些。當吳軍老師到美國寫博士論文時,主要的工作是提出一個新的演算法,這個演算法至今大家都還在用,經常有人會寫信詢問細節。這項研究比過去的機器學習演算法,簡化了許多重複的計算。因此,讓運行速度提高幾百到上千倍。

2000年之後,世界上從事的語音辨識和機器翻譯的科學家,開始嘗試機器學習演算法。當時IBM一位非常聰明的科學家,把整個沃森研究中心所有電腦空閒時的資源都拿來使用,這樣計算了2年,才產出一個結果,發表一篇論文。在接下來的2年裡,全世界所有同行的科學家,對這種演算法只能望洋興嘆。

當時的吳軍老師也想使用那種方法解決一些問題,但是如果依照那樣的演算速度,畢業應該遙遙無期了。提高三、五倍的速度是沒有意義的,要就是從根本上提高幾百倍的速度。於是,吳軍老師大概在半年的時間裡,工作內容就是推導數學公式。最後,終於發明了一種在量級上更好的演算法。這套演算法速度提高了幾百倍,使得原本要計算兩年的事情,在當時縮短到一周。因此,讓吳軍老師在半年內做了十多次實驗,順利完成論文。

不過,當時在完成新的演算法時,吳軍老師並沒有試著節省最後10%的電腦資源,因為就算把程式速度再提高10%,也不可能讓他提早一天畢業,而且還得花更多時間寫程式。因此,由此可以發現,電腦科學家關心的是,把注意力放在量級上,而不要太計較細小的成本。

當吳軍老師畢業加入Google,思維方式就得從科學家轉變成工程師。他接的第一個專案是搜索反作弊,方法是以機器學習的方式,利用資料訓練一個統計模型,模型占記憶體約20M,大概就是一張2,000萬圖元照片的大小。這對從事研究的科學家來說,根本是小到可以省略的容量。

但是,負責Google整個搜索部門的辛格博士告訴他:“你的方法很有效,但是,我無法給你這麼多記憶體空間,因為這裡有很多人同時間在寫伺服器的代碼,如果每個人都增加20M,程式就太大無法容納。”

後來,辛格博士教吳軍老師一種高度壓縮的、相似的模型,讓記憶體空間從20M縮小至3M,相差6倍在演算法科學上是沒有意義的,但是在工程上,卻可以讓這份產品可以完成上線。這是Google給吳軍老師上的第一堂工程課。

吳軍老師接受到的第二堂課,是在工程上需要計較2%的執行時間。在2002年,吳軍老師在Google寫了搜索引擎的中、日、韓文處理演算法。由於必須對這些語言採用特殊的搜索排序演算法,因此,使得搜索運算時間增加了2%。這在電腦科學上也不算一件事,但是產品部門卻要他提高速度,才能夠成為產品。因此,吳軍老師和產品部門產生爭執。

吳軍老師的觀點是,依循摩爾定律,半年後新的伺服器的速度,就可以讓現在這2%的減速忽略不計了。不過,產品部門的人可不這樣思考。產品部門的解釋是:Google當時有2萬多台伺服器,增加2%的計算量,等於多用400台伺服器。當時一台伺服器,一年的使用成本和折舊約1,000美元,等於增加40萬美元的成本,這值得一位工程師花一季的時間優化代碼。最後,吳軍老師花了幾週的時間完成優化,才獲准上市相關的服務。

在從事了幾年的工程訓練之後,吳軍老師想問題的出發點就和過去不同了。幾年後,他離開工程部門,進入Google研究部門後,想法又改變了,他又不太在意工程的細節了。因為在研究過程中,不斷地嘗試新方法,很多的代碼只有幾組人用,而用不了幾個月就得更新。因此,花時間改進代碼,優化1-2倍,節省一點點時間又變得沒有意義。

從電腦科學轉換到工程,在思維上,吳軍老師認為以下兩點最為重要:

一、電腦科學要在相對理想的狀態下工作,讓自己集中全力在量級的改進上,也就是要撿西瓜;但是,在工程上,不存在理想狀態,因此,各方面都要考慮周全。

二、在工程上,必須優先使用科學上最好的方法,然後再做細節的改進。否則用了落後的方法,再去試著優化,只得到一點點的效率提升;但在宏觀上,一開始就損失了幾百倍的效率,一定做不出好產品。吳軍老師提到,他在2007年之所以要寫《數學之美》,就是要告訴IT的從業人員,別把西瓜丟了。

總結以上,不同的目的,邊際成本的看法就會不一樣。因此,在現實工作中,沒有絕對的最好,只有在給定條件下的相對比較好。思維方式不對,工作就很難有卓越的表現。

歡迎你的留言,和我一起分享、一起討論,我們下次見。

    Jay Yeh 發表在 痞客邦 留言(0) 人氣()