0%

随想

十月October

之前有朋友问我算法问题,我才发现他已经慢慢学到kruskal了
kruskal本身不难,他之前也问了我很多语法问题,这似乎是第一次问算法相关
但是我却被他代码中浓浓的工程风格给小小震撼了一下,命名无可挑剔,封装恰到好处,简直不像是算法处女作
本来命名也就多费点精力的事,不能算多难,但我上大学后见到的99%的代码都严重缺乏这样的规范
更何况他是在尚未学完kruskal的前置知识的时候就主动去摸索算法流程,能够自己形成清晰的想法并非常准确地描述出来
尽管他的想法最终被我推翻,但也让我有了一些思考,更让我重新拾起高中信竞时期跟队友激情讨论算法过程的快感

九月September

小小总结一波小学期小组的经历

一开始分组时脑中一片空白,不断跟学姐打探小学期的各种情况,当时学姐一句“你们这个小学期,除了要用文件读取就没啥啦”直接让我舒服了

后来选完航空售票系统的问题,我们果断组织开展组员大学习,组长与gfy同志亲自部署、亲自指挥,安排其余组员于菜鸟教程上进行C艹先进技术的学习,坚决落实组长(也就是我)的各项要求,并于两日内超额完成学习任务(指本来也没指望学会多少)

开始设计了个基于页面栈思想的main函数,把大系统分解成了一个个小页面,在structure里面确定页面间的关系逻辑,后面十几天这个框架就基本没啥改动了

框架出来后,很快啊,我立马给我嗷嗷待哺的组员喂养了一坨任务,收到任务的那一刻,每个人脸上都洋溢着喜悦,并表示自己还能再干更多!(资本家泪目)

在组员间游走的时光,是我这个小学期最为放松且满足的日子,所有的问题好像都不是问题,所有的bug都露出它温顺的一面,验收的日子看起来是那么遥远,实现自己的想法看起来是那么简单,出于一种对未知的挑战,gfy同学也在这段时间承担下了给用户发送邮箱验证码的任务

好景不长,命令行界面的页面布局始终困扰着我,无论怎么布局,用户的输入始终只能在固定的地点,代码也因为要检查用户输入而变得像老太太的裹脚布–又臭又长。失去了优美,代码还有什么意义!我的关于图形界面的想法蠢蠢欲动

星期六是跌宕的一天,这天组员们寻得了一片喘息的空间,我为了不妨碍原有框架,新建了一个airTicketSystemGUI文件夹,将我并不成熟的想法倾注其中,在此之前,我已然决定,若一个上午无法形成完整框架,就放弃这一全新的尝试

果然天不遂人愿,直到中午我都没有完成既定目标,页面要想转型成图形,块的概念是必不可少的,我急于借鉴HTML的设计理念,试图实现块中有块的效果,却在继承关系上栽了个大跟头

大跃进的失败已然固定,跟别人小小抱怨后,我迅速从airTicketSystemGUI文件夹中抽身,及时止损,不让不成功的转型过多影响原有项目进度

但心中不甘在所难免,一上午的摸索也让我学到了不少新知识,我决定将一部分图形功能加入原有界面,于是Button类诞生了

这个类承载了我上午未尽的想法,也丢弃了其中晦涩的指针部分(刚看完c++ primer的我实在庆幸这一决定,不然我一定会遇到带指针类拷贝时自动浅拷贝的问题),我在实现欢迎界面的过程中逐步完善了这个类的其他函数以更方便地获取鼠标点击,与lcj一起完成了诸多必不可少的函数定义

这一步走得实在艰辛,那几天,游刃有余的感觉荡然无存,取而代之的是无尽的bug与错误信息,组员也因缺少任务而无法被充分调动,我在他们早上一起来就催我发布任务的那一刻觉得自己就像游戏里的npc,只是这个npc并没有固定的任务发布流程,他也暂时陷入了僵局

后来不知调掉了多少bug,百度了多少信息,终于在大约周日晚上的时候把原有进度中的所有页面全面升级成了支持鼠标点击的界面,而也大约在这时,gfy带着捷报回寝,他利用smtp协议和telnet协议成功完成了验证码发送功能,并在我的邮箱里成功尝试,我直呼好事成双,却不知我的噩梦才刚刚开始

程序中的bug解决了,团队的问题却逐渐浮现,由于时间过紧学的太快,奈何我拼命解释,那些刚学C艹的组员在理解我的代码上始终有点吃力,我只能退而求其次,自己承担起剩下页面的设计,将一些小巧轻便的函数分给组员去做

又在这时,新的问题出现,我发现上星期交给组员的各种函数的实现实在太不符合我的一贯码风,前期未确立代码规范的弊端也在此时显现,我花了较多时间改掉了其他人的代码,自然而然地用到了太多高级操作,也给读懂代码的门槛提高了不少,再次加大了组员的跟进难度,不过cyq同志热情不减,领下了忘记密码界面的全部设计工作

就在我给所有代码大换血后,还没等挨个测试,我就又迸出了改进Button类的想法,偏偏这个想法还很符合实际,我于是开始了框架的第二次大改

这次大改的代码量比第一次只多不少,不到两天的苦战,当我再次把代码push进我们的仓库时,git上显示page.cpp的一千多行代码改动了67%

第二次大改后,离项目验收已经只剩1天时间,bug多到找不完,也深到de不了,页面已完成设计,背后的逻辑却尚未跟上,我将所有花里胡哨的想法通通抛弃,把与用户的交互做了最大简化,顺便将cyq完成的忘记密码界面做了些许调整,规避了一切可能的出现在交互层的bug,让自己沉下心来修复满目疮痍的后端

中间一些小插曲更是让我有点崩溃,有没有人告诉我为什么这么多组用qt啊!!!还带数据库的那种!!!

幸好,后端所需技术仍然在我从高中遗留下来的知识范围内,模板的加入也让后端代码变得优美无比,接下来发动所有组员的bug调试工作也进行得很快,有时候后端一个bug的修复,能顺带着让前端的无数错误输出回到正轨,对代码模块化的追求终究没有白费,甚至在验收前的那一刻,我还往这个庞然大物里添加了一个重要功能

至此,在验收结束的星期五,这个一波三折的故事就此告一段落,我们的代码或许不是最好,但这段经历在我这里最为刻骨铭心

附带我们组的gitee仓库,已开源
https://gitee.com/Ajsoabk/primary-school-homework/tree/master