如果我比别人看得更远,只因为我站在巨人的肩膀上。                                                        ——牛顿

高级软件工程课程终于开课了!第一堂课上,殷秋丰老师要求我们回顾学习往届学长学姐们的工作,从中学习、吸取经验教训,为自己更好地工作打下基础。课后,我们小组对以往Team的博客进行了充分的调研,并最终确定了选择Gun N' Rose组的博客(http://www.cnblogs.com/Gun-N-Rose/)进行学习。通过学习师兄师姐的以往项目,我们对以往的课程进度有了大致的了解,也对软件开发的过程与核心有了更清晰的认识。

下面是我们小组对于Gun N' Rose组博客的学习心得。

Pick a past project

“Gun N' Rose”组的项目是“ImageSearchHelper”,顾名思义,是一款定位于辅助图片搜索的软件。传统图片搜索主要是通过关键字搜索,该组产品针对一些特殊场景实现了基于图像的搜索,譬如可以针对特定颜色进行图片搜索、用户直接画出心里所想来进行搜索。该产品主要基于Sketch search和Color search技术,帮助用户更好地得到搜索结果。

Interview student of that team

本组首先派出特派员章玮对Gun N' Rose组元老Li Zhang师姐进行了采访,以下是对于这个项目的采访内容总结。

Q1:我在博客上看到你们组最后做的是图片搜索,之前也有提过关于“ToDoList for Win8”的proposal,请问一下你们最终是如何定下这个题目的?

A1:我们当时定下这个题目的过程是,记得邹欣老师当时有4个题目可以供我们选择?我们全班总共分成5个组,按照抽签顺序抽到这个题目。

Q2:你当时在组里是哪个角色?同组大致还需要哪些角色分工?

A2:我当时在组里负责写代码,每个组首先需要一个PM,剩下的人都是developer。PM每天组织daily scrum和更新博客以及和大家讨论项目当中的Features, 以及各个写代码的分工,developer主要负责写自己要负责完成的部分,以及维护代码的check in、checkout等工作。

Q3:你们做这个项目的代码量大吗?关于编程语言方面有没有什么建议?

A3:我们做这个项目的总代码量很大,但是我们主要动手写的也就主要是UI以及一些新加的功能部分代码,图片搜索的主要算法部分是用的开发这个图片搜索的研究员的代码。编程语言的话,建议c#、c++。

Q4:对于图片搜索,我也知道软件工程中开始的需求分析和设计很重要,那一开始你们设想的成果和最终发布的版本差距大吗?

A4:我们设想的成果和最终发布的版本还是比较一致的。这可能是因为图片搜索的主要算法已经实现了,我们负责的是怎么样让用户更好的使用这个搜索。

Q5:我看到你们组的博客上在定题后主要是daily scrum,还穿插了一些技术分享。你对于我们之后要开始的软件工程项目有没有什么建议呢?

A5:建议的话,我觉得作为一个团队,实现一个项目的话,首先团队里的每个人都要有责任心,因为大家在自己的组里都有任务,可能会碰到有些人一直抽不出来时间来做软件工程的项目,这个时候作为团队里的一名成员,要时刻记得自己必须要按时完成自己该完成的部分,要真正付出行动来让这个项目最终很好的完成;其次就是团队沟通需要高效率,每次daily scrum不仅仅是一个形式,最好每个人在daily scrum之前已经总结好自己要说的东西。

最后师姐还希望我们好好加油,做出有意思的东西,我们都得到了很大的激励!在此对Li Zhang师姐表示衷心感谢!

Lessons learned from them

我们小组在仔细学习了以往项目之后,对软件项目的开发都有了更深入的了解,也收获了很多。下面是罗人千同学对我组学习成果的总结汇报。

我们小组认真学习了Gun N' Rose组的图片搜索项目的blog,感受到一个软件项目想要做好,有以下几点最需要注意:

1、了解用户需求

一个好的软件一定要解决用户的需求,站在用户的角度思考他们缺什么、需要什么,这样的软件做出来才会有生命力,不然只是昙花一现,甚至连一现的机会都没有就沉溺在软件商店的汪洋大海里。解决了用户需求才会让用户对我们的产品产生粘性,会离不开我们的产品。就像我们现在在移动互联时代离不开即时通讯软件、支付软件一样。Gun N' Rose组的图片搜索软件恰好解决了很多用户在使用搜索引擎时遇到的问题——搜索到的结果并非自己想要的,或者搜索到的结果太广而自己只想要其中某一类具有共同特征的结果,这在文字搜索时只要加足条件叙述即可,但在搜索图片时会有难度,比如我们需要某一类样子的图片,这个“某一类样子”不好用语言描述。而Gun N' Rose组的软件恰好解决了这个需求,能根据用户的某些需求搜索特定特征的图片。这一功能会大大满足诸如编辑、UI设计人员、幻灯片制作者的日常需求,并大大减少其工作量。

2、良好的分工和任务规划

一个团队要运营好,每个人的职责分工一定要清楚。一个项目在开工伊始,一定要有明确的任务分工和任务规划,让每个人都充分发挥他的价值,让每个人在每个阶段都有明确的任务。

3、团队交流

队员之间一定要经常进行交流,每天一次短暂交流或者是利用博客、邮件列表、交流群等工具。交流的内容可以是对项目的看法,或者开发过程中的一些心得、经验,或者是请教一些问题,这种交流可以让大家共同学习。有质量的交流可以提高项目的速度和效率,一个队员把自己走过的弯路告诉大家后可以让大家避免犯同样的错误,避免浪费时间,提高效率,一个队员的好的经验可以帮助大家更好更高效地开发。学长学姐们每天的Daily Scrum给了大家交流的机会,我还看到有学长在博客里贡献文章教给大家——比如一些好的开发习惯,一些技术讲解,一些项目背景知识的扩充,自己开发过程中的思想体会和建议等,这些都是能提高大家工作效率和质量的地方。

4、执行力

前面提到了任务规划。我们不能让任务规划只是停留在纸面,一定要认真按照制定的规划里的时间节点保质保量的完成任务,这样才不会出现发布前手忙脚乱还在调整需求、开发功能、测试功能,感觉往届的学长学姐们其实在这一部分还是没能做地很好,还是会在发布前还在开发功能、测试功能模块。

What we would do differently

俗话说:当局者迷,旁观者清。大家在学习完师兄师姐的软件项目之后,也敏锐地觉察到了一些有待提高之处,那么如果我们是Gun N' Rose组的组员,我们会着重改善哪方面呢?下面分享一下几位组员的想法。

我觉得他们做的确实不错,从daily scrum中可以看到大家的努力,更重要的是看到了他们的团队精神。下面谈谈我的几个想法。

第一个是关于bug。每个人在大大小小的task上都会遇到bug,而bug的解决往往需要时间和运气,我想这是每个程序员亲身经历过的。个人的感觉是有时候自己一时想不通自己程序的问题,或看不出错在哪里,这个时候找别人交流一下,会得到他人的经验帮助自己快速定位bug和解决办法。因此每次做daily scrum,或者组员之间频繁的交流bug,可以起到事半功倍的效果。另外一点,每天博客上的daily scrum大都说了出现的bug,但后期没有说bug如何解决的。我认为在博客上针对一些有所收获的解决概括的写一下bug的原因和解决方案,不仅是对自己的提升,也是经验的分享。

第二个是分工的时候最好能事先讨论好接口该怎么写,也就是说帮助code写的更有前瞻性。即使只是确定一个大致的方向,帮助也会很大,可以避免后期整合大家的code时大量的删改。

最后一点是每个小的task的验收应该尽量的严格,这也是避免到后期整合task时出现太多隐藏的bug而措手不及,同时不断的给developer反馈,以帮助他们更好的完成后续task。

——拜重阳

学长学姐们的ImageSearchHelper项目还是做得挺努力的,想法也挺有创意。如果当时我在这个小组中,我会尝试做出以下改变:

一、需求或用户场景上,加上通过图片的描述来获取图片这一项功能(当然,这涉及到的领域可能就广一些了)。在他们的Spec中,针对设计师的特定颜色搜索功能挺不错。但是“针对不知道关键字而无法使用关键字搜索的用户”这一项感觉有些牵强。有时候“涂涂画画”,对于稍复杂的物体,要想准确识别、精确搜索的话可能比较困难,这对普通用户而言可能还不如想一些关键字更方便些。

二、在M1阶段的task划分更明确一些。我看到有的Daily Scrum上只是简单地写了下完成了taskXXXX,具体内容没有;有的task则拖了很长时间才完成。

三、介绍一些典型的bug有哪些,是怎么解决的,以便学习和回顾。通过blog可以看到,队员很长时间一直都在挑bug,而没有指明为什么会出现这些bug,或最终怎样解决的典型bug。

四、设计完整地测试计划,明确到测试项。在blog中可以看到,队员中有的是泛泛地负责test,但是测试哪些内容不得而知。项目的结尾看起来有些草率。最终的Final Scrum里效果图只放了三张,不知道最终效果做的怎么样,是不是能够满足当时定义的需求。

——任烁

我提五点我的看法哈!如果我是组员,我…

一、会尽量开动脑筋,自己想题目。一方面会对题目有更好地了解,一方面也能锻炼自己独立思考的能力;

二、会尽量在核心功能加入自己的一些特色,而不是仅仅满足于将研究员大大的代码用起来。例如,对于搜索,其实比较成熟的技术是基于文本的搜索,那有没有可能将文本和图片结合起来一起搜索呢?而不是简单地忽略原来文本的搜索,然后开始一个新的搜索;

三、会努力将这个工具发布到外部,而不仅仅是提供给公司内部使用,希望可以吸引到更多的用户,并获得更多的反馈;

四、如果做到了第三点,希望尝试跨平台的应用的开发;

五、努力更合理得分配时间,赶在时间的前面而不是被时间赶。

——刘力源

结语

以上就是Code Hunters组对项目ImageSearchHelper的学习心得。期待我们小组能长江后浪推前浪(一代更比一代浪:P),在之后的学习与项目中表现得更出色!

"Gun N' Rose" Team学习心得的更多相关文章

  1. Gun N' Rose Team Review

    一看到这个项目就被他的功能给吸引了.回忆起以前看到一个东西很新奇想去网上查询它是什么,但是又不知道应该怎样去描述它,于是在搜索引擎的输入框中键入.删除.键入.删除的可笑经历的时候,我就越发感觉到这个a ...

  2. windows类书的学习心得(转载)

    原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千 ...

  3. windows类书的学习心得

    原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千 ...

  4. openmp学习心得(一)

    主要在vs2015下使用OMP,写一些自己omp的学习心得: 一.在VS2015下OpenMP的使用: 1.VS2015也仅仅支持OpenMP2.0版本,VS对OpenMP的支持并不太好. 2.在VS ...

  5. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  6. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  7. 我的MYSQL学习心得(三) 查看字段长度

    我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  8. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

  9. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

随机推荐

  1. shiro实战系列(一)之入门实战

    一.什么是shiro? Apache Shiro 是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密.   Apache Shiro 的首要目标是易于使用和理解.安全有 ...

  2. JSON无限折叠菜单编写

    最近看了一篇关于JSON无限折叠菜单的文章 感觉写的不错,也研究了下代码,所以用自己编码方式也做了个demo 其实这样的菜单项在我们网站上或者项目导航菜单项很常见的一种效果,特别是在一些电子商务网上上 ...

  3. jquery另外一种类似tab切换效果

    简要:最近做项目一些效果不能用淘宝kissy框架 所以代码得自己写啊 网上当然有很多组件 但是用他们的代码很多(有的是我不需要的代码) 且还要看API 还不如自己动手写个简单一个,是这么一种简单的效果 ...

  4. HDU1754

    https://vjudge.net/contest/66989#problem/B 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜 ...

  5. js 函数作为参数+接受任意数量参数

    javascript中的函数是“复合数据类型”,又成为“引用类型”.引用类型的变量指向存储单元中存放的是它们的实际存放地址.函数名是对函数的一种引用.var a=max_num ;a()就可以调用fu ...

  6. EXCEL2007出错了无法使用文档中的ActiveX 控件

    EXCEL2007出错了无法使用文档中的ActiveX 控件虽说是很久之前的问题,但是正确的解决方法和原因如下!原因:系统update之后出现的问题解决方法:删除C:\Users\[username] ...

  7. 关于C#中async/await中的异常处理(下)-(转载)

    上一篇文章里我们讨论了某些async/await的用法中出现遗漏异常的情况,并且谈到该如何使用WhenAll辅助方法来避免这种情况.WhenAll辅助方法将会汇总一系列的任务对象,一旦其中某个出错,则 ...

  8. MyBatis在Oracle中插入数据并返回主键的问题解决

    引言:  在MyBatis中,希望在Oracle中插入数据之时,同一时候返回主键值,而非插入的条数... 环境:MyBatis 3.2 , Oracle. Spring 3.2   SQL Snipp ...

  9. java 读取excel内容转为JSONArray

    需要引入的JAR     <!--*.xls--> <dependency> <groupId>net.sourceforge.jexcelapi</grou ...

  10. Android开发——高斯模糊效果的简单实现

    0. 前言 在Android开发中,经常在音乐软件中看到高斯模糊效果. 在找遍了所有高斯模糊的算法代码后,发现stackblur的Java实现是最快的.效果如下所示. 1.  高斯模糊效果实现 Bit ...