读林锐博士的《软件工程思想》有感

 

     大三上学期学习《软件工程》这门课程,说实话,挺水的,都在纸上谈兵。老师上课也花很久很久讲写时事的东西,说到底,就是要让我们学会有自己的思想。老师一直推荐给我们上浙大的博士林锐写的《软件工程思想》,由于本人比较懒,没意思到软件工程的重要性,一直没看。在寒假,闲来无事,把它补上,说实话,这本书确实写得不懒,把原本就是简单的东西用比喻等日常生活中最简单的例子来阐述,让我对软件工程有了初步都认识,不像张海藩的“全国优秀教材”《软件工程》,把简单的道理用复杂的文字来解释,越解释越糊涂,林锐博士很有个性,讲话也幽默,强烈推荐把教材改成这本《软件工程思想》(本人现在读了2遍,争取寒假结束前再读一遍,若有新的想法会及时更新和补充)。

《软件工程思想》改变了我对软件的一个观念。下面我结合书中的原话来谈谈我的认识或者感受吧:

1、在讲到“软件质量”和“软件生产率”的时候,书中说“高质量对所有的用户都有价值,而高生产率只对开发方有意义”,想想确实是,以前根本没意识到这一点。

书中在写道“软件开发的基本策略”时候,我的体会特别深刻。三种基本策略:“复用”、“分而治之”、“优化——折衷”。 复用就是指“利用现成的东西”,文人称之为“拿来主义”,复用的内涵包括了提高质量与生产率两者。由经验可知,在一个新系统中,大部分的内容是成熟的,只有小部分内容是创新的。一般地可以相信成熟的东西总是比较可靠的(即具有高质量),而大量成熟的工作可以通过复用来快速实现(即具有高生产率)。勤劳并且聪明的人们应该把大部分的时间用在小比例的创新工作上,而把小部分的时间用在大比例的成熟工作中,这样才能把工作做得又快又好

让我明白了学习面向对象的语言时,“不要再发明相同功能的轮子了”,不要自己想着去做轮子,而是想着怎么样去组装这些轮子达到客户不同的需求。但是个人觉得以学习和理解为目的,尝试模仿得做轮子还是有必要的,个人一直认为模仿是创新的基础。但是必须要有自己的思想,这也就是钱老师上一学期《软件工程》最我的最大的收获吧。以前压根没意思到创新的重要性,现在真正的体会到,特别是最近曾今风靡全球的“柯达”公司申请破产保护,可能就是安居乐业,不继续创新的结果。以后要做一个有自己内心想法的人

当然,为了自己更好的发展,软件复用不仅要使自己拿来方便,还要让别人拿去方便,是“拿来拿去主义“,觉得说的特别有道理。

以前对“分治“的感念理解不深,阅读了《软件工程思想》,才真正意识到分而治之是指把一个复杂的问题分解成若干个简单的问题,然后逐个解决。

关于“优化—折衷”,以前一直有一个误区,认为只要计算机能跑出来就行,但是通过亲身参加ACM才知道(虽然自己的水平很一般),优化工作不是可有可无的事情,而是必须要做的事情。软件中的折衷策略是指通过协调各个质量因素,实现整体质量的最优。管理一个团队,一个组织也是一样。。就象党支部副书记扮演和事佬的角色:“…为了使整个组织具有最好的战斗力,我们要重用几个人,照顾一些人,在万不得已的情况下委屈一批人”。

2、     关于软件开发过程最难的过程。以前一直觉得“上机编码就是软件开发的全部”,现在觉得想起来就好笑。真正意识到软件开发最难的是“系统设计与系统分析”。

始终把程序员的技术水平分类分为4类,管理水平也分为四类。把技术水平分为四级,第一级最低,第四级最高。第一级技术水平的程序员主要考核编程基本功,要求质量合格(他们主要来自刚毕业的大学生)。第二级技术水平的程序员编程质量要高,做过几个软件项目,有数年的工作经验,并能指导新手的工作。第三级技术水平的程序员主要考核系统分析与系统设计的能力,要求其技术有足够的深度和广度。第四级技术水平的程序员是成功的软件产品的设计师,他不仅技术超群,并且能使技术转化为有价值的商品。

管理(这里仅指软件业务的管理,不考虑行政事务)水平也分成四级。第零级最低,第三级最高。第零级管理水平的人没有管理职务,就是普通员工。第一级管理水平的人是开发小组的组长,可带领几名程序员工作。第二级管理水平的人是项目经理。第三级管理水平的人决定某些产品是否要开发,以及如何去占领市场。

我想成为最棒的程序员(虽然现在知识体系有欠缺,上机编程实现也远远不够),但是我会一直努力,到一个更加好的平台上去发展自己,所以,或许我现在的选择或许对大多数程序员来说有点离谱,选择“考研”,呵呵,我不太清楚考研意味着什么,我只想有一个更加好的平台再学习几年,因为我觉得我还是比较喜欢读书的。因为我清楚地知道,如果现在离开了校园,工作几年再回来读研的几率太小,读研让自己在沉静几年,男人后劲要足,不能只看着眼前的利益。”人生要后悔的事情太多了,只能现在做得勤快些。明知自己不成大器,但愿意亡羊补牢,力求学得更深更广。

3.关于系统设计(以下载自书《软件工程思想》)。林锐博士的书中将系统设计分为以下四方面内容:体系结构设计、模块设计、数据结构与算法设计、用户界面设计。如果将软件系统比喻为人体,那么:

(1)体系结构就如同人的骨架。如果某个家伙的骨架是猴子,那么无论怎样喂养和美容,这家伙始终都是猴子,不会成为人。

(2)模块就如同人的器官,具有特定的功能。人体中最出色的模块设计之一是手,手只有几种动作,却能做无限多的事情。人体中最糟糕的模块设计之一是嘴巴,嘴巴将最有价值但毫无相干的几种功能如吃饭、说话、亲吻混为一体,使之无法并行处理,真乃人类之不幸。

(3)数据结构与算法就如同人的血脉和神经,它让器官具有生命并能发挥功能。数据结构与算法分布在体系结构和模块中,它将协调系统的各个功能。人的耳朵和嘴巴虽然是相对独立的器官,但如果耳朵失聪了,嘴巴就只能发出“啊”“呜”的声音,等于丧失了说话的功能(所以聋子天生就是哑巴),可人们却又能用手势代替说话。人体的数据结构与算法设计真是十分神奇并且十分可笑。

(4)用户界面就如同人的外表,最容易让人一见钟情或一见恶心。象人类追求心灵美和外表美那样,软件系统也追求(内在的)功能强大和(外表的)界面友好。但随着生活节奏的加快,人们已少有兴趣去品味深藏不露的内在美。如果把Unix系统比作是健壮的汉子和妇人,那么Windows系统就象妩媚的小白脸和狐狸精。想不到Windows系统竟然能兴风作浪,占去大半市场。有鉴于此,我们应该鼓励女士多买化妆品(男士付钱)以获得更好的界面。

在进行系统设计时,我们要深情地关注软件的质量因素,如正确性与精确性、性能与效率、易用性、可理解性与简法性、可复用性与可扩充性等等。即使把系统设计做好了,也并不意味着就能产生好的软件系统。在程序设计、测试、维护等环节还要做大量的工作,无论哪个环节出了差错,都会把好事搞砸了。据说上帝把所有的女士都设计成天使,可是天使们在下凡时有些双脚先着地,有些脸先着地。上帝的这一疏忽让很多女孩伤透了心。我们在开发软件时,一定要吸取这个教训。

体系结构是软件最本质的东西:(1)体系结构是对复杂事物的一种抽象,一提起“房子”,我们的脑中马上就会出现房子的印象(而不是地洞的印象)。“房子”是人们对住宿或办公环境的一种抽象。(2)体系结构在一定的时间内保持稳定

两种非常通用的软件体系结构:层次结构和客户机/服务器(Client/Server)结构。在Internet/Intranet领域,目前“浏览器—Web 服务器—数据库服务器” 结构是一种非常流行的客户机/服务器结构

 

编码的建议:

1、不要将BOOL值TRUE和FALSE对应于1和0进行编程。大多数编程语言将FALSE定义为0,任何非0值都是TRUE。Visual C++将TRUE定义为1,而Visual Basic则将TRUE定义为-1。示例程序如下:

BOOLflag;

if(flag) { // dosomething } // 正确的用法

if(flag==TRUE) { // dosomething } // 危险的用法

if(flag==1) { // dosomething } // 危险的用法

if(!flag) { // dosomething } // 正确的用法

if(flag==FALSE) { // dosomething } // 不合理的用法

if(flag==0) { // do something } // 不合理的用法

2、C++和C语言中的指针威猛无比,用错了会带来灾难。对于一个指针p,如果是用new申请的内存,则必须用delete而不能用free来释放。如果是用malloc申请的内存,则必须用free而不能用delete来释放。

在用delete或用free释放p所指的内存后,应该马上显式地将p置为NULL,以防下次使用p时发生错误。示例程序如下:

voidTest(void)

{

float*p;

p= new float[100];

if(p==NULL)return;

…// do something

deletep;

p=NULL;// 良好的编程风格


//可以继续使用p

p= new float[500];

if(p==NULL)return;

…// do something else

deletep;

p=NULL;

}

我们还要预防“野指针”,“野指针”是指向“垃圾”内存的指针有主要成因有两种:

(1)指针没有初始化。

(2)指针指向已经释放的内存,这种情况最让人防不胜防,示例程序如下:

classA

{

public:

voidFunc(void){…}

};

voidTest(void)

{

A*p;

{

Aa;

p= &a; // 注意a 的生命期

}

p->Func();// p是“野指针”,程序出错

}

4、关于软件维护和再生工程。在对待一个不良之徒时,可以进行思想教育并给予他关心和帮助,这种方式类似于“软件维护”;也可以把他关进监狱,送去劳改,这种方式相当于软件的“再生工程”;如果此人坏透顶了,就毙掉算了。

再生工程与维护的共同之处是没有抛弃原有的软件。如果把维护比作“修修补补”,那么再生工程就算是“痛改前非”。再生工程并不见得一定比维护的代价要高,但再生工程在将来获取的利益却要比通过维护得到的多。

再生工程主要有三种类型:重构、逆向工程和前向工程(为了明天的需要,把今天的方法应用到昨天的系统上)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值