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. January 20th, 2018 Week 3rd Saturday

    We may encounter many defeats but we must not be defeated. 我们可能会失败很多次,但决不能被打败. As long as we are con ...

  2. Alpha冲刺! Day6 - 砍柴

    Alpha冲刺! Day6 - 砍柴 今日已完成 晨瑶:讨论确定/解决了:网络判断使用广播方式.密集光点排布问题.丢失.db/记录html/多媒体文件的处理方式. 昭锡:Android工具包接口文档编 ...

  3. 教程+资源,python scrapy实战爬取知乎最性感妹子的爆照合集(12G)!

    一.出发点: 之前在知乎看到一位大牛(二胖)写的一篇文章:python爬取知乎最受欢迎的妹子(大概题目是这个,具体记不清了),但是这位二胖哥没有给出源码,而我也没用过python,正好顺便学一学,所以 ...

  4. <table>标签总结(colspan跨列 ,rowspan跨行)

    table标签有些内置属性要设置: <table cellpadding="0" cellspacing="0" border="0" ...

  5. 描述各自页面的 page

    一个小程序页面由四个文件组成(注意:为了方便开发者减少配置项,描述页面的四个文件必须具有相同的路径与文件名).分别是: 页面 Page(JS文件) Page(Object) 函数用来注册一个页面.接受 ...

  6. 控件布局_TableLayout

    <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android=" ...

  7. Ubuntu18.04安装Tensorflow+cuda+cuDNN

    本文写的比较简单,期间遇到的一些小麻烦,自己不认为成为阻碍,所以没有详细写. 如有疑问可以联系QQ:2922530320 Pycharm Pycharm使用Anaconda Pycharm 在新建项目 ...

  8. MDC的使用(Mapped Diagnostic Context)的使用

    通常我们可能会有大量的任务需要提交提交到线程池执行,但是此时如果不对日志添加唯一标识进行区分的话回到错乱一坨无法进行查看.因此可以对每一天日志添加唯一的标识,例如使用userid作为日志的唯一标志.这 ...

  9. Python3 环境搭建

    Window 平台安装 Python: 以下为在 Window 平台上安装 Python 的简单步骤. 打开 WEB 浏览器访问 https://www.python.org/downloads/wi ...

  10. k8s部署失败原因

    可以通过 kubectl describe pods *** --namespace=**** 查看问题描述