Foreword 推 薦 序程式師、科學家、工程師之間有什麼差別?這個問題,我問過許多“軟體工程師”,大家似乎都沒法說得特別清楚,常見的答案是從名字上來區分:程式師只關心 代碼,工程師負責的是系統,科學家的理論知識非常深厚。它的潛臺詞是:你看,我是個工程師,我不只關心代碼,我還為系統負責,但是,你沒法對我的理論知識 做太多要求。
看來,實際情況也確實如此。前些年,我在一支頗有效率的開發團隊裡,組織大家“補習”資料結構和演算法。我驚奇地發現,不少主力開發人員做起業務功能來異常 拿手,毫不畏懼,但面對簡單的“理論問題”—比如如何從一個陣列中找到和最大的兩個元素—竟然束手無策。而且很多人都認為,這不是問題。
我想,這就是很大的問題。
“工程”這回事,是什麼時候出現,並讓大家意識到它不等於“手藝”的呢?具體時間或者不可考,但有個故事很能說明問題。
1742年,教皇本尼迪克特十四世(Benedict XIV)需要派人診斷羅馬聖彼得大教堂拱頂出現的裂紋。傳統上,這種事情總是要找建造經驗最豐富的工匠。但是這次不一樣,教皇把任務指派給了三位數學家, 其中一位還曾編輯和注釋過以撒·牛頓的《自然哲學的數學原理》。在那個年代,他們的診斷方法和結論都引發了巨大的爭議,因為其違背了無數工匠的經驗和直
覺。按照三位數學家的結論,拱頂的箍環承受不了水準的推力,必須新增三個帶鏈條和鐵釘的鐵環,才能確保建築的完整。
他們的建議被採納了。今天,如果你去羅馬,仍然可以看到完整的聖彼得大教堂。
土木工程師兼歷史學家斯特勞布評論說:這份報告在土木工程史上有劃時代的意義……重要性在於,與所有的傳統和常規相反,對建築結構的穩定性的勘測,不是建立在經驗規則和靜態感覺的基礎之上,而是建立在科學的分析和研究之上。
從此大家逐漸相信,建築不再是一門“手藝”,要想建造更複雜、更偉大的建築,科學和研究是無論如何離不開的。今天,如果土木工程師在工作時不依照模型、理論、計算,而是完全按照經驗和直覺,哪怕他的經驗再豐富,也不能稱為“工程師”。
在我看來,軟體發展,在某種程度上也處於相同的時間點。我承認,之前的大量開發工作,不需要太多理論和科學知識,單純憑經驗和直覺就可以完成。但是如今, 我們已經無可避免地被捲入大資料的洪流之中—哪怕是“傳統”的互聯網開發,也已經大不相同了。我們寫的每一個功能,都可能被成千上萬人,在成千上萬的場景
下,成千上萬次地使用。在整個過程中,成千上萬的埋點、成千上萬的感測器,會留下巨細靡遺的資料。如何還原場景、找到問題、做出改進,答案往往就藏在這些 資料當中,誰看得懂、玩得轉這些資料,誰就能找到答案。
拿簡單的“上課前給用戶打電話通知”來說,它絕不再是“調用供應商介面發一個語音”那麼簡單。提前多久給用戶打電話回饋好?什麼樣的語音資訊最容易接受? 各地用戶有什麼特別偏好?不同年齡段的用戶接受程度如何?……如果我們承認“用戶體驗”重要,那麼搞清楚這些問題便也很重要。公司搞不清楚,就會被用戶嫌
棄。工程師搞不清楚,就只能被動接受產品經理的指揮。而這些問題的答案,只能來自對資料的積累和分析。
不要妄想“資料科學家”能幫忙解決這些問題,“資料科學家”太寶貴了,只能用在業務價值最關鍵的場合。更多的場合,工程師只能挽起袖子自己上場。然而,大 部分工程師目前的資料處理能力還局限於極值、算數平均、方差等等少數幾項。許多工程師也承認,資料分析能力很重要,也希望學習,可是打開資料分析的專門教 材,一看到密集的公式,就已經打了退堂鼓。
怎麼辦?我認為,閱讀《資料分析實戰》是個不錯的出路。之所以這麼說,有四個原因:第一,這本書的風格是“代碼先行”,而且是可以運行的Python代碼 先行,對於要用到的各種工具包、類庫的安裝,都有詳細的說明,這種風格對於工程師來說,天然有親切感;第二,例子都是非常實際的,無論是銀行電話行銷資料
分析,還是電網的發電量分析,以及影評文本分析,都很容易和生活經驗結合起來,容易理解;第三,非常注重出圖,全書用了相當多的篇幅講述畫圖,而且是用 JavaScript直接出圖,圖形非常有助於建立直觀的認識,JavaScript畫圖幾乎可以保證“人人都可以完成”;第四,譯者是工程師出身,在數
據分析這個行業有足夠豐富的經驗,同時也足夠謙虛,對於譯文的品質來說,這都是很好的保證。
實際上在我看來,普通的技術人員,無論之前做的是什麼工作,只要不是極端排斥資料分析,那麼閱讀這本書,都可以建立對資料分析的準確認知,並且還能真刀真 槍地玩上幾下:看,資料分析就是這樣。一旦掌握了基礎的知識和技能,無論把它們當作繼續深入學習的基礎,還是直接應用到現有工作當中去,都會有巨大的收 獲。
不要在1742年以後再當一個不懂數學的建築工匠,不要在大資料時代當一個完全不懂資料分析的工程師。如果認同這個判斷,歡迎你把本書當成高性價比的選擇。
餘 晟The Translator s Words 譯 者 序作為譯者,我其實不太敢說些什麼。一是譯者的話當然不如作者的話重要。作者尚未開口,譯者先在讀者面前高談闊論,怕是難免佛頭著糞引人譏笑。二是譯者的 話也可能會給讀者帶來一些令人啼笑皆非的影響。我還記得大二那年,因為愷蒂作了序,我在圖書館仔細閱讀了“譯林少兒文庫”中的一本書—從序言開始仔細閱
讀。讀完序言就已經瞭解了大致情節。等到最後二十頁,作者要給我帶來震撼時,我只好假裝不知道真相,配合性地震撼了一下。這本書就是《少年Pi的奇幻漂 流》。
但是,幸好擺在你面前的是一本技術書。而且是工具性質的技術書。這就好辦了。不用擔心譯序的罅隙洩露了情節。而我畢竟譯完了全書,對本書內容算是比較熟悉,也有義務介紹一下這本書,希望對你的使用有些助益。
本書大體上分三部分。第一部分是資料的基本處理,這部分內容讀者可能最熟悉,用到的頻率可能也最高;第二部分可以看成大學裡人工智慧概論課的補充材料,包括分類、聚類、降維、時間序列等主題;第三部分就是一些更深入的課題了,比如自然語言處理。
作為工具類技術書,本書講的都是具體的實戰技巧,非常實用。讀者可以根據實際需要,挑選特定的主題閱讀。不過我還是建議大家完整地讀一遍。作者很貼心,大部分知識點都給出了可以深入瞭解的參考資料。不妨通過閱讀本書,拓寬一下技術視野。
最近兩年,DeepMind公司不停地刷頭條。2016年年初AlphaGo戰勝了李世石,之後又有Master締造了連勝神跡,AlphaGo Zero戰勝了Master。近期推出的AlphaZero,經過很短時間的訓練,就超越了最強的國際象棋軟體、最強的將棋軟體,以及最強的圍棋軟體—之 前的AlphaGo
Zero。圍棋界和技術界都在向阿老師及其締造者學習。AI與資料科學也變得更加廣為人知。畢竟我們不僅要靠個人奮鬥,還要考慮歷史進程。
不過不管行業風口如何變幻,希望我們都能立足技術,從實際業務出發,潛心學習。老子說千里之行始於足下,莊子也講庖丁解牛丈人承蜩。我們不是一個簡簡單單寫代碼的人,我們是程式師,是要做資料科學家的。與大家共勉。
本書得以出版,首先要感謝機械工業出版社的王春華老師與張志銘老師,是他們的建議使我開始本書的翻譯,也感謝他們在翻譯過程中對我的信任、寬容與幫助;感 謝姜承堯老師、余晟老師在技術和專業翻譯方面給我的指導,讓我獲益良多;感謝陳文備、楊天宇、束文奐、康墨、胡林軍和劉禎,他們參與了全書譯稿的審校;還 要感謝我的好妻子翁聯吉,感謝她對我的理解與支持。
如果你對本書內容有任何疑問,歡迎與我聯繫。電子郵寄地址:
[email protected]。GitHub帳號:diaosj。祝各位閱讀愉快。
刁壽鈞