青春,可以是在图书馆里奋笔疾书、在运动场上挥汗如雨,也可以是在实验室里孜孜探求、在田野上仰观俯察……青春是一种进行时,它有万般模样。你的青春是什么模样?
(资料图片仅供参考)
今天,我们一起来认识周和同学,走近他的编程世界。
在充斥着键盘敲击声的比赛现场,周和敲下最后一行代码,按下提交按钮。
1、2、3……一分钟过去,电脑屏幕上出现AC(Accpeted 通过)的结果,他悬着的心终于放了下来。这道题目的解出,意味着他拿下了金牌。
这是第47届ACM-ICPC国际大学生程序设计竞赛亚洲区域赛(杭州)站的现场。此前,周和就曾取得过多个国家级、省级竞赛奖项,但这次是他第一次获得国家级竞赛的金奖。
入学三年,综合排名专业第四,多次获国家级、省市级奖项,获国家奖学金2次,曾获评“优秀学生干部”荣誉称号,2023年荣获本栋奖学金……
来自厦大信息学院软件工程专业的周和,是别人眼中的“竞赛狂热爱好者”,更是个乐此不疲地沉浸于编程世界的人。
“ 写代码是种乐趣 ”
从小学一年级开始,周和便“痴迷”于数学竞赛。他认为,竞赛带来的挑战和刺激是日常学习无法比拟的。直至如今,他仍会出于兴趣目的,找些高中数学联赛的题目来做,或是曾经与一起学习数竞的好友讨论题目的新解法。
而接触软件工程后,他发现这门学科有另一种引人着迷之处——数学更抽象,“就像高峰,激励着人们努力攀登到新的高点”;软件工程则更为具体,是在知晓明确的目标和功能后,想尽办法实现。因此,当他做出一些具有功能性的软件时,“就会有一种学以致用的满足感。”
在《游戏关卡设计》课上,周和用一个月的时间独立制作了一款音乐游戏。玩家可以跟着音乐节奏,敲击音符,感受乐趣。同时,为了提升游戏的原创程度,周和甚至找到了高中音乐课上自己作的曲谱,联动了有音乐基础的同学,合作推出了“一首简单的曲子”,并成功导入游戏当中。
除了音乐游戏,周和还与同学合作,花了两个月的时间创造了一款名为《骑士的远征》的游戏。玩家将扮演一个可以使用武器射击的人物,在全随机生成的游戏地图中不断冒险,遇见不同的敌人与事件,捡到不同的道具,感受不同的剧情,直至通关。
作为一名程序员,周和当然也遇到过“bug”。但遇到解不开的思路或是写不出的代码时,比起找人询问,他更愿意“自力更生”。比如,当他想要写一个线上聊天室的代码,却不知如何接入一个人工智能聊天网站的接口时,他会先到官网查看需要传输的参数,或是去寻找利用过该技术的项目,研究对方的开源代码,并依此更改自己的代码。
“改着改着总能找到答案的。”他笑着谈到,“计算机相关专业的同学大概就是得有广阔的视野和不断学习的精神,能够巧用互联网自主解决问题。”在课堂学习之余,他也会在视频网站中学习新的编程技术,解读学习其他资深程序员的优质代码,实现知识的迭代与补充。
“ 打竞赛让我感觉被优化了 ”
周和评价自己:不是在打竞赛,就是在去打竞赛的路上。ACM(国际大学生程序设计竞赛)已然成为他大学生活中不可分割的一部分。
周和的专业学习主要涵盖大量的代码、复杂的结构和多种技术。譬如建构一个简单的图书管理系统,从数据库,到网页HTML语言、css语言、JavaScript语言,几十个文件,数千行代码,就像建筑工程师搭建积木般层层堆砌,需要设计者有清晰的整合设计思维。
而ACM竞赛,涉及的是某个具体功能的优化,或是在前沿方向上的探索。参赛者在解决一个小问题时,需要倾尽所能做到最好。
ACM竞赛每场长达五小时,要求选手在高难度高压的环境下写出高质量的代码。为了备赛,周和为自己定制了“2*5+2*2”计划,即每周不仅抽出两个完整的五小时时段,与队友在实验室里练模拟题,还会在算法爱好者的网站上参加1-3场比赛,以强化自己的代码技能。为了平衡课程学习,他多是利用晚上时间训练,深夜才回到寝室。
高强度的学习必然是辛苦的,但对竞赛的热爱却让周和甘之如饴。“竞赛给我带来一种因不断进步而突破自我的快感。”
小时候打数学竞赛,周和看着计算不出来的圆锥曲线,解不出来的方程式,分析不出来的复杂函数,都被一个个攻克下来,会产生“突破自己认知局限”的成就感。
“而参加某次编程类竞赛时,我看着最初版本的代码只拿了一千多万分,在优化了某些bug,又加入50行新代码之后,变成了一千九百九十万分,排名从100名升到40名,感觉仿佛连我自己都被优化了。”
三年竞赛经历,让周和的编程能力和思维能力都有了很大的提升。只要理解了技术,他基本都可以找到代码写作的思路。然而,提及这些年来取得的进步,相较于骄傲、自豪,周和感受到更多的是成长。
“那些难题的解题思路我之前从来没想过,基本上都是在考场上从零开始一步步蹦出来的。所以连我自己都不确定,能得到金奖,究竟是因为确有天赋,还是我特别努力,让大量的训练终于换来了质变的结果。”
“ 用手中的计算机出一份力”
三年的专业学习,让周和对软件工程有了更深的体悟:“从前我以为来到这里只需要敲代码改代码,但其实远比我想的复杂。从前期分析用户需求,详细分配职责,到数据库的构建以及一系列前端的书写,一套流程走下来,需要的是强大的知识体系的支撑。”这也是支持他继续学习、自我提升的动力。
而学习之余,周和还曾担任厦大软件学社的副社长,组织承办过两届厦门大学C语言积分赛。他秉持着“知识是基础的,但题目却不会失了竞赛难度”的理念,希望能借助比赛让新入学的同学提升C语言基础,并能吸引外院同学参与,让更多人燃起对编程的兴趣。
有n张写着数字的卡片,要求每次从这些卡片中拿走任意张卡片,剩下的卡片能分成和相等的两部分。选手需要把这个算法写出来。这是周和出的决赛的压轴题。
当时,只有四个人解出了这道题。但周和认为,他并非“为了难而难”地在设置题目。
“其实这道题,只需要运用for循环和if代码的知识就可以写出来,在大一刚入学时课上就会教授。但实际上你依然需要讨论很多种情况,寻找多种逻辑分支。最后的代码可能会有七八十行。考察思路,这才是题目的挑战之处。”
在社内,周和也积极参与着为21级的新生们开设的“C语言火箭班”项目,给大家讲解C语言相关理论知识,也会尽力回答学弟学妹们在课上没能理解好的问题,帮助他们巩固和强化课堂知识,形成了良好的学习氛围。
自始至终,周和都希望能引领身边更多人爱上编程,也让编程惠及更多世人。他希望自己能够有机会,在人工智能+医疗的领域进行深造。“未来,AI有望能在病理分析、新药预测等方面为人类提供帮助。医疗科技在往这个方向发展,我也想用手中的计算机,为这个产业出一份力。”