【homework week5】初步了解敏捷开发——自由与约束的哲学统一
“自由与束缚的哲学统一”或许不该放到标题上去,毕竟它只是我灵光一闪的感悟。但这个spark让我感到高中到大学的哲学应该也没有白学,这是让人非常兴奋的一件事。
所以我还是把它放到了标题上。
来谈敏捷软件开发(Agile Software Development)。
由于在课堂上,老师已经介绍了敏捷开发、极限编程等概念,所以看到这些概念时,并没有过于激动。
但在了解这一开发方法产生的过程中,还是不由得想向用于叛逆于“繁文缛节”的人们致敬。
The Unpredictability of Requirements
看到对“需求的不可预见性”的认同,以及对“不可预见活动不能按照可预见活动的那套方式干活”的认定时,我实在是又激动又感动,还要表示深深的认同。因为它表述出了我苦恼了一学期才得出的结论“日常计划不能定的太死”。
我曾经一度将一周的课表打印出来,花两个小时的时间来填满课表上的每一个空位,甚至把睡眠的起始时间也固定其中,好让自己又踏实又满足。但实践的结果是,我总是被各种突如其来的事情打乱节奏,我还在想怎么去补昨天没完成的计划时,现在又因为一件急事要放弃当前的计划了。
这简直是最让人depressed的事情之一了。
能发现问题的所在实在是一件伟大的事:我们不能把土木工程的方法论拿到软件工程来用。
也即,我不能将不可预见的每周日程死死的写在课表上,还期望实现这一周的计划。
The Adaptive Customer
看到这里,我又要热泪盈眶了,因为这简直是血的教训啊——我曾自愿为我航某个亚洲级的辩论比赛做开幕式视频,连续工作17个小时连续工作做出了成果,最终却被“用户”嫌弃了。
我的“引以为豪”成了别人眼中的“不合适"。主办方也为我的工作没能一次通过而遗憾。
"There is nothing more frustrating to a developer than seeing their hard work go to waste."
最终解决这一问题的办法就是,我找到看我的视频不爽的人,一起工作,他想要什么样的我就给他做成什么样的。
适应性客户确实有助于提高软件开发的有效性。
我想我一定也是Agile Software Development的忠实用户者,因为自己用亲身体会验证了其观点的可贵。
Putting People First
这个想法非常有趣。
大家早都习惯了工厂式的工作方法,码农只是流水线上的一名工人,只需要完成某些相应的工作就好,就像软件工程中我们分PM,engineer,test三个部分一样,每个人只需要各司其职就好。可是这却忽略了非常重要的一点:软件开发是一件极富创造力与灵活性的活动。
深表赞同。
文章读到这里,我对所有敢于跳出当前窘境、站在更高层次看待问题的人产生了深深的敬意。
因为在大二下学期我们完成一门叫“面向对象建模”的课程时,老师要求我们先完成需求文档,再根据文档来完成我们的软件开发。而我们实际的过程是,先完成软件开发,再按照我们写好的软件去画UML图,去写各种需求分析,去设计测试用例等等。结果我们的文档写了70多页,想想如果先写70多页的文档再去开发软件,程序员早都没耐心了吧。
当时我们还在讨论“实际工作中一定也是这样,大家都是先开发再写文档”,却没有想到改变这一现状,只是觉得“要写文档?好吧我写。”
这种容易接受problem的态度真让人后怕。
联想到我们这次的软件工程小组的分工,其实还是认为每个人都是部件,而不是灵活具有创造力的软件开发人员。其实这也未尝不可,因为大家还没有到登峰造极的码神阶段。
另一方面,其实对整个队伍的分工进行设定其实也有其好处。“有序”在某些情况下,是可以保证高效的。
The Self-Adaptive Process
“The first part of self-adaptivity is regular reviews of the process.”
这一点又让我联想到自己惨不忍睹的时间管理经历。我试图review自己一周的时间开销,从而使得我对下一周的时间计划设定得更为合理。
但时间一下过去了两个小时……
所以写日记不是要所有事情都一点一点回顾然后记下来啊!所以review也一定要注重效率啊!
Should you go agile?
看完整个敏捷编程的叙述与思考,这个问题提的不能再好。是啊,我是否真的要用Agile Software Development?
回想一下敏捷编程的每个过程,灵活性,或者说对变化的适应性实在是太突出了。这种灵活会对实际的开发过程带来极大的不确定性,一定会影响整个项目的进展。
所以我们还得遵循敏捷编程的规则与价值观。
只有在一定的约束下,我们才能更自由。

【homework week5】初步了解敏捷开发——自由与约束的哲学统一的更多相关文章
- 20145205 《Java程序设计》实验报告三:敏捷开发与XP实践
开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软件工程包括下列领域:软 ...
- 实验三 敏捷开发与XP实践
实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验 ...
- 关于敏捷开发方法(Agile Software Development)的阅读笔记
对“敏捷开发”(Agile Software Development)这个词,我是在这学期邹欣老师<现代程序设计>课上第一次听到的,刚听到时并不知道其具体指什么,只是从字面上直觉其意思应该 ...
- 20145213《Java程序设计》实验三敏捷开发与XP实践
20145213<Java程序设计>实验三敏捷开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 1.敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法 ...
- 【转】敏捷开发 Scrum 总结
转:http://www.open-open.com/lib/view/open1330413325514.html 最近把之前学习 Scrum 的资料整理为一篇文档,在接下来的团队和项目开发中,根据 ...
- 20145334实验三《敏捷开发与XP实践》
实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步骤 1.敏捷开发与XP 敏捷开发(Agile Dev ...
- 实验三 java敏捷开发与XP
一.实验内容 (一)敏捷开发与XP 软件开发流程的目的是为了提高软件开发.运营.维护的效率,并提高软件的质量.用户满意度.可靠性和软件的可维护性. 光有各种流程的思想是不够的,我们还要有一系列的工具来 ...
- 20145215实验三 敏捷开发与XP实践
20145215实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软 ...
- 20145211 《Java程序设计》实验报告三:敏捷开发与XP实践
实验内容 使用 git上传代码 使用 git相互更改代码 实现代码的重载 XP基础 XP核心实践 相关工具 一.git上传代码 这一部分是与我的partner合作的,详见他的博客- 20145326蔡 ...
随机推荐
- World Wind Java开发之六——解析shape文件(转)
http://blog.csdn.net/giser_whu/article/details/41647117 最近一直忙于导师项目的事情了,几天没更新了,昨天和今天研究了下WWJ解析shp文件的源代 ...
- 【转载】LCT题单
本篇博客的题单转载自FlashHu大佬的博客:LCT总结--应用篇(附题单)(LCT). 关于\(LCT\)可以查看这篇博客:\(LCT\)入门. 这里面有些题解的链接是空链接,尚未补全. 维护链信息 ...
- 【BZOJ4650】[NOI2016] 优秀的拆分(后缀数组)
点此看题面 大致题意: 定义将一个字符串拆成\(AABB\)的形式为优秀拆分,求一个字符串所有子串的优秀拆分个数. 后缀数组 这题可是一道后缀数组黑题啊. 其实看完题解这题还是挺简单的. 大致思路 显 ...
- 【BZOJ2243】[SDOI2011] 染色(树链剖分)
点此看题面 大致题意: 有一棵\(n\)个节点的无根树和\(m\)个操作,且每个节点有一个颜色.操作有两种:一种是将两点树上路径之间所有点染成颜色\(c\),另一种是询问两点树上路径之间颜色段的数量. ...
- imfilter()用法
功能:对图像进行滤波. 用法: g = imfilter(f, w, filtering_mode, boundary_options, size_options) 其中,f:输入图像,w:滤波掩模, ...
- AJAXA进行分页(2)
查询功能是开发中最重要的一个功能,大量数据的显示,我们用的最多的就是分页. 在ASP.NET 中有很多数据展现的控件,比如用的最多的GridView,它同时也自带了分页的功能.但是我们知道用GridV ...
- shell脚本,awk结合正则来打印文件里面的内容。
文件内容如下:key1abc d key2 1.想得到如下结果: abc d 2.想得到如下结果: key1key2
- 什么是 TCP/IP?
前言: 精通 TCP/IP,熟练使用 Socket 进行网路编程. 看到这句话,有没有感到很熟悉呀?相信很多人在投递简历的时候都看到过这条要求,很多人会觉得我们在实际开发中一般用不到这些知识,所以对这 ...
- Android系统编译环境及连接工具配置
首先附上官网上关于环境搭建的地址:https://source.android.com/setup/build/initializing 官网目前建议的还是Ubuntu14.04,下面就是用的Ubun ...
- 网络编程-osi七层
一.操作系统基础 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才 ...