Physics 科学环境中的编程实践? 背景

Physics 科学环境中的编程实践? 背景,physics,scientific-computing,collaboration,Physics,Scientific Computing,Collaboration,去年,我在一所大学的一个物理研究小组实习。在这个小组中,我们主要用来编写程序来控制我们的设置、进行数据采集和分析数据。对于前两个目的来说,这很好,但对于数据分析来说,这是一个真正的难题。最重要的是,每个人都是自学成才的,所以编写的代码通常相当混乱(难怪每个博士都很快决定从头重写所有东西)。由于IT部门严格的软件和网络法规,版本控制未知,无法设置 现在,事情进展得出奇地顺利,但是自然科学界的人是如何进行软件开发的呢 问题 一些具体问题: 您使用了哪些语言/环境来开发科学软件,尤其是数据分析?什么

去年,我在一所大学的一个物理研究小组实习。在这个小组中,我们主要用来编写程序来控制我们的设置、进行数据采集和分析数据。对于前两个目的来说,这很好,但对于数据分析来说,这是一个真正的难题。最重要的是,每个人都是自学成才的,所以编写的代码通常相当混乱(难怪每个博士都很快决定从头重写所有东西)。由于IT部门严格的软件和网络法规,版本控制未知,无法设置

现在,事情进展得出奇地顺利,但是自然科学界的人是如何进行软件开发的呢

问题 一些具体问题:

  • 您使用了哪些语言/环境来开发科学软件,尤其是数据分析?什么图书馆?(例如,绘制时使用什么?)
  • 有没有为没有任何编程背景的人提供过培训
  • 你有版本控制和bug跟踪吗
  • 你将如何努力创造一个体面的编程环境,而不会对科学家个人造成太多阻碍(尤其是物理学家是固执的人!)
迄今为止的答复摘要 迄今为止的答案(或我对它们的解释):(2008-10-11)

  • 使用最广泛的语言/软件包:
    • LabVIEW
      • 使用、等(下载和链接请参见Brandon的回复)
    • 信用证++
  • 几乎所有受访者都使用版本控制;bug跟踪和其他过程不太常见
  • 软件木工课程是向科学家教授编程和开发技术的好方法
  • 如何改进?
    • 不要强迫人们遵守严格的协议
    • 自己建立一个环境,并向他人展示其好处。帮助他们自己开始使用版本控制、bug跟踪等
    • 查看其他人的代码可能会有所帮助,但请注意,并非每个人都会欣赏这一点

我并不是一名“自然”科学家(我研究交通),但我是一名学者,我自己编写了很多数据分析软件。我尽可能多地用Python编写代码,但有时在扩展或定制现有软件工具时,我不得不使用其他语言。在我的领域里几乎没有编程培训。大多数人要么是自学成才,要么是从以前或学科之外的课程中学习编程技能

我非常喜欢版本控制。我使用在我的家庭服务器上运行的Vault来编写我论文的所有代码。现在我正试图让部门设置一个Subversion服务器,但我猜我将是唯一一个使用它的人,至少一开始是这样。我曾经尝试过一些Fogbug,但与版本控制不同,我认为对于一个人的团队来说,这几乎没有什么用处


至于鼓励其他人使用版本控制之类的,这确实是我现在面临的问题。我计划强迫我的研究生在他们为我做的研究项目中使用它,并鼓励他们在自己的研究中使用它。如果我教一门涉及编程的课程,我可能会强迫学生在那里也使用版本控制(根据存储库中的内容给他们评分)。就我的同事和他们的研究生而言,我真正能做的就是提供一台服务器,依靠温和的劝说和树立良好的榜样。坦率地说,在这一点上,我认为让他们进行定期备份比让他们进行源代码管理更重要(有些人在USB闪存驱动器上携带他们研究数据的唯一副本)。

这可能有点无关紧要,但希望相关

我曾在国家仪器研发部工作,在那里我为NI RF和通信工具包编写了软件。我们经常使用LabVIEW,下面是我们遵循的实践:

  • 源头控制。NI使用Perforce。我们做了常规的事情-开发/主干分支,持续集成,工作
  • 我们编写了自动化测试套件
  • 我们有几个人是有信号处理和通信背景的。我们曾经有定期的代码审查和最佳实践文档,以确保他们的代码符合标准
  • 尽管进行了代码审查,但有几次像我这样的“软件人”为了提高效率不得不重写一些代码
  • 我完全明白你说的顽固的人是什么意思!我们曾经有人认为指出代码中潜在的性能改进是对个人的直接侮辱!不言而喻,这需要良好的管理。我认为与这些人打交道的最好办法是慢慢来,而不是逼迫他们做出改变,如果有必要的话,要做好做脏活的准备。[示例:为他们的代码编写测试套件]

  • 我不是这方面的专家,但我一直都明白这就是我的初衷。这里也有核/粒子物理学

      主要的编程工作过去主要是在使用(PW,MuuIt,…),最近,它主要是在C++中使用的。还有许多其他的库和工具在专门使用,并且在这里和那里看到了一些用途
    • 在我这一行,数据采集通常意味着相当低水平的工作。通常在C语言中,有时甚至在汇编语言中,但随着硬件性能的提高,这种情况正在消失。另一方面,许多板子现在都是用需要旋转的门来建造的
    • 一次性、图形界面等。几乎可以使用任何东西(以前很大,最近我看到了更多的Perl/Tk和Python/Tk),包括