校友风采

不惧挑战,艰苦奋斗——记我校2018届软件工程专业校友姚本初

发布者:校友2020发布时间:2021-06-07浏览次数:339

姚本初,1996年生于安徽合肥,合肥学院计算机科学与技术系 2018届软件工程专业毕业生。在校时,曾参加双百大赛、Robocup世界杯比赛,获得了诸多奖项。现工作于合肥城市云数据中心股份有限公司。

大学生活就应该在实验室度过

收到录取通知后,距离高考结束已经过去了一个多月,游戏、刷剧、睡觉,生活开始变得乏味,姚本初想着去做点有趣的事情。在新生群直系学长的推荐下,他打开了MOOCC语言网课,开始一天一小节的看了起来。初学者总是带有敬畏与热情,因此即使是在后来的他看来十分简单的入门课程,在那个暑假却是一遍一遍的看,课后习题也一题不漏的做完。就这样,很快,二十个课次的视频课到了尾声,他自认为掌握的很好,给那个推荐课程的学长发去了消息:“学长,有没有难一点的”。那个学长给他介绍了另一个同专业的学长,叫张利鹏。从此,一条注定与大多数同学不同的路展现在他的面前。

新生军训完后就是国庆节,而106号那天下午,姚本初便来到了学校。因为那晚与学长约好,第一次进实验室参观。学长介绍了系里各个实验室及小组,并强推了robocup小组,直言:“其他小组都没意思,要搞就搞最难的”,那是姚本初对robocup组的第一印象。由于实验室小组对技术有一定要求,一般都不招收没有基础的大一新生,所以姚本初给自己定的计划是大二进实验室,要进就进最难出成绩的。至于什么机器学习、人工智能算法,都完全没有这些概念,当时的他连java都没有听说过。

整个大一,姚本初来往于各个社团活动现场及社联办公室,将校内各个社团的活动参加了个遍,连致用礼堂的晚会也几乎没怎么落下。在社团活动之外,姚本初买了一本《C primer plus》,一本C语言的指导书,经常晚上一个人跑到自习教室啃着。理解不了的,就全部标记出来,然后一遍遍的复习,后来干脆用A4纸抄写下来随身携带背诵。不过后来书里很多不常用的内容还是忘了,然而他的编程基础相比起其他同学却是坚实了许多,并养成了宿舍不关门不回宿舍的习惯。

大一C语言课程结束后,要进行两周的课程设计,包括选题、做题、答辩的过程。浏览了一遍老师给的题目,都是各种管理系统,只觉得无聊。所有同学的题目都选完后,给他剩下了一个大家都觉得看不懂,但他却觉得有点意思的题目

,一道完全不知道怎么入手的题目,一道涉及arduino板编程的题。看了题目说明后,当天便去图书馆一本arduino的入门书籍。不久后课程设计开课,由于题目特殊,和另一个班同上,姚本初抱着笔记本就去了实验室。指导老师给拿了一块没有见过的板,一个小灯,几根线,这就是全部的材料了。大一的题目自然没有那么想象的那么难,姚本初对照着借来的书,测试了书上的入门代码,改了下基本逻辑,再将代码导入设备。拿到设备才过去两个小时,他就做完了。看着面前按照题目描述依次亮起的灯,他开始疑惑起来,“我是不是理解错题目了”。想了半天没想通,他抱着电脑去问老师,得知的确已经完成了之后,开心的去自习室写课程设计报告了。后来半年里,姚本初经常无意间与人提起这件事,关于两小时完成了2周的作业,嘴角露出不易察觉的笑。那是大家第一次对这个平时在班里没什么存在感的男生,产生印象。

大一交课程设计论文那天,姚本初从课程设计的指导老师那带走了一个魔方,那是另一件可以吹半年的事情了。除了魔方之外,他带走的还有两套材料,一套是一份魔方的自动还原代码,另一套是魔方的六面录入及通过陀螺仪手动解魔方的设备,他要做的是把这两套设备合二为一。原本应该悄然进入暑假,回家愉快的玩耍,但姚本初并没有选择回家,因为他觉得老师给的东西并不是什么难题。后来老师还找了另一个同学帮忙处理设备的问题,那位同学很擅长解魔方。和料想的一样,没过多久,两套代码及设备便成功合二为一,而那时姚本初才刚刚学完C语言。既然工作结束,姚本初也没有多想,甚至没有打算放两天假,直接去了6robocup实验室。然而事情总是一波三折,在姚本初将设备及代码给另一位同学后,另一位同学没有停止工作,反而继续测试了起来,这一测试便发现了问题,他们拿到手的解魔方算法有bug,这一下子将难度提升了数倍。刚刚学完C语言的他,哪里能在上万行代码中找到bug所在。更加头疼的是,不知道有多少处问题。要是问题多,那一行一行读起来,难度等同于重写代码。6楼暂时没有再去了,姚本初硬着头皮开始读起解魔方的算法,期间多次想要放弃,毕竟这东西做出来对自己也没什么用。但是遇到难题就放弃,以后就会一帆风顺吗?姚本初最终也没有选择放弃,他不会解魔方,就在另一位同学的帮助下,一边梳理魔方的解法,一边对照着代码,终于在一天夜晚找到了问题所在。那年9月份,姚本初在快忘了那个魔方时,接到了老师的电话。随后两位同学一起去参加了双百大赛,从8000件作品中脱颖而出,拿到了一等奖,那一年的一等奖只有十八个。

参加完双百大赛,姚本初继续投入了robocup2d项目中。这个项目是众所周知的难出成绩,参加其他的项目组总能熟悉一项技能,而2d组入门就得一年,剩下一年可能还没来得及做出点什么就结束了。代码量多,需要考虑的面多,再加上2d项目是对抗项目,写的每一个逻辑都可能在赛场上产生与预想不同的结果。它并非是那种提出需求,编写代码完成需求,测试通过就完成的项目。当时组里的想法五花八门,头脑风暴时每个人都能提出一大堆观点,代码写出来一测往往起反效果。组里专门弄了两台设备用于测试代码,新代码改好后就放到测试机器上测试,第二天看效果。测试结果通常不乐观,可以打赢A队的代码,可能打不赢B队,能赢B队的代码,也可能被C队完爆。姚本初有一个整理了两年的备忘录,每天有什么新的思路都记上,暂时写不出来的就记待定,写出来的测完记测试结果,每天短短几行,两年下来写了几万字的备忘,而里面提到的方案,绝大多数后面都标记了测试失败。在大二快结束的时候,姚本初对自己产生了质疑,“我真的能从这个项目学到东西吗?为什么我做其他东西都觉得很简单,这里却什么都做不出来”。经常晚上十点半回宿舍路上,他总是忍不住跟学长诉苦,关于今天又做了什么,关于今天又白干了。大二那年夏天,姚本初收到了老师的消息,要带他一起去德国参加比赛。那是他第一次有希望去看看外面的世界,在那之前,他甚至没有离开过安徽。他心里很清楚,德国一去,回来后就只能继续在2d组做下去了,也许接下来一年自己什么都做不出来。“去吗?当然”。在德国见识过顶级强队的厉害后,姚本初回来之后非但没有气馁,反而充满了斗志。他开始意识到,光是写固有逻辑其实起不到太大的作用,主要是各个逻辑之间很难起到配合,光凭几个人去想,写出来的逻辑也不够完善。于是在一边按老师的要求继续完善打法之外,他开始想着准备一套试图用机器学习算法进行优化动作链的代码。他将这两套代码分别称为稳定版与不稳定版本,其中不断完善打法逻辑的为稳定版本,即使没有大的进步,也不会有什么退步,而另一套则比较激进,要么运气好可以干掉诸多强队,要么谁都打不过。在大三的国赛上,姚本初拿出了那套在家里测试效果很好的不稳定版本,为什么在家里测试效果很好还叫不稳定版本?因为没有信心。小组赛结束那晚,大家一起讨论第二天前八名排名赛的打法,姚本初提出了自己的不稳定版本,为了不打击他的积极性,老师选择了相信。那次国赛作为世界杯预演,虽然很重要,但相比起世界杯自然压力小很多。前八名的排名赛结束,拿了第八名,他对自己的想法产生了质疑,同时对实验室的测试数据产生了巨大的不信任。如果测试数据不准确,那写的代码如何确定能用呢?精简代码开始了,姚本初把这一年多来自己写的代码重新梳理了一遍,凡是不确定的代码都删掉,只保留了自己认可的理论上不会出错的逻辑。日本世界杯即将到来,压力陡然而至。临行前,他仍然准备了两份代码,一份稳定版,他称为保8版本,即可以稳定保证前八完成任务的版本;另一份激进版,他还是想试试自己的想法。到了赛场后,得知赛程改了,新增天梯赛,在正常赛程结束后,每个队伍都有机会挑战比自己排名高一位的队伍,他知道自己的机会来了。常规赛排名第7,比赛结束那天夜晚,队内沟通第二天天梯赛的打法,姚本初果断再次提出了自己的激进版代码,考虑到已经是第七名,即使天梯赛输了也可以接受,于是老师们再一次给了他机会。天梯赛开始的那天早晨姚本初重新提交了代码,在击败了第六名的队伍后,继续对战oxsy失败,后来看着oxsy一路战到了第三名,遗憾也有,但至少激进版的代码也上过,不后悔。

去看看实体工业机器人

大三从日本回来后,没休息几天,姚本初便独自去往杭州面试一家工业机器人公司,成功拿到offer11月前往杭州实习才感受到自己所面对的压力,项目组主要工作为激光SLAM项目,同组另外三个人分别为浙大和北理的研究生,还有一个算法指导老师,是浙大的博导,带过robocup冠军队。3个月的实习,曾加班熬夜看代码,也曾周五晚十二点在院子里调设备,甚至打着雨伞去室外测量激光扫描在雨天的数据。三个月的实习,让他感到有些失望,毕竟没有看到真正让机器人智能化的算法,有的只是一个激光传感器去扫描数据,并对这些数据进行处理,而绝大多数时间则不在研究怎么利用数据,却是怎么去让数据更准确。

春节前,由于薪资没谈拢,以及对项目没有信心,加上一个人在杭州生活压力过大,决定结束实习。他知道这些看起来笨重且经常不听话的机器人里面有很多自己可以学习的东西,但是那些不是他喜欢的,他要回去了。

扎根数据,潜心向学

大四那年4月,姚本初来到了老师推荐的合肥城市云数据中心,研发部监控组。来到项目组后,姚本初一心想着大数据、数据处理与机器学习算法,成为一个算法大佬一直是他的追求,虽然他数学并不好。实习了一个月,对项目组逐渐了解后,姚本初发现组里缺少了数据处理最重要的一环——数据,身为监控组,却缺少足够的数据。数据中心管理平台,自然不缺少设备数据,但是除此之外,关于应用的数据则是几乎没有。于是从最常用的tomcat开始研究,研究监控tomcat运行情况需要监控那些指标,研究如何去采集这些指标数据,研究各个版本有什么不同。不断的研究过程中,各种采集协议—SnmpJmxHttpJdbc信手拈来,他开始越来越快,后期一周甚至可以完成两种应用监控数据的采集,最终完成了近20种常用应用的采集。

有一次,领导去客户现场时,发现客户用的一个运维软件带了一个网段内的设备拓扑自动发现功能。回来后立项研究,在其他人都很忙的情况下,姚本初接下了这个任务,去研究如何在只知道网段及设备开通snmp协议的情况下,发现网段内所有的网络设备。姚本初在写大学毕业论文时都没有打开过知网,却在此时对各个网络设备协议进行了检索,查找到数百篇论文。在筛选掉与拓扑发现无关的论文后,仍然剩余了近百篇。姚本初没有畏难,每一篇论文都仔细阅读,将论文中提到的步骤整理成算法进行总结,并就具体的数据进行测试,去除有错的论文,最终完成了对各个协议进行正确理解与应用的算法。不过该功能目前没有实际上线,真实的网络环境要比理想情况下复杂很多,也不是所有设备都按要求去实现了协议内容。那年12月,在部门要求下,姚本初就二层和三层网络拓扑发现,独立完成了一份专利申请稿,并由代理公司提交。

受困于每次连接数据中心的服务器都需要使用vpn,部门决定立项研究一款开源的网页版堡垒机。姚本初接下了这个任务,在初次接触时,他就意识到这个工具安装复杂,且页面上有许多与他们部门开发的平台重复的功能,甚至有很多不需要的功能。经过对其不断深挖,他意识到这个工具堡垒机功能核心是使用了其他开源的软件,于是他干脆将目光转移到那个单独的开源软件中去。从了解具体需求,到了解软件实际功能,测试软件功能的可行性及对需求的满足程度,最终独立完成了此次二次开发的技术可行性研究以及具体开发的详细设计。当然在这个过程中,也伴随着数次无法解决的难题,有通过不停的与开发者邮件交流,也有强行对原码进行改写。

就这样一点点的充实自己的项目经验与技术,姚本初在不断的挑战与学习中获得成长。

 

皖ICP备05002535号皖公网安备34019102000134合肥大学校友会