作为开源软件,必须做到以下几点,开源软件才能不断发展,希望想从事开源事业的兄弟姐妹们能够借鉴一下,毕竟事物不发展很容易就遭淘汰。FEIM Studios 开发的 FreeEIM 一直在努力,一直在发展,敬请关注。
一、代码要简单易懂
代码是给大家看的,而不是自己看!好的代码一定是最简单的,这应该是每个职业程序员心中万世不变的箴言。一个简单的“hello world”,可以有十几种实现,但是职业程序员绝对不会标新立异,他们会选择最简单最常用的那种。为什么要写简单的程序?
1、简单的程序易于扩展;
2、简单的程序易于维护;
3、简单的程序易于发现问题(写简单程序的理由实在太多了)。能用10行实现的,就不要写100行;能用数组实现的,就不要用avl树。
总之,在能实现功能的情况下,程序越简单越好。
二、严格遵守编程规范
程序员入职时,都会得到一本公司的编程规范。虽然每个公司的编程规范不尽相同,但是基本都讲的是排版格式、注释、命名规范、可测试性、语法规范等方面的内容。编程规范是前人总结出来的经验教训,每个职业程序员都应该严格遵守。在项目层面上来说,编程规范是项目成员应该遵守的约定,这样项目代码才会风格统一,尽力约束个人风格,避免出现10个人的项目出现11种风格的情况。
严格遵守编程规范,还可以避免出现一些低级错误。如:编程规范中有一条,条件判断式使用双等号”==”时,应该将常量放在双等号左侧,变量放在右侧。遵守该条规范可以避免出现所谓的“差一错误”,即将双等号写成等号。这种情况下,编译器会报错。
职业程序员写出来的代码应该是风格一致的,这样的代码便于维护,便于其他程序员的阅读,也可以规避一些低级错误,所以,严格遵守编程规范是程序员职业化的重要体现。
三、代码的质量属性
代码的质量属性主要有三个方面:功能、可扩展性、性能。功能:是对一段程序最基本的要求。程序首先要正确实现预期的功能,才能谈其他的质量属性。可扩展性:对于一个大型地,需要长期维护的软件来说,程序会不停地加入一些新的特性。如果程序的可扩展性差,就会导致系统的频繁重构,浪费大量的人力物力。可扩展性应该是在程序的设计阶段就考虑到。当然,没有谁能在设计之初就考虑到所有的扩展性,但是我们必须尽量考虑周全,这就涉及到设计的方法和理论了,这里不讨论。性能:好的程序应该考虑性能。但是,这因应用场景而论。比如:一个简单的计算器程序,我们没必要花太多地精力去提高它的性能。但是,对于一个大型的平台系统(即时通讯软件、操作系统、数据库系统等),我们就得花精力去考虑性能问题了。
三个质量属性的优先级应该是:功能正确>扩展性好>性能高。
通常,某些质量属性之间本身是矛盾的。有时候,我们顾得了性能,程序的可扩展性就会变差。反之,可扩展性好了,但是就会影响性能。一般情况下,我们会按照上面的优先级别来取得质量属性的平衡。
四、经常review你的代码
程序员都是心高气傲的,他们往往对自己写的代码充满了自信,以至于写好以后再也不愿意去多看一眼。但是,既是是大牛,也不能保证代码零缺陷。一个职业的程序员,应该定期review自己的代码,不断发现自己代码的bug。交流思想如果说算法是程序的灵魂,那思想就是程序员的灵魂所在,程序员的优秀与成就,基本功是一部分,更多的是开发时的思想,通常一两年程序员的基本功都很熟练了,之后的时间就是体现开发价值的时候,如何开发,基于什么模式开发,开发与项目如何高效的配合,这些都是程序员思想的体现。
五、职业程序员一定是优秀的测试人员
我在公司几年以来,亲眼看见公司开发和测试人员之间关系的几次变革。刚入公司时,发现问题的数量是考核测试人员绩效的唯一标准,某些部门甚至出现给测试人员下达日发现问题数量的指标,不达标直接影响年终奖。测试人员和开发人员水火不容,经常出现为了一个问题是否该提单争得面红耳赤。一年以后,情况有所改变,测试人员不再唯问题单是从。到了现在,公司已经大力提倡开发测试融合了。开发和测试人员联合绩效考核,考核的标准是版本的稳定性以及遗留缺陷密度。开发和测试人员办公区已经完全融合在一起,测试人员经常给开发人员培训测试方法,开发人员也主动投入到测试发现问题。
我说自身的经历,只是想说明一个事实,开发和测试之间并没有不可逾越的差别。
很多开发人员对测试不屑,觉得那是没有技术含量的活。其实不然,测试人员是站在客户的角度考虑问题,他们往往能考虑到很多研发人员考虑不到的场景。测试有一套非常完善的理论。如果研发人员能够了解一些测试方法和理论,对于软件的设计会有很大帮助。
职业程序员一定是优秀的测试人员。
六、站在设计的高度编码
站在设计的高度编码,这话说得有点抽象了,但是这确实是我多年来感受最深的一点。软件开发通常分为三个阶段:设计、编码、测试。很多人认为设计是设计师架构师的事情、测试是测试人员的事情,程序员的工作即是编码。所以,很多致力于成为职业程序员的同学都将全部的精力放在了编程语言的学习上。编程语言只是一个工具,学得好,只能说明你学会使用了一门工具而已。举个不是很恰当的例子,对于一个画家来说,光学会使用画笔是不够的,还得要有艺术灵感。学会了编码只能说明你会使用画笔了,但是离画家还远着呢。
有篇很著名的论文叫做《源码既是设计》,我非常认同。架构师在设计阶段会输出设计文档,但是对于软件来说源码才是最直接的工程文档,一份好的源码胜过千百篇工程文档----这也是敏捷开发的思想。好的源码一定是经过设计的,架构师站在架构的角度设计,但是他很难考虑到代码级别的事情,代码的实现最终要靠编程人员。大到一个流程,小至一个函数,这些是要靠实际编程人员来设计的。编程人员也应该学会设计,懂得一些设计模式和理论。
做一个设计者,而不是代码工人。以上是我的见解,希望与各位交流。(http://www.freeeim.com/)