青春,可以是在圖書館里奮筆疾書、在運動場上揮汗如雨,也可以是在實驗室里孜孜探求、在田野上仰觀俯察……青春是一種進行時,它有萬般模樣。你的青春是什么模樣?
(相關資料圖)
今天,我們一起來認識周和同學,走近他的編程世界。
在充斥著鍵盤敲擊聲的比賽現(xiàn)場,周和敲下最后一行代碼,按下提交按鈕。
1、2、3……一分鐘過去,電腦屏幕上出現(xiàn)AC(Accpeted 通過)的結果,他懸著的心終于放了下來。這道題目的解出,意味著他拿下了金牌。
這是第47屆ACM-ICPC國際大學生程序設計競賽亞洲區(qū)域賽(杭州)站的現(xiàn)場。此前,周和就曾取得過多個國家級、省級競賽獎項,但這次是他第一次獲得國家級競賽的金獎。
入學三年,綜合排名專業(yè)第四,多次獲國家級、省市級獎項,獲國家獎學金2次,曾獲評“優(yōu)秀學生干部”榮譽稱號,2023年榮獲本棟獎學金……
來自廈大信息學院軟件工程專業(yè)的周和,是別人眼中的“競賽狂熱愛好者”,更是個樂此不疲地沉浸于編程世界的人。
“ 寫代碼是種樂趣 ”
從小學一年級開始,周和便“癡迷”于數(shù)學競賽。他認為,競賽帶來的挑戰(zhàn)和刺激是日常學習無法比擬的。直至如今,他仍會出于興趣目的,找些高中數(shù)學聯(lián)賽的題目來做,或是曾經(jīng)與一起學習數(shù)競的好友討論題目的新解法。
而接觸軟件工程后,他發(fā)現(xiàn)這門學科有另一種引人著迷之處——數(shù)學更抽象,“就像高峰,激勵著人們努力攀登到新的高點”;軟件工程則更為具體,是在知曉明確的目標和功能后,想盡辦法實現(xiàn)。因此,當他做出一些具有功能性的軟件時,“就會有一種學以致用的滿足感?!?/p>
在《游戲關卡設計》課上,周和用一個月的時間獨立制作了一款音樂游戲。玩家可以跟著音樂節(jié)奏,敲擊音符,感受樂趣。同時,為了提升游戲的原創(chuàng)程度,周和甚至找到了高中音樂課上自己作的曲譜,聯(lián)動了有音樂基礎的同學,合作推出了“一首簡單的曲子”,并成功導入游戲當中。
除了音樂游戲,周和還與同學合作,花了兩個月的時間創(chuàng)造了一款名為《騎士的遠征》的游戲。玩家將扮演一個可以使用武器射擊的人物,在全隨機生成的游戲地圖中不斷冒險,遇見不同的敵人與事件,撿到不同的道具,感受不同的劇情,直至通關。
作為一名程序員,周和當然也遇到過“bug”。但遇到解不開的思路或是寫不出的代碼時,比起找人詢問,他更愿意“自力更生”。比如,當他想要寫一個線上聊天室的代碼,卻不知如何接入一個人工智能聊天網(wǎng)站的接口時,他會先到官網(wǎng)查看需要傳輸?shù)膮?shù),或是去尋找利用過該技術的項目,研究對方的開源代碼,并依此更改自己的代碼。
“改著改著總能找到答案的。”他笑著談到,“計算機相關專業(yè)的同學大概就是得有廣闊的視野和不斷學習的精神,能夠巧用互聯(lián)網(wǎng)自主解決問題?!痹谡n堂學習之余,他也會在視頻網(wǎng)站中學習新的編程技術,解讀學習其他資深程序員的優(yōu)質(zhì)代碼,實現(xiàn)知識的迭代與補充。
“ 打競賽讓我感覺被優(yōu)化了 ”
周和評價自己:不是在打競賽,就是在去打競賽的路上。ACM(國際大學生程序設計競賽)已然成為他大學生活中不可分割的一部分。
周和的專業(yè)學習主要涵蓋大量的代碼、復雜的結構和多種技術。譬如建構一個簡單的圖書管理系統(tǒng),從數(shù)據(jù)庫,到網(wǎng)頁HTML語言、css語言、JavaScript語言,幾十個文件,數(shù)千行代碼,就像建筑工程師搭建積木般層層堆砌,需要設計者有清晰的整合設計思維。
而ACM競賽,涉及的是某個具體功能的優(yōu)化,或是在前沿方向上的探索。參賽者在解決一個小問題時,需要傾盡所能做到最好。
ACM競賽每場長達五小時,要求選手在高難度高壓的環(huán)境下寫出高質(zhì)量的代碼。為了備賽,周和為自己定制了“2*5+2*2”計劃,即每周不僅抽出兩個完整的五小時時段,與隊友在實驗室里練模擬題,還會在算法愛好者的網(wǎng)站上參加1-3場比賽,以強化自己的代碼技能。為了平衡課程學習,他多是利用晚上時間訓練,深夜才回到寢室。
高強度的學習必然是辛苦的,但對競賽的熱愛卻讓周和甘之如飴?!案傎惤o我?guī)硪环N因不斷進步而突破自我的快感?!?/p>
小時候打數(shù)學競賽,周和看著計算不出來的圓錐曲線,解不出來的方程式,分析不出來的復雜函數(shù),都被一個個攻克下來,會產(chǎn)生“突破自己認知局限”的成就感。
“而參加某次編程類競賽時,我看著最初版本的代碼只拿了一千多萬分,在優(yōu)化了某些bug,又加入50行新代碼之后,變成了一千九百九十萬分,排名從100名升到40名,感覺仿佛連我自己都被優(yōu)化了。”
三年競賽經(jīng)歷,讓周和的編程能力和思維能力都有了很大的提升。只要理解了技術,他基本都可以找到代碼寫作的思路。然而,提及這些年來取得的進步,相較于驕傲、自豪,周和感受到更多的是成長。
“那些難題的解題思路我之前從來沒想過,基本上都是在考場上從零開始一步步蹦出來的。所以連我自己都不確定,能得到金獎,究竟是因為確有天賦,還是我特別努力,讓大量的訓練終于換來了質(zhì)變的結果?!?/p>
“ 用手中的計算機出一份力”
三年的專業(yè)學習,讓周和對軟件工程有了更深的體悟:“從前我以為來到這里只需要敲代碼改代碼,但其實遠比我想的復雜。從前期分析用戶需求,詳細分配職責,到數(shù)據(jù)庫的構建以及一系列前端的書寫,一套流程走下來,需要的是強大的知識體系的支撐?!边@也是支持他繼續(xù)學習、自我提升的動力。
而學習之余,周和還曾擔任廈大軟件學社的副社長,組織承辦過兩屆廈門大學C語言積分賽。他秉持著“知識是基礎的,但題目卻不會失了競賽難度”的理念,希望能借助比賽讓新入學的同學提升C語言基礎,并能吸引外院同學參與,讓更多人燃起對編程的興趣。
有n張寫著數(shù)字的卡片,要求每次從這些卡片中拿走任意張卡片,剩下的卡片能分成和相等的兩部分。選手需要把這個算法寫出來。這是周和出的決賽的壓軸題。
當時,只有四個人解出了這道題。但周和認為,他并非“為了難而難”地在設置題目。
“其實這道題,只需要運用for循環(huán)和if代碼的知識就可以寫出來,在大一剛入學時課上就會教授。但實際上你依然需要討論很多種情況,尋找多種邏輯分支。最后的代碼可能會有七八十行??疾焖悸?,這才是題目的挑戰(zhàn)之處?!?/p>
在社內(nèi),周和也積極參與著為21級的新生們開設的“C語言火箭班”項目,給大家講解C語言相關理論知識,也會盡力回答學弟學妹們在課上沒能理解好的問題,幫助他們鞏固和強化課堂知識,形成了良好的學習氛圍。
自始至終,周和都希望能引領身邊更多人愛上編程,也讓編程惠及更多世人。他希望自己能夠有機會,在人工智能+醫(yī)療的領域進行深造?!拔磥?,AI有望能在病理分析、新藥預測等方面為人類提供幫助。醫(yī)療科技在往這個方向發(fā)展,我也想用手中的計算機,為這個產(chǎn)業(yè)出一份力。”