选自Medium
作者:Christopher Madan
机器之心编译
参与:路雪、黄小天
本文作者 Christopher Madan 喜欢用 MATLAB 编程,尽管他是一个认知心理学家/神经科学家,编程对其来讲更多地是一个完成目标的工具。这篇文章的灵感来自 Olivia Guest 的博文《I hate Matlab: How an IDE, a language, and a mentality harm》,Olivia Guest 称自己不喜欢 MATLAB 不只是因为它是一款闭源、付费的软件,更主要的原因是 MATLAB 的有限资源限制了学生和科学家的技能。不过 Christopher Madan 却站在支持 Matlab 的角度,毕竟作者的绝大部分编程通过 MATLAB 完成,并且之前出版过针对行为研究者的 MATLAB 入门书籍(http://www.cmadan.com/book.php)。
MATLAB 的图形用户界面(GUI)具有很多功能。这对了解工作环境的多个变量、在当前工作环境中拥有代码编辑器窗口很有用处。在 MATLAB 的 GUI 中,你还可以在电子表格式的编辑器中编辑变量。尽管该特征就是如此,但是我同样认为用这种方式编辑变量是一种坏习惯。当然可以这样辩解:「如果那样的话,这个特征就不会有了!」可能吧,不过我仍然认为学习在 MATLAB 中编程需要一些指导(最好是有一个经验丰富的同事,或者至少有在线课程或书籍),只依赖 MATLAB 的特征进行技巧学习是不公平的。我教 MATLAB 的时候,不使用任何 GUI 特征进行变量编辑,不使用绘图工具。原因在于即使它具备这些特征,我们也未必就要使用它。不过特征多一些当然比少的好。
我每周使用 MATLAB 10-20 个小时(平均),但是我还使用很多其他编程语言,包括 Python。你需要重点考虑你想用某种语言做什么。对于认知神经科学研究而言,MATLAB 非常有用,因为它具备 SPM(用于 fMRI)、 EEGLAB(用于 EEG)等工具箱。没有太多编程能力也可以使用这些工具箱,不过熟练使用 MATLAB 可以帮助你深入了解情况,对工具箱的作用、如何调整代码获取一些内部变量有更好的了解。
在分析行为数据时,MATLAB 也很有用,因为它本身就很方便交互使用。必须承认,这可能导致面条式代码(spaghetti code),不过正因如此,接受编写代码文档和结构的训练对构建可复现分析流程非常重要。在使用 MATLAB 之前,我使用的语言是 Python,不过我厌倦了在提交代码至脚本和功能之前无法积极处理代码、无法「自由地」写代码。Python 由志愿者开发,而 Matlab 由公司开发,因此有更全面的途径实现功能开发(如整合性的绘图功能,而不是先使用 matplotlib 再使用 seaborn)。MATLAB 内部的工具箱内还具备更多一致性,因为公司在管理不同团队的开发活动。
在对比不同编程语言的时候,无疑它们各有独特优势。我认为 MATLAB 擅长提供灵活的工作空间——比如,通常 MATLAB 并不允许在同一文件中有多个外部可访问的函数,但是这有简单的解决对策,可在一分钟内搜索到需要的函数。展开来讲,一个重要的问题是:认知心理学家/神经科学研究者应该具备多少编程技能?在我看来,他们不应该在电子表格程序中进行分析,但我也不认为他们应该具备开发分析工具箱的技能。
我喜欢使用 MATLAB 的部分原因是发现它的语法比 Python 或 R 更加直观。不过也不会受到它的限制,对其他采用类似语法的语言我也很感兴趣。
结语
本文受 Olivia 博文的启发而写,但并非直接回应。Olivia 文中的一些主题本文没有涉及,比如 MATLAB 没有一个正式指定的语法,并可在新版中改变语言——也许我忽略了这一问题是因为我不是正式的编程人员。尽管 Matlab 是封闭的,但很多内部代码是可见的,因此我不认为使用 MATLAB 是「不道德」的行为。
原文链接:https://medium.com/@cMadan/why-i-love-matlab-aca95bec731e
MathWorks 最新发布的版本 MATLAB R2017b 完善了对深度学习的全面支持,可帮助工程和系统集成团队将 MATLAB 拓展用于深度学习。本周二,MathWorks 高级应用工程师陈建平将微信直播,分享如何开发一个能够真正下载到嵌入式 GPU 环境的深度学习应用。点击阅读原文,参与注册报名。