我突然想写这个系列博客,主要是因为我离开博客园太久了,有点淡淡的怀念,博客园上的大好时光,让我历历在目,仿佛向我招手回去。其实,我想写EOM系列文章,结果写了11篇就没有下文;想写《从C语言实战谈编程》写了六篇也没有下文,还有《反洗钱系列文章》、《银行业信息化规划和架构》、《软件新架构NNS》、《软件设计师》等等话题,都是虎头蛇尾,自己想起来脸都红,愧对博客园、愧对网友了。不过有一点,那就是当时我的确对这些话题充满着兴趣和激情,都做了写作计划的。但是计划不如变化快,自己要做的事太多,一旦写文章拖延几次,慢慢地就越拖越懒,越拖越不想写,以至于欠的写作债越来越多。
还有一个原因是我想将精力转向微博,微薄毕竟内容少,容易突出重点,容易传播,便于评论和交流,但是,半年下来,我感到技术类的微薄转发和评论的少之又少,完全没有我当初的预想的情景。相比之下,还是博客人气旺一些,评论和交流多一些。
最主要的原因,我还是希望自己能和大家有更多的交流,通过交流可以扩大我们的视野和扩大我们交流的意识,而交流的意识无论是在技术还是在生活上、工作上都是尤为重要的。
我想通过一个真实的项目开发的全过程,记录一下开发过程的点点滴滴,记录一下过程中的前思后想。这个全过程包括,如何选择项目、如何分析项目、如何组织项目开发、如何设计开发流程、如何设计软件的总体架构、如何建立项目的技术架构,如何开始编程,如何面对具体编程中出现的问题、如何处理编程中的技术难点、如何进行数据库设计、如何进行参数化设计、如何进行项目开发的合作、如何确定开发的先后次序,如何进行项目测试和包装、如何开展项目的试运行、如何将项目投入到市场等等。通过具体的、可见的开发时的想法和做法也许可以给那些想了解如何选择软件开发创业的、如何进行项目开发的全过程的,如何编程的,如何提高技术水平的、如何了解软件市场和价值的朋友们有一点点参考。以此来展示自己在开发过程中的
我选择NSP(网上查询平台)作为一个开发项目,作为自己博客的一个写作对象。NSP是EOM系列的一个产品,我想通过记录开发NSP全过程,与大家分享和交流一个项目开发的全过程。我的另外一层意思是,几乎每个程序员都会编写数据查询程序,因此,对数据查询有一定的了解和积累,便于和我进行沟通和交流。
这次博客不给自己太多的压力,想写就写,不给自己规定期限,好在NSP正在开发之中,所以写作的动力还是有的,希望自己能够坚持。
一、 如何选择开发项目
很多程序员会认为,如何选择开发项目是公司老板的事,是领导的事,跟自己没有什么太大关系,这话有一定道理。但是,有两件事必须要清楚,第一,程序员的职业特殊性,也就是说程序员有时间有能力开发自己的项目,这就说明,今后有一天自己会遇到如何选择开发项目的问题。第二,我们也许不能选择单位的开发项目,但是我们要能学会评价项目的优劣。因此,程序员还是要对选择项目花上一点时间,无论是你做还是不做,对自己今后的成长都是有益的。
1、 有市场价值的软件
选择项目的第一原则是市场价值,通俗地说,项目要能挣到钱。这话说起来很简单,但是,现实中很多软件公司项目开发是亏钱的,这里的原因很多,常见的有项目需求变动太大,超出预期;开发人员的技术水平影响了开发进度;因用户的原因项目投产时间不确定或延长等。因此,我们要以最小的成本来获得最大的收益,这才是评价一个项目的优劣的标准。很多项目只能在事后进行评价,这是软件开发不确定性造成的,但是,随着开发项目的增多,对自身或其他软件公司的了解增多,选择项目就尤为重要。在多个项目可以选择情况下,要避免亏本和盈利少的项目,争取做利润最大的项目。公司如此,程序员也应如此,这就是市场价值的导向。
程序员可以花时间用在技术学习和技术积累上,但是,千万不要浪费时间花在不能产生经济效益的开发上。
2、 通用的软件
满眼望去,很多软件公司都在为客户做定制软件的开发,这种拼人工的软件开发也是现实不可避免的存在。但是,软件的价值在于复用,复用次数越多,价值越大,复用范围越大,价值越大。因此,我们在选择项目的时候,要问问这个项目是通用软件吗?如果不是通用软件,其产品复用的个数有多少?如果项目一个功能都不能复用,那么程序能够为其他项目复用吗?
3、 前瞻性的软件
当我们要开发一个项目的时候,大多数是用户提出来的需求,用户需求相差很大,有的需求有前瞻性,有的需求非常普通,因此,要关注具有前瞻性的需求;有时候,一个项目是自己想出来的,这个时候也要想一想,这个想法有没有人已经做过,如果做过,自己能不能比别人做的更好,更有特点,更有竞争力。选择前瞻性的软件开发可以更加吸引用户,减少竞争对手。
4、 有积累的软件
有好的项目想法是一个好的开端,但是,好的项目需要可行性,对于软件项目来说,积累非常非常重要,有两个积累非常重要,一个是需求积累和业务积累,这个积累保证你的产品功能的领先,一个是技术积累,这个积累能保证你的开发没有什么技术障碍,大大节约开发时间。千万不能从头再来,从新再来,这样没有积累的开发是非常非常辛苦的,开发出来的产品一定是不成熟的。
5、 有用户的软件
选择一个项目另一必要条件就是项目要有用户使用,无论这个用户是付费的还是免费的都不重要,重要的是有人来验证你的项目的使用价值。因此,事先进行项目的用户调研,为项目找好试点用户非常重要。如果不能做到次,再好的项目也必须放弃和等待。
6、 可把控的软件
如果你选择的项目,既有市场价值,又有一定的通用性和前瞻性,又有用户。但是,你要想想这个项目你可以把控吗?从想法到产品,从产品到用户使用每个环节都能把控吗?你自己能把控最好,你不能把控,有人能把控也行,就怕项目谁都把控不住,市场把控不住、需求把控不住、开发把控不住,开发队伍把控不住,做到最后一盘散沙,断断续续,前功尽弃,以失败而告终。
NSP是Network Searching Platform网上查询平台的英文开头字母,选择NSP符合上面的6点要求。例如,有积累的软件一项。我做数据查询已经几十年了,几十年前就编过动态查询的程序,后来也开发很多大型的查询系统,尤其是几年前,自己一直想在数据查询方面有所突破,因此,对数据查询做过专门的研究,尤其是数据查询的流程和主要算法,也曾动手编过程序,但是,由于其他原因被搁置很久,但是,我对数据查询还是有很多积累的。又例如:通用软件一项。数据查询是企业信息化中一个重要内容,几乎三分之一的系统或功能都与数据查询有关,因此,数据查询具有普遍意义,因此,如果能做成一个通用的网上数据查询平台,那就符合了选择开发项目的第2点了。问题是,各个企业的数据源是不同的,查询流程和查询要求是不同的,能做到通用吗?这正是NSP要解决的问题。
当然,选择项目还有其他重要因素要考虑:包括开发团队、开发成本、合作伙伴、销售价格等等。这里就不再详细述说了。
当你能选择好,选择准一个开发项目,你就可以安心在这个项目花上你的精力和时间了,你就可以考虑动手去展开行动了。万里长征第一步,总是要迈的。