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

Project management 研究环境中的软件项目和开发,project-management,Project Management,当您或项目不清楚最终产品(如果有的话)是什么时,可以采取哪些有用的策略 让我们把“研究”理解为对一个领域的探索,在这个领域中,许多事情是未知的或未实施的,并且在项目开始时无法指定一套正式的可交付成果。这在STEM(科学(物理、化学、生物学、材料等)、技术工程、医学)以及信息学和计算机科学的许多领域都很常见。软件的创建本身就是目的(例如新算法)、管理数据(通常是实验)和模拟(例如材料、反应等)的手段。它通常是由小团体或个人创建的(我省略了大型科学,如望远镜和强子对撞机,它们非常强调软件工程。) 研

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

让我们把“研究”理解为对一个领域的探索,在这个领域中,许多事情是未知的或未实施的,并且在项目开始时无法指定一套正式的可交付成果。这在STEM(科学(物理、化学、生物学、材料等)、技术工程、医学)以及信息学和计算机科学的许多领域都很常见。软件的创建本身就是目的(例如新算法)、管理数据(通常是实验)和模拟(例如材料、反应等)的手段。它通常是由小团体或个人创建的(我省略了大型科学,如望远镜和强子对撞机,它们非常强调软件工程。)

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

  • 未知结果
  • 未知时间尺度
  • 很少有正式的项目管理
  • 预算有限(至少在学术界)
  • 第三方工具和库的不可预测性
  • 项目期间外部世界的变化(例如,新发现可能是积极的-省力的-或消极的-被挖掘)
项目可以是从几天(“看看这是否是一个值得去做的方向”)到几年(“这是我的博士课题”)的任何项目或者更长时间。通常情况下,这些人不是软件人员,而是发现他们需要编写代码来完成研究,或者因为编写软件而受到感染。优秀的软件工程通常没有什么信誉——“产品”是一种会议或期刊出版物

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

缺点是很多代码被扔掉了,很难在上面构建。为了克服这一问题,我们建立了一些库,这些库作为开放源代码在团队中和全世界共享(但这里也很少有人相信)。许多研究人员重新发明了这个轮子(“头朝下”)不咨询同事的编程和有人试图自己完成全部工作的“英雄”编程)

项目开始时过于拘泥于形式,往往会让人望而却步,失去创新(没有人会花2个月的时间编写正式的规范和单元测试).太少,坏习惯被养成和传播。编程课程有帮助,但很难让人们做到这一点,尤其是当你依赖他们的善意时。辅导非常有价值,但并不总是成功的

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


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

我建议你/他们阅读“干净的代码”


这本书的基本思想是,如果你不保持代码“干净”,最终混乱将阻止你取得任何进展。

我将告诉你我的经验

毫无疑问,许多软件在学术界被创造和浪费。事实是,很难将专门为特定研究目标而创建的研究软件适应更一般的环境。此外,学术界的产品是科学论文,而不是软件。软件在学术界的价值为零。你生产的数据一旦你在上面写了一篇论文(这需要很多编辑时间),使用该软件的ce就会被评估

然而,在大多数情况下,研究小组已经认识到了频繁的模式,这些模式可以作为内部知识进行润色、测试和存档。这就是我使用个人工具包所做的。我根据我的研究需要进行扩展,只使用那些“跨项目”的功能.开发个人工具包几乎是一项要求,因为你的科学需求很可能在某些方面是独一无二的(否则你就不会做研究),而且你希望有尽可能少的外部依赖性(因为如果某件事情发生变化并破坏了你的东西,你就没有时间修复它)

然而,对于一个给定的项目来说,其他一切都太具体了,无法具体化。因此,我倾向于不封装一些显然是一次性解决方案的东西。但是,如果以后其他项目需要相同的代码,我会返回并改进它

项目跨度短,研究热度高(例如,发布或销毁愿景如今如此重要),需要灵活、快速的语言,一般来说,需要能够快速掌握的语言。基因组学和量子化学的博士没有正式的编程背景。在某些情况下,他们甚至不喜欢它。因此,语言必须快速、简单、干净、灵活,并且以后易于理解。后一点是资本,因为没有时间去学习制作文档,并保证在学术界,每个人迟早都会离开,每三年左右你就会将团队经验烧成零。学术界是一个高风险行业,定期解雇所有硬组织的执行者,只保留一些管理者。拥有一个可维护的代码,可以让一些人轻松掌握因此,ne else是资本。此外,永远不要低估谷歌搜索解决您问题的能力。使用部署良好的语言,您更有可能找到您可能遇到的难题和问题的答案

管理层