當前位置:
首頁 > 最新 > 如何學習一門新的編程語言?

如何學習一門新的編程語言?

作者|Karl Broman

譯者 | 謝麗

AI 前線導讀:統計學家及其他數據科學家應該精通多門編程語言,使用最合適的語言解決手頭的問題,比如,性能要求高的場景用 C++,互動式數據分析和圖表用 R,操作數據文件用 Python 或 Ruby。

更多乾貨內容請關注微信公眾號「AI 前線」,(ID:ai-front)

長期以來,我一直主張,統計學家(及其他數據科學家)應該精通多門編程語言。15 年前,我說過這樣一句話,「性能要求高的場景用 C,互動式數據分析和圖表用 R,操作數據文件用 Perl。」現在,我會用 C++ 替換 C,用 Python 或 Ruby 替換 Perl,但基本思想保持不變:使用最合適的語言解決手頭的問題。

多說幾句

很久以前我編寫了 Perl 教程。我還計劃編寫 C 和 R 的教程,但是一直都抽不出時間,只是編寫了資源頁(參見 C 簡介和 R 簡介)。

我編寫的 Perl 代碼非常糟糕:「只讀」,把數據文件從一種格式轉換為另一種格式的一次性腳本。我更喜歡 Ruby,但我編寫 Ruby 代碼時需要大量地藉助谷歌搜索。Python 更流行,因此,我向你推薦這門語言。(但是,我真得不喜歡處理 Python 中的正則表達式,而那好像又是我希望從那種語言獲得的主要東西,因此,我堅持使用 Ruby 操作數據文件。)近來,考慮到全新的 tidyverse 開發,對於數據文件操作,單獨使用 R 語言就可以解決。

然而,有時候,還是有問題需要你拿出看家本領。對於許多問題,我編寫的最乾淨的 R 代碼在速度上也比不上最凌亂的 C 或 C++ 代碼。因此,為了能夠完全地自給自足,我認為,你會希望自己有能力切換到更低級、更高效(計算,而不是編寫代碼)的語言。Julia 是許多人都提倡的方式,讓一門語言既簡單,又有很好的可讀性,同時運行速度還快。但是,我仍然認為需要切換語言(性能要求高的場景用 C++,互動式數據分析和圖表用 R,而對於數據文件處理,我還是傾向於切換到 Ruby)

有一段時間,Pjotr Prins 讓我編寫 D 代碼,他現在還是這個主張。不用說,我曾經很高興從 C 切換到 C++,從.C() 切換到 Rcpp. html 和 CSS。也許,我們還得加上 JavaScript 或者其他可以編譯成 JavaScript 的語言。(我喜歡 CoffeeScript;事實上,CoffeeScript 可能是我當下最喜歡的語言。)

對我來說,還有 SQL 和 MongoDB。數據科學家需要習慣於訪問規範的資料庫。

現在,我正在努力學習 PureScript,但是我發現進展緩慢,因此,我繞道學了點 Haskell,以便對「純粹的函數式語言」有個基本的了解。但是,我計劃稍後再回到 PureScript。

如何學習編程語言?

無論如何,我還是得嘮叨幾句:我覺得,最好是學習多門編程語言,至於如何學習,我根據自己的學習經驗提了一些可能有用的建議:

留出大量周期性的時間塊;

買一本書,或者買下所有的書;

心裡要有具體的目標 / 應用;

開發一個腳本,加上注釋,說明你學到的關鍵語言特性;

強迫自己使用新技能。

留出大量周期性的時間塊

學習一門新的編程語言需要投入時間並定期實踐。真得,你需要 2 到 4 小時的時間塊,如果你一個周不接觸這門語言,那麼就得花 30 分鐘才能回到正軌。(你之前正在做什麼?學到了什麼?下一步想學什麼?)為了回到正軌,你需要大量的幾個小時,然後才能取得一點進步。

買一本書,或者買下所有的書

我建議找一本好書跟著學。實際上,我往往會買下所有的書。但你至少需要一本或兩本。至於哪一本,那就看個人喜好了。我正在找給有編程經驗的人寫的書。但是,那本書是否適合我,主要取決於它使用了什麼類型的例子。然後是寫作風格和闡述質量。

例如,對於 Ruby,許多人推薦《Ruby 編程》,但就我個人而言,我覺得這本書的例子和主題順序不大適合我。我更喜歡《Eloquent Ruby》,然後是《The Well-Grounded Rubyist》。

通常,我會從查找 O』Reilly 的出版物入手;它們一貫是好書。但實際上,我最喜歡的書是其他出版商出版的:(在我看來)對於一門特定語言,最好的書不是來自 O』Reilly。

心裡要有具體的目標 / 應用

如果你真想在學習一門編程語言時取得進步,那麼你不能局限於書中的例子和練習,而是要開始創造性地使用這門語言解決自己的問題。也許你有一個特別不規範的數據文件需要解析整理。或者,你想要編寫一個 Web 應用,提供本地公交時刻表。我喜歡慢慢地理解這門語言及其特性,然後利用它做一些實際的、真實的東西。

開發一個腳本,加上注釋

重要建議:在學習過程中,開發點腳本,加上注釋及其他備註,說明你學到的各種語言特性。

首先,你需要記錄設置各種語言工具(編譯器 / 解釋器、庫,諸如此類)的詳細信息以及如何保持最新。(這類事情乏味、痛苦,但很關鍵。因此,一旦你搞清楚了,就需要記錄下來,以後就不用再做一次這樣的事。)對此,你可以看下我的 GitHub 庫 ProgrammingNotes,其中有各種備註。

但最重要的是,你需要一個可以快速瀏覽或搜索的非正式腳本,因為你會忘記下面這樣的東西:

這門語言的函數如何定義?

用什麼標記注釋?

如何串接兩個向量?

如何查找向量里的一個元素?

列表理解的語法是什麼?

這些都在你買的書里,但是,在自己編寫的簡短備註里找東西要簡單許多。例如,我做過一些:Python、 Ruby 和 JavaScript/CoffeeScript。

強迫自己使用新技能

最後,如果你真想把一門新編程語言加入自己的工具箱,你就需要在現實生活中強迫自己使用它。

有一天你會說,「我應該使用 Ruby 來做。算了,用 Perl 我 15 分鐘就做完了,而用 Ruby 我得花兩個小時。」但是,你必須強迫自己使用這門新語言。短期來看,換回你熟悉的語言最容易,但是,如果你想要在一門新語言上取得進步,你就需要在日常實踐中使用它,那並不簡單,但會越來越簡單。

最終,你的腦子裡將會有 4 門或 5 門語言,不管哪種語言,你都會記不得如何定義一個函數。那時,你就酷斃了。

查看英文原文:

http://kbroman.org/blog/2018/03/16/learning-a-new-programming-language/

如果喜歡我們的內容,記得給我們「留言」和「點贊」,給編輯鼓勵一下!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI前線 的精彩文章:

剛剛,傅盛正式發布了第一款區塊鏈AI音箱
伯克利推出世界最快的KVS資料庫Anna:秒殺Redis和Cassandra

TAG:AI前線 |