0x01 :采访的学长简介
If you weeped for the missing sunset,
you would miss all the shining stars
梁野,北京航空航天大学计算机学院研究生一年级,本科就读于北航计算机学院,大三上学期奔赴新加坡国立大学交流实习,在新加坡国立大学开设的软件工程课程上,团队项目设计方案为“TASKey Manual”(任务管理器,含自然语言解析功能),主要负责前端界面的设计(Front End UI Designer)和时间计划的掌握(Deadline Watcher)
0x02 :访谈,Hola
There are no trails of the wings in the sky,
while the birds has flied away.
Q1:学长,您好,您在新加坡国立大学攻读了大三上学期的课程,当时的软件工程课程设计是怎样的一个安排呢?个人项目,结对项目,团队项目都是怎样的一个时间安排呢?
A1:刚才听到你们吐槽软件工程课程的时候感觉,新加坡国立大学的开设方式和你们也有一定的区别,在十二周的课程时间中,前两周是非常基础的个人项目,开发语言限制在C/C++/C#和Java之间,此个人项目更注重的是程序设计语言的熟练度,为之后的团队项目做铺垫,所以难度上相对较小,比较轻松就完成了这一个人项目;至于团队项目,当时的团队项目几乎是从零开始设计,十周的时间,四人的团队,共同去开发这样一个brief project,不过每周的讨论会占据大量的时间,可能汇报时间会大约两小时,并且助教全程“监听”你们之间的沟通,并适当提出一定的意见
Q2:既然这样,在课外讨论的时候,而不是课内的“监听”的沟通,你们一般都怎样处理呢?都会谈论些什么呢?
A2:这个问题真的是相对宽泛了,我们软件工程四人组由两个新加坡人,一个柬埔寨人和我共同组成,助教是标准的印度人,因此在交谈的过程中几乎全程都使用英语,当然讨论的时候最理想的地方自然是咖啡厅了,但有时也会在聚餐的时候偶尔讨论下?谈论的话题其实相对比较集中,在初期搭建框架的时候,这一部分可能需要首先完成需求上的分析,探讨时间节点的设置,整体功能的划分和架构,事实上这些内容都会消耗很多时间,因为设计的基础是比较重要的,而成员们一般都问题的时候也都会直接提出来,所以沟通的过程更多的是一个修缮想法的过程,但后期的项目,基本都集中在接口的统一和提供方面了,相对较为单一吧
Q3:那学长,你们聚餐的时候都吃什么呢?(欢脱的跑题QQAQQ)
A3:新加坡其实当地美食还是蛮多的,比如斯里兰卡的大螃蟹,甚至蟹腿会有铁棍山药那么粗,因此人手很难将它掰开,厨师会给你一把铁钳子帮你敲碎;而其他的美食其实很类似广东一带的风格,海南鸡饭,咖喱和椰浆混合的LASA,都是蛮不错的选择
Q4:刚才咱讨论着就跑题了(:D),回归正题,您在项目中担任的是一个怎样的角色呢?是否使用了什么代码托管平台呢?
A4:刚才咱们说道代码托管平台吧,我们在项目开发的时候是用Google Code来进行项目同步,其实当时Goolge Code平台本身的确不错,项目的同步啊,commit的索引啊,使用起来也是蛮方便的,但近年因为它已经很久没有进行整体框架上的升级了,最近也要关闭了,还是蛮遗憾的;至于角色吗,我们因为是四个人的一个小团队,所以本身的职能划分会有一定的交叉,我是主要负责负责前端界面的设计(Front End UI Designer)和时间计划的掌握(Deadline Watcher),同时,和你们其实还有所不同,我们的分数评定和展示其实更注重团队的合作,而不是最终项目产品的使用问题,所以每周的讨论过程,都是一个助教负责两个人,助教来“监听”两个人的交流,从而分析小组协作时的能力,不过当然项目产品要求严格这是必须的。而前端的设计,最主要的交流集中在功能开发的成员上,因此经常和他讨论功能和UI的协调的确是必需的一部分。
Q5:当时您印象最深的一个或多个项目,主要是什么方向的呢?他的主要用户需求是怎样的一个概况?
A5:这个产品我给你们展示一下当时设计初期的构架和最终的文档吧
图 1 TASKey Manual的构架
|
“Thank you for choosing TASKey! Here at the TASKey development team, we share your concerns on the rigidity and steep learning curve of the other task manager apps. Therefore, our aim is to provide you with a simple and hassle-free experience as you plan ahead with your day’s/week’s tasks. TASKey allows for flexible command formats that will help “busy” folks like yourself to “quick-add” a task so that you can get down to doing the actual work quicker. So remember, TASKey is here to help you!”
这是我们当时产品的一段摘要,如果用最朴素的话语,我们可以解析你输入的句子,并从中提取出重要的关键字如起止时间,任务核心,主语,宾语等相关信息,并将它整理为一个关键字组成的表格式的摘要,因为当时教师规定了团队项目的题目,所以我们所有团队做的产品基本都是它。
Q6:对于您当时做的团队项目,成果如何呢?当时所做的项目有多少用户在使用?现在是否还在继续维护和有人使用吗?
A6:成果当时的确没有衡量清楚,当时产品的下载量和具体流量也的确没有很好的计算,但当时的项目至少自己也会用一下,不过是在Windows平台略加修改,优化为一个便签的模式,可能更清晰和简单一些吧,但随着手机近几年类似软件的发展,我想,真实用户可能不会很多吧,维护和使用是由团队的Leader继续来完善,不过因为前端方面一直没有很大的修改,所以,就是这样吧
Q7:当时的项目源代码和文档是否仍继续保存呢?能够给我们的新团队继续开发和维护吗?
A7:当然啊,但是我并不建议你们在我们软件的源代码上继续修改,因为软件本身因为需求的局限性,所以可能添加功能等会比较麻烦,但我发给你来仅当做参考吧
Q8:在项目开发中,你有着怎样的经验或者教训分享给我们呢?比如团队的协作,各个BUG的调试,单元模块测试,架构,调试等等
A8:其实项目的开发,最重要的就是细化和提问,比如产品经理负责产品的可行性分析,需求挖掘,沟通整个团队与发现问题,项目经理负责产品的技术框架,统一接口与规范等技术层次上的统一,但实际上,更重要的是如何更好地提问题来帮助架构师进行完善,比如“需求是从哪里来的?目标客户是谁?有多少人有这样的需求?这个需求紧迫吗?他们的痛点是什么?场景是什么(用产品之前/之后)?需求满足之后数据和指标上会有什么表现?”同时,对于开发人员,务必也要确保有良好的注释风格并且可以描述清楚自己的实现思路,代码出问题不互相指责,首先寻找自己的问题,沟通和协作是必要的,当然,队长不要忘记请客就可以了(笑脸)
Q9:最后你想对学好软件工程这门课有什么建议呢?
A9:只能说,LEARNING BY DOING~祝你们好运~
0x03 :杂谈,照片
To the world,you maybe a person.
But to a person,you maybe the world.
BugPhobia,愿一切安好
你好,BugPhobia