首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你对科学计算最佳实践的思考?

你对科学计算最佳实践的思考?
EN

Software Engineering用户
提问于 2014-06-09 00:34:43
回答 1查看 677关注 0票数 1

Wilson等人(2014年)最近的一篇论文指出了科学规划的24种最佳做法。值得一看。我想听听有经验的程序员在科学数据分析方面对这些观点的看法。作者的建议听起来不错,但你认为这些建议有帮助和实用吗?正如他们承认的那样,介绍所有这些人可能需要花费大量的时间和精力。例如,放置断言和部署单元测试肯定需要额外的编码。然而,你认为没有受过编码训练的科学家(如生物学家)是否应该遵循这些原则呢?如果他们中的一些人太多了,我们应该根据什么去停止呢?

Wilson G、Aruliah DA、Brown CT、Chue Hong NP、Davis M、Guy RT、Had多克SHD、Huff KD、Mitchell IM、Plumbley MD、Waugh B、White EP、Wilson P (2014)科学计算最佳做法。PLoS Biol 12:E 1001745。http://www.plosbiology.org/article/info%3Adoi%2F10.1371%2Fjournal.pbio.1001745方框1.最佳做法摘要

  1. 为人而不是为计算机编写程序。(a)一个程序不应要求其读者同时保存超过几个事实。(b)使名称一致、独特和有意义。(c)使代码样式和格式保持一致。
  2. 让电脑来做这项工作。(a)使计算机重复执行任务。(b)将最近的命令保存在文件中以供重用。(c)使用构建工具实现工作流自动化。
  3. 进行渐进式的改变。(a)采取小步骤,经常反馈和纠正课程。(b)使用版本控制系统。(c)将手工创建的所有内容放在版本控制中。
  4. 不要重复自己(或他人)。(a)在系统中,每一项数据必须有单一的权威表示。(b)模块化代码,而不是复制和粘贴。(c)重复使用代码而不是重写代码。
  5. 计划错误。(a)在程序中添加断言以检查其操作。(b)使用现成的单元测试库。(c)将错误转化为测试用例。(d)使用符号调试器。
  6. 只有在软件正确工作之后才能优化软件。(a)使用分析器查明瓶颈。(b)以尽可能高级别的语言编写代码。
  7. 文件设计和目的,而不是机械。(a)记录接口和原因,而不是实现。(b)重构代码,而不是解释其工作原理。(c)将某一软件的文件嵌入该软件。
  8. 合作吧。(a)使用合并前代码评审。(b)在使新的人跟上速度和处理特别棘手的问题时,使用对编程。(c)使用问题跟踪工具。

我对科学数据分析的严肃编程还比较陌生。去年,当我试图为一些数据进行初步分析而编写代码时,我在代码和数据中都遇到了大量的bug。错误和错误一直在我身边,但这一次,它有点压倒性。我终于设法把数字算出来了,但我想我再也不能忍受这种混乱了。必须采取一些行动。

在没有上面这篇文章这样的复杂指南的情况下,我从那时起就开始采用“防御性编程风格”。一本名为“可读性代码的艺术”的书对我有很大帮助。我为每个函数部署了细致的输入验证和/或断言,重新命名了许多变量和函数以获得更好的可读性,并提取了许多位作为可重用函数。最近,我介绍了用于版本控制的GitSourceTree

目前,由于我的同事对这些问题更不情愿,协作实践(8a,b,c)还没有被引入。实际上,正如作者所承认的那样,因为所有这些实践都需要一定的时间和精力来引入,所以通常很难说服不情愿的合作者遵守它们。

我想我是在征求您的意见,因为尽管我在这些实践中付出了很多努力,但我仍然受到许多bug的困扰。Bug修复可能比以前更快,或者应该比以前更快,但我不能真正衡量这种改进。此外,我的大部分时间都花在了防守上,这意味着这些天我并没有做太多的数据分析(进攻)。就生产力而言,我应该说的重点是什么?

我已经部署: 1a,b,c,2a,3a,b,c,4b,c,5a,d,6a,b,7a,7b

我要试一试: 5b,c

尚未: 2b、c、4a、7c、8a、b、c

(我看不出使用GNU make (2c)来实现我的目的的好处。有人能告诉我MATLAB如何帮助我的工作吗?)

EN

回答 1

Software Engineering用户

发布于 2014-06-09 03:31:59

您提到的文章中的大多数(如果不是全部的话)都为开发人员所熟知。其中很多都是在学校里教的,当一个人去做真正的工作时,很多都会实现。当你说你的合作者不会答应的时候,我有点惊讶。

如果你太担心产生错误,那就把自己限制在几个域上。你会变得如此流利,几乎所有你需要你写的东西,你已经遇到过。更别说你用这种方式制造bug的机会了。

什么叫臭虫是压倒一切的?我可能和你一样的处境,但我甚至不知道。在过去的几年里,我一直在工作,我看到人们制造臭虫,以至于我对“每个人都有”充满了信心。关键是经常和全面地测试代码。

既然你提到了‘防御性编程’,如果我理解得对,就很难像你那样制造错误的人,成为一个好的人。防御性编程使代码没有错误,甚至可以处理规范之外的情况或与规范相邻的情况。它是无臭虫的。

票数 4
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/244371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档