果园小学期的个人感想

很久之前就了解到会有这次小学期,听说是几个同学组成一组,完成一个代码量相对较大的程序。年轻气盛的我还满怀着期待:可以开黑coding了呢!时至今日,才发觉自己 Too young, too simple, sometimes naive!

乜来噶

小学期官方名称叫,“程序设计课程设计”。以前叫“计算机实习”,果园其他专业仍保留着这个名字。大概就是自由组队,五人一组,在不到两周内,用 C/C++ 写完一个代码量约三千行的程序。(当然也有用数据库、写 GUI 的大佬)具体的要求见课件。我们选择的是第一个题目—-综合体育场馆管理系统。

开工啦

受同学邀请,很早就组好了队。任务刚发布完,就预约了一间图书馆研讨间,初步讨论,确定选题,开始爆肝……

团队协作

不算有什么非常明确的分工,只是简单的做了几条规则的声明,因为都没有团队开发经验,整个团队算是比较松散混乱的状态。每个人写完自己的一个部分就接着认领下一个部分的内容,然后继续沉浸在快乐的结构化编程中,以至于下面悲剧的发生…

死亡 Debug

Segmentation fault、Bus error、Floating point exception 三连……最致命的是由于开发环境的不一致,产生了各种奇怪的问题。还有各种繁琐的文件操作的问题……深刻体会到去年一学长对我说过,“结构编程一时爽,代码合并火葬场”。

As Leader

这算是我第一次深度团队合作开发经历。作为组长,严重缺乏经验,不知道如何高效管理团队和分配任务,导致了这次项目进度缓慢,工作效率低下,以至于到了最后要刷夜工作的地步。还是需要多积累开发经验,多学习团队协作。

My Part

我亲自写的部分主要是整个项目的架构和推荐函数,以及解决组内一些奇怪的问题,制定一些约定的规则,代码合并,Style 统一,测试,debug,文档撰写……

程序框架

从程序开始运行的欢迎界面到实现每一个具体功能的函数,函数间的切换都需要通过程序框架。

易用性。代码层次清晰,结构明朗,逻辑清楚,各组件功能明确,遵循“高内聚,低耦合”设计原则。易于使用,为函数设计好接口。

安全性。针对每一个用户输入作出判断,防止用户错误输入导致程序错误。

可拓展性。当功能需要拓展,仅需添加一条分支,高度可拓展。

交互友好。在功能选择界面,仅需输入一个代表操作序号的阿拉伯数字即可选择相应功能。

代码逻辑。程序结构可抽象为一个树状模型,以程序入口为根节点,每个功能分支为父亲节点,使用 while 语句以保证其可重复性,每个具体细化的功能函数为叶子节点,使用 if 语句以保证其单遍运行。每个父亲节点具有一个功能选择交互界面,提示语句-键盘输入-检查输入-转移至下一节点。界面具有返回上一级选项,使用 break 语句跳出 while 循环,保证程序正常返回且逻辑清晰。while-if 语句共同构成了逻辑清晰,简洁易用的程序框架。

推荐算法

程序中有一个功能是场地推荐,即在场地查询列表前置顶了一小行—推荐场地。虽在整个程序中并不起眼,但背后有着复杂的处理机制。

打分机制。声明一个int型数组,每个元素对应一个场地,初始化为0。通过后续给每个场地打分来个性化区分优劣,最终取分数最高者,为推荐场地,推荐给用户。

基于信息匹配的基础推荐。在获取用户个人信息和场地信息后,依据匹配度针对用户个体对所有场地打分。打分维度包括年龄,区域和费用。由于年龄不符可能出现安全问题,用户年龄与场地年龄不符时不允许预定,在推荐打分中年龄权重占据绝对优势。其次是区域匹配,居住区域与场地所在区域一致的将有一定程度的加分。费用匹配实际上非常复杂,可依据不同消费水平的用户推荐不同价位的场地,但是消费水平并不好度量,不能单一地通过余额去判断,而是要通过历史订单,运动偏好等多维度考量。但从效益上考虑,这次采用了实现起来比较简单的低价优先。基础推荐从三个维度对场馆进行了打分。

基于历史订单的进阶推荐。进阶推荐主要分为两块。冷热门推荐与兴趣偏好推荐。冷热门推荐就是统计所有历史订单,求得所有场地预定频率,统计个体残差,再依据残差绝对值判断冷热门,给场地打分。兴趣偏好推荐,即抓去用户个体的历史订单后(当然新用户没有这一项推荐),计算不同种类运动所占份额,以确定用户兴趣偏好,再给场地加分。两个维度构成了进阶打分推荐。

两个基于不同信息的算法共同针对用户个体为每个场地打分,当数据体量足够庞大时,推荐结果应该较为合理。限于数据不足,时间有限,无法很好的测试推荐结果。如果有充足的时间和精力,可能可以加入数据挖掘和深度学习技术,将推荐算法做得更准确和完善。

即时读写

数据结构一般是采用文件+结构体数组,但是在数据体量变大之后,使用结构体数组将占用大量内存,使程序效率低下,甚至内存溢出导致程序错误。采用即时文件读写就可以大大减少内存占用,降低空间复杂度,避免这种问题发生。但是比较遗憾,由于各种问题,只有部分函数实现了即时读写。

在最后

虽有很多不足,但是小组成员都非常积极,各自完成着自己的工作,非常感谢他们的努力和认真。第一次团队开发,一周多的经历,收获良多。

“果园小学期的个人感想”的一个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据