備受推崇的R in Action真的值得如此好評嗎?——授人以魚與授人以漁
R in Action真的那麼好嗎
《R in Action》(中譯名可能更加為人所熟悉:R語言實戰)一書非常得火爆,也獲得了眾多R使用者的好評。2016年,作者還進行了大篇幅的更新,新增了近200頁內容。在豆瓣讀書、統計之都以及知乎的R話題下,該書幾乎都是清一色好評,也是被推薦次數最多的R預言書籍。特別地,它大概也是各類社區中被推薦最多的給R入門教程,可能沒有之一。
但我們不禁要問,這本書真的值得如此好評和推崇嗎?真的是很好的入門書籍嗎?
這個問題令我想起了我初學R的經歷。那時因為很快就要在工作中大量進行數據分析和統計建模工作,我決定抓緊一切時間學習R這門為統計而生的語言。彼時Springer出版社剛好出版了一套關於R的書,每本都是200頁左右的小冊子,著重覆蓋一個核心主題,從基本的data manipulation,到applied econometrics中的常用計量模型的實現,以及統計和衍生品定價中經典的Monte Carlo simulation,等等,不一而足。我頓時感覺如獲至寶,將能找到的書都找出來,一本一本看,並自己敲代碼,以熟悉這些操作。
於是,很快,我感覺自己什麼都會了,各種統計分析操作,都可以輕鬆應對。於是我信心滿滿地投入了新工作,力圖用自己所學的技能,從數據中去挖掘資產價格變動的規律,幫助我的小夥伴構建可以持續盈利的交易策略。然後,問題來了,而且是接踵而至。我發現我不斷地遇到問題/狀況,比如,數據不齊整,某一行數據有缺失,標準的數據讀取函數無法正確讀取數據。又或者,對收益率時間序列進行分析時,發現其中有NA,導致標準package里的函數無法使用。再如,我找不到現成的函數做測試,於是自己寫了個循環,發現也許算一天也算不出來。更為可怕的是,當我過幾天回頭去看之前的代碼時,我已經不知道自己當時的想法了,彷彿就是我從來沒寫過這些代碼一樣。
以上可能是很多新手遇到過的囧境。這一點,《R in Action》可能實在難以給出有效幫助。事實上,Springer的這一系列,每一本書,在它所著重的那一方面,都講解地很清晰,例子也很詳實,相比《R in Action》一書,可能還要更細緻。這每一本書,我也都自己一行一行地敲代碼,認真學習過。然而,我還是不可避免地犯錯,遇到問題,然後,手足無措。
回頭看,那時真正缺乏的,是對整個語言的系統性的、高屋建瓴的理解,是不懂編碼規範,也不懂遇到問題的解決步驟,所以對於一個已經寫過的具體問題,大概可以折騰出來,但對於不懂的問題,對於需要整合的代碼,就沒法推進工作了。
這一點,《R in Action》可能也是同樣的。以我自己和身邊朋友的經驗教訓而言,對於編程/數據分析語言,尤其是這類所謂的高級語言,學習的最佳路徑是先了解最基本的概念和操作,然後就試著去做項目,無論是工作可能需要的,還是純粹自己感興趣的。當然,最好是後者,這樣你的壓力感不會那麼大,動力感則更足,更為重要的是,你可以充足地從一個十分簡化的方案著手,一步步去完成、擴展你的項目。在這個過程中,遇到問題,善用google等搜索引擎,你會找到那些知名的開源社區上,很多人曾經遇到過相似的問題,並從別人那獲得了幫助。你可以借鑒這些經驗,來優化你的項目。對於這些學習,干中學是最好的。
這一點是很重要的,但這並不是本文的重點。與前述對《R in Action》一書的分析相關的另一點是,它沒有很好地給出R作為一門統計建模/編程語言的整體架構,例如核心功能、數據結構、編程範式,和它們背後的設計原理,與其他語言的關聯,以及由此衍生出的特徵與優缺點。而這些,對於真正掌握這門語言,熟練應用於實際的建模和項目中,是極其重要的。
這也是為什麼,雖然如此多人都強烈推薦它,但我仍然並不贊同的核心原因。反而,我更推崇Hadley Wickham大神的《Advanced R》,雖然理論上這本書應該是進階讀物。
說起來,了解的朋友都知道,作為一個R重度用戶,對Hadley大神我自然是讚不絕口的,甚至可以說,他在相當程度上改變了R語言。而在這本系統性論述R語言使用的書里,Hadley則從相當的高度,將R的設計和特徵娓娓道來。舉個最簡單的例子,關於數據結構,一般的書里會告訴你,R的數據類型包括vector、matrix、array、data.frame、list這幾種基本數據類型,而這4種類型各有其用途和限制:vector保存一維數據,且必須是同類型的,matrix可以保存二維數據,array則用於保存多維數據。而data.frame用於保存矩陣,但不同列可以是不同類型,list則可以保存任意類型的元素。特別地,我們在實際使用data.frame時,查看其類型,往往會發現,除了data.frame,它也是list。而其他拓展包可能還包括其自定義的數據類型。看起來還蠻暈的,對吧?但Hadley會很直接地告訴你,R的數據結構分為兩類,一類要求其元素都是同一類型的,另一類則不要求。前者進一步依據數據維度分為vector、matrix和array,後者則統統都是list,且在數據剛好為矩陣形式時,可以轉化為data.frame這種特殊結構。
這只是一個小例子,也許也沒有完全展示清楚《Advanced R》一書的高度,但大家應該大體有個感覺,二者的角度/高度是不一樣的。只要仔細閱讀完書籍,類似的對比可以發現非常多。當然,《R in Action》本身仍是好書,只是實戰並不僅僅靠看書或者跟著書敲代碼就可以學會,而是需要實打實的項目實戰經驗。與此相反,整體的綜合性的視野,相當程度上就是讀書可習得的,尤其是此前對此沒有經驗、白紙一張的朋友,更加容易接受這些想法和理念。這也是我個人非常推崇直接學習《Advanced R》一書的原因。而且,事實上,《Advanced R》對於諸多基本概念也有講解,而且更加深入,完全可以用於入門學習,只是對於新手,一開始不用學習高級主題而已。此外,《Advanced R》一書本身以gitbook的形式提供免費版,且今年剛正式發布了第2版。
當然,事實上,讀者們對此總體上還是有客觀的評價的,以豆瓣讀書為例,《R in Action》不同版本總體的平均得分接近9.0,而《Advanced R》平均分則高達9.7。但一方面差距並不足以非常明確地體現差異,另一方面,更為重要的是,前者評價數超過1000,而後者不到100。數量的差異很明顯地顯示,《R in Action》的讀者群要龐大得多,個人覺得這並不是非常理想的現象。
授人以魚,不如授人以漁
當然,本文想討論的,並不僅僅是一本書而已,何況這本書本身仍不失為好書,只是相較之下,個人更推崇另一本而已。更重要的是這個判斷背後的邏輯:從足夠的高度,講清楚一個軟體,一套理論,或者anything else背後的邏輯和原理,比單純告訴人怎麼應用,對人的幫助,會大得多。用一個類似的成語來表達,就是授人以魚,不如授人以漁。
舉個例子。學經濟類專業的朋友應該知道,經濟學主要研究資源配置與人的選擇的,其中,微觀經濟學主要研究單個個體的決策選擇,而宏觀經濟學則側重研究整個經濟體中的諸多變數,對經濟均衡、經濟增長和經濟波動的影響。微觀經濟學的一大基礎是效用函數,經濟理論一般假設所有人的決策行為都是在約束下最大化效用。雖然效用難以準確定義,但這一框架符合直覺,是可以接受的起點。然後問題就來了。老師們在上課時,往往會直接粗暴地假定,效用函數為某種特定的形式,這種形式看起來是相當不可思議的。與此同時,對於那些滿是疑惑的好奇寶寶們,老師往往會說,出於求解的便利(比如為了獲得漂亮的解析解),我們需要這樣的假定。呃,等一等,我們是在做應用題嗎?我們學這些的目的,是想要用於實際的分析誒。當然,更有甚者,學宏觀經濟學和金融資產定價的同學可能知道,為了簡化分析,效用函數通常被假定為所謂的CRRA形式(constant relative risk aversion),而這種效用函數是滿足CRRA特徵的最簡單的函數形式。
是不是很絕望?這樣脫離現實的粗暴假定,學習之後,敢用於實際的建模分析嗎?其實老師們完全可以稍微做得更好,哪怕仍然是直接拋出這些假定,只要在做出這些假定的同時,告訴同學們,這些假定是如何一步一步構造出來的,除了便利求解之外,它們與現實生活有什麼關聯(例如,是依據對現實世界的觀察所做的假定,或者只是一定程度的偏離,在後續的模型中,通過某種調整,就可以逼近真實,抑或如科學哲學理論所討論的,據此構建的理論可以很好地解釋生活中的真實事件,理論未被證偽,我們不用過於擔心假定的真實性)。
另一個類似例子是我自己近年研究較多的FoF與智能投顧。隨著資產管理行業的大發展和金融科技的浪潮,FoF和智能投顧近年也從美國引入中國,快速地發展起來。但仔細研究你會發現,整體上,無論是商業模式、還是具體的投資策略、人才管理,國內與美國的情況都有很大差別,是否能很好地發展,以及如何參與,能最好地為潛在用戶提供服務,構建起自己的商業模式和生態,實際上非常複雜。但很多相關的書籍資料,也都是泛泛地進行一點介紹,隨即對幾個常規策略進行一點介紹,並沒有較為系統的梳理,以及投資策略表現的深入剖析。這其實非常不好。終端投資者和潛在用戶如果不能理解這些產品和服務能幫他們做什麼,以及產品確實不能幫他們創造價值,那這條路就會很難走得長久,甚至行業的名聲都可能被敗壞掉。這些也是我在嘗試進行相關的寫作的一個重要推動力,雖然自己也微不足道,但尚且對此有一些研究和一些理想,希望盡自己的綿薄之力。當然,這是題外話了。
最後,話說回來,在這篇短文中,我並不是要刻意強調《R in Action》不好,事實上,我仍然贊同它是一本好書(百科全書式的),只是結合這麼多年的經驗教訓與觀察,個人認為授人以魚不如授人以漁這句古訓講得實在是好,對於統計建模和編程這類需要深入理解才能真正在實踐中用好的工具的學習,這一點可能尤其重要。特別地,對於諸如經濟學、金融學等以實踐為主要目的的學科,最好的教學/學習思路一定是這樣。
推薦閱讀:
TAG:R(編程語言) | HadleyWickham | R語言實戰(書籍) |
