onn*_*odb 92 collaboration physics scientific-computing
去年,我在一所大学的物理研究小组实习.在这一组中,我们主要使用LabVIEW编写程序来控制我们的设置,进行数据采集和分析数据.对于前两个目的,这非常正常,但对于数据分析,这是一个真正的痛苦.最重要的是,每个人都大多是自学成才,因此编写的代码通常非常混乱(难怪每个博士都迅速决定从头开始重写所有内容).由于IT部门严格的软件和网络规定,版本控制未知,无法设置.
现在,实际上事情确实令人惊讶,但是自然科学中的人们如何进行软件开发呢?
一些具体问题:
到目前为止的答案(或我对它们的解释):( 2008-10-11)
Bra*_*tte 27
您使用什么语言/环境来开发科学软件,尤其是 数据分析?什么图书馆?(例如,你用什么绘图?)
我曾经为SciPy的主要企业赞助商Enthought工作.我们与签约Enthought的公司的科学家合作进行定制软件开发.Python/SciPy对科学家来说似乎是一个舒适的环境.如果你是没有软件背景的科学家,那么开始使用C++或Java就不那么令人生畏了.
该Enthought Python的分布与所有的科学计算库,包括分析,绘图,3D visualation等.
对于没有任何重要编程背景的人进行过培训吗?
Enthought提供SciPy培训,SciPy社区非常适合回答邮件列表中的问题.
你有没有像版本控制,错误跟踪?
是的,是的(Subversion和Trac).由于我们与科学家合作(通常远程与他们合作),因此版本控制和错误跟踪至关重要.需要一些指导才能让一些科学家内化版本控制的好处.
您将如何创建一个体面的编程环境,而不会对个别科学家造成太大影响(尤其是物理学家是顽固的人!)
确保他们熟悉工具链.它需要预先投资,但这会使他们不再倾向于拒绝它而更倾向于更熟悉的东西(Excel).当工具失败时(他们会),确保他们有一个可以寻求帮助的地方 - 邮件列表,用户组,组织中的其他科学家和软件开发人员.让他们回到做物理学的帮助越多越好.
kay*_*oll 20
Software Carpentry课程专门针对进行科学计算的人员,旨在教授软件工程的基础知识和课程,以及如何最好地将它们应用于项目.
它涵盖了版本控制,调试,测试,脚本和各种其他问题.
我已经听了大约8或9个讲座,并认为这是强烈推荐的.
编辑:讲座的MP3也可用.
dmc*_*kee 16
核/粒子物理在这里.
为了改善事情:
还有一个改善事物的建议.
Pra*_*mod 11
这可能略显相关,但希望是相关的.
我曾经在National Instruments,R&D工作,在那里我为NI RF&Communication工具包编写了软件.我们使用了相当多的LabVIEW,以下是我们遵循的做法:
我不是一个"天生的"科学家(我学习交通工具),但我是一名学者,他编写了很多我自己的软件进行数据分析.我尝试尽可能多地在Python中编写,但有时我在扩展或自定义现有软件工具时不得不使用其他语言.我的领域很少有编程培训.大多数人要么自学成才,要么从以前或在学科之外的课程中学习他们的编程技巧.
我是版本控制的忠实粉丝.我使用Vault在我的家庭服务器上运行我的论文的所有代码.现在我正试图让部门设置一个Subversion服务器,但我的猜测是我将是唯一一个使用它的人,至少在开始时.我和FogBugs玩了很多,但与版本控制不同,我认为这对单人团队来说几乎没那么有用.
至于鼓励其他人使用版本控制等,这真的是我现在面临的问题.我打算强迫我的研究生将它用于他们为我做的研究项目,并鼓励他们将它用于自己的研究.如果我教一个涉及编程的课程,我可能会强迫学生在那里使用版本控制(将它们放在存储库中的内容中).就我的同事和他们的研究生而言,我所能做的就是提供服务器,并依靠温和的说服力并树立一个好榜样.坦率地说,在这一点上,我认为让他们进行定期备份比让他们进行源代码控制更重要(有些人在USB闪存驱动器上携带他们研究数据的唯一副本).
1.)由于更好的硬件,脚本语言现在很流行.Perl/Python/Lisp在轻量级应用程序(自动化,光计算)中很流行; 因为我们喜欢Unix/Linux,所以我在工作中看到了很多Perl(计算EM).对于性能,通常使用C/C++/Fortran.对于并行计算,我们通常手动并行化EM中的运行,而不是让程序隐式地执行它(即在计算雷达截面时通过视角分割作业).
2.)我们只是把人们放在这里混合.我们拥有的许多代码都非常混乱,但科学家通常是一群散乱的人,不介意那种事情.不理想,但我们有事情需要交付,而且我们的人员严重不足.我们正在慢慢好起来.
3.)我们使用SVN; 但是,我们没有错误跟踪软件.关于它为我们获得的好处是一个txt文件,告诉你特定错误的bug在哪里.
4.)我建议为科学家实施最佳实践:慢慢来.作为科学家,我们通常不会发货. 科学界没有人通过干净,可维护的代码为自己命名.他们通常会从该代码的结果中获得认可.他们需要看到花时间学习软件实践的理由.慢慢地介绍新概念并尝试让它们遵循; 他们是科学家,所以在他们自己的经验证据确认了版本控制之类的有用之后,他们就会开始一直使用它!