周一上午,第一堂编程课。
教室在主楼三层,阶梯教室,能坐一百多人。计算机系的新生全部到齐,58个人坐了前五排。
苏念坐在第三排靠窗的位置,方晓薇坐她旁边,周雨桐坐方晓薇旁边。三个女生坐成一排,在一片黑压压的男生中间格外显眼。
陈教授踩着点走进来,把一摞讲义拍在讲台上。
"今天第一堂课,不讲理论,直接上机。"
全班一阵骚动。第一堂课就上机?不先讲语法吗?
陈教授推了推眼镜:"你们是华清计算机系的学生,不是零基础的小白。在座的大部分人高中都学过编程,有些还拿过竞赛奖牌。所以我不打算浪费时间讲'什么是变量'这种东西。"
他转身在黑板上写了一道题:
"用C语言实现一个函数,输入一个正整数n,输出n以内所有素数的和。要求:时间复杂度不超过O(n√n)。"
"给你们二十分钟。写完的举手,我来看。"
教室里安静了两秒,然后响起了噼里啪啦的键盘声——每个座位上都有一台电脑,已经打开了编程环境。
苏念看了一眼题目。
求n以内素数之和,时间复杂度O(n√n)。
这道题对于计算机系新生来说,难度适中。常规做法是对每个数逐一判断是否为素数,判断的方法是试除法,从2除到√n。
但苏念脑子里第一个跳出来的方案不是试除法,而是埃拉托斯特尼筛法——时间复杂度O(n log log n),比题目要求的O(n√n)还要优。
她决定用筛法。
不是为了炫技,而是因为这个方法确实更好。
苏念的手指落在键盘上,代码像流水一样涌出来。
变量声明,数组初始化,筛法核心循环,求和,输出。
每一行代码都简洁明了,变量命名规范,缩进整齐,关键步骤有注释。
五分钟。
苏念举手。
全班的键盘声戛然而止,所有人都转头看向她。
陈教授走过来,弯腰看了看她的屏幕。
沉默了五秒。
"你用的是筛法?"
"是。埃氏筛,时间复杂度O(n log log n),优于题目要求。"
陈教授又看了几秒,点了点头:"编译运行一下。"
苏念按下运行键。
程序瞬间输出了结果。
陈教授拿出计算器验算了一下,抬起头,表情很微妙——像是在一堆毛坯房里突然看到了一栋精装修的别墅。
"正确。而且代码质量很高。"他直起身,看着苏念,"你之前学过编程?"
"自学的。"
"自学到这个水平?"
苏念微微一笑,没有多解释。
陈教授转身走回讲台,对全班说:"苏念同学五分钟完成,用的是筛法,时间复杂度优于题目要求。有兴趣的同学可以下课后找她交流。"
教室里响起一阵低低的议论声。
"五分钟?"
"筛法?我都没想到用筛法……"
"她不是高考状元吗?编程也这么强?"
方晓薇在旁边激动得脸都红了,小声说:"念念你太帅了!"
苏念摆了摆手,靠在椅背上,目光不经意地扫向最后一排。
顾衍正低着头敲代码,速度很快,表情专注。
苏念注意到他的打字姿势——标准的十指盲打,手指几乎不离开键盘中间那一排,效率极高。
一个真正的键盘手。
又过了三分钟,顾衍举手了。
他是第二个完成的。
陈教授走过去看了看他的代码,点了点头:"也是筛法。不错。"
然后陈教授皱了皱眉:"但你的代码没有注释。"
顾衍低声说:"代码本身就是注释。"
陈教授:"……以后加上。"
苏念听到这句话,差点笑出声。
"代码本身就是注释"——这句话她前世在技术论坛上见顾衍说过。当时她怼了他一句:"你的代码确实不需要注释,因为反正也没人看得懂。"
顾衍当时回了一句:"看不懂是读者的问题,不是作者的问题。"
然后两人就这个话题吵了三天。
现在想想,还挺怀念的。
——
下课后,苏念收拾东西准备走,一个男生拦住了她。
"苏念同学,你好,我叫张浩。"就是自我介绍时说喜欢打游戏的那个,"你刚才那个筛法写得真好,能加个联系方式吗?以后有问题想请教你。"
"可以。"苏念报了自己的手机号。
张浩刚走,又来了两个男生,也是来要联系方式的。
然后又来了三个。
苏念一一应付,心里有点无奈。
她知道这些人里,有些是真的想交流技术,有些只是好奇"全省状元+女生+编程强"这个组合。
但无所谓。人脉就是这么积累的。
等人都散了,苏念背起书包往外走。
走到教室门口的时候,她注意到顾衍还坐在最后一排,对着电脑屏幕发呆。
不,不是发呆——他在看苏念的代码。
陈教授上课的时候把苏念的代码投影到了大屏幕上做示范,顾衍大概是拍了照,现在正在手机上一行一行地看。
苏念犹豫了一秒,走了过去。
"看什么呢?"
顾衍吓了一跳,手机差点掉地上。
他抬起头,看见是苏念,耳朵瞬间红了。
"我……我在看你的代码。"
"觉得怎么样?"
顾衍沉默了两秒,像是在组织语言。
"筛法的实现很标准,但你在求和的时候用了一个技巧——把布尔数组直接当作0和1参与运算,省了一次条件判断。这个写法……很聪明。"
苏念挑了挑眉。
他居然注意到了这个细节。
这个技巧确实不起眼,但能省掉一次分支判断,在大数据量的情况下能提升不少性能。一般的新手不会注意到这种微优化。
"你的代码我也看了。"苏念说。
顾衍的耳朵更红了:"怎……怎么样?"
"逻辑很好,效率很高。"苏念顿了顿,"但是——"
"但是什么?"
"你的变量命名太随意了。i、j、k、n、m、t——你是在写代码还是在做数学题?而且没有注释,没有空行分隔逻辑块。你这代码跟你这个人一样——"
顾衍紧张地看着她。
"能跑,但没人看得懂。"
顾衍愣了三秒。
然后他的嘴角动了一下——不是笑,更像是一种不知道该怎么反应的抽搐。
"我……我会改的。"
"不用改。"苏念背起书包,转身往外走,"你的代码风格有你的道理,我只是吐槽一下。"
走到门口,她回头看了一眼。
顾衍还坐在那里,低着头,耳朵红得像要滴血。
苏念笑了笑,走了。
有意思。
二十岁的顾衍,比她想象中还要社恐。
但他的代码确实写得好——那种浑然天成的好,不是靠经验堆出来的,而是靠天赋。
苏念前世见过很多程序员,能称得上"天才"的,一只手数得过来。
顾衍是其中之一。
而现在,这个天才坐在她的教室里,看着她的代码,耳朵红红的。
苏念走在华清的林荫道上,九月的阳光透过树叶洒下来,在地上画出斑驳的光影。
她忽然觉得,重生这件事,除了改变命运之外,还有一个意想不到的好处——
她可以在最好的年纪,遇见最好的人。
而不是像前世那样,在最疲惫的时候,和最好的人擦肩而过。