努力成為優秀的工程師

2021-06-27 21:38:19 字數 3569 閱讀 2819

摘要:華為諾亞方舟實驗室首席科學家李航結合自己的親身經驗,提出了成為優秀工程師應該遵循的五項原則:面對問題,解決問題;系統地解決問題;站在使用者角度看問題;以最小的代價獲得最大的效益;磨在細處。

我一直在it企業的研究部門任職,迄今經歷了三家公司:nec、微軟、華為。工作都是既有基礎研究,又有產品開發。其實,這兩者既有密切聯絡,性質上又迥然不同。前者在於發現或發明普適性的理論與方法,後者在於開發實用性的系統與工具。可以說,前者需要的思維方式、基本技能與素質是科學家的,而後者是工程師的。我經常提醒自己,一定要明確在具體專案中自己到底帶著什麼「帽子」在工作,是科學家,還是工程師?

面對問題,解決問題

西方有句諺語:「當手中拿著榔頭的時候,你會覺得看到的東西都像是釘子」。根據自己的喜好、特長、習慣來解決問題是工程師的大忌。做工程時最重要的是要面對問題、解決問題。可取的策略應該是探明問題的本質,弄清問題的機理,用最直接、最有效的辦法解決問題。經驗告訴我們,拐彎抹角地解決問題,效果總是不好的。做工程時並不一定需要理論。只要能夠有效地解決問題,其實什麼方法都行。「不管白貓黑貓,捉住老鼠就是好貓」在這裡也是適用的。當然有理論指導的方法 往往更能抓住問題的本質,以其為工具常常能把問題解決得更好。

在nec工作時,我曾參加乙個自然語言研究小組的立項會議。他們建議開發語音系統來幫助使用者遙控電視機,因為現在的遙控器操作都過於複雜,不利於老人與兒童使用。用語音聲控電視,當然是很好的想法,現在仍有許多企業在進行這項應用的開發。印象特別深的是他們斷言,除了通過語音的辦法,不存在其他解決方案。當時,我也認為他們的想法很有道理。

不料,沒過幾個月,日本的其他幾家電器公司推出了用編碼遙控電視的方法,更簡單、更實用。遙控器的操作主要靠數字輸入,每個電視節目都配上乙個編碼,報紙每天將編碼在電視節目欄中公布,使用者只要輸入編碼即可**或錄製相應的節目。

這件事對我的內心產生了很大的震動,自問為什麼nec的同事們只想到自然語言這條路,而忽視了其他路?不正是因為他們手裡拿著自然語言這個榔頭的緣故嗎?

系統地解決問題

動畫片《沒頭腦與不高興》描寫了兩位少年:「沒頭腦」與「不高興」。「沒頭腦」做起事來總是丟三落四,「不高興」待人處事總愛彆彆扭扭。不久,「沒頭腦」當上了工程師,「不高興」當上了演員。「沒頭腦」設計了一座一百九十九層高的少年宮,樓建好以後,才發現忘記了設計電梯。孩子們為了在這個大樓頂層的劇院看戲,需要帶著鋪蓋、乾糧爬乙個月的樓梯,害人不淺。其實,我們在日常生活中也能看到不少「沒頭腦」的作品。工程師需要構建的一定是乙個系統。系統一定需要全面、整體、有機的設計,不能有缺陷與差錯。切忌成為「沒頭腦」的工程師。

在微軟,與唐朝暉博士等合作開發了sql server 2005中的文字資料探勘功能。其中的term extraction工具可以從資料庫中的英文文字中自動抽取名詞短語。這個工具的輸入通常是英文文字,看似單一,但設計這個工具時,必須考慮處理其他非正常輸入,應對所有可能,比如,亂碼、非英文、特殊字元、全文本大寫、不含標點符號文字,等等。記得開發團隊一起構建了一張巨大的邏輯圖表,將所有可能的輸入列出,準備處理方案,力圖做到「兵來將擋,水來土掩」。這個專案確實鍛鍊了大家系統解決問題的能力。

站在使用者角度看問題

蘋果公司的產品,如ipad,使用者介面非常簡單、直觀與易用。據說兩歲的兒童也能無師自通,自如地使用ipad。理由很簡單,蘋果的產品都是為使用者著想,站在使用者的角度上設計的。正是因為如此,蘋果的產品能夠得到廣大使用者的喜愛和追捧。道理雖然簡單,但我們會發現,許多任務程師在開發系統時常常做不到這一點, 所以做出的東西,根本不好用。

在nec參加的第乙個專案是個失敗的專案。目標是開發自然語言的使用者介面,自動將使用者輸入的日語問句轉換成 sql語句,以便讓普通使用者很方便地訪問資料庫。這個專案的初衷很好,但面臨的最大挑戰是,語言的表現力極其強大,同樣乙個意思,可以有許多種不同的說法。開發到最後,系統只能接受受限的自然語言輸入(當時還沒有基於統計學習解決問題的想法,也許可以通過大資料、統計學習的方法在一定程度上能夠解決這個問題,這也是自然語言處理今後研究的乙個方向)。拿給使用者使用,反饋非常差,因為對使用者來說掌握受限的自然語言比掌握sql語言還要困難。沒有能站在使用者 的角度上考慮問題導致了專案的失敗。

以最小代價獲得最大效益

汽車大王福特曾說:「對實業家來說,一條重要法則就是盡可能地以最低的代價生產出最高質量的產品,給工人發出最高的工資。」福特公司2023年出的 model t汽車**是825美元,當時沒有多少人能夠買得起,到2023年model t**降到290美元,成為一款大眾車,在美國每兩台售出的汽車中就有一台是model t。

其原因是福特公司匯入了生產流水線,大大地降低了生產成本。在流水線上,model t的零部件被標準化,維修成本也大幅下降。工程與其他領域(如科學、藝術)的不同在於它必須考慮代價,包括開發的代價、推廣的代價、使用的代價和維護的代 價。工程師開發系統與工具時,必須權衡效益與代價,力圖以最小的代價獲得最大的效益。

我在微軟參與了office 2007、office 2010、office 2012中sharepoint的開發,具體從事元資料抽取與企業搜尋功能的開發。我所在的研究團隊開發了檔案元資料自動抽取工具,有兩種方法實現:crf與svm。crf的精度比svm高1個百分點,但就抽取部分的**量而言,crf是svm的若干倍。找sharepoint的架構師meyerzon商量,到底採用哪種方法好?meyerzon毫不猶豫地答道:當然選svm,因為它的精度只低1個百分點,但所需開發維護的**量卻少得多。對產品來說,開發的代價是不能不考慮的因素。

磨在細處

對工程師而言,上帝就存在於細處!只有精雕細琢、潛心造作,才能做好工程專案。好的系統與工具是靠一點一滴打磨出來的。工程師必須在實際工作中不斷磨練自己的技能,以達到手藝精湛、技術嫻熟的境地,能夠像庖丁一樣游刃有餘地解牛,像賣油翁一樣點滴不濺地倒油。

在nec期間,一起工作的工程開發團隊的負責人叫濱田,從他那裡學到了許多程式設計的技能。特別是在他指導下,開發了文字資料分析系統topicscope中的核心演算法。我不是程式設計高手,程式設計只有普通程式設計師水平,但同事們都說我的**寫得很好,條理清晰,結構合理,內容精煉。

這是因為我在濱田的影響下,花了很多功夫寫**。對專案的設定、檔案的分配都反覆斟酌,函式、變數的命名都細心推敲,對系統的執行效率都不斷優化。寫好了程式,過一段時間又拿出來檢查、評價、修改,直至不能找出毛病為止(可惜加入微軟以後,幾乎沒有時間再寫**,真希望今後能做一些程式設計工作)。

從實際工作做起

以上這些原則都很簡單,但真正做好卻並不容易,可謂「知之非難,行之惟艱」。重要的是在實際工作中努力依照這些原則去做,養成成為優秀工程師的習慣。培養自己直接解決問題,系統地解決問題,從使用者的角度解決問題,考慮效益與代價解決問題的能力。不斷提高自己的專業技能,在工作中努力做好細節。你一定知道一些優秀的工程師,他們甚至就在身邊,可以把他們作為榜樣,虛心向他們請教,學習他們的長處,不斷提高自己作為工程師的素質和能力。另外,敢於嘗試,不怕失 敗,在失敗中及時吸取教訓,總結經驗也是非常重要的。

結束語

有人說漢字的「工」,上面一橫代表天,下面一橫代表地,整體表示頂天立地的事業(較一般的說法是,象形漢字的「工」代表工具)。能做好工程,成為優秀的工程師的確是一件了不起的事兒。特撰寫本文,與大家共勉。

作者李航,華為諾亞方舟實驗室首席科學家。曾任職於日本nec、微軟亞洲研究院。研究方向包括資訊檢索、自然語言處理、統計機器學習及資料探勘等。

努力成為優秀的工程師

華為諾亞方舟實驗室首席科學家李航結合自己的親身經驗,提出了成為優秀工程師應該遵循的五項原則 面對問題,解決問題 系統地解決問題 站在使用者角度看問題 以最小的代價獲得最大的效益 磨在細處。我一直在it企業的研究部門任職,迄今經歷了三家公司 nec 微軟 華為。工作都是既有基礎研究,又有產品開發。其實...

努力成為優秀的工程師

我一直在it企業的研究部門任職,迄今經歷了三家公司 nec 微軟 華為。工作都是既有基礎研究,又有產品開發。其實,這兩者既有密切聯絡,性質上又迥然不同。前者在於發現或發明普適性的理論與方法,後者在於開發實用性的系統與工具。可以說,前者需要的思維方式 基本技能與素質是科學家的,而後者是工程師的。我經常...

努力成為優秀的工程師 李航博士

一直在it企業的研究部門任職,迄今經歷了三家大公司 nec 微軟 華為。工作都是既有基礎研究,又有產品開發。其實,這兩者既有密切聯絡,性質上又迥然不同。前者在於發現或發明普適性的理論與方法,後者在於開發實用性的系統與工具。可以說,前者需要的思維方式 基本技能與素質是科學家的,而後者是工程師的。經常提...