生物信息数据库系统开发流程感想

dbDEPC 2.0终于开发完成上线了,是由需求方的一个工作人员和一名程序员协作完成,前前后后历时两个多月,经过几次更改终于完成,后来就这个项目让程序做了个总结报告,我也是有感而发,想站在软件工程的角度进行一下总结,像生物信息数据库系统类似的专业性非常强的系统应该采用什么样的开发流程,应该采取什么样的方法最大限度的降低开发风险,保证开发进度。

专业软件开发,当然最好是既懂专业又懂开发的人员进行开发,但是这样的综合的人才还是可遇不可求的,许多的情况下都是像dbDEPC项目类似,一名专业人员负责系统应该开发成什么样子,而程序员负责实现,如果没有任何干预,就会像这个项目所经历的那样,付出非常大的交流与更改成本。程序员编程了专业人员的画笔,而专业人员却不知道如何使用画笔,只有画了擦,擦了画,那边程序员系统还在开发着,这边专业人员已经将数据库改的面目全非,并且还认为这些改动不会对系统造成太大的影响。还有许多功能的实现上,由于专业人员对于软件开发的不熟悉,实现一个功能往往要绕好多的弯子。而将整个开发过程与软件工程中的软件开发流程去对应,根本找不到软件工程方面的影子,或许这就是最大的问题。

遵循已有的软件工程方面的知识,可以减少项目风险,提高开发效率,降低开发成本,那么面对专业软件我们应该如何做呢?

  • 从用户手中夺走画笔,取得主动权;
  • 引导用户提供软件开发所需要的材料、知识,比如原形、需求分析;
  • 对于用户提供的材料,形成文档,并且请该行业的专家对于该系统进行评审,评审通过后再进行下一步的工作;
  • 明确流程与阶段,对于需求分析与软件设计阶段投入更多的时间与精力

数据库系统不外乎是这样的一个过程,数据存储组织、业务处理、数据展示,所以对于这三者最好都精通,组织不好,会造成业务处理流程复杂,数据展示没有设计好,同样会影响业务处理以及数据存储组织。成为行业专家,同样是程序员一个很好的出路。

生物信息学与linux

讲到生物信息学的时候,时常会关联到linux,那么作为以生物学研究为主要目的,对于生物信息学分析同时有较多需求的科研人员如何来认识和学习linux,结合自己的经历,谈一下感受。

为什么要使用linux?

我想不外乎3个原因:

  1. 、因为linux系统是使用C写,所以本身集成了C的编译使用环境,而很多生物信息学的软件都是使用c写的,发行的C源代码包,需要编译安装后才能使用;
  2. linux稳定,是作为web、数据库服务器的首要选择
  3. linux系统本身是开源的

其实关键是第一点,但是比较成熟的软件都windows版本,或者都有web服务,除非有非常明确的需要,比如某个软件没有替代软件,而且只有在linux下使用,那么就找个机器安装个linux就可以了,我的意思是没有必要为了linux而linux,似乎只有学好linux才能做好生物信息学分析。

目前linux下有哪些系统,如何选择?

ubuntu http://www.ubuntu.com/
其图形界面做的非常漂亮,安装使用方便,文档丰富,使用的人数众多,社区比较多,遇到问题容易找到答案。

服务器级
Redhat Enterprise Linux v5.4
或者安装ubuntu server

生物信息专业的系统gentoo
http://www.gentoo.org/
集成了大量的生物信息学分析环境,但是需要熟手才能安装使用起来。

服务器与个人桌面系统的区别
服务器: 长时间运行,多用户通过客户端使用
个人桌面:方便操作,支持文档、多媒体,界面友好

应该将主要尽力放在实验流程的设计上

想要什么样的结果,如果可以将结果描绘清楚,基本上可以说已经事半功倍了,一些较为难得分析流程可以请专业的生物信息人员代为分析,或者交给生物信息分析的公司代为分析。

关于构建中国的NCBI的一点思考

构建中国的NCBI也一直是我所向往的事情,甚至是从前的某个目标,而现在中心想按照一个计划来做这件事情,在我没有看到投入之前,还是保持自己的怀疑态度,就是我不知道他们下多少决心做这件事情,是不是想所有的其他的事情一样,只是为了“交差了事”。我想要做好这件事情,应当是这样的概念:我们在完成一个伟大的作品,那上面肩负这我们所有的梦想,我们全身心的投入,追求尽可能的完美,甚至我们的一生都为他而奉献。所以首先是态度上我应当如何的认识这样的事情。 继续阅读

对于体制的一些思考

  1.  部门与部门缺少交流,更缺少合作;
  2. 没有一个反馈调节的机制,任何一个系统都不可能在开始都把一切都设定好,而且这个好可以一直维持,不是这样的,任何系统都需要不断的完善,是一个发现问题,解决问题的过程,这样才能保证你系统达到优化的可能;
  3. 有效的激励机制,更没有有效的考核体系。虽然各种考核也有,但都是趋于形式,“员工月度考核表堆积好多,但是谁又会去看呢?没有人看,没有人去验证,又何必做这样的事情。
  4. 目标、责任不明确;
  5. 人文关怀不够,留不住人,人员流动大,你靠的是人,留不住人,就会造成很多的问题。当然这里的人员不仅仅是所谓的”骨干”、“优秀”,对与人才的定义应当是:适合岗位,如果在那个岗位上,他把事情做的很好,他就是人才;当我们能为每个岗位都配备了合适的人员时,就是效率最高的时候,当然这个也符合“木桶定律”,所以不建议有些岗位用实习生担当,这会造成很多的问题。

科研过程的标准化

朋友出国要走了,去给他送行,又见到了所里的许多老朋友,也是颇有一番感慨,一切依旧,或许是那份雄心不减,但一曾不变的是对于新技术的追求,当然我不否定技术就是第一生产力,新的技术,新的方法手段所带来的对于未知探求的能力,就好像一台天文望远镜,新技术的应用可以使你看的更远,更多。而这些似乎成为了我国权威机构(单位小,没有那么多的钱去应用这样的新技术)的科研之路,能够获得点成绩(发一篇好文章)是靠钱榨出来的,形成了思维方式:好文章必须是高投入的!同时也形成了一个门槛,一般人您别想这样做,这就是所谓的“牛”!我只是想,对于科研,如果看到的可以说出来的完全依赖与新技术的话,也是及其不合理的: 继续阅读

设计模式的一点思考

成为一名合格的系统架构师。

以前的目标是现实一个功能,现在的目标是现实一个系统,一个可以不断完善的系统,一个可以升级、维护的系统。一个结构清晰、能够和别人交流的系统。
当面对如此的改变时,应该如何去做呢?在软件开发阶段,这些对于我标志着新的阶段。我一直听说过这个阶段,但是并没有真正意义上的明白这样的阶段,现在里我开始了这样的征程。我的个人职业规划方面,中科院的两年,是生物学学习的时间,而在中心,我想应该是我软件开发深入学习的时间。我个人认为,软件开发最为重要的部分是设计,如果详细设计出来了,coding将是非常容易的事情。 继续阅读

设想:物种分类数据库

我想要得到什么?我想要实现什么?我可以改变什么?

  1. 统一的数据交换标准,统一的数据库存储标准,友好的数据输入、数据录入、数据编辑方案,统一查询、数据导出、数据交换方案。
  2. 方便、灵活的数据更新方式,易学易用的软件构架,可扩展性、可维护性。
  3. 应用领域:结合分类学报,为新种的发布提供支撑;为标本馆提供物种目录服务;为物种鉴定提供支撑;为物种资源调查提供数据收集标准;为种系演化的研究提供平台;为物种的地理区划研究提供支撑;提供地区物种目录服务;为物种灾害的研究提供支撑。
  4. 不同的用户都可以添加数据;有统一的数据评审的平台;用户可以拥有自己私有数据;用户可以建立自己本地的私有数据库服务;
  5. 成熟的算法。比如物种树,不同树的比较,树格式的保存,显示。

这样做可以改变吗?

面试中审查公司的提问检查单

找工作时,单位在面试你,同时也是你面试单位的过程,所以你不仅仅是被面试者,还应当是面试者,下面就是深入了解公司的提问检查单,不断添加中。

公司没有招到他们想要员工,会面临损失或其他麻烦,同样,如果你进了非常糟糕的公司,也以为着时间、精力的浪费,面临各种的损失,特别是机会损失,当然还有挫败感、沮丧感等阴面的情绪对自身的伤害,所以选择公司同样要谨慎。而面试过程同时也是一个了解公司的过程,面试的组织是否井然有序、面试的过程是否科学、面试人员的素质、组成,问题是否全面等等,要注意观察这些,同时也要积极的准备一些问题,考考你的哪些面试官。

审查公司的提问检查单

  1. 在下的谁是人力资源主管,能否问一下,公司的战略目标?
  2. 公司近一年的离职率是多收?公司成立了多少年?平均的职工数?现在仍在的职工数?离职的原因?不离职的原因?
  3. 说一说公司的文化?
  4. 举一个人文关怀的例子?
  5. 考核的方法?调薪的间隔?奖金的比例?
  6. 培训的形式?培训的考核方法?
  7. 接收建议的流程,以及是否有奖励?
  8. 本季度公司的盈利,与前一季度的比值?
  9. 软件项目管理上,难点在于对于对人员的管理,就人员管理公司有哪些举措,以协调人员的稳定性与人员的流动性这一矛盾的协调?
检查组织的活力,人员稳定度,人力资源管理的成熟度,公司的文化,公司的目标,人才战略,组织层次结构

计算机程序的发展

程序语言的发展历史,寻找进化的规律,理解编程的真谛。

  1. 一个main函数
  2. 函数分解,调用
  3. 库函数
  4. 回调函数
  5. 面向对象

要思考的问题?

如何由用户需求到系统设计,再到最后的程序设计?不要总是站在用户的角度去思考问题,比如一个对象是来自业务,而一些对象是来自系统上的实现等。

《我的编程感悟》读书摘录。