写在前面:

本次我为团队博客写了一篇总结,深刻总结了我们组发生的问题以及将来要做的事情。有兴趣请移步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. 探索哪个进程使磁盘I/O升高

    如果生产环境中磁盘使用率突然升高,却不知道因为哪个应用程序导致的,这个时候我们可以使用pidstat命令来查看,比如 Linux .el7.x86_64 (ip.ec2.internal) _x86_ ...

  2. PHP实现一个简陋的注册登录页面

    PHP实现一个简陋的注册登录页面 今天来水一篇没有**用的 /滑稽脸,代码简陋臃肿考虑不全,各位大佬轻喷,还望不吝赐教. 首先考虑了一下需要至少四个页面:register.html.register. ...

  3. Linux 小知识翻译 - 「为什么安全是互联网的问题?」

    当然,虽说「由于有心怀不轨的人在,一定要注意安全问题」.但另一方面,也有人认为「如果互联网自己就考虑好安全问题的话,那么用户就不用再担心安全问题了」. 虽然经常有人这样说「与远程机器通信的时候,避免使 ...

  4. January 15th, 2018 Week 03rd Monday

    We got things to do. Places to go. People to see. Futures to make. 我们有很多事情要做,有很多地方要去,有很多人要见,有很多美好的未来 ...

  5. 使用python scrapy爬取知乎提问信息

    前文介绍了python的scrapy爬虫框架和登录知乎的方法. 这里介绍如何爬取知乎的问题信息,并保存到mysql数据库中. 首先,看一下我要爬取哪些内容: 如下图所示,我要爬取一个问题的6个信息: ...

  6. BookStrap之模板继承

    模板继承 (extend) Django模版引擎中最强大也是最复杂的部分就是模版继承了.模版继承可以让您创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 block ...

  7. Arduino IDE for ESP8266 项目云盒子 (1)AP直接模式

    手机直接连接esp8266辐射的WIFI,通信. https://item.taobao.com/item.htm?spm=a230r.1.14.20.eYblO3&id=5219451024 ...

  8. go标准库的学习-encoding/base64

    参考:https://studygolang.com/pkgdoc 导入方式: import "encoding/base64" base64实现了RFC 4648规定的base6 ...

  9. day15 Python风湿理论之函数即变量

    eg1.定义foo门牌号,调用foo函数,打印,再找bar门牌号,找不到,报错 def foo(): print('from foo') bar() foo() 结果:报错 from foo Trac ...

  10. oracle12C 创建PDB

    1.根据数据库现有模板创建PDB CREATE PLUGGABLE DATABASE ssptrad ADMIN USER sspIDENTIFIED BY oracle roles=(dba) fi ...