在小型科学环境中提高生产力的行业实践

7
我在美国一所大学的小型独立科学实验室工作。我注意到,与行业中明显遵循的许多做法(如每天检查版本控制系统、使用单个IDE/编辑器处理所有语言(如emacs)等)相比,我们遵循的编程实践相当粗糙。
因此,我想把我的所有程序、脚本等整合起来,建立一个流畅的环境以提高生产力。我希望从Stack Overflow上得到同样的建议。这是我的主要计划:我使用MATLAB、C和Python脚本,并希望从单个编辑器中编辑、编译它们,并确保正确的版本控制。
以下是我需要建议的问题/事项:
1.安装Cygwin,并使其与Windows良好地配合使用,以便我可以使用git或类似的版本控制系统(是否有一个DVCS可以直接从Windows CLI工作,这样我就可以跳过Cygwin步骤了?)。
2.设置emacs以处理C、Python和MATLAB文件,以便我可以从单个编辑器(例如emacs)同时编辑和编译所有三种文件。
(我不太熟悉emacs菜单,但是否有一种方法可以为某些语言设置编译器路径?我知道我可以通过谷歌搜索,但迄今为止,emacs文档对我来说非常难以阅读,所以如果有人用简单的语言告诉我就好了。)
3.每天或半天结束时开始检查代码,以便维护我的代码进展的正确路径(两个问题)。
- 你能直接从emacs中检出文件吗? - 是否有一种方法可以将LabVIEW文件检出到像git这样的DVCS中?
最后,我要为问题的相当模糊道歉,并希望我能随着时间的推移学会提出更好的问题。我会感激人们给出他们的建议,并指向任何可能帮助我学习的资源。
5个回答

3

1) Git和Mercurial都可以在Windows下原生运行,不需要使用Cygwin——尽可能避免使用这个环境。

2) 不明白为什么你认为必须使用emacs。

3) 你不需要在特定时间或频率进行代码提交——只有在完成测试并确保可用的情况下才进行提交。如果你在自己的分支上工作,则可以在方便时提交。


@ax 那并不是我的主要观点。当然,如果人们想使用emacs,他们应该可以 - 我对开始另一场无聊的争论毫无兴趣或意图。 - anon
我知道,我同意,并且我不想引发无聊的争论。只是赞同除了Emacs之外还有其他编辑器的观点。 - ax.

2
很高兴您选择这条路。以下是需要添加到列表中的几个事项:
1)将测试加入您的工作周期。也就是说,写完某个部分后,请让其他未参与该部分编写的人员审核代码。然后编写测试以确保新代码与其他代码集成良好并产生您想看到的结果,并最终将这些测试纳入隔夜构建过程。
2)建立隔夜构建流程或至少建立一些自动化流程,使每次有人检入代码时都会重新构建您的代码。在该构建上运行所有测试。

2
尝试遵循某种最佳实践将大有裨益,但您可能会发现许多人并不真正有兴趣遵循这些规则。尝试以微妙的方式宣传好处,以避免吓到您的同事 - 如果他们喜欢所看到的内容,他们可能最终会采纳您的一些建议。
在许多人只关心快速毕业或获得资金提案批准的科学环境中,似乎培养了一种“打完即走”的牛仔式编码风格。如果你能让人们考虑质量和可重复性,那么你已经赢得了胜利。
我发现以下方法很有用:
- 始终尝试将代码拆分成易于测试的小子项目。每次检查时运行测试。您可以使用git的子模块来组装您的“应用程序”。 - 如果多个人可以提交到存储库,请使用类似于`astyle`的东西来保持一致的格式(对Python代码来说可能不是太重要)。 - 设置类似于gitweb/cgit/...的东西,以便人们可以获取代码tarball并逐渐适应源代码控制的概念。 - 在您的团体/社区中寻找编码伙伴。在一个人们倾向于“只是把它做完”的环境中进行代码审查非常困难,通常会将良好的风格/常识抛到脑后。

0

正如其他人所提到的,定期签入并不是非常重要的。当你达到一个里程碑时进行签入(你已经做出了一个与其余代码相匹配且可以正确构建的更改。自动化构建更为重要。它们验证了你已经签入了所有相关更改。

我认为你可能对托管源代码和源代码客户端有些困惑。CVS、SVN、Git等客户端几乎普遍适用于Windows。许多Web托管公司提供托管服务。这可能是一个不错的选择,因为它还可以为你的代码库提供一个离线备份,每年约100美元。或者你可以在一台低端电脑上加载服务器,并将其放在某个壁橱里,尽管电费可能与你支付的托管费用一样高。

使用单个IDE处理所有语言并不重要,重要的是在同一语言的项目中保持一致性。你在同一语言中的所有项目应该共享编码标准。它们也应该在同一编译器上构建和/或在同一解释器/虚拟机上运行,并具有任何你使用的IDE的最新项目文件(如果适用)。


遗憾的是,“构建”并不等同于“好”。对于一些质量要求,你至少需要一个小型测试套件。这些测试仍然无法捕捉到低效的代码或糟糕的API设计 - 对于这些问题,你需要同行评审(而这是最难获得的部分)。 - Benjamin Bannier
我认为你可能对托管源代码和源代码客户端有些困惑。澄清一下:其实不是这样的,我知道Windows上有源代码客户端。我问及Windows CLI的原因是希望能够在emacs中使用DVCS,这样我就不必为了代码检出而转移注意力到其他任何事情上。但是,如果像人们所说的那样,频繁地检出代码并不是非常重要的(我想我一直在模糊检出和备份之间的界限),那么这就消除了这种需求。 - drachenfels
@drachen:源代码控制可以作为一种备份。每当某个功能正常工作时,就进行提交。这样,您以后就可以像设置实验室笔记条目中的旧测量值一样返回之前的版本。 - Benjamin Bannier

0
有没有办法将LabVIEW文件检出到像git这样的DVCS中?
LabVIEW文件完全可以在DVCS中使用,我正在使用Mercurial。但是由于LabVIEW文件被视为二进制文件,因此您的repo大小会快速增长。
LabVIEW仅提供3-way merges,要在两个版本之间使用diff函数,您需要LV-diff,并进行一些调整以支持仅更改文件位置(例如重复文件名)的工具。
此外,将*.lvlps和*.aliases添加到您的忽略列表中很重要,这些文件在另一台计算机上没有有用的含义。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接