上个世纪 90 年代,对于信息类的学生来说,哪一门最难学?


大多数的答案可能是 C 语言或者是汇编。


为什么?
答案一:因为它是“机器语言”,非人类交流的语言,逻辑不通、语言不通,人机交流,谈何容易?。
答案二:学习“机器语言”太“费力”,费财力、费人力。学习 C 语言劳心伤神还在其次,关键是“僧多肉少”,唯一的机房,每次上机不超过 30 人,所以无论春夏秋冬,人气最高的就是计算机系的机房。

 

如今回想起来当年的情景已经历历在目:计算机的 CPU 是 286 的,操作系统是 DOS 的,上电之后是需要输入指令才能进行操作的,所以拥有一张 C 语言的启动盘,绝对是最亮的招牌之一。


C 语言,起初语法还简单,但是越来越难学:前脚刚刚把运算的逻辑理顺,接下来数组、指针、结构体,都来凑热闹,而且是混在一起使用,更是令人应接不暇;最后当学到枚举和递归的时候,才发现前面的简直是小 case。在老师的严格要求下,在助教学长们的孜孜不倦指导下,战战兢兢地提交了机考试卷,当看到现场的考评成绩是 80+的那一刻,如蒙大赦,如释重负,暗自发誓:此生不再碰 C 语言半个指头。



希望是美好的,现实是很残酷的,Flag 是很邪性的,总是向着相反的方向发展。大四选择毕业设计,80%的同学选择了设计,而自己偏偏选择了论文,选择论文也就算了,偏偏选择了一位没有见过面、没上过课的年轻博士做指导教师。


博士的研究课题很特别,分配到自己头上的课题是一个基于神经元网络算法的某类化学反应釜的数学模型的预测。拿到课题,如坠深渊:神经元是什么鬼,连题目都没读懂,如何做毕业论文呢?但是木已成舟,反悔已经来不及了。没办法,顶着大大的问号,在校期间泡图书馆、查资料,寒假在家里翻着英文字典,翻译老师布置的假期作业,所以在新学期开始的时候,总算读懂了题目:不就是用 C 语言编一个程序,解一个一阶的微分方程吗?然后根据输入变量的情况,调整相关的参数,最终实现收敛的控制。



过程明确了,基础算法明确了,编程也变得容易多了。但是时间久远,编程只记得少许语法了,于是不得不遍历了图书馆里的关于算法的书籍,重温 C 语言,在同组同学的协助下,顺利完成了基础程序的编写与调试,原以为会苦尽甘来,但残酷的现实总是向着期望的方向反其道而行之,运算的结果总是发散的。


虽然可以在实验室里暂时拥有属于自己的计算机,虽然 286 已经升级位 386,并且增加了 486 的协处理器,但是面对微分方程的运算和每次 100 组数据的处理,运算的时间是相当“可观”的——每次半小时,半小时后发现数据的收敛性不好,再修改程序、修改参数,继续运算,周而复始。对于本科生,实验室只开放半天,一个半天的时间,去掉修改程序和纠错,能够有多少“半个小时”进行“挥霍”呢?白天的时间不够用,只好晚上加班,以至于被室友猜忌。


她们一边云淡风轻地绘制着图纸,一边“调笑”:“我们的付同学进入了白加黑的模式,难道是谈恋爱了吗?”


于是一脸严肃地回答:“是的,我在和我的论文谈恋爱,我爱它,但是它不爱我。要不改天把它请到寝室来,大家开导一下?”


话音落地,笑声一片,脸上的阴云散去。

夜不能寐:论文,想说爱你不容易。


我如此辛苦,为什么你给我的结果是错误的?发散的控制模型注定是失败的!于是山穷水尽之时,导师指点迷津:如果确信自己的数据没有错误,那么不妨换个角度思考一下,你见到的未必是正确的,印刷出来的公式也可能是错误的,追根溯源,找到数学模型最原始的出处。


导师指路,立即践行。


于是冒雨跑到图书馆,再最安静的一间资料室里,管理员递过来一本比字典还厚的硬皮书,迅速地翻到数学模型的那一页,只扫了一眼,便如释重负,在原始的模型中,有一个变量的符号是相反的。


怎么办?回实验室来不及了,所以这里安静,手工计算吧。好在是带着记事本的,好在记事本里有程序的流程图,没有计算机,那么自己当一次计算机吧,选择典型的参数,带入数据,然后手工解微分方程,获取一组结果。结果出来了,不用描图也可以看到,那是一组收敛的数据。兴奋之余,踩着积水,一路狂奔到实验室。半小时之后,100 组数据在显示器上呈现出期待依旧的收敛曲线。



难关攻破了,解决了自己的难题,也解决了同伴的难题,为了快速完成剩余的任务,所以分工合作,坦诚相待,用现在的流行语来说,就是资源共享。资源共享的结果,事实再次证明:Two heads are better than one。


合作的结果也是 better:
4000 多行 C 语言代码,构建起来的数学模型几乎是完美的,两个人的论文成绩都是良好;
4000 多行 C 语言代码,构建的过程是痛苦的,但是经过痛苦的磨练,C 语言的编程通关了,以至于 4 年之后,仅凭 C 语言的优势,便敲开了上市公司研发部的大门。

 

与非网原创内容,未经允许,不得转载!