|
两次参加数学建模比赛
7.两次参加数学建模比赛
2003年9月,我和Sunny,Cherry参加了全国大学生数学建模比赛,Thunder是我们的教练,之后于2004年2月,我们又参加了全美大学生数学建模比赛.这两次比赛,我们分别获得了一等奖和二等奖,可以说成绩还算不错.但是,它的意义并不仅仅在此.
数学建模比赛注重的是过程,而不是结果.这个过程是一个科学研究过程的缩影.我们从拿到一道题目,分析问题,提出若干个切入点,考虑要使用的数学或者其他知识,之后,大家开始在各大搜索引擎和检索引擎上检索这些领域的论文(其中不乏英文论文),分头阅读,相互讨论.通常对于一个给定的问题,或多或少都有一些与之相关的论文,而我们就在此基础上,结合其他的方法和思想加以改进,提出新的方法,并且加以评价.在整个过程中,要使用数学手段和计算机完成数据处理,曲线拟合和数值分析,统计归类,甚至编制计算机程序完成反覆地计算.这些都是在科学研究中非常普遍的方法.建模的最后一步是完成论文.这个论文虽然不是严格意义上的学术论文,但是架势却一点也不亚于它.包括目录,摘要,问题阐述,模型假设,概要分析,详细建模,模型验证,有缺点讨论,参考文献,一项也不能少.我们全国赛的论文接近一万字,美国赛则有八千多词,都有三十多页,今天看来,在3天的时间完成似乎是不可想象的事情,可是我们真的完成了.在这个过程中,我们也学会了怎样撰写论文.
而在另一个侧面,数学建模比赛的意义则更为深远.它教会了我们怎样处理团队合作中遇到的各种问题.在建模比赛的3天里,分歧几乎是随时都有的,但是,一旦大家闹了别扭,固执己见,无疑对比赛不利,怎样处理个人与集体的关系,怎样避免庸俗的小风头主意和个人主意,在这里似乎是说起来容易做起来难;另一个方面,如果对于一个问题长期没有思路,大家都会焦躁,在一个高效的团队里,队员之间不会互相埋怨,互相指责,而是齐心协力,共度难关,同样,这些也是说起来容易做起来难;最后一点,比赛的三天里,后面两天几乎是通宵不睡,白天接着干活,这对大家都是体力和毅力上的巨大的考验,忘我工作,大公无私,为他人着想,在这里就是巨大的精神动力.这几点似乎从小学开始就天天挂在嘴上,可是,我真的在那两次比赛中才得到了深刻的体会,而我们三人也结下了深厚的友谊.
参加过数学建模的过来人说:"三天的比赛会让你终生难忘",我觉得一点也不夸张.
8.阅读 <>
大三上学期,我听了熊悦讲师的操作系统课.他是中国科大少年班毕业,后来读了博士,思维非常活跃,而他的课上,也首次使用了全英文教学,使用的课本就是美国著名学者Abraham Siberschatz的 <>.我大一时候就曾经尝试看英文教材,当时看的是Papadimitriou的 <>,无奈本身计算理论的内容就够艰深了,还用了英文看,显然困难重重.一直到大三上学期学习操作系统时, <>称为了我第一本从头至尾完整阅读了的英文教材,从此也就开始阅读了大量的英文经典教材.
看英文书,最直接的受益就是英语水平.外国人写书的风格是"娓娓而谈",以聊天一样的亲切口吻展开,把每一个英文句子翻译成中文理解是不现实的.所幸的是我以前英文水平并不烂,而学OS时这本书由偏偏没有中文译本,老师的课件又完全按书上来(也是英文的),这就把我给逼上梁山,非看不可了.一个Chapter一般有三十多页,而老师几乎是一次大课上完的,晚上就不得不在教室里,花上4个钟头把书仔细看一遍.开始看得特别慢,看了3,4页以后就没办法集中精力了,可是,慢慢地,看书时候开始使用英文思维了,直接使用英文理解书中的内容而不是先翻译成汉语了,甚至笔记也开始使用英文作了.有一天,连续看了2,3个小时没抬头,那种感觉特别奇妙,好像头脑里的东西都编程英语的了.我慢慢地感到什么叫做掌握一门语言了.可是,自从那时以后,室友开始对我提意见了:"你怎么说梦话还用英语啊!"我感到很不好意思.
英语水平得到了巨大的飞跃,应该就是那个时候.我觉得自己正在慢慢地与这门外语开始了亲密接触.以至于后来做考研阅读,完型填空时,往往总是"蒙"对正确答案.我没有办法清晰的解释清楚,只是觉得这个答案理所当然的应该选,其他答案理所当然的荒谬.确实,看懂一篇文章与理解一篇文章的差别是很大的,而怎样准确的"理解",则要依靠长期培养出来的语感和英语思维.
这件事的另一个巨大影响是:从此以后,阅读英文教材就一发不可收拾.计算机科学方面的英文教材国内引进的非常多,很多是享有世界声誉的大科学家的经典之作,写得相当精彩.在英语上障碍的扫除使得我可以进一步阅读这些教材,包括Andrew.S.Tanenbaum的 <>, <>,Abraham Siberschatz的 <>, <>,Alfred Aho的 <>,Stuart Russell的 <>,这些书让我对计算机科学的专业知识有了深入系统的认识.
英语水平的提高对于我后来阅读很多英文论文起到了至关重要的作用,深刻感到学好英语的作用.没有扎实的英语水平,真的是寸步难行!
9.用实践的方法对待计算机科学
计算机科学是很注重实践的科学:但是,这并不因为这计算机科学专业的学生就理所当然是程序员.我并不是从一开始就认识到这个问题,但是,这种注重实践的态度却非常有助于我掌握许多课程.大一的时候,我曾经在网上查到过MIT,Stanford,CMU等国际名校对计算机专业本科生的培养计划,真是大吃一惊:他们在学习计算机原理时,要自己设计一台逻辑计算机,自己完成CPU设计,总线设计,存储器设计,I/O设计,甚至制作集成电路,几乎就是自己造一台计算机;他们在学习编译原理时,要自己完成一种语言的完全编译器的开发,一直生成到目标代码;他们在学习操作系统时,要自己开发一个full-functional OS,在学习计算机网络时,要编写程序实现某些协议.这个打击使我认识了一个问题:什么叫实践能力?不是攒机,不是做花哨的网页,不是做吸引人的Windows程序,所谓实践能力是把理论运用到实际中的能力.今天我们所津津乐道的"实践能力",实际上是一批技术工人的能力.
似乎这是当代中国高等教育,尤其是计算机专业高等教育面临的重大危机.所幸的是我对此有了一点想法,并且特别注重培养自己.当然,这种培养只是相对大多数人而言自己多做了一些事情.我在掌握了VC++之后,这一切就可以开始了.在学习数据结构时,我完成了从线性表到图的所有数据结构的定义和算法的实现,做成了一个迷你型的Template Lirary,虽然有一些Bug,设计上也未必灵活,但是确加深了我对DS的认识,提高了设计大型程序的能力;在学习计算机组成原理时,我一丝不苟地设计微指令,编写微程序,和我的组员一切把一个有一千多个0,1数字的指令表通过数字开关打到ROM中,现在想起来也真是后怕;在学习编译原理时,我阅读了PL/0解释器的源码,并且自己完成了C-解释器的设计和实现;学习操作系统时,则完成了部分对nachos操作系统的完善工作,最重要的是阅读了MINIX的源码.操作系统是一门理论极难与实际联系的课程,许多人学完后对OS仍然认识模糊,所幸的是,这些努力使得我的认识要比他们深刻一些.
这里要感谢我们专业对学生这种实践能力培养的重视.老师会布置大家完成大程序,大作业,只要你自己认真自觉的完成,实践能力就可以培养起来.但是,很多同学对此都不以为然,盲目追求考试成绩而忽略实践能力,实在是得不偿失.
10.学习并且掌握了Visual C++ 6.0
虽然很多人对Microsoft推行的东西总是带着一点不屑,我却在大一对计算机科学的认识还很模糊的时候学了它.直到现在,我周围的同学中,能熟练使用VC++6.0的人并不多,这并非是因为大家对微软的东西的抵制,而是因为很多人学不好VC++6.0.事实上,完全掌握它并不是很容易的事情.
我学习VC++6.0也颇费周折.学校不开这门课,只教大家PASCAL语言,所以,只好自己自学.那时候了解很少,以为不学C,C++,直接看VC++也没问题,结果花了65元买了一本 < <实用Visual C++6.0教程>>,却看得一头雾水.慢慢才知道,VC++6.0不是一种语言,而是一个IDE.郁闷之余,只好又从C,C++学起.几个月之后,C++已经用得比较熟练了,开始再看这本书,却还是一头雾水.因为使用MFC类库,AppWizard辅助编制的程序完全不同于使用C编写的面向过程的程序,也不同于C++直接编写的面向对象程序,我对这种程序的机构完全摸不着头脑.一时间真是郁闷至极:难道65元就这么白费了吗?(那时候以为65元一本的计算机书很贵了,后来才发现,这种价格实际上是很平庸的.)
一个偶然的机会,看到了机械工业出版社的 <>,随便翻翻,却发现它讲的内容与我原来那本 < <实用Visual C++6.0教程>>大不相同.它从WinAPI讲起,讲基本的消息队列和消息发射,讲窗口的定制和注册,我才首次知道Win32程序与控制台程序的区别.现在虽然觉得这个"豁然开朗"简直幼稚得可笑,可自从学习了WinAPI编程,再进入MFC,就顺理成章,水到渠成了.在以后开发中也逐渐学会了自己看MSDN文档,也再也不用花那么多钱买技术方面的书了.受此影响,在学习其他软件如Matlab,Mathematica时,也学会了直接利用帮助文档学习,真是省了不少银子.今天看到很多人围在图书城那些花花绿绿的书架边乐此不疲的时候,不免心生得意.
Visual C++6.0的掌握,最重要的价值在于实现了许多程序员的一句话:"编程语言不用学太多,学一两个,能彻底掌握就好."学习了VC++之后不久,我又看了一些J2EE方面的书,可是由于周围环境的影响,使用VC++较多.由于VC++使用很熟,许多课程设计都得以顺利完成,从而得到了大量的编程训练,提高了系统分析设计,程序调试方面的能力和技巧.这些对于一个计算机专业的学生来说,是最基础不过的事情.但是我发现很多人这方面的基础都很不扎实.
今天我使用VC++设计完成的Windows工程已经有二十多个,包括数据库课程设计完成的图书管理系统,操作系统课程设计完成的多线程调度演示系统,编译原理课程设计完成的C-解释器,计算机网络课程设计完成的多人聊天室程序,以及人工智能课程设计完成的刺激-响应Agent,8字谜问题,人机五子棋博弈程序等等.
结论:你可以抵制微软不学习Visual C++6.0,但是你必须熟练的掌握一门具有现代程序设计特点的编程语言. |
|