數(shù)據(jù)科學(xué)家告訴你哪些計算機(jī)科學(xué)書籍是你應(yīng)該看的
人們常說數(shù)據(jù)科學(xué)建立在三大支柱上:領(lǐng)域?qū)I(yè)知識,統(tǒng)計數(shù)據(jù)和編程。RStudio的***科學(xué)家,開發(fā)30多個R包的Hadley Wickham推薦了5本他認(rèn)為***的關(guān)于計算機(jī)科學(xué)基礎(chǔ)的書籍
以下為fivebooks.com的Edouard Mathieu對數(shù)據(jù)科學(xué)家Hadley Wickham的訪談內(nèi)容。
Edouard Mathieu:首先讓我們來談?wù)勀愕臄?shù)據(jù)科學(xué)和計算機(jī)科學(xué)之旅。今天,你是RStudio的***科學(xué)家,也是數(shù)據(jù)科學(xué)界備受尊敬的人物。然而,你最初的背景是人類生物學(xué)和統(tǒng)計學(xué)。是什么讓你選擇這條路?你是如何從一個程序員開始的,并開始參與數(shù)據(jù)科學(xué)的?
Hadley Wickham:這是一個不斷改變的過程,一開始,我是從新西蘭的高中升入一個醫(yī)學(xué)院校,一年之后意識到我不想成為一名醫(yī)生。我決定回到高中時真正喜歡的東西,那就是編程和數(shù)學(xué)。我很早就開始編程; 我父親有一臺工作電腦,所以我就利用它探索Word,Excel和Access等東西,編寫小程序和宏。在高中也曾為別人編寫數(shù)據(jù)庫,并學(xué)習(xí)了一些PHP來創(chuàng)建網(wǎng)站。
所以在我攻讀統(tǒng)計學(xué)和計算機(jī)科學(xué)學(xué)位時,就已經(jīng)對編程有所了解,大學(xué)是在奧克蘭大學(xué),這是R編程語言的發(fā)源地;幾乎每個人都在使用它,作為一名學(xué)生,我不得不用它來做統(tǒng)計。我發(fā)現(xiàn)它非常有趣,于是攻讀了統(tǒng)計學(xué)博士學(xué)位
Edouard Mathieu:在我們深入研究并討論這些書籍之前,您對學(xué)習(xí)數(shù)據(jù)科學(xué)時采用的編程語言有何看法?顯然,你***的貢獻(xiàn)是在是在R語言,不過你也參與了其他的項目,這些項目你嘗試將R和Python結(jié)合起來,而且許多底層代碼是使用C++,一個數(shù)據(jù)科學(xué)家如果想要有一個扎實(shí)的計算機(jī)科學(xué)基礎(chǔ),你認(rèn)為除了R語言還應(yīng)該學(xué)習(xí)哪一種通用語言。
Hadley Wickham:這是個有趣的問題。C++對我來說是一個非常重要的工具,我工作的目標(biāo)是編寫C++代碼,不過從事數(shù)據(jù)科學(xué)不必這樣做了。實(shí)際上,如果你從事數(shù)據(jù)科學(xué)的工作,那么SQL的基礎(chǔ)知識是非常重要的,同時你還應(yīng)該具備R和Python的知識,許多數(shù)據(jù)科學(xué)團(tuán)隊都使用它們,***擅長其中一種。
下面開始詳細(xì)了解下書籍
1、《計算機(jī)程序的構(gòu)造和解釋》
麻省理工已經(jīng)不再使用這本書來教計算機(jī)科學(xué)導(dǎo)論了,用Python替代Scheme,而Scheme是這本書使用的語言,這背后的原因可能是這個世界上已經(jīng)不需要那么多的計算機(jī)科學(xué)家,簡單來說,如今更需要的是知道如何使用編程語言并能夠?qū)⑺糜趯?shí)踐的工程師。
但這本書對于具備高級工程語言經(jīng)驗(yàn)的人來說用處很大,如VBA、PHP和R它們是非常好的編程語言,但許多計算機(jī)科學(xué)家都對他們表示不屑,本書向你展示了語言如何構(gòu)建,這本書***的價值在于他能給你創(chuàng)造編程語言的信心和知識。
還有另一本書也值得一提,《Concepts, Techniques, and Models of Computer Programming》,它比《計算機(jī)程序的構(gòu)造和解釋》更復(fù)雜一些,解釋了編程語言是如何與計算機(jī)模型組合到一起的。
2、《算法設(shè)計手冊》
這本書揭密了算法的設(shè)計與分析,以簡單易懂的寫作風(fēng)格,介紹了各種算法技術(shù),著重強(qiáng)調(diào)了算法分析,全書包括兩大部分,“技術(shù)”部分介紹了設(shè)計和分析計算機(jī)算法的各種方法,“資源”部分給出了大量的參考資源,以及算法實(shí)現(xiàn)的各種資源。
3、《程序員修煉之道》
這本書是關(guān)于軟件開發(fā)工藝,并兼顧了如何編寫良好代碼的書籍,顧名思義,這是一本非常實(shí)用的書籍,至少對于我這樣的一名軟件工程師來說真的有幫助,它能幫助你編寫出高質(zhì)量的代碼,這是我們很少會在大學(xué)教育中談到的事,更不用說統(tǒng)計學(xué)家了,這本書的目標(biāo)是幫助你將想法轉(zhuǎn)變成代碼,并和大家分享
4、《編寫可讀代碼的藝術(shù)》
編寫可讀代碼的問題不在于識別問題,而是在于你能夠判斷一段代碼是否是可讀的,以及知道如何讓它變得更好,軟件開發(fā)社區(qū)經(jīng)常用“爛”這個詞來形容爛代碼,我喜歡這本書的***原因在于它提供了一系列的技巧來幫助你避免寫出爛代碼。
5、《Style: Lessons in Clarity and Grace 》
有時候看到某個句子或者某段話,會認(rèn)為它寫的不好或者沒有意義,這本書給了我一些工具來分析一篇文章,并找出它不好的原因。其實(shí)這對編程也是有所幫助的,很顯然,編程就是你在和計算機(jī)交流,而且你還是在和其他人交流,你沒法編寫一個單元測試來測試人們對你代碼的理解程度。
關(guān)于Hadley Wickham
RStudio的***科學(xué)家,萊斯大學(xué)的助理教授,資深R社區(qū)成員,已開發(fā)了30多個R包。因在數(shù)據(jù)處理和可視化開發(fā)工具方面的卓越貢獻(xiàn),獲得專為統(tǒng)計計算而設(shè)立的約翰·錢伯斯獎。