@lsmn
2018-03-19T12:33:13.000000Z
字数 2437
阅读 1619
编程语言
Perl
Ruby
Python
统计学家及其他数据科学家应该精通多门编程语言,使用最合适的语言解决手头的问题,比如,性能要求高的场景用C++,交互式数据分析和图表用R,操作数据文件用Python或Ruby。
长期以来,我一直主张,统计学家(及其他数据科学家)应该精通多门编程语言。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门语言,不管哪种语言,你都会记不得如何定义一个函数。那时,你就酷毙了。