我一直在IT企業(yè)的研究部門任職,迄今經(jīng)歷了三家公司:NEC、微軟、華為。工作都是既有基礎(chǔ)研究,又有產(chǎn)品開發(fā)。其實(shí),這兩者既有密切聯(lián)系,性質(zhì)上又迥然不同。前者在于發(fā)現(xiàn)或發(fā)明普適性的理論與方法,后者在于開發(fā)實(shí)用性的系統(tǒng)與工具。可以說,前者需要的思維方式、基本技能與素質(zhì)是科學(xué)家的,而后者是工程師的。我經(jīng)常提醒自己,一定要明確在具體項(xiàng)目中自己到底帶著什么“帽子”在工作,是科學(xué)家,還是工程師?
我曾經(jīng)將如何成為優(yōu)秀科學(xué)家的體會整理成若干篇博文發(fā)表,而本文來談?wù)勅绾纬蔀閮?yōu)秀工程師的一些心得。我認(rèn)為,做工程時應(yīng)該遵循五項(xiàng)原則,并在實(shí)際的工作中把它們作為行為 指南。這些原則是:面對問題、解決問題,系統(tǒng)地解決問題,站在用戶角度看問題,以最小的代價獲得最大的效益,磨在細(xì)處。在這里做一總結(jié),僅供大家參考。
面對問題,解決問題
西方有句諺語:“當(dāng)手中拿著榔頭的時候,你會覺得看到的東西都像是釘子”。根據(jù)自己的喜好、特長、習(xí)慣來解決問題是工程師的大忌。做工程時最重要的是要面對問題、解決問題??扇〉牟呗詰?yīng)該是探明問題的本質(zhì),弄清問題的機(jī)理,用最直接、最有效的辦法解決問題。經(jīng)驗(yàn)告訴我們,拐彎抹角地解決問題,效果總是不好的。做工程時并不一定需要理論。只要能夠有效地解決問題,其實(shí)什么方法都行?!安还馨棕埡谪?,捉住老鼠就是好貓”在這里也是適用的。當(dāng)然有理論指導(dǎo)的方法 往往更能抓住問題的本質(zhì),以其為工具常常能把問題解決得更好。
在NEC工作時,我曾參加一個自然語言研究小組的立項(xiàng)會議。他們建議開發(fā)語音 系統(tǒng)來幫助用戶遙控電視機(jī),因?yàn)楝F(xiàn)在的遙控器操作都過于復(fù)雜,不利于老人與兒童使用。用語音聲控電視,當(dāng)然是很好的想法,現(xiàn)在仍有許多企業(yè)在進(jìn)行這項(xiàng)應(yīng)用 的開發(fā)。印象特別深的是他們斷言,除了通過語音的辦法,不存在其他解決方案。當(dāng)時,我也認(rèn)為他們的想法很有道理。
不料,沒過幾個月,日本的其他幾家電器公司推出了用編碼遙控電視的方法,更簡單、更實(shí)用。遙控器的操作主要靠數(shù)字輸入,每個電視節(jié)目都配上一個編碼,報(bào)紙每天將編碼在電視節(jié)目欄中公布,用戶只要輸入編碼即可觀看或錄制相應(yīng)的節(jié)目。
這件事對我的內(nèi)心產(chǎn)生了很大的震動,自問為什么NEC的同事們只想到自然語言這條路,而忽視了其他路?不正是因?yàn)樗麄兪掷锬弥匀徽Z言這個榔頭的緣故嗎?
系統(tǒng)地解決問題
動畫片《沒頭腦與不高興》描寫了兩位少年:“沒頭腦”與“不高興”?!皼]頭腦”做起事來總是丟三落四,“不高興”待人處事總愛別別扭扭。不久,“沒頭腦”當(dāng)上了工程師,“不高興”當(dāng)上了演員?!皼]頭腦”設(shè)計(jì)了一座一百九十九層高的少年宮,樓建好以后,才發(fā)現(xiàn)忘記了設(shè)計(jì)電梯。孩子們?yōu)榱嗽谶@個大樓頂層的劇院看 戲,需要帶著鋪蓋、干糧爬一個月的樓梯,害人不淺。其實(shí),我們在日常生活中也能看到不少“沒頭腦”的作品。工程師需要構(gòu)建的一定是一個系統(tǒng)。系統(tǒng)一定需要 全面、整體、有機(jī)的設(shè)計(jì),不能有缺陷與差錯。切忌成為“沒頭腦”的工程師。
在微軟,與唐朝暉博士等合作開發(fā)了SQL Server 2005中的文本數(shù)據(jù)挖掘功能。其中的Term Extraction工具可以從數(shù)據(jù)庫中的英文文本中自動抽取名詞短語。這個工具的輸入通常是英文文本,看似單一,但設(shè)計(jì)這個工具時,必須考慮處理其他非 正常輸入,應(yīng)對所有可能,比如,亂碼、非英文、特殊字符、全文本大寫、不含標(biāo)點(diǎn)符號文本,等等。記得開發(fā)團(tuán)隊(duì)一起構(gòu)建了一張巨大的邏輯圖表,將所有可能的 輸入列出,準(zhǔn)備處理方案,力圖做到“兵來將擋,水來土掩”。這個項(xiàng)目確實(shí)鍛煉了大家系統(tǒng)解決問題的能力。
站在用戶角度看問題
蘋果公司的產(chǎn)品,如iPad,用戶界面非常簡單、直觀與易用。據(jù)說兩歲的兒童也能無師自通,自如地使用iPad。理由很簡單,蘋果的產(chǎn)品都是為用戶著想,站 在用戶的角度上設(shè)計(jì)的。正是因?yàn)槿绱?,蘋果的產(chǎn)品能夠得到廣大用戶的喜愛和追捧。道理雖然簡單,但我們會發(fā)現(xiàn),許多工程師在開發(fā)系統(tǒng)時常常做不到這一點(diǎn), 所以做出的東西,根本不好用。
在NEC參加的第一個項(xiàng)目是個失敗的項(xiàng)目。目標(biāo)是開發(fā)自然語言的用戶界面,自動將用戶輸入的日語問句轉(zhuǎn)換成 SQL語句,以便讓普通用戶很方便地訪問數(shù)據(jù)庫。這個項(xiàng)目的初衷很好,但面臨的最大挑戰(zhàn)是,語言的表現(xiàn)力極其強(qiáng)大,同樣一個意思,可以有許多種不同的說法。開發(fā)到最后,系統(tǒng)只能接受受限的自然語言輸入(當(dāng)時還沒有基于統(tǒng)計(jì)學(xué)習(xí)解決問題的想法,也許可以通過大數(shù)據(jù)、統(tǒng)計(jì)學(xué)習(xí)的方法在一定程度上能夠解決這個問題,這也是自然語言處理今后研究的一個方向)。拿給用戶使用,反饋非常差,因?yàn)閷τ脩魜碚f掌握受限的自然語言比掌握SQL語言還要困難。沒有能站在用戶 的角度上考慮問題導(dǎo)致了項(xiàng)目的失敗。
以最小代價獲得最大效益
汽車大王福特曾說:“對實(shí)業(yè)家來說,一條重要法則就是盡可能地以最低的代價生產(chǎn)出最高質(zhì)量的產(chǎn)品,給工人發(fā)出最高的工資?!备L毓?908年出的 Model T汽車價格是825美元,當(dāng)時沒有多少人能夠買得起,到1924年Model T價格降到290美元,成為一款大眾車,在美國每兩臺售出的汽車中就有一臺是Model T。
其原因是福特公司導(dǎo)入了生產(chǎn)流水線,大大地降低了生產(chǎn)成本。在流水線上,Model T的零部件被標(biāo)準(zhǔn)化,維修成本也大幅下降。工程與其他領(lǐng)域(如科學(xué)、藝術(shù))的不同在于它必須考慮代價,包括開發(fā)的代價、推廣的代價、使用的代價和維護(hù)的代 價。工程師開發(fā)系統(tǒng)與工具時,必須權(quán)衡效益與代價,力圖以最小的代價獲得最大的效益。
我在微軟參與了Office 2007、Office 2010、Office 2012中SharePoint的開發(fā),具體從事元數(shù)據(jù)抽取與企業(yè)搜索功能的開發(fā)。我所在的研究團(tuán)隊(duì)開發(fā)了文件元數(shù)據(jù)自動抽取工具,有兩種方法實(shí) 現(xiàn):CRF與SVM。CRF的精度比SVM高1個百分點(diǎn),但就抽取部分的代碼量而言,CRF是SVM的若干倍。找SharePoint的架構(gòu)師 Meyerzon商量,到底采用哪種方法好?Meyerzon毫不猶豫地答道:當(dāng)然選SVM,因?yàn)樗木戎坏?個百分點(diǎn),但所需開發(fā)維護(hù)的代碼量卻少得 多。對產(chǎn)品來說,開發(fā)的代價是不能不考慮的因素。
磨在細(xì)處
對工程師而言,上帝就存在于細(xì)處!只有精雕細(xì)琢、潛心造作,才能做好工程項(xiàng)目。好的系統(tǒng)與工具是靠一點(diǎn)一滴打磨出來的。工程師必須在實(shí)際工作中不斷磨練自己的技能,以達(dá)到手藝精湛、技術(shù)嫻熟的境地,能夠像庖丁一樣游刃有余地解牛,像賣油翁一樣點(diǎn)滴不濺地倒油。
在NEC期間,一起工作的工程開發(fā)團(tuán)隊(duì)的負(fù)責(zé)人叫濱田,從他那里學(xué)到了許多編程的技能。特別是在他指導(dǎo)下,開發(fā)了文本數(shù)據(jù)分析系統(tǒng)TopicScope中的核心算法。我不是編程高手,編程只有普通程序員水平,但同事們都說我的代碼寫得很好,條理清晰,結(jié)構(gòu)合理,內(nèi)容精煉。
這是因?yàn)槲以跒I田的影響下,花了很多功夫?qū)懘a。對項(xiàng)目的設(shè)置、文件的分配都反復(fù)斟酌,函數(shù)、變量的命名都細(xì)心推敲,對系統(tǒng)的執(zhí)行效率都不斷優(yōu)化。寫好了程序,過一段時間又拿出來檢查、評價、修改,直至不能找出毛病為止(可惜加入微軟以后,幾乎沒有時間再寫代碼,真希望今后能做一些編程工作)。
從實(shí)際工作做起
以上這些原則都很簡單,但真正做好卻并不容易,可謂“知之非難,行之惟艱”。重要的是在實(shí)際工作中努力依照這些原則去做,養(yǎng)成成為優(yōu)秀工程師的習(xí)慣。培養(yǎng)自己直接解決問題,系統(tǒng)地解決問題,從用戶的角度解決問題,考慮效益與代價解決問題的能力。不斷提高自己的專業(yè)技能,在工作中努力做好細(xì)節(jié)。你一定知道一些優(yōu)秀的工程師,他們甚至就在身邊,可以把他們作為榜樣,虛心向他們請教,學(xué)習(xí)他們的長處,不斷提高自己作為工程師的素質(zhì)和能力。另外,敢于嘗試,不怕失 敗,在失敗中及時吸取教訓(xùn),總結(jié)經(jīng)驗(yàn)也是非常重要的。
-
工程師
+關(guān)注
關(guān)注
59文章
1571瀏覽量
68560
發(fā)布評論請先 登錄
相關(guān)推薦
評論