第五章 答辩翻车
周三下午两点,教学楼四楼的机房。
林知行坐在第三排靠窗的位置,笔记本电脑打开,屏幕上是他的课程设计——一个基于AI的智能问答系统。界面很简陋,白底黑字,一个输入框,一个输出框,下面有个"提交"按钮。
方小满坐在他旁边,胳膊肘怼了他一下:"紧张不?"
"还行。"林知行说。
"还行是啥意思?"方小满压低声音,"你那系统能跑通吧?"
"能跑通。"林知行重复了一遍这句话,像是说给自己听。
他确实检查过。昨晚他又跑了一遍测试,输入了十几组问题,系统都能给出还算合理的回答。虽然回答的质量参差不齐,但至少不会报错。
答辩的规则很简单:每个同学上去演示自己的课程设计,然后老师提问。提问环节大概五分钟,答不上来就扣分。
林知行排在第七个。前面六个同学已经演示完了,有做图书管理系统的,有做学生选课系统的,有做简易计算器的。老师问的问题都很基础,什么"你这个数据库怎么设计的""这个功能的实现逻辑是什么""有没有考虑过异常情况"。
大部分同学答得磕磕绊绊,但老师也没太为难,点点头就过去了。
轮到林知行。
他站起来,走到讲台旁边的演示电脑前,把U盘插进去,打开自己的程序。
"我的课程设计是一个基于AI的智能问答系统。"他开口,声音有点干,"用户输入问题,系统会调用AI接口生成回答,并显示在界面上。"
他演示了一遍。输入"今天天气怎么样",系统返回"抱歉,我无法获取实时天气信息"。输入"1+1等于几",系统返回"1+1等于2"。输入"介绍一下你自己",系统返回"我是一个AI助手,可以回答各种问题"。
演示很顺利,系统没有报错。
林知行松了口气,看向讲台上的老师。
老师姓刘,五十出头,头发花白,戴一副金丝眼镜,是计算机系的老教授。他教了二十多年数据结构和算法,对学生的要求一直很严格。
刘老师没说话,只是看着屏幕,手指在桌上轻轻敲着。
"你这个AI接口,是怎么调用的?"他问。
林知行答:"用Python的requests库,向AI的API发送请求,然后解析返回的JSON数据。"
"请求参数怎么构造的?"
"把用户输入的问题作为参数,传给API的对话接口。"
"返回的数据怎么处理的?"
"解析JSON,提取回答文本,显示在界面上。"
刘老师点了点头,没说好也没说不好。
"你这个系统,有没有考虑过输入为空的情况?"
林知行愣了一下。输入为空?他好像没测试过这个。
"我……我可以试一下。"他说。
他把输入框清空,点了一下"提交"。
屏幕卡了一下,然后弹出一个错误提示:AttributeError: 'NoneType' object has no attribute 'strip'。
林知行的脸瞬间涨红了。
"这是什么错误?"刘老师问。
林知行盯着屏幕,脑子里飞速运转。AttributeError,意思是NoneType没有strip属性。也就是说,当他输入为空的时候,某个变量变成了None,然后他试图对这个None调用strip方法,所以报错了。
"是……是空值处理的问题。"他说,"我没想到用户会输入空值。"
"没想到?"刘老师的语气没什么起伏,"一个问答系统,你不考虑用户输入为空的情况?"
林知行没接话。
"再试一个。"刘老师说,"输入一个很长的问题,超过500个字符。"
林知行的手指在键盘上敲着,复制粘贴了一段很长的文本进去,点"提交"。
屏幕又卡了一下,然后又弹出一个错误提示:ConnectionError: API request timed out.
"这又是什么?"刘老师问。
"是……是请求超时。"林知行的声音越来越小,"输入太长,AI处理时间太长,超过了默认的超时时间。"
"你有没有设置超时时间?"
"没有。"
"有没有做异常捕获?"
"没有。"
刘老师没再问。他站起来,走到林知行旁边,看着屏幕。
"你这个系统,"他说,"看起来能跑,但经不起测。"
林知行没接话。他的脸还在发烫,手指攥着鼠标,指节发白。
"你知道为什么吗?"刘老师问。
林知行摇头。
"因为你只学了怎么调用AI,没学怎么写程序。"刘老师的声音不大,但每个字都清清楚楚,"AI能帮你生成回答,但不能帮你处理异常。AI能帮你完成任务,但不能帮你写出健壮的代码。"
他顿了一下,说:"工具谁都会用,但你连基本功都没有。"
教室里很安静。
林知行站在那里,脸涨得通红,耳朵嗡嗡响。他想说什么,但张不开嘴。他想解释,但不知道怎么解释。
"坐下吧。"刘老师说。
林知行走回座位,坐下,把笔记本电脑合上。
方小满在旁边戳了他一下,他没反应。
接下来的答辩他一个字都没听进去。脑子里一直在转那句话:工具谁都会用,但你连基本功都没有。
基本功。
什么是基本功?
是异常处理?是边界条件?是代码的健壮性?
还是说,是他这个人本身就没有基本功?
他想起自己用AI完成课程设计的那个晚上。凌晨三点,系统跑通,他兴奋得睡不着。他觉得自己找到了一条捷径,一条不用写太多代码就能完成任务的捷径。
但他没想过,这条捷径的尽头是什么。
是答辩现场的两个错误提示。
是老师的一句话。
是他的脸涨得通红。
五点半,答辩结束。同学们陆续离开机房,三三两两地聊着天。
林知行还坐在位置上没动。方小满在旁边等他,没说话。
"走吧。"林知行终于开口,声音有点哑。
两人走出机房,沿着走廊往楼梯口走。走廊里人不多,大部分同学已经走了。
方小满突然开口:"那老师说得不对。"
林知行没接话。
"他凭什么那么说?"方小满的声音有点大,"工具谁都会用?他用过吗?他会用ChatGPT吗?他知道怎么跟AI对话吗?"
林知行停下脚步。
"他连ChatGPT都没用过吧?"方小满继续说,"凭什么说工具谁都会用?"
"小满。"林知行叫了他一声。
"干嘛?"
"他说得对。"
方小满愣住了。
"他说得对。"林知行重复了一遍,"我没有基本功。"
"你……"
"我只会用AI,不会写程序。"林知行说,"我连输入为空都没想过,连超时处理都没做。这不叫基本功,这叫偷懒。"
方小满张了张嘴,想说什么,但没说出来。
两人站在走廊里,夕阳从窗户照进来,把影子拉得很长。
"走吧。"林知行说,"回宿舍。"
两人继续往前走,没再说话。
回到宿舍,林知行把笔记本电脑放在桌上,打开,盯着屏幕上的代码看了很久。
代码是他用AI生成的,然后他稍微改了改,就交上去了。他没仔细看过每一行代码,没想过每个函数的边界条件,没测试过各种异常情况。
他只是觉得,系统能跑,就行了。
但现在他知道了,能跑和写得好是两回事。
能跑,只是最低要求。
写得好,才是基本功。
方小满在旁边坐下,看着他。
"你别想太多。"他说,"答辩过了就行,分数又不重要。"
林知行没接话。
"而且你那个系统确实能跑啊,"方小满继续说,"大部分同学的系统还跑不通呢。你比他们强多了。"
"比他们强有什么用?"林知行说。
方小满愣了一下。
"比他们强,不代表我自己强。"林知行说,"我只是用了AI,他们没用而已。如果他们也用AI,可能比我做得更好。"
方小满没接话。
林知行关掉电脑,靠在椅背上,看着天花板。
天花板是白色的,日光灯管嵌在里面,发出嗡嗡的声音。和图书馆的天花板一样。
他想起昨天在图书馆赚到450块的那个下午。他觉得自己找到了一条路,一条用AI赚钱的路。
但现在他发现,这条路没那么好走。
他会用AI,但不会写程序。
他会拆解任务,但不会处理细节。
他能找到捷径,但捷径的尽头可能是悬崖。
"小满。"他突然开口。
"嗯?"
"你说,我是不是真的不行?"
方小满看着他,没说话。
"我是说,"林知行顿了一下,"我是不是真的没有基本功?"
方小满沉默了一会儿,说:"我不知道。"
林知行点了点头。
"但我知道一件事。"方小满说。
"什么?"
"你比大部分人都聪明。"方小满说,"你只是还没学会怎么用你的聪明。"
林知行看着他,没接话。
方小满站起来,拍了拍他的肩膀。
"别想了,去吃饭。"他说,"饿死了。"
林知行没动。
"走啊。"方小满催促。
林知行站起来,跟着他往外走。
走到门口的时候,他回头看了一眼桌上的笔记本电脑。
屏幕上还亮着,代码编辑器的光标在闪。
他转过头,关上门,跟着方小满往食堂走。
夕阳已经落下去了,天边还剩一点橘红色的光。路灯亮起来,照出两人的影子。
林知行走在方小满后面,脑子里还在转那句话。
工具谁都会用,但你连基本功都没有。
他不知道这句话会在他脑子里转多久。
但他知道,从今天开始,他得学点真东西了。