相关疑难解决方法(0)

在科学环境中编程的实践?

背景

去年,我在一所大学的物理研究小组实习.在这一组中,我们主要使用LabVIEW编写程序来控制我们的设置,进行数据采集和分析数据.对于前两个目的,这非常正常,但对于数据分析,这是一个真正的痛苦.最重要的是,每个人都大多是自学成才,因此编写的代码通常非常混乱(难怪每个博士都迅速决定从头开始重写所有内容).由于IT部门严格的软件和网络规定,版本控制未知,无法设置.

现在,实际上事情确实令人惊讶,但是自然科学中的人们如何进行软件开发呢?

问题

一些具体问题:

  • 您使用哪些语言/环境来开发科学软件,尤其是数据分析?什么图书馆?(例如,你用什么来绘图?)
  • 对于没有任何重要编程背景的人进行过培训吗?
  • 你有没有像版本控制和错误跟踪的东西?
  • 您将如何尝试为编程创造一个体面的环境,而不会对个别科学家造成太大影响(特别是物理学家是顽固的人!)

到目前为止的答案摘要

到目前为止的答案(或我对它们的解释):( 2008-10-11)

  • 似乎使用最广泛的语言/包:
  • 几乎所有受访者都使用版本控制; 错误跟踪和其他过程不太常见.
  • 软件木工课程是向科学家传授编程和开发技术的好方法.
  • 如何改善事物?
    • 不要强迫人们遵守严格的协议.
    • 自己设置一个环境,并向他人展示好处.帮助他们自己开始使用版本控制,错误跟踪等.
    • 查看其他人的代码可能会有所帮助,但要注意并非每个人都可以理解这一点.

collaboration physics scientific-computing

92
推荐指数
8
解决办法
7247
查看次数

软件项目和研究环境中的开发

当您或项目不清楚最终(如果有)产品将会是什么时,采用哪些有用的策略?

让我们将"研究"意味着探索一个领域,在这个领域中许多事情都是未知或未实现的,并且在项目开始时无法指定正式的可交付成果.这在STEM(科学(物理,化学,生物学,材料等),技术工程,医学)以及信息学和计算机科学的许多领域中很常见.软件既可以作为目的本身(例如新算法),也可以管理数据(通常是实验性的)和模拟(例如材料,反应等).它通常由小团体或个人创建(我省略了大型科学,如望远镜和强子对撞机,其中重点放在软件工程上.)

研究软件的特点是(至少):

  • 未知结果
  • 未知的时间表
  • 很少正式的项目管理
  • 预算有限(至少在学术界)
  • 第三方工具和库的不可预测性
  • 项目期间外部世界的变化(例如,新发现可能是积极的 - 节省努力 - 或消极 - 获得舀取

项目可以是几天("看看这是一个值得去的方向")到几年("这是我的博士主题")或更长时间.通常,人们不会被雇用为软件人员,但他们发现他们需要编写代码来完成研究或通过编写软件来感染.良好的软件工程通常没有什么功劳 - "产品"是会议或期刊出版物.

然而,其中一些项目非常有价值 - 最明显的领域是基因组学,在早期科学家们表明,动态规划是帮助思考蛋白质和核酸结构的革命性工具 - 现在这是一个数十亿的行业(或者更多).量子力学代码预测物质的属性也是如此.

缺点是很多代码被抛弃,很难建立起来.为了克服这个问题,我们建立了一个库,这些库在集团和世界上作为开源共享(但这里再次给出的信用很少).许多研究人员重新发明轮子("低头"编程,不咨询同事和"英雄"编程,有人试图完成自己的全部工作).

在项目开始时太多的形式往往会让人失望,创新就会消失(没有人会花2个月写正式的规格和单元测试).制定和颁布了太少和坏习惯.编程课程有助于再次让人们很难做到这一点,尤其是当你依赖他们的善意时.指导是非常有价值的,但并不总是成功.

是否有在线资源可以帮助说服人们养成良好的软件习惯?

编辑:我很感谢dmckee(下面)指出类似的讨论.这一切都很好,我特别同意版本控制是我们可以为科学家们提供的最重要的事情之一(我们向同事们提供了这个并得到了非常好的评价).我也喜欢那里提到的软件木工课程的方法.

project-management

26
推荐指数
3
解决办法
2556
查看次数