去年,我在一所大学的物理研究小组实习.在这一组中,我们主要使用LabVIEW编写程序来控制我们的设置,进行数据采集和分析数据.对于前两个目的,这非常正常,但对于数据分析,这是一个真正的痛苦.最重要的是,每个人都大多是自学成才,因此编写的代码通常非常混乱(难怪每个博士都迅速决定从头开始重写所有内容).由于IT部门严格的软件和网络规定,版本控制未知,无法设置.
现在,实际上事情确实令人惊讶,但是自然科学中的人们如何进行软件开发呢?
一些具体问题:
到目前为止的答案(或我对它们的解释):( 2008-10-11)
当您或项目不清楚最终(如果有)产品将会是什么时,采用哪些有用的策略?
让我们将"研究"意味着探索一个领域,在这个领域中许多事情都是未知或未实现的,并且在项目开始时无法指定正式的可交付成果.这在STEM(科学(物理,化学,生物学,材料等),技术工程,医学)以及信息学和计算机科学的许多领域中很常见.软件既可以作为目的本身(例如新算法),也可以管理数据(通常是实验性的)和模拟(例如材料,反应等).它通常由小团体或个人创建(我省略了大型科学,如望远镜和强子对撞机,其中重点放在软件工程上.)
研究软件的特点是(至少):
项目可以是几天("看看这是一个值得去的方向")到几年("这是我的博士主题")或更长时间.通常,人们不会被雇用为软件人员,但他们发现他们需要编写代码来完成研究或通过编写软件来感染.良好的软件工程通常没有什么功劳 - "产品"是会议或期刊出版物.
然而,其中一些项目非常有价值 - 最明显的领域是基因组学,在早期科学家们表明,动态规划是帮助思考蛋白质和核酸结构的革命性工具 - 现在这是一个数十亿的行业(或者更多).量子力学代码预测物质的属性也是如此.
缺点是很多代码被抛弃,很难建立起来.为了克服这个问题,我们建立了一个库,这些库在集团和世界上作为开源共享(但这里再次给出的信用很少).许多研究人员重新发明轮子("低头"编程,不咨询同事和"英雄"编程,有人试图完成自己的全部工作).
在项目开始时太多的形式往往会让人失望,创新就会消失(没有人会花2个月写正式的规格和单元测试).制定和颁布了太少和坏习惯.编程课程有助于再次让人们很难做到这一点,尤其是当你依赖他们的善意时.指导是非常有价值的,但并不总是成功.
是否有在线资源可以帮助说服人们养成良好的软件习惯?
编辑:我很感谢dmckee(下面)指出类似的讨论.这一切都很好,我特别同意版本控制是我们可以为科学家们提供的最重要的事情之一(我们向同事们提供了这个并得到了非常好的评价).我也喜欢那里提到的软件木工课程的方法.