0x00 Being a (amateurish) team

This is the process of changing hydrogen into breathable oxygen, and are as neccesary here, as the air is on earth.
But I still say, they're flowers
If you like...
Do you sell them?
I'm afraid not.
But, maybe we could make a deal?

Thought we are still an amateurish team, WE CAN MAKE A DEAL!

0x01 软件工程

软件工程方法,这是大型软件开发不许使用到的工具。从软件工程一词出现开始,其方法经历了众多开发人员的不断总结改进,集结了多人的智慧,最终形成了如今百花齐放的盛况。说起不同的方法,有的着眼于快速开发出软件圆形,有的致力于开发出安全可靠的系统,还有的关注如何减少所有开发人员之间的耦合关系。不同的目的,不同的方法,无法评定谁好谁坏,唯一可以肯定的是,每一种方法都会在某一方面为开发带来极大的便利。
为什么我们需要软件工程?用一句话来讲,是因为现代的软件规模已经编的非常巨大,无法一个人完成。可以说,软件工程的出现,成为了大型软件开发过程中的Silver Bullet。现代的软件趋向于复杂化,并且往往还需要不断进行维护,因此想要开发一个完整的软件,往往需要非常多的人配合。如果仅仅使用诸如面向对象这样的开发层面的方法,想要得到一个完善的大型项目是具有非常大的挑战的,因为没有一套完整的方法来指导整个开发的流程,换言之,所有人都个干各的,不是形成一盘散沙,就是形成一个泥球。
软件工程的方法不是唯一的,而是呈现出多样化一面,并且这些方法各有千秋。在代码的公开方面,以GCC和Linux为例,二者在开发阶段中就使用了不同的策略。前者在开发过程中不公开代码,而是仅仅将代码维护在一个团队的手里;后者则在开发过程中全程公开代码,接受他人的审视。在流程的推进方面,以瀑布模式、敏捷模式、快速原型模式也有很大的区别,但是不论使用哪一种都能做出一个好的软件。不同之处在于,针对不同的需求和环境,我们应当选择一种适应我们的模式,这样便能有效的开发出一个软件。

0x02 软件开发体会

为期一个月的软件开发已经告一段落。在这一个月中,团队开发变成了每天的主要任务。经历过这样一段开发的时间,我也开始逐渐理解了软件工程中的方法。
本次开发的迭代周期为一个月,需要完成的工作是搭建起一个网站的前端。对于这样一个需求,很显然最适合我们的方法就是敏捷开发。敏捷开发致力于用最短的时间开发出一个可用的产品,我们也确实体会到了这一点。敏捷开发的敏捷体现在不断会有新的功能被发布,软件总是处于增加功能的状态。任务初期,我们把项目划分成了5个大部分,并对每个部分计划了预期的完成时间,因此每隔几天我们就会有新功能发布上线。使用这一中计划推进的方式极大促进了我们开发的效率。
对于源代码的管理,我们采用的是每完成一个功能就公开并并入master分支的模式。在开发每个模块的过程中,所有相关代码由相关开发组成员维护,每完成一个子任务就会进行复审,待当前任务的所有子任务均完成时,上推到github并传入服务器,进而进行测试。
令人感到十分高兴的地方是,敏捷模式对需求变更支持的非常好。我们的开发采用了SementicUI-django的框架,前后端的学习成本很高。在开发初期,我们的计划中低估了学习时间,定义了非常多的计划任务,但是当我们发现无法完成既定计划时,我们开始了需求变更。我们把很多模块的功能减少到可以正常使用的状态,删去了很多锦上添花的功能。与此同时,我们添加了我们认为非常有趣的功能——Phobia智能助手。

0x03 不足之处

说起本次开发的不足之处,大概就是敏捷开发的自由所带来的缺点,即文档的缺失和需求的经常性变动。在开发接近结束时,我们的文档数量依然很少,留下的都是git和osc上的记录,所以在后期花费了大量的时间补全各种文档。由于我们的开发进度与预期有所差距,于是我们会经常改动我们的需求,以求能够在有限的时间内完成更多的功能,这就导致了我们在前期设计中提及的某些次要功能并不能得以实现。

0x04 吐槽软工

敏捷开发是一种注重开发效率、把文档数量减小到极致的方法,而我们却花费了大量的时间在文档的撰写和排版上,尤其是发布前的冲刺期,这无疑耽误了我们的开发进度。其次,对于像我们全日制学生而言,每天坐在电脑前进行8小时工作制的开发是不切实际的,这就意味着我们不可能每天都能平均、高效的完成既定的任务。现实是,我们在完成每天繁重的理论课作业后,还要花费大量时间进行开发,导致每天熬夜到两三点已成为家常便饭,直接影响到后一天的学习。

0x05 总结

It was the best of times,it was the worst of times.在这一个月里,我们受尽了煎熬。然而劳累总是与收获并存的,经过这一段的训练,我们也真正体会到了团队开发与个人开发的差别。我想这大概是我们最能带进第二轮迭代的东西吧。虽然我们的网站还不完善,但是我们第二轮迭代一定会做的更好。WE CAN MAKE A DEAL.

Being a (amateurish) team:团队开发体会的更多相关文章

  1. 5分钟快速部署PESCMS TEAM 团队任务管理系统开发版

    所在的公司也经历过小团队的发展,为了高效率,通常都是面对面交流,很多时候事情谈论过后不久就已经淡忘了.而且工作任务不能全局观察,成员之间基本上都要主动去询问,效率反而低下.所以今天就介绍一款中小团队的 ...

  2. 关于如何在github上创建团队开发环境

    今天想写个如何在github上创建团队开发环境的博客.送给那些还不知道如何在github上创建团队开发环境的开发人员. 1.首先,当然你要有个github的账号.具体怎么注册我这里就不说了.可以上gi ...

  3. 从零开始,创建GitHub团队开发环境

    从零开始,创建GitHub团队开发环境 GitHub提供免费的团队环境,不过免费仓库容量是300MB,请大家注意. 申请GitHub个人账号 1. 使用浏览器访问GitHub主页.如果使用IE,尽量不 ...

  4. 绝对精品推荐做前端的看下:Web前端开发体会十日谈

    20151208感悟: 前端人的角度来看的话,感觉像是阅读一个大牛前端的全部武功的一个秘籍说明,里面的思想高价值蛋白真是太多太多,推荐看. Web前端开发体会十日谈 一直想写这篇“十日谈”,聊聊我对W ...

  5. Eclipse集成Git做团队开发:分支管理

    在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...

  6. Eclipse集成Git做团队开发:代码管理

    在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...

  7. Eclipse集成Git做团队开发

    在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...

  8. [.net 面向对象程序设计进阶] (27) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git

    [.net 面向对象程序设计进阶] (26) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git 本篇导读: 接上两篇,继续Git之旅 分布式版本控制系统 ...

  9. [.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit

    [.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit 读前必备: 接上篇: 分布式版本控制系统Git——使用GitS ...

随机推荐

  1. 实验吧web解题记录

    自以为sql注入掌握的还是比较系统的,然而,做了这些题之后才发现,大千世界无奇不有,真是各种猥琐的思路...还是要多学习学习姿势跟上节奏 登录一下好吗?? http://ctf5.shiyanbar. ...

  2. 3.7Python数据处理篇之Numpy系列(七)---Numpy的统计函数

    目录 目录 前言 (一)函数一览表 (二)统计函数1 (三)统计函数2 目录 前言 具体我们来学Numpy的统计函数 (一)函数一览表 调用方式:np.* .sum(a) 对数组a求和 .mean(a ...

  3. eclipse添加插件实现php的增删改查

    一:eclipse添加php插件 1.运行eclipse,在主界面里找到Help下的“Instal New Software”.然后在Work with中选择“All Available Sites” ...

  4. IE浏览器打不开网页的解决方法

    前阵子一下子安装了很多软件,后来使用IE游览器的时候,莫名其妙的打不开网页,虽然用其他浏览器(比如谷歌.火狐)可以正常浏览网页,但是由于很多软件内嵌页面都会调用Windows的IE浏览器来加载,所以I ...

  5. centos7下安装docker(12docker网络)

    docker 网络荣覆盖范围可分为:单个host上的容器网络和跨多个host的网络 docker 安装时会自动在host上创建三个网络,我们可以使用docker network ls查看到 1.non ...

  6. yii2 下拉菜单

    model public static function getCatlist(){ $cat = ['0' => '暂无分类']; $res = self::find()->asArra ...

  7. k8s部署rocketmq 双主

    由于apache 官网的 docker image 是单点,要实现集群方式部署. rocketmq 分为 nameserver 和 broker , 对于之间调用频繁的服务,会增加网络压力, 所以 考 ...

  8. Spring4.2+SpringMVC+Mybatis3.4的集成(转-)

    文章转自 http://blog.csdn.net/jimolangge123/article/details/49210363 首先说明一下Web.xml中配置项的执行过程: <context ...

  9. AI 概率论

    概率论 不确定性 量化 频率 频率派 贝叶斯派 1.随机变量(random variable) 随机取不同值的变量,取值可以离散或者连续. 2.概率分布(probability distributio ...

  10. QT写TXT文件

    #include <QDir> //头文件 QDir *TEST = new QDir;    bool exist = TEST->exists("TEST") ...