现代软件工程系列 学生读后感 梦断代码 SpringGreen

“拿来的代码所不能做到的部分,恰是项目与众不同的创新之处”。

《梦断代码》

终于看完了《梦段代码》。
     其实整本书就是讲图灵机的不可判定性————软件开发过程中,很多过程都不知道什么时候能不能结束,甚至说能不能做出来,这导致整个软件工程不能够停止,这不是暗合了“停机问题”?纯属玩笑,问题并没有这么简单,否则Scott Rosenberg的书也不会这么畅销。
 
     我最感兴趣的是如何能够在10个小时之内读完这本书的英文版,因为我十个小时才刚完成中文版的一半,而且只是大概的了解。不得不说,我不是很习惯作者的写作风格,以记叙文的风格去写说明文,必然会给信息的提取带来很多的不便,说白的就是文章中的“废话”太多,以至于不认真看还真找不到课上讲的东西,比如“Feature Driven”之类。不过话说回来,Scott Rosenberg真乃神人,能够把这么一件很理性的事情以如此幽默的方式表现出来而且不失深厚的文化底蕴,使得全文行云流水,酣畅淋漓的展现自己在项目管理和代码编写方面的才华,获得这么多读者的支持也是有理由的。
 
     《梦断代码》以OSAF开发的名叫Chandler的PIM软件的开发过程为主要的线索,阐述了这个软件的4年来开发过程,这个梦并不是很美好,实际上是痛苦的,软件开发过程中的典型问题在Changler的开发过程中到能找到。不过本书主要还是要说明如何有效的应对由于生产力的发展而导致预期目激增而导致项目目标发生的变更,这样的变更通常是不可预知的,似乎在和你进行一场不公平的游戏,你在明处,他却在暗处————被动的总是你。
 
1、信仰
 
     如果一个软件项目没有任何追求,那么可以做的很平庸,这样也就很难遇到Chandler开发过程中的种种困难。这不是作者考虑的范围,作者希望一个软件开发出来,必须要有“杀手级”特性,比如文中提到的Lotus 1-2-3,这样便是软件开发中目标变更的源泉。软件必须是有区别其他软件的特性,而不是简单的仿照,我们不希望做出复制品。我觉得Chandler开发过程中的主角卡普尔坚信“Agenda之魂”便是一个似乎不可完成的特性,他希望PIM能够任意的整合个人数据,这个“任意”就让人摸不到边了。不过正是卡普尔坚信这样的信仰,才是他能够在OSAF看着Changler举步维艰的前行了6年(今年初卡普尔貌似从OSAF撤资了,不过Chandler似乎还在继续前行)。
 
2、一个接一个的问题
 
     很多问题看似简单,实际上却很难解决。比如“代码复用”问题,是重用他人的成果,还是另起炉灶,从头开始,这有点像哈姆雷特的抉择。文中提到了,“代码复用”实际上非常困难,因为没有两片相同的树叶,任何功能都不是完全相同;即使有适用的代码,如何在浩如烟海的代码库中找到也是个问题。实际上“代码复用”和软件的信仰有点相悖,重复他人的成果还是自我创新,不过文中还是给出了答案,“拿来的代码所不能做到的部分,恰是项目与众不同的创新之处”。
 
     软件开发过程中遇到的最多的问题是“项目的进度远远落后于计划”。Chandler计划是3~4个月发布一个版本,但是每个版本都花了6个月以上的时间,这里面有诸多的原因。首先合理的衡量开发进度本身就是一件非常难的事情,也就是说计划本身太苛刻了。即使是检测软件开发的进度也是一件很痛苦的事情,用代码数量或者缺陷减少数目来衡量有过偏颇,文中提到了MBWA的方法,但是这个方法很难得到一个总体的开发进度。其次是软件开发的计划往往超出了能预见的范围,致使软件开发一只停留在设计阶段,引用文中的一句话,“用今天的工具和过程,加上昨天的内存限制,我们真的能做的更好”。另外就是软件的缺陷,Chandler在开发过程似乎中似乎掉进了缺陷的泥潭中,他们花了大量的时间用于修复软件的缺陷,如何减少软件开发过程的缺陷也是个头大的事情。
 
      还有就是开发者的心态也是需要注意的,如果软件长时间停留在设计阶段,没有任何的程序甚至是代码,那么很容易让人悲观,会影响生产力的发展。文中记叙了一件很有趣但是也很无奈的事情,Chandler 0.2发布的时候,发布者在Blog中恳求大家不要下载,甚至不要去宣传,原因是Chandler 0.2是一个几乎不能用的版本。但为什么要发布呢?“如果没有中间版本期限的话,就会导致在充满各种编码可能性的土地上漫无目的地四处游荡”。
 
3. 我们要迎难而上
 
     当然,作者不是简单罗列Chandler开发中的问题,他还是提出了许多开发过程中的一些方法和注意事项。作者很看重方法的选择,对于不通的情况,应该采用不同的方法,他说“决定采用何种工具和方法有可能成就或毁掉项目”。
 
     首先是如何设计项目的目标。这个和项目的信仰很矛盾,理想是做一个很出色很优秀的软件,但是很多情况下是力不从心的,项目过大很容易埋葬自己。文中有一段很有意思的对话:“你对那些刚开始做大型开源项目的人有何建议?”“别做大项目”。卡普尔在Chandler的设计过程中一直想坚持“Agenda之魂”,现实却一次次的消磨这种想法。后来他只期望做出一个“狗食版”,但是“狗食版”都是一件多么奢侈的愿望。实际上大家都希望看到自己的努力有实质性的成果,做出一个“狗食版”有利于较大目标的实现。“尽快的做出可用的软件”(原文中“狗食版”是指给自己用的版本,来源于一个美国卖狗食公司的广告,该公司的老板用自己生产的狗食喂自己的狗)
 
     其次是进度管理,这在软件工程中是不可预知的。首先是进度的衡量难,不能单一的用代码数量和缺陷减少数量。在软件过程中有很多很顽固的缺陷,在当前很难快速的解决。还有就是人与人之间是很难协调的,比如新加了个成员,需要新成员培训;比如更换了项目经理等等。文中提到“特性驱动”“进度驱动”等,在实际的管理过程中两者兼有,只是侧重点不通罢了。对于是否需要用强制进度纪律来管理,作者谨慎的给出了说明:这要看情况来定。有些程序员不喜欢被强制管理,那么强制纪律最好不要用。如果进行强制进度管理,那么在评估进度的时候要符合现实,采用“自底向上”的方法评估。比如文中的CMM管理。
 
     还有缺陷管理。现在的编程模式基本上都是先编些代码,然后修正缺陷,实际上很难写出没有缺陷的代码来。直觉上,文中也是这么说的,在开发过程中越晚修正缺陷,代价就会越高。所以要尽早的发现缺陷。如何减少缺陷,文中给出了一些方法,比如“螺旋模型”、“极限编程”、“祖尔测试”等等。作者还提到了OOD的思想,要合理的抽象和模块化,同时鼓励使用代码注释。(实际上代码注释可以很好的发泄自己的情绪~~)
 
      当然,一个项目的成员自然需要交流,交流的方法有很多,可以用Blog、wiki等等,但是不要忘了一些非正式的交流方法,比如在“冷水机”旁边交流。
 
-------by Hu Wei
from  http://springgreen9527.spaces.live.com/default.aspx?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&sa=43775437

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt 无法打开shell32_在Qt中用默认程序打开文件

用法: QProcess::execute("explorer 文件名");例: QProcess::execute("explorer c:\\123.txt");----------------------------------------------------------------------应该早有大虾发现了这个方法,只是我没搜到,于是有…

现代软件工程系列 学生读后感 梦断代码 布鲁克斯法则

《梦断代码》读后感(第1~6章) 书名:"Dreaming in Code",作者:Scott Rosenberg(中译本:《梦断代码》,翻译:韩磊,电子工业出版社出版)。第…

现代软件工程系列 学生的精彩文章 (6) 项目总结

http://lunarthu.spaces.live.com/?_c11_BlogPart_pagedirNext&_c11_BlogPart_handlecns!48EA3793D3DA17C8!211&_c11_BlogPart_BlogPartblogview&_cBlogPartJanuary 10学做一个PM By Cheng Lu 对于我们的SmartMe,我是真正倾注了感情的。看到今天SmartM…

sqlite查询空日期类型_SQLite比较日期

我有这个sql语句:SELECT Geburtsdatum FROM KundeWHERE Geburtsdatum BETWEEN 1993-01-01 AND 2000-01-01但我得到一些奇怪的结果,如:2.02.1990“Geburtsdatum”是DATE任何建议或解决方案?我的表格结构:CREATE TABLE Kunde (Kunde…

现代软件工程系列 学生读后感 梦断代码 软件难做

http://cid-064ec84e17924332.spaces.live.com/blog/cns!64EC84E17924332!173.entryDecember 06读《梦断代码》 读《梦断代码》的感想 《梦断代码》详细叙述了OSAF的Chandler项目从2001年开创以来直至2005年间的进展状况,真实展示了Chandler项目的艰难的开发过程&am…

现代软件工程系列 结对编程 (II) 电梯调度程序

[很多同学完成了上一个结对编程项目后, 很想知道下一个项目是什么, 我们这次要练习如何设计 接口, 测试框架, 和算法] 现代软件工程系列 结对编程 (II) 电梯调度程序 ------- Pair Project II Elevator Scheduler Design and implement an Elevator Scheduler to aim for …

java 中violate_Java中的Volatile关键字

Java的volatile关键字用于标记一个Java变量为“在主存中存储”。更确切的说,对volatile变量的读取会从计算机的主存中读取,而不是从CPU缓存中读取,对volatile变量的写入会写入到主存中,而不只是写入到CPU缓存。实际上,…

现代软件工程系列 创新靠学分

如何在学校里讲创新, 这是一个老问题。 但是天朝的教育体制总有办法,请看: http://news.163.com/10/1125/03/6MABIS4H00014AED.html 武汉一高校设"创新学分" 不搞创新不能毕业 去年秋季,武汉科技大学中南分校出台《学籍管理规定》,…

java 如何发提示_消息提醒-如何实现收到待办给QQ发送提醒?

一、前期准备一台windows服务器(用于运行QQ机器人)下载QQ机器人框架二、QQ机器人配置1、解压前面下载的机器人框架和httpapi2、打开解压后的 小栗子框架.exe3、在用户列表右击选择添加单个4、添加后右击点添加后的账号选择登录选中QQ5、点击应用中心>点击导入插件>选中前…

顶级程序员的心得 - Coders at Work

这篇博客经历了 CSDN 的历次改版后,格式已经坏了, 我重新写了一篇,重排了格式: 顶级程序员的心得 –– Coders at Work_SoftwareTeacher的专栏-CSDN博客顶级程序员的心得 –– Coders at Work我2009年读了 “Coders at Work”, …

jdbc mysql myeclipse_关于JDBC连接MySQL的问题,我一直解决不了(Myeclipse 环境下)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼package org.mlj.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;import java.net.UnknownHostException;import java.net.InetAddress.*; public class…

现代软件工程课件 需求分析 如何提出靠谱的项目建议 NABCD

《构建之法 - 现代软件工程》课件 互联网时代对于创新者来说, 既是一个伟大的时代, 又是一个糟糕的时代。 你有很多机会做出影响世界的产品, 但是, 似乎任何想法都被别人想到过了, 做出来了, 上市了, 移植到各种平台上去了… 那么我们后来人除了羡慕别人生得早, 还有什么机…

java禁止数据库写入事务_Java -- JDBC 事务处理, 事务的隔离级别 脏读 不可重复读 等......

1. 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。数据库开启事务命令•start transaction开启事务•Rollback回滚事务•Commit提交事务JDBC控制事务语句•Connection.setAutoCommit(false); //start transa…

现代软件工程 教学计划 适应两种难度和重点

现代软件工程 教学计划 经过 2007 - 2018 年,30个不同学校的实践后, 《构建之法》在大学的两种教法已经出现了, 这两种教学计划适应于两种难度和重点。 下面我们具体介绍这两种计划。 1. 软件工程导论(适合大一下的学生,在学过…

java中setDocument_Java ActionItem.setDocumentId方法代码示例

import org.kuali.rice.kew.actionitem.ActionItem; //导入方法依赖的package包/类Test public void testConvertActionItem() throws Exception {// get test dataString testWorkgroupName "TestWorkgroup";Group testWorkgroup KimApiServiceLocator.getGroupSe…

敏捷软件开发宣言–Manifesto for Agile Software Development

敏捷开发, 谁不会呀, 不就是 没文档, 出活快, 用户说啥都能改? 下面是一个笑话, 王屋村的大牛说 - 我最近转手接了一个活, 完事能挣四五万, 我拿过图纸一看, 不就是盖一烟囱吗? 我们是敏捷 (Agile) 的团队,要文档作甚? 马上开始干活! 都快盖好了&am…

敏捷软件开发 12 原则

作为 <现代软件工程> 的一个作业, 我要求同学们把 英文的敏捷开发原则 翻译成中文并解释。 大部分同学都提供了持续重构, 不断提高的版本。 技术翻译专家余晟老师也对其中较难翻译的三条原则提了很好的建议。 下面是我的尝试, 翻译要做到 信, 达, 雅, 很难, 而且中国的…

教师管理系统设计报告java_教师办公管理系统的设计与实现

随着计算机及网络技术的飞速发展&#xff0c;Internet/Intranet应用在全球范围内日益普及&#xff0c;当今社会正快速向信息化社会前进&#xff0c;信息自动化的作用也越来越大。从而使我们从繁杂的事务中解放出来&#xff0c;提高了我们的工作效率。教师办公管理系统是一个教育…

同学, 你的板砖呢?

这次 <现代软件工程> 的4 个团队要做下面的项目, 唯一的要求是 - 做真实的项目: 第一组: 一个BBS 的通用客户端 第二组: 挖掘学术圈内的师承关系 第三组: 真人拳皇 - 把你老板的照片变成对手, 然后给他一顿痛打 第四组: 一个叫呆呆的东东。 他们缺什么呢? 缺一些…

设置java环境变量生效 centos_解决CentOS java环境不生效的问题

查看当前java版本[rootlocalhost jdk1.6.0_45]# java -versionopenjdk version "1.8.0_65"OpenJDK Runtime Environment (build 1.8.0_65-b17)OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)发现默认的还是系统自带的1.8&#xff0c;不是配置的1.6。[rootl…