我的软件10年:需求的变化就是创新的机会
发布时间:2006-06-30 13:45:25 来源:希赛网 网友评论 0 条 经常遇到做软件设计的朋友抱怨用户的需求老是变化,自己不断的修改自己的设计,结构搞得自己疲惫不堪,而且软件的应用效果也不理想。其实类似的问题每个人都会遇到,关键是我们应该如何对待,如果我们总是不断的修改代码以适应用户的要求,这时候我们应该考虑软件是否具备足够的让软件开发人员自己比较舒适的适应能力,如果不具备这种能力,则改进设计,甚至具备足够的适应能力,否则,软件设计真的就成了苦差事。
软件设计师不应该害怕需求的变化,更不应该为需求的变化而烦恼,任何需求的变化都可能蕴藏着巨大的机会,这种机会就是创新,这种创新就是未来的市场机遇,就是企业的进步的推动力。创新源于需求的不断变化。这是多年来从事软件开发工作的一点非常深刻的体会,这种变化包括各个方面的,可能是硬件的变化,可能是操作系统的变化,可能是用户群的变化,这些统统可以归结为用户需求的变化。我们的软件产品就是在需求不断的变化之中发展的。
如果我们为用户编写了一个软件,不管具体实现的功能如何,只要上述的几种变化出现,我们都不得不不对软件的设计进行调整,有时可能需要对系统的整体框架进行调整,甚至重写部分或全部的源代码。
刚开始学习编程的时,总是希望一条语句表达尽可能多的含义,梦想一个算法解决所有的问题,一个程序满足所有用户的要求,但这是不可能的,因为我们周围的世界处于不断的变化之中,今天你写的程序完全满足用户要求,一段时间之后,用户的系统升级了,你的程序在新的系统上运行就会产生错误,所以你必须更新程序以适应这种变化。这种变化还包括机器主板的变化引起硬件的冲突,某种型号板卡的停产或改型,用户特别指定的硬件设备等等。
另外,我们的头脑不可能聪明到完全可以预览未来发生的事情,所有很难设计一个一劳永逸的软件,另外市场的选择,竞争对手的压力,也逼着我们不断的修改设计。
需求的变化是一个客观存在的事实,软件设计人员必须正确的面对这样的事实,不要指望你辛辛苦苦编写了一年的代码之后,你就可以高枕无忧,尽管你对软件的架构、算法处理得非常好,甚至可以说是完美,然而所有的你所津津乐道的那些完美的设计,都是相对的,当用户的需求开始发生变化的时候,他们可能提出要增加一个新的功能,那么你很可能要改进设计。除非你设计的东西没有人使用,否则对设计的更改总是不可避免的。
2000年底的时候,我的第一个商品化软件完成,尽管我不觉得多么好,但是在同其他厂商的竞争中赢得了用户的青睐,听到从市场上反馈的信息,我当时的感觉非常好,然而,很快我不得不修改我的代码,除了程序中存在的一些BUG之外,在用户群不断增加的情况下,用户的要求开始发生变化了。
例如:A用户希望整个界面的字体采用楷体比较好,B用户50多岁的人比较多,希望字体能够大一些,可以看得清楚,C用户希望界面上的“医生”改为“医师”,D用户希望界面上的字段数量少一些,等等诸如此类的。关键是有些用户的需求是存在冲突 的,如果程序满足了张三的要求,而张三所要求的东西恰恰是李四要极力避免的,所以对于使用VB时间不长,经验不多的我来说,只能靠保留多个版本来解决这样的问题,我为每个用户保留一个备份,这样每个用户的要求都可以满足了,但是后期的代码的维护几乎让我陷入绝望的境地。
试想一下,一个存在问题的函数,需要你在10个甚至更多的版本上同时修改,是一种什么样的感觉,而且每个版本的程序都多少有点区别,任何一次修改,你都必须小心翼翼,一不留神就会产生一个新的BUG,这种更改让人精神紧张。
或许,我应该使用VSS之类的工具管理代码,但是我当时根本不知道世界上有这样的一种工具。所以在万般无奈之下,我必须想办法拯救自己,可不能陷入到需求变化和版本层出不穷的深渊,于是我开始构思下一版的软件,这个软必须能够解决现有版本的程序所面临的一切问题,同时可以支持网络。
在2002年,与后来的两个同事鼎力合作,终于在11月份完成的这个新版本的程序,整个程序界面上的控件都是在程序启动时动态创建,可以直接编辑,编辑完成之后将界面信息保存到数据库中,下次启动应用程序时再从数据库中动态加载界面,界面上的字体,颜色,甚至整个界面的风格都可以由用户自己选择。
当这个软件第一次推出的时候,用户也比较喜欢,很多设计非常新颖。直到今天,这个版本的程序还在不断的完善,但是程序的样子与2002年11月相比,已经大不相同了,现在的程序更加美观,看起来更加专业,使用更为方便,也更稳定。但是这个程序比较庞大,因为它要同时支持Access和SQL Server数据库。这个程序也就成了我们的产品由单机版向网络版过度的一个桥梁。这就是我们的第三版软件。
可以说第三版软件彻底解决了第二版软件面临的问题,但是在网络方面遇到了挑战,那是所有的网络版软件都面临的问题:流程的变更和业务规则的变更。第三版的设计初衷就是为了解决第二版遇到的问题,不过为了节约工作量,同时兼顾了网络版的功能,这就导致了第三版代码比较多,其中经常出现是单机版还是网络版的判断。
对于网络版的用户需求的适应能力,第三版显得有点吃力了,我们不得不在程序中专门为某个用户增加一些特殊的处理,当网络版的用户快接近10家的时候,我们的噩梦又开始了,当然比第二版要乐观一点,因为VC中可以使用预编译条件解决了不少的问题,例如一个对话框资源可以根据不同的条件显示不同的外观等等。
由于针对多家用户添加的那些if else实在是太多了,修改一个地方,一不小心就会影响其他的功能。当然这也与第三版程序结构的设计不太合理有关系,因为这个版本的程序我依然是在现煮现卖,卖到2005年底的时候,我对于VC才有了点感觉,什么是面向对象的设计,什么是设计模式,系统架构等等的概念开始接触和学习。
软件设计师不应该害怕需求的变化,更不应该为需求的变化而烦恼,任何需求的变化都可能蕴藏着巨大的机会,这种机会就是创新,这种创新就是未来的市场机遇,就是企业的进步的推动力。创新源于需求的不断变化。这是多年来从事软件开发工作的一点非常深刻的体会,这种变化包括各个方面的,可能是硬件的变化,可能是操作系统的变化,可能是用户群的变化,这些统统可以归结为用户需求的变化。我们的软件产品就是在需求不断的变化之中发展的。
如果我们为用户编写了一个软件,不管具体实现的功能如何,只要上述的几种变化出现,我们都不得不不对软件的设计进行调整,有时可能需要对系统的整体框架进行调整,甚至重写部分或全部的源代码。
刚开始学习编程的时,总是希望一条语句表达尽可能多的含义,梦想一个算法解决所有的问题,一个程序满足所有用户的要求,但这是不可能的,因为我们周围的世界处于不断的变化之中,今天你写的程序完全满足用户要求,一段时间之后,用户的系统升级了,你的程序在新的系统上运行就会产生错误,所以你必须更新程序以适应这种变化。这种变化还包括机器主板的变化引起硬件的冲突,某种型号板卡的停产或改型,用户特别指定的硬件设备等等。
另外,我们的头脑不可能聪明到完全可以预览未来发生的事情,所有很难设计一个一劳永逸的软件,另外市场的选择,竞争对手的压力,也逼着我们不断的修改设计。
需求的变化是一个客观存在的事实,软件设计人员必须正确的面对这样的事实,不要指望你辛辛苦苦编写了一年的代码之后,你就可以高枕无忧,尽管你对软件的架构、算法处理得非常好,甚至可以说是完美,然而所有的你所津津乐道的那些完美的设计,都是相对的,当用户的需求开始发生变化的时候,他们可能提出要增加一个新的功能,那么你很可能要改进设计。除非你设计的东西没有人使用,否则对设计的更改总是不可避免的。
2000年底的时候,我的第一个商品化软件完成,尽管我不觉得多么好,但是在同其他厂商的竞争中赢得了用户的青睐,听到从市场上反馈的信息,我当时的感觉非常好,然而,很快我不得不修改我的代码,除了程序中存在的一些BUG之外,在用户群不断增加的情况下,用户的要求开始发生变化了。
例如:A用户希望整个界面的字体采用楷体比较好,B用户50多岁的人比较多,希望字体能够大一些,可以看得清楚,C用户希望界面上的“医生”改为“医师”,D用户希望界面上的字段数量少一些,等等诸如此类的。关键是有些用户的需求是存在冲突 的,如果程序满足了张三的要求,而张三所要求的东西恰恰是李四要极力避免的,所以对于使用VB时间不长,经验不多的我来说,只能靠保留多个版本来解决这样的问题,我为每个用户保留一个备份,这样每个用户的要求都可以满足了,但是后期的代码的维护几乎让我陷入绝望的境地。
试想一下,一个存在问题的函数,需要你在10个甚至更多的版本上同时修改,是一种什么样的感觉,而且每个版本的程序都多少有点区别,任何一次修改,你都必须小心翼翼,一不留神就会产生一个新的BUG,这种更改让人精神紧张。
或许,我应该使用VSS之类的工具管理代码,但是我当时根本不知道世界上有这样的一种工具。所以在万般无奈之下,我必须想办法拯救自己,可不能陷入到需求变化和版本层出不穷的深渊,于是我开始构思下一版的软件,这个软必须能够解决现有版本的程序所面临的一切问题,同时可以支持网络。
在2002年,与后来的两个同事鼎力合作,终于在11月份完成的这个新版本的程序,整个程序界面上的控件都是在程序启动时动态创建,可以直接编辑,编辑完成之后将界面信息保存到数据库中,下次启动应用程序时再从数据库中动态加载界面,界面上的字体,颜色,甚至整个界面的风格都可以由用户自己选择。
当这个软件第一次推出的时候,用户也比较喜欢,很多设计非常新颖。直到今天,这个版本的程序还在不断的完善,但是程序的样子与2002年11月相比,已经大不相同了,现在的程序更加美观,看起来更加专业,使用更为方便,也更稳定。但是这个程序比较庞大,因为它要同时支持Access和SQL Server数据库。这个程序也就成了我们的产品由单机版向网络版过度的一个桥梁。这就是我们的第三版软件。
可以说第三版软件彻底解决了第二版软件面临的问题,但是在网络方面遇到了挑战,那是所有的网络版软件都面临的问题:流程的变更和业务规则的变更。第三版的设计初衷就是为了解决第二版遇到的问题,不过为了节约工作量,同时兼顾了网络版的功能,这就导致了第三版代码比较多,其中经常出现是单机版还是网络版的判断。
对于网络版的用户需求的适应能力,第三版显得有点吃力了,我们不得不在程序中专门为某个用户增加一些特殊的处理,当网络版的用户快接近10家的时候,我们的噩梦又开始了,当然比第二版要乐观一点,因为VC中可以使用预编译条件解决了不少的问题,例如一个对话框资源可以根据不同的条件显示不同的外观等等。
由于针对多家用户添加的那些if else实在是太多了,修改一个地方,一不小心就会影响其他的功能。当然这也与第三版程序结构的设计不太合理有关系,因为这个版本的程序我依然是在现煮现卖,卖到2005年底的时候,我对于VC才有了点感觉,什么是面向对象的设计,什么是设计模式,系统架构等等的概念开始接触和学习。
- 推荐阅讯
- Qrunner让程序运行得更加快速
- VS2005中使用强类型DataSet简化开发
- 带你见识Jetaudio有趣的附加功能
- 程序员建立商业意识之Business Sense
- Oracle9i中监视索引的使用
- 固步自封 Borland焉能不败
- 创建基于AJAX技术的Scribble应用程序
- Visual Studio 2005中的新DataSet特性
- 73.3%的被调研者根本不了解web2.0
- Access2000迁移到Oracle9i要点
- 阅读排行
- 1..net页面间的参数传递简单实例
- 2.VC++与Matlab混合编程之引擎操作详解
- 3.Oracle数据库数据对象分析
- 4.Eclipse3.2+Tomcat5.5.17+Oracle9配置
- 5.Oracle数据库中索引的维护
- 6.在Oracle的网络结构中解决连接问题
- 7.Oracle数据安全面面观
- 8.Oracle数据库的ORA-00257故障解决过程
- 9.Oracle数据库备份与恢复的三种方法
- 10.Oracle与SQL Server在企业应用中的比较
- 专题教程
- Windows Server-Windows Server文档-Windows Server新闻-Windows Ser PostgreSQL-PostgreSQL文档-PostgreSQL新闻-PostgreSQL专家
- WebLogic-WebLogic文档-WebLogic新闻-WebLogic专家 FreeBSD-FreeBSD文档-FreeBSD新闻-FreeBSD专家
- Linux-内核 GUI KDE Gnome DNS FTP 安全 安装-Linux专区 Windows-AD IIS ServerCore 虚拟化 安全 HPC-Windows专区
- 大话G游 专题:手机病毒揭密
- ARP攻击防范与解决方案 路由故障处理手册
