ASE课程总结 by 冯晓云
开始的开始,采访往届ASE班的blog:http://www.cnblogs.com/legs/p/4894362.html 和北航软工M1检查:http://www.cnblogs.com/legs/p/4973542.html;
最后的最后,写下这篇总结,沉淀反思,与自己开诚布公;
其实这是同一件事:前事不忘后事之师。
具体的项目实现见我们的置顶博客:http://www.cnblogs.com/legs/p/5149065.html
具体的项目分析在报告中已经详细描述,其他几个同学的总结也已经基本涵盖,所以总结的重点不在项目本身~
项目选题:
其实这部分是我最想吐槽的,(课前要我们提交的方案:http://www.cnblogs.com/legs/p/4892151.html以及课上一些项目的简介),最后大家都跑UWP平台的必应词典去了。其实大家的调研未必深入,大抵是觉得跟着bingdict有肉吃。我们组又希望可以做一些自己的工作,所以没有选择必应词典项目向UWP平台的移植,而是结合林建平同学提交的方案,和必应词典查词功能结合,去完成一个新的在线取词功能,于是做了一些关于取词方面的调研,又和必应词典的负责人进行了讨论,包括我们最后的pdf阅读器方案,也是在那个时候敲定的。但是由此而引发的一系列关于adobe,foxit不得不陈的血泪,就是另外几个long story了。
在项目选题过程中,初心还是不错的,也进行了积极努力的前期筹备,但进行的技术调研不够,对于一些技术问题过于乐观。
团队组织:
构建之法里简述了不同的团队开发模式,如果非要选择一个的话,我们的团队应该是“业余剧团模式”。不但是因为我们几乎都没有软件开发的经验,甚至是相应的知识储备也不足。以我为例,C#和xmal都是边做边学的~所以在选题确定之后,我们首先对软件的各个功能模块进行了切分,并且定义了接口的数据格式,来方便各个模块“多点开花,齐头并进”(http://www.cnblogs.com/legs/p/4930117.html)。实际却是为了达到这样一个目的:各自研习,互不干涉。为了防止一人不在,项目停工,我们在每个方向上都进行了尽可能的考量,安排了人手。这对于项目初期的推进效果显著,却也为后来的种种麻烦埋下了种子。其实这样的各司其职的模式,更适合建立在稳定成熟的开发流程和专业的开发人员基础之上,即所谓的“交响乐团模式”下,才能真正的提高生产力。
在这个项目里,每位组员选择了不同的角色,并且随着项目推进,任务动态分配。
课程推进:
前期的两个个人项目,占用了我们很长的时间,压力也比较大,最后估计权当是提高编程能力和进入学习状态,并服务于最终成绩判定了。
但是课程对于团队项目似乎是越来越鸡肋,毕竟当时上课秋丰老师讲的东西,我们都半懂不懂,而我们在项目开展的过程中亟待解决的问题,却不是课程上短短的一两个小时可以解决的。老师可以和我们分享经验,帮我们指点雷区,最后每个坑都跳一跳的还得是自己。老师可以向我们指明先进生产力的发展方向,git,TFS的详细使用方法还得“实践出真知”;然而这又好像是课程本来的样子,我们虽然学步,但l路总要自己来走。哦,我似乎明白了为什么课程要把师生关系放在第一节讲:教练与学员~详情可翻阅构建之法第5~13页,教学相长,共同进步嘛~
课程的推进服务于项目,课程的内容又抽离于项目。那些懂得的,记下来;那些不懂的,终会懂得~毕竟我们的终极目标,是跑啊~
项目实现:
这是很值得被记录下来的故事~项目检查的时候,秋丰老师如是说。
但是坑深且复杂,而且不在我负责的部分,所以仅是列举。多谢后来人,戒之慎莫忘。
“业余剧团模式”下,一切看似有条不紊的进行着,第一个大坑来了:负责逻辑控制的同学,决定使用dll互相调用的方法来实现各部分代码的交互,简单来说,A,B都会被编译成DLL,其中A调B的dll,B也调A的DLL。注意,这是一个深坑;
本身设想的是设计插件,但是经不完全调研,现有技术并不支持这么做。(然后被review的时候被各种challenge),然后决定利用win32 adobe的阅读器实现,注意,这是另一个深坑;
在alpha release的时候项目完全不知何去何从,秋丰老师热心开脑洞,帮我们设计了planB,plan C,plan D。。。没想到后来忽然柳暗花明,成功实现了foxit SDK的调用。然而由于版权问题,注定无法release~
深坑,不忍卒讲:一个在Beta进程中去完成一个pdf阅读器,并就美工问题剧烈讨论的故事~一个始终不做release版本最后server是谁起的都没弄清楚的故事~
在这条道路上,我们似乎画地为牢,又似乎和正确的道路渐行渐远,认真回忆起来,也确实值得反复咀嚼。不过长歌当哭,必在痛定之后。
团队合作:
哦,团队,我们还是个“业余剧团”,什么,我是PM,负责更博并催更博吗?开个玩笑~
其实我们团队的模式是相互驱动,毕竟大家的任务区分开来之后,能掌控全局的就没有人手了。所以争吵,妥协,无可避免~但对彼此任务的不理解,消磨着彼此的耐心。比如说,我最开始负责的词典翻译部分,是解析在线查词api返回的释义,从json格式抓取出来之后还要完成数据格式转换拼接成string,控制模块才愿意接收,所以后来的popUI的数据转换也必须自己完成。这不仅降低了效率,也人为的割裂了词典和我们的软件。所以从这时候开始,我们和词典负责人没有再次接洽,查词只是作为一种工具存在。老师在review是总是提说能不能和词典的其他部分结合,所以我们加入了导入导出生词列表的功能。毕竟从数据格式上,他们已经是两个东西了~比如说,没有设置测试员,自己设计好的模块,自己搭个环境全方位调试好,测试好,还要等对方做好才合起来检验~比如各个同学相继返校考试或其他,耽误了工作进程,各司其职又导致项目停滞。。。其实完全可以设置一个负责测试,同时也能掌控全局,协调各方的职位,PM~然而我们实际的PM,却只是完成自己项目之余volunteer负责组内各项事宜的人,组内的很多事情也是大家激烈协商,友好妥协的结果~
我们是一个饭团,也是一个成长中的团队。
个人进步:
blog可查,我的任务均顺利完成,返校时间短,团队项目没有在我的部分受到限制或拖累。
最后美工部分受到各种质疑,我只表示,删张图只是注释一下的事情~
从小白到伪小白,我的技术之路前进了一大步~
关于团队合作,关于软件开发流程学习,亲身走过一遍,受益匪浅~
经验教训:
必须充分调研,在时间有限的情况下,依赖尽量成熟的标准;
建立科学有效的管理机制,包括版本控制和人员控制;
平衡项目和工作,重要的事情才不会变成紧急的事情;
团队工作能力第一,沟通第一;
和团队以外的人加强沟通,聆听他们的建议,帮助项目成长;
ASE课程总结 by 冯晓云的更多相关文章
- ASE课程总结 by 张葳
本期ASE课程分为两个阶段,第一阶段的personal project与第二阶段的team project,其中,第一阶段旨在锻炼我们个人的问题解决能力和编程能力,第二阶段则锻炼主要我们的管理能力,合 ...
- ASE课程总结 by 林建平
设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的辅助用户在阅读英文文献时记忆生词,提高用户的生词量,减少用户的阅读障碍.定义非常清晰,要有查 ...
- ASE课程总结 by 朱玉影
收获: 最大的收获应该就是对待选题要慎重吧,虽然前期做了一下调研,但是还是不够,所以到最后我们的项目才会不能公开发布,项目中间也是波折不断,导致我们走了很多弯路,浪费了很多时间吧.选题一定要慎重,慎重 ...
- ASE past project:interview & analysis
采访往届ASE课程学员李潇,他所在的团队blog戳这里http://www.cnblogs.com/smart-code/ Q1:师兄你觉得在团队项目中,有哪些需要注意的事情? A1:团队合作吧.首先 ...
- ASE team work proposal
Hi,我们是Azure Wrapper,欢迎来到我们的blog~我们将在这里记录下ASE课程的滴滴点点,美妙的旅程就要开始啦! 以下是每位队员提交的关于ASE 团队项目的提议: 朱玉影: 随着信息时代 ...
- ASE——第一次结对作业
ASE--第一次结对作业 问题定义 很早就听说了MSRA的黄金点游戏,让大家写Bot来参加比赛看谁的AI比较聪明可以操盘割韭菜.深感ASE课程老师设计的任务太用心了,各种接口都准备好了,大家只用专注于 ...
- stand up meeting 1/19/2016
part 组员 工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 准备最后的发布和整个开发的整理总结 6 继续releas ...
- stand up meeting 12/28/2015
part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 解决生词本显示[阅读页面]的滑动条和PDF的滑动条冲突 ...
- stand up meeting 12/25/2015 & weekend 12/26/2015~12/27/2015
part 组员 工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 在pdf阅读页面添加生词本显示:UI美化 6 完善显示 ...
随机推荐
- MySQL数据库升级
当前不少系统的数据库依旧是MySQL5.6,由于MySQL5.7及MySQL8.0在性能及安全方面有着很大的提升,因此需要升级数据库.本文通过逻辑方式.物理方式原地升级来介绍MySQL5.6 升级至M ...
- 题解 P4325 【[COCI2006-2007#1] Modulo】
第\(1\)种方法 也是最暴力的一种 我们熟知,\(c++\)中的\(set\)可以既去重,有排序,这题,我们可以用set来搞,虽然我们不需要排序的功能,但毕竟方便,一共是\(10\)个数,所以暴力一 ...
- Xmind8 Pro破解版
思维导图又叫心智导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具.思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来,把主题关键词与图像. ...
- 130ftp-python3 FTP简单实现文件下载(含中文乱码问题)
130ftp-python3 FTP简单实现文件下载(含中文乱码问题) python3 FTP简单实现文件下载(含中文乱码问题) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- apache 自带的ab.exe 测试网站的并发量(网站压力测试)
AB(ApacheBench) 是 Apache 自带的超文本传输协议 (HTTP) 性能测试工具. 其设计意图是描绘当前所安装的 Apache 的执行性能, 主要是显示 Apache 每秒可以处理多 ...
- Netty:初识Netty
前文总结了NIO的内容,有了NIO的一些基础之后,我们就可以来看下Netty.Netty是Java领域的高性能网络传输框架,RPC的技术核心就是网络传输和序列化,所以Netty给予了RPC在网络传输领 ...
- OpenCV-Python 相机校准 | 四十九
目标 在本节中,我们将学习 由相机引起的失真类型, 如何找到相机的固有和非固有特性 如何根据这些特性使图像不失真 基础 一些针孔相机会给图像带来明显的失真.两种主要的变形是径向变形和切向变形. 径向变 ...
- C++ STL 常用容器之 stack
C++ STL Container--Stack 栈是一种先进后出(LIFO)的数据结构,限制只能在一端完成插入和删除操作,这一端叫做栈顶(top),另一端即为栈底(bottom).C++ STL(S ...
- 基于Andriod的简易计算器
这学期有安卓这门课,这里做了一个简易的计算器,实现了两位数加减乘除的基本功能,比较简单适合用来入门学习. 运行效果 预备知识 实现这个计算器之前要先了解实现计算器需要的基本组件 1.TextView ...
- linux中的文本处理命令
一.wc :统计文本的行数.字符数. -l:只显示行数 -d:只显示单词数 -c:只显示字符数 二.tr:转换字符或者删除字符 -d:删除字符 三.cut -d:指定分隔符 -f:指定要显示的字段 例 ...