如何有效的开发生物信息程序2

如题所述

快速指导:如何有效的开发生物信息程序(2)

转载▼
标签:
杂谈

为项目保持文档并降低管理难度
没有好的编程习惯,是没法编写出干净,错误少并且可重复使用的代码的。不仅要有个变量命名习惯,为代码撰写文档,大项目还需要经常测试编写代码。像生理卫生的项目一样,这些任务通常都是乏味的,容易让参与进来的人哀叹连天,或者完全忽视。尽管电脑程序的一大优点就是可掌握一些列的自动化的步骤代替乏味的任务。
在开源软件和合作研究领域,你写的代码可以给他人带来价值。许多学术期刊需要你既出版手稿以及源代码,好的文档的关键是写好代码,但因其乏味常被忽视,或者是简单的以为没有人会再开源代码了。最好的办法是让文档自动生成。像Doxygen,JavaDoc,PyDoc以及其他轻量级途径可以让源码文档自动生成。良好的变量命名习惯也是优质文档重要的保证,避免用缺少描述性的变量名,如果需要,用一致性好的名字或者是冗长一点的也在所不辞,有些开源社区有他们钟爱的变量命名规则,明智一点吧,要了解你常用的语言是否存在这样的规则。人们都爱用有文档的代码,你提供给他人价值,你也会从中得到更多的机会,无论是个人方面还是专业上。同样,许多潜在的雇主也想看你写的代码,所以保存有文档的代码包对于找工作来说也是很有用的。
如果你在为一个足够大足够复杂的项目工作,你就会经常性的编写和测试你的代码,部署到各种web服务器上,或是执行复杂的计算任务。幸运的是,这些过程可以大量的被任务自动程序工具所替代。UNIX里的‘make’实用是许多现代任务自动攻击的祖先,它的核心可以读取并执行任意数量生成文件(结构化的宏语言定义生成文件),‘make’的变体比如apache ant,SCons和Rake提供了和‘make’相似功能并且有时更凭直觉的工作。程序员会发现,几乎所有代码的编写测试打包部署以及执行,步骤都能通过一些自动软件实现自动化。

保存你的源代码

电脑编程有几点是确定的,(1)每次你修改代码,总有很高的几率会出错(2)随着电脑硬件的老化,出错的几率也更大。尽管如此,许多程序员还是满足于把之前的代码以非结构和无冗余的文件形式散布在硬盘里。许多版本控制系统(VCS)都是可以免费获得,它们可以记录源代码的改变途径,可以恢复合并代码的改变。但是尽管VCS的便利,许多程序员并没有充分利用这一系统,特别在学术领域。开源的VCS比如CVS,Subversion和Git可以很简单获取,设置以及使用,大多数文本和源码编译器能支持内置VCS或者扩展。VCS客户端TortiseSVN和SCPlugin可以在操作系统层面融合VCS的功能,这样就可以通过OS文档管理器来实现代码版本控制功能。鉴于VCS的易用性和低门槛,没有理由不用它们。如果你在为一个味团队工作,VCS更少必须装备,因为他提供了例如文件锁定,自动化的变更合并,当多人同时修改相同代码的时候这是非常有用。设置维持相同自己的VCS服务系统是不必要的,因为很多在线服务,比如SourceForge,GitHub,提供了标准VCS性能以及额外功能。VCS的使用。此外应用这种系统的经验将会增加个人或者职业生涯的经验。

很多程序员并没有认识到备份的重要性,直到硬件的错误,电脑被盗或其他原因,重要的代码丢失。历史上,电脑的备份需要涉及IT部门,昂贵的备份软件系统,以及对备份事件的明确的计划表。这些昂贵的备份设备使得它们在学生和不太爱花费的学院之间很难得到普及,最近,一个新的连续增长的电脑备份模型,又被称为‘快照’,从很多卖主和网络应用提供商之间涌现出来,这些服务在电脑上安装软件客户端以监视电脑内的文件系统变化,比如Mozy和IDrive(只列出商业应用)。这些服务的主要优势是在初始安装过后,软件会不经过用户明显的干涉而继续备份文件。(这也就是为什么它们有时被称为‘安好就忘’备份软件)。虽然大多数都是商业成果,还是有许多提供免费的账号可以提供大量的存储源代码和其他重要文档的空间。在写这些的时候,这些系统的开源应用,比如TimeVault,开始涌现出来,我们期望许多相似的开源项目出现、成熟,在不久的将来。当然,备份软件和系统也会出错,因此实施一项多余的可以包含两个及以上的系统或服务的备份计划,是很明智的缓和危险的措施。(备份到外部硬盘或者网络备份服务)

"拥抱"平行计算范例

平行编程的执行可以急剧地增加许多BI计算任务,但是因此得到的复杂性却让许多人没法使用它来提高BI编程的效率。基本上有两种主要的计算任务能够并行,根据依赖的模型分为宽松耦合与紧密耦合两种(LC和TC)。LC任务的执行部依赖于状态或者其他同类计算任务的输出。BI中的例子,一个计算所有独立配位受体亲和力,以及计算独立的蛋白质家族的多序列排列。LC任务一般中最容易并行,因为它们在不同的数据文件上使用相同的程序逻辑或是相同的数据文件上使用不同的参数。有许多软件系统是专为了执行和控制并行的LC任务而设计的。其中最流行的都是开源系统如Sun Grid Engine(SGE),Open Portable Batch System(OpenPBS)。它们常被称为工程安排或成批处理系统,在计算机网络组群里,定期的用来发布个人计算任务。
TC任务的执行依赖于当前状态或者是其他任务的输出。BI里的例子有分子的动态模拟,随机优化算法,TC任务一般更难实施,通常需要程序合并函数的从并行库里面调用,如基于Message Passing Interface(MPI)的库,使得并行执行,同步,一致性检测的复杂细节留给了程序员。
最近,google引进了一种新的被称为MapReduc的并行计算范式,使用于大型集群计算机里面进行并行计算的简化软件架构。自从MapReduce最初描述开始,大量的开源项目被实施在各种编程语言,Hadoop(Java
),Disco(Python),Skynet(Ruby)。本质上,MapReduce框架把任务分解为离散的“亚任务”(Map步骤),分布在网络计算节点上,然后把单独“亚任务”的结果聚集起来(Reduce步骤)。虽然MapReduce并不适合于所以并行计算中,但是很多生物信息学家乐于尝试MapReduce并且它已经使高通量测序数据集合的短序列统计匹配加快了速度。
需要注意的是,并行计算并不是必须正视的计算机集群才能使用。许多促进并行计算的软件框架可以通过单一机器的多核CPU执行。在写这篇东西的时候,8核cpu的计算工作站只需要不到USD3,,00.00就可购买;即使没有多少预算,这种基本的并行计算设备也能轻易获得。或者更甚,虚拟的或者”云“的计算设备,比如Amazo Elastic Compute Cloud(EC2),就提供了经济的手段获得大量的计算资源以致按需选用式的并行计算。因此,大型的公共资助的生物计算举措,如Cancer Biomedical Informatics Grid(caBIG)已经开始投资这种云计算架构以支持他们的工作。
温馨提示:答案为网友推荐,仅供参考
相似回答