写在前面:

本次我为团队博客写了一篇总结,深刻总结了我们组发生的问题以及将来要做的事情。有兴趣请移步http://www.cnblogs.com/Buaa-software

Week 7 Alpha轮迭代总结以及我的一些启发

先说说我们的项目:

我们的项目没有大泥球。

大泥球这种东西对于一个项目来说是要了命的,出现这种情况纯属大家没有精力和意愿去维护以前的代码。这大大降低了项目的潜力,让代码成为用过即丢的一次性物品,浪费了大量的时间、精力。而这一切却仅仅因为作者们在更新时不去修改以前代码的兼容和BUG,导致泥球越滚越大。

我们的项目有黄上同学作为首席测试员,他为我们的代码找出了许多BUG,我们及时的更新了自己的类。保证了整个项目的稳定。而且项目的代码复用性也得到了提高。

一坨脓包似的权宜代码,被一群盲目的根本不知IT架构为何物的所谓IT“专业人士”永无休止地复制着,粘贴着。

 

       这篇文章说的很有意思,也很有道理。所谓质量,只有某人对它负责时才有意义。好多项目有着臃肿的代码,却实现不了基本的功能。在开发过程中一个很常见的事情是:这个问题不会,于是在网上找到了一段代码来解决问题。然而这段代码没有头没有尾,就错误的用在了这里,虽然解决了问题,却给后面的开发引来了很多隐患。我们的项目是从头做起的,那些基本的功能也是我们一点一点实现的,所以也不存在这种问题。

我同意没有银弹的说法。我相信无论是在软件工程,还是在其他的课程当中,银弹这种东西都是不存在的。没有万能或万全的方法论,对于软件工程这一门学科来说,在软件开发过程当中,最重要的还是三个字:看需求。

  1. 项目得多长时间完成?
  2. 项目的启动资金有多少,有多少人做?
  3. 项目的核心功能有多少,需要什么样的稳定性?
  4. ……

这些东西在没有确定之前,我们不能得出一个结论。同样我想到目前为止,还没有万能药能解决所有的不同需求的项目。

软件工程的方法论毫无疑问是有用的。我们把大部分次要复杂度通过软件工程的方法论都优化掉了。剩下的主要复杂度是我们的学习成本,我们都是在学习中逐渐进步的。我们在软件工程的A轮迭代中得到了很多经验教训。现在把我们团队博客的一部分迁移过来,以便展示:

简单地总结一下,我们的团队有成员没有达到敏捷开发的要求,体现在:自主管理,自我组织。

       自主管理:以前领导布置了任务,我们实现就可以了,现在要自己挑任务;每次Sprint结束之后,还要总结不足,提出改进,并且要自己实施这些改进。“自主管理”不等于“没有管理”。

       自我组织:以前做好自己的事情就好了,安心下班。现在每个人要联合起来对项目负责,有人工作落后了还有帮助他改进,项目缺少某类资源自己还要顶上去。

       这件事情发生在团队身上,就是“积极度不高”。大家没有积极地把这件事情做出激情,对于团队交代给的任务也没有积极完成。比如说,如果留学生同学能够主动的来要代码,把我们分享的知识学习完全,写博客的同学能主动找开发人员要今天的进度。负责辅助首席程序员写代码的同学能够主动的去要任务来减轻首席程序员的负担,这些都是“自主”掌控的地方,而在这些地方我们掌控的都不好。

另外,在阅读中的这一句话我简直不能同意更多:

通常情况下,最引人注目的创新解决方案来自于意识到你对问题的概念是错误的。

而我们组几次大型的更新,几次把代码推倒重来,恰恰因为发现我们原来的想法是错误的。因为一些交流上的不直白,我们多花了两天时间写代码。这说明,一个好的系统架构师是多么重要,他能从一开始就把问题考虑到。从而能让整个队轻松解决一些问题。我离这个目标还差很远,我还需要太多的经验。

还有,在设计的初期,

一定要画图!

一定要画图!

一定要画图!

重要的事情说很多遍。队友无法想象你在想什么,只交流不画图只能带来更高的沟通成本。

这次迭代对我而言还有更深层的体会,不过跟软件工程的方法没什么关系,而是我自己的问题:

  1. 被别人带着,是痛苦的。我还是喜欢自己去实现什么东西,才能神清气爽,毫无羞愧。让自己的队友做大部分东西,对我而言是一件很不舒服的事情。我希望能在团队中有所贡献,而且还不能低,否则还不如不参加团队。在团队做出来东西时一点喜悦感都没有。
  2. 有问题就要及时说,不要以为队友可以轻松意识到。有可能你有的信息他们并没有,不把想法说出去就会白白加大交流沟通的成本,而毫无所得。
  3. 程序员更应当爱惜羽毛。要对自己写过的代码负责任,保证其可复用性和稳定性,不要写完一扔就不管了,最后还要麻烦别人把东西实现。到时候可能别人读不懂你的代码就自己写了,你辛辛苦苦写的劳动成果可能因为这样的小事情而毁于一旦。

暂时就这些吧。

老师大人和助教大人,我14-22号要跟着学校出去,可能会无法及时回复博客,请您谅解,我会时常关注您的评论的!

Week 7 迭代总结的更多相关文章

  1. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  2. IteratorPattern(迭代子模式)

    /** * 迭代子模式 * @author TMAC-J * 聚合:某一类对象的集合 * 迭代:行为方式,用来处理聚合 * 是一种行为模式,用于将聚合本身和操作聚合的行为分离 * Java中的COLL ...

  3. JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)

    1.使用对象字面量定义对象 var person={}; 使用这种方式创建对象时,实际上不会调用Object构造函数. 开发人员更喜欢对象字面量的语法.   2.有时候需要传递大量可选参数的情形时,一 ...

  4. python征程3.1(列表,迭代,函数,dic,set,的简单应用)

    1.列表的切片. 1.对list进行切片.'''name=["wangshuai","wangchuan","wangjingliang", ...

  5. 让产品有效迭代,前端A/B Testing的简单实现

    A/B Testing简介 互联网产品的迭代速度很快,往往一周一小发布,一月一大发布,产品提出的种种需求,哪些改动是提升产品体验的,哪些是阻碍产品进步的,如果没有数据可以参考,仅仅是靠拍脑袋的话,对产 ...

  6. JAVA中的for-each循环与迭代

    在学习java中的collection时注意到,collection层次的根接口Collection实现了Iterable<T>接口(位于java.lang包中),实现这个接口允许对象成为 ...

  7. 迭代字典中的key和value

    字典是python中十分重要的一个内容. 今天我们来谈谈,在一个 for 循环中,能否同时迭代 key和value?当然可以咯. dict 对象的 items() 方法返回的值: >>&g ...

  8. python中的迭代、生成器等等

    本人对编程语言实在是一窍不通啊...今天看了廖雪峰老师的关于迭代,迭代器,生成器,递归等等,word天,这都什么跟什么啊... 1.关于迭代 如果给定一个list或tuple,我们可以通过for循环来 ...

  9. ICP算法(Iterative Closest Point迭代最近点算法)

    标签: 图像匹配ICP算法机器视觉 2015-12-01 21:09 2217人阅读 评论(0) 收藏 举报 分类: Computer Vision(27) 版权声明:本文为博主原创文章,未经博主允许 ...

  10. Python迭代器,可迭代对象,生成器

    迭代器 迭代器(iterator)有时又称游标(cursor)是程式设计的软件设计模式,可在容器物件(container,例如链表或阵列)上遍访的界面,设计人员无需关心容器物件的内存分配的实现细节. ...

随机推荐

  1. Axure RP Pro7.0的key注册码加汉化非破解

    上次我们刚分享过Axure RP Pro6.5 key注册码加汉化非破解,我还要分享一个Axure RP Pro7.0的key注册码加汉化,非破解哦. 当然方法还是不变,先用下面的密钥激活.用户名就是 ...

  2. c++のmap的遍历

    一.定义如:map < int, CString > 或者 map < int, 结构体名>的元素遍历 map < int, CString >  map;     ...

  3. oracle 11gR2 ASM添加和删除磁盘

    一.环境 oracle 11gR2 RAC + Oracle Linux Server release 5.9 二.实施 备注:安全起见,操作之前停数据库实例.ASM实例 1.节点1.2磁盘信息 -- ...

  4. IDEA(jetbrain通用)优雅级使用教程(转)

    文章转自  http://www.jianshu.com/p/3160ff832a9b 前面写过一篇IDEA的入门级文章,但是只学会了那些配置啊什么的并不能提高我们的开发效率.事实上,如果你IDEA用 ...

  5. nodejs写入json文件,格式化输出json的方法

    假如我需要把data序列化成json字符串,然后写入data.json文件中,代码如下: let str = JSON.stringify(data) fs.writeFile('data.json' ...

  6. sd错误---2

    一道水题 绊了我,居然 愿意很简单 我多打了一遍int main 阴错阳差的 自定义的函数上面 出现了int main 所以 以后想想好思路(是那种很全很全的思路) 再写代码 一定要避免sd错误!!! ...

  7. Matlab数据处理——数据的保存和读取方法操作

    1:dlmwrite()函数保存成txt文件 使用方法:      dlmwrite('filename', M)      使用默认分隔符“,”将矩阵M写入文本文件filename中:      d ...

  8. protobuf可变长编码的实现原理

    protobuf中的整数,如int32.int64.uint32.uint64.sint32.sint64.bool和enum,采用可变长编码,即varints. 这样做的好处是,可以节省空间.根据整 ...

  9. 【POJ 3476】A Game with Colored Balls

    POJ 3476 首先写了个treap,然后常数太大tle了... 然后想了个极为复杂的方法,是一共7个dsu,3个bit,还有一个set.然后写了一半就歇菜了... 然后看dxm的方法,是这样做的: ...

  10. not annotated with HTTP method type (ex. GET, POST) 问题解决

    大多数情况是真的而没有写method = RequestMethod.GET.POST等注解, 有时这么写了也报类似异常,如下 @FeignClient("microservice-prov ...