我的四年本科(软件学院)

转眼间,又回到学校了。这是在这里的第五个年头了。新的校园卡上也不写学生证,而写研究生证了。专业从软件工程转到了计算机系,眼看着任务之艰巨,回想本科四年,浪费了很多时间,悟以往之不见,知来者之可追,特此总结。

很多事情做得不如人意,其实不是能力问题,也不是技巧问题,而是一开始没有把该想的想清楚。

大一:缺目的学习

军训一个月后,大学生活正式开始。还记得第一堂课是C++,老师还没讲程序,编译器等等概念,就开始给我们讲语法,上大学之前我并没有真正接触过编程,迷迷糊糊地听了一节课后,问老师这些代码平时都在哪里,怎么运行。老师只告诉我一般用VC6.0编译,怀着好奇心,按着VC这个关键字,到图书馆找书看,上网查资料,大概清楚了平时C++编程的一般步骤,还记得当时为了标新立异,在很多同学似乎还没弄明白VC是什么(例如把装VC说是装C++)的时候,我自己去弄了个TurboC来玩,还自己肤浅了学了一下C。当时对编程感觉很新奇,很多新的术语,定义,概念等等都能引起我的关注。于是“百度”了一段时间,自认为学了很多,但其实都是模糊的认识,自己也没有意识把各个概念和领域细化,形成一个概念图,现在想起来,刚学习一个新的领域,这种总结和归纳的工作很有必要。而我当时所做的,相比起静下心来练好C++的功底,其实没什么值得自豪的。到了学期末,和一个同学花了几天时间搞了个班级网站,只是一些图片、文字的呈现,甚至没有数据库,更不用说评论、留言等功能了。完全是html+js的搭起来的。当时搞得起劲,找了个免费的空间,把它运作起来了,还把网址告诉了同学和老师,虽然是一件很简陋的作品,当时也得到了一些朋友的肯定,很有满足感。

然后就到了下学期。看书的领域更广了,甚至把矛头指向了计算机图形学还有flashActionScript,后来因为功课的密集,这个深挖的工作也就没有进行。这学期突然冒出了N门数学课,也只有好好学习了几个月。后来成绩出来,竟然非一般的高,弥补了上学期的不足,加之在学生工作方面的幸运,混了些综合加分,最后拿了还不错的奖学金,虚荣了一下。也就是这个来得有点意外的收获,为后来保研、实习等等创造了很多机会。这样,也基本就是我的大一了。

大二:思考中的探索

大一暑假到了一个亲戚的公司实习。其实没做什么事情,确切来说应该是"深度参观"。每天跟着大家一起上下班、吃饭、回宿舍。算是体验了一下工作。看到公司日常是怎样的,我们的学校里捣鼓的机器在这里又被怎样地使用,ERP系统又是用来干嘛的,其实这些都是在后来大三大四实习的时候司空见惯了,不过对于当时土包子的我来说,可称之为打开眼界。

然后就上了大二。同时也看到同学中有几个在暑假用.net做了个信息系统,感觉挺厉害的,因为到那时为止我都只会写控制台程序。于是逐渐有了个想法,想做一个系统或带图形界面能供普通用户使用的软件。跟同学交流过,知道有个叫MFC的技术。然后就雄心勃勃地一头扎了进去。当时.NET已经很流行了,为什么还学MFC?但我个人喜欢寻根溯源,从老的东西开始。我当时想,同样的是框架性的东西,学好了一个,再学其他的应该也不难吧。而且新的框架为了行业的发展需求,添加了本质以外的特性,对于初学者可能会不清晰。于是就开始翻书,看例程,旁听VC的课......不过一直感觉没入门,很多知识都很模糊,大概了解其机制,而没有深入其细节。以至于到后来绕来绕去不知道要从哪方面深入。其实,再后来才明白了我的学习方法有问题。作为一个开发菜鸟,学习一种新的开发技术,应该以实践为切入点,有明确的目标。因为如此大的架构很难在短期内面面俱到,最好在学习过程中伴随着一个感兴趣的小项目。边学习边把项目完整地实现出来,只有这样,才会对细节部分有所涉及,而且真正地在实践过程中得到深刻的体会。

这里头有个插曲。在旁听VC课的时候,老师请有兴趣的同学到他实验室做一个项目,恰好我自己也有做项目的念头,于是就兴冲冲地过去了。项目应用到OPENGL图形技术,在MFC的程序架构下做。我觉得挺有趣的,炫丽的图形也符合我当时对编写可视化程序向往。于是,又开始了OpenGL的学习。从搭建开发环境到光照、纹理、形状等具体的处理,最后跟着老师做了几个有趣的Demo。不幸的是,后来老师外调,这个过程也就结束了。仍然没有一些深入的研究。算是开开眼界吧。

也就是在这一次次的学习中,渐渐地有了一些对软件开发的印象。对于一些开发工具、开发技术有了更多直观的认识。所谓开发框架在实际应用中其实就是工具的角色。更重要的反而是基本功的修炼以及对软件体系结构的理解。

大三:项目密集时期

上了大三,开始琢磨实习、找工、读研等去向问题。当时已经打算争取保研了,能保则保。因为大一大二的成绩不错,且校内保研比例较大,所以是很有希望的。然而,成绩在我看来很大程度上只是一个标杆,使自己在探索的路上不至于偏离太远。我更希望的是进行一些实践。带着这份心情,开始了我的大三。

不久,学院那边就有个通知说有个项目需要招同学实习。正合我意。于是报名。还记得当时老师第一次见我们,在场大约七八个人吧。老师问我们有什么项目经历,有些同学举了些项目、系统等等。最牛的有个同学做一个网络相关的,TCPUDP的说了一大堆,那时候我还没接触过网络编程,就知道一些桌面应用,所以觉得“此乃神人也”。接着问到我,我只好举了了几个做过的Demo。当时真觉得惭愧。

于是,也就不肯放过这次机会啦。有空就到实验室。项目的目标是把emule移植到一个嵌入式linux系统。就几个师兄做,然后加上我们,当时第一次接触linux,第一次接触开源代码,一行行的代码一下子触动了我寻根溯源的欲望。于是就一头扎进了项目,以跟踪代码为乐。经常因为搞懂了一些协议或机制的代码实现而兴奋不已。不过好景不长,由于项目背景和管理上的问题,人员不断流失,带队的师兄也忙着找工,项目的工作也就日渐耽搁了。不过,这次经历倒是给了我难忘的体验:开源的精神、跟踪源码的乐趣、寻根溯源的快乐。

大三寒假之前,组队报名了3个比赛,相应地有三个项目。时间上有点错开,所以可以应付。

第一个比赛是要做一个web2.0的应用平台。当时只有web1.0的点点认识,看到大赛官网上的web API ,平台扩展性,附加应用等等概念都不大理解。直到项目过程中逐步学习,通过和队友们、参赛选手的交流,还有看到校内网(即现在的人人网),豆瓣API等等等等,才有了较清晰的理解。最后比赛结果是不如人意的,但我们几乎是从零开始做这种web2.0的平台,项目能在指定的时间内完成已经很有成就感了。而且,这也是我参与的第一个完整的项目,期间担任小队长,对整个web开发过程也有了大致的了解。

第二个是学院的科技大赛。我和电子系的同学合作,做的是一个基于单片机的防盗系统。过程中曾经N次想过这个项目可能要夭折了,幸好凭着组长的韧劲,最终坚持并完成了,外加一些幸运,竟然还得了一等奖!项目中电子系的同学负责电路的设计和实现,而我负责编写控制和芯片驱动程序,因为之前在计算机接口课上学过汇编,这些工作倒不是很难,难在调试方面,单片机开发没有显示终端,也不好跟踪程序,加之开发板和目标电路板之间的切换等琐碎工作,还有各种电器元件的配合,这些都跟以往PC上开发有所不同。与电路实现的同学沟通也非常重要,而且为了方便,自己也得熟悉一些硬件知识,因此,这个项目中收获也是很丰富的。

科技赛完了以后就是智能小车比赛了。这是工学院的年度盛事,融技术、实践和趣味一体,也吸引了不少外校的同学参与。我们那时候比赛要求是制作的小车能在无人干预的情况下,尽快完成大赛指定的赛道。我们小组使用超声波检测路况,根据检测结果进行调整。这也是很多小组采用的方法。我们使用单片机实现控制,我仍然负责程序部分。有了上一次的经验,这次的程序和小车都很快造出来了。而难度就在两个方面。1.控制算法。2.参数调优。第一个问题是算法。我们后来采用了控制理论里头的思想(其实也是懂了点皮毛而已),基本使小车能跑完赛程了。但过程中小车会仍然会左弯右拐,对于这个赛道来说太慢了。这主要是算法参数取值的问题。其实现在想来,可以在算法或硬件上加上些反馈,实现参数的自适应性。但当时也没想到这点,时间也有限,只有到实际赛道上,进行测试,然后根据情况和经验,手工地进行一些调整。整个过程持续了一个月左右,终于在初赛中取得了不错的名次。然后就是准备决赛了,想到我们的车子在马达,轮子等硬件上比其他车子差一些,速度上基本达到了我们的极限。于是用了一周的时间把换了一下硬件,速度是快了一些,但由于时间紧迫,程序用在新的车子上有需一番手工的参数调试。最后赶了下进度,总算在赛前完成。但由于器件多次重组,焊接方面出了问题,最后在决赛中竟然失灵了,导致我们的成绩还不如初赛。最后只得了个安慰奖。但回头想来,这种失败的尝试也是算是一种宝贵的经历吧。尝试了才不会遗憾。

就这样,在以“项目”为关键字,我渡过了我的大三。期间有些特别难熬的时刻。但这些实践确实提高了自己的能力和信心,也收获了难忘的经历和体验。从大二开始我就想做项目,这个愿望终于在大三得以实现。现在回想起来无论是高中还是大学,只要自己真正想做、在内心上认同且付诸行动的事情多半会成功的。我想,可能保持一种合适的心态,我们真的能够“心想事成”的。(实习、大四部分待续)

你可能感兴趣的:(编程,工作,算法,mfc,actionscript,图形)