软件设计的一些思考

软件设计的一些思考

 

1       前言

从事软件开发工作已经五年了,仔细想想,虽然做了不少项目,但是在软件技术上,感觉始终还是进步甚微,一方面和公司的情况有关,一方面,我想,也是自己个人总结和思考不够吧。

所以,慢慢的,还是有必要对自己的一些经验做思考和总结。

       为什么只谈软件设计,不谈软件开发呢,软件开发涉及的不仅仅是设计技术了,还包括软件项目管理等许多内容,设计仅仅是其中的一部分,通过这些年的经验,我还是觉得自己作为一个技术专家的角色更加合适一些,在自己真正在管理方面成熟的时候,再谈管理。

       在四年前,当我通过系统分析员考试的时候,我心里很清楚,自己离真正的系统分析员还差很远。

       遗憾的四年之后,我还是感觉,自己离真正的系统分析员,还是有相当的距离。

但是不管怎样,软件设计是我未来成为一个软件技术专家的一个发展方向,整理分析一下,我想,会更加有利于自己未来的成长。

 

2       WHY DESIGN

       软件工程中,注重设计,概要设计、详细设计,都非常强调,所以在公司的软件开发过程中,常常要要求有设计阶段,要出设计文档。

       有意思的是,在新太,软件质量和设计文档,却几乎没有实际的联系,我看到的现象是,有设计文档的项目,软件质量往往很一般,不少没有设计文档的项目,软件质量还是很不错的。

       事实上,设计和设计文档无关,设计文档多,不代表软件设计的好。

       从软件的角度来讲,最终直接影响软件质量的,是软件的编码,设计再好,编码烂的一塌糊涂,结果还是作出个烂软件,所以编码质量,在任何情况下,都是优秀软件质量的基石。

       前一段时间看了一本书,叫做《编程珠玑》,里面介绍的都是一些具体的问题的解决算法,这本书对程序员提出了一个重要的建议:在编写代码之前,要再多想一想,再多思考一下,有没有更好的解决方法?

       一个愚蠢的程序员是蒙头写程序的,真正优秀的程序员,是应该在思考之后,再写程序。

       我搬一下书中的例子出来给大家看看:

       【问题】有这样一个文本文件,文件每行记录是一个整数,其值从01,000,000,正常情况下数据不能重复,文件大约有500,000行,现需要编写程序读入文件,并输出一个结果文件,结果文件为对输入文件的记录从小到大进行排序。

       【约束】系统内存仅有256KB,要求能够在60秒内完成文件输出。

       【分析】

       (首先要说明这个例子看起来比较古老,现代计算机内存远远超过256KB

       这个乍一看,是一个排序问题,特殊之处就是内存不足,只有256KB,所以无法用一个大数组来做内部排序,只能采用外部排序的方式。

       所以表面看起来解决这个问题是比较复杂了(你记得外部排序吗?要不要翻翻数据结构的书查查?还是GOOGLE搜索一把?),要满足性能要求也非常困难。

       如果给予你更多的思考时间,我想很多人都可以想到以下解决方法:

       一个字节有8bit,既然文件的数据不能重复,那我们可以用一个巨大的数组标志位,来标志每一个数是否在文件中出现过。256KB的内存,那可以表示 256×1024×8=2,048,000,足以表示01,000,000的数。(事实上即便内存不足,或者需要表示更大的数字,也可以把标志数组存放到外部文件中)

       这样程序就非常简单了,从文件顺序读入记录,然后设置数组中相应的比特位,全部读完毕后,扫描一遍标志位数组,如果标志位为true,则输入数字到结果文件中。

       VERY SIMPLE,性能最高,而且很美。

       如果我是一个程序员,开始用外部排序解决了这个问题,然后再想到后面的方法,我一定会极度郁闷。

       所以如果想要不郁闷,就是一定要记住,在编写代码之前,做更多的思考!

       如果要再进一步深究为什么要思考,这个就涉及到软件开发的一些本质理念问题,比如说,你是否希望构建一个好的软件系统?你是否希望成为一个出色的软件开发人员?如果你希望做到这一切,你就需要思考。

设计,就是思考的过程之一。

       我认为软件开发,应该有三个层次:体系结构、设计和编码。

       体系结构从某种角度来讲,超出了软件产品范围,是从软件产品的整个应用解决方案角度来描述软件产品的,是非常高层次的软件结构。最重要的是,软件体系结构要将公司战略、商业目标结合到软件产品中,以系统的、战略的眼光去考虑整个软件系统的设计。如,是采用小型机还是PC服务器?是采用DB2还是ORACLE?是采用WIN2000还是LINUX?所有软件模块是自行开发还是考虑采用部分第三方软件?

       最近张总在设计下一代的平台,其中有一个选择,是选择NAS服务器来做文件服务器,取代现在的PC服务器+磁盘阵列做文件服务器的方式,作为一个软件开发人员,从软件来看,采用什么文件服务器,是没有任何影响的,但是从系统角度来看,文件服务器能否承受高速数据的吞吐量,则很可能成为系统能否稳定运行,能否应对突发事故的关键。

       再比如软件系统的选择,是选择WIN2000,还是LINUXWIN2000简单易用,对工程安装人员和系统维护人员要求比较低,LINUX则复杂一些,如何在两者之间权衡选择呢?由于新太的系统和硬件关系非常紧密,硬件驱动和操作系统的相关则非常大,由于WIN2000的病毒问题严重、漏洞太多,必须不断打补丁,而打补丁后,对硬件驱动又产生了许多影响,问题非常之多,因此,下一代平台必须采用LINUX或者UNIX,是从公司产品整体的稳定性和健壮性考虑的。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值