我和C++ 校园篇

在十二年前, 我从高考失败的阴影中走出来, 作为计算机专业的入学新生, 来到南方一所并不知名的综合大学. 刚入学的时候, 对于我的专业, 基本上是不甚了解. 只知道是个高科技的东西, 但是它离我似乎既远又近. 印象深刻的是高考之后, 在家附近出了一间最间的"网吧", 其实还算不上是真正的网吧. 只能玩局域网游戏, 并不能联上互联网. 那是QQ还是未来之物呢. 见识了帝国时代和红色警戒, 真的是很颠覆性的直观认识啊. 之前也听说过一点编程啊, 代码之类的术语, 又觉得好神秘不可亲近. 第一次亲临计算机面前时, 面对图形化的计算机有点目瞪口呆, 和本来想象中的黑底白字截然不同. 对于光驱, 鼠标这些个新鲜玩意, 真的是又好奇, 又有点不知从何下手的感觉. 看着桌面上的内容在老生面前有如彩蝶翻飞, 真个是心潮澎湃.

不过第一次和专业有点关系的课程, 计算机基础, 给了我当头一棒. 不知道是老师真的水平太高还是故弄玄虚, 给我们这些初入大学的新生们, 大讲了一通数理逻辑, 什么与或非, 头晕脑涨, 不知所云. 真的是个下马威, 杀威棒, 立时觉得计算机专业真个有如登天之难了.

在大学一年级我开始上的第一门程序设计课是Pascal. 恐怕现在新入学的同学已经比较小接触这样的语言了. 虽然我只学了一个学期, 而且后来也没机会一直用下来, 但是给我的影响却是很深刻的. 让我理解了很多基本的程序设计与开发理念, 最简单的数据结构和基础知识. 现在想起来也很感激我的这位启蒙老师. 只记得是姓刘的女老师, 惭愧得紧, 当年一考完试就忘了人家的姓名... ... 鄙视一下自己.

但是很多问题在学习的过程中会冒出来, 现在想起来, 觉得很简单而且幼稚了. 比如为什么用main来作为函数的开始, main函数是如何被调用的. 操作系统是个什么东西? 有黑白窗口的DOS和有漂亮界面的Windows95有什么区别呢? 恐怕这些问题连普通非计算机专业, 有点计算机基础的同学也能说个八九不离十. 不过对于我们那一代的同学, 这种现象还是挺普遍的. 比如我的上铺同学, 还曾问过键盘旁边那个连着跟线, 象个馒头一样的东西是干什么的(鼠标)

不过我觉得, 有问题总是件好事,有问题说明你是在思考. 回答不出来问题, 是咱们的能力问题, 知识积累的问题. 这些可以通过努力都提高和改进的. 但是如果没有问题, 那就比较糟糕, 是态度问题呢. 对于这些问题的思考和回答, 步步上升, 才能提高自己的水平.

后来学过C语言, 老师当然讲得很神了, 比如说起了微软操作系统的核心就是用C语言来实现. 还可以和硬件结合进行编程, 它的执行效率是在汇编语言之外等等. 最高但是象牙塔中的教育, 总是难免有点空对空的缺憾, 只是提了一点知识概念, 对任何具体的说明都没有. 对我们来说, 真的是蜻蜓点水, 除了知道自己什么都不知道, 就真不知道还有什么其他. 现在想来老师的课程有点不合理的地方, C语言和数据结构是分开来讲. 而且讲语言时, 总是围绕着基本的语言特性, 比如{}有什么好处, 语句之后用;作为代码的结束符之类的内容. 这些细枝末节的东西, 如果是与实际的操作相结合, 那就上手容易得多. 说三遍不如动手作一遍. 用C语言来实践一下数据结构, 比如堆栈链表什么的, 该有多好. 而且当时已经推出了VC++6.0, 已经有了基本的类型库, 自己掌握之后, 再来比较一下类库是如何实现, 从性能和效率上来梳理自己的知识体系. 学习效果和掌握程度要高得多. 当然也许现在这么说对当时的老师也有点要求过高了, 那会儿大家面对VC++6.0都还是刚开始认识和了解, 连本好点的参考书都没有. 老师也没有能力规划得如此好吧. 还记得有老师对我们解释什么是面向对象的开发就是就是作GUI的程序, 面向过程的开发就是作命令行窗体程序.

在实验课上,我们还是用C语言总在做些输出字符串, 打印hello world之类, 只能体现思想, 但是和实际的需求没有什么关联的实验性质的程序. 功能点也是剥离的, 这样生吞活剥地学下去, 虽然也记住了不少函数, 但是没有一个实战的检验, 到底也少不了赵括纸上谈兵之后的惴惴不安.

98年刚出 VC++6.0, 当时的主流开发框架是MFC. 那时看过一个Petzald写的Windows程序设计. 记不太清楚名字了, 反正是一本很经典的C++ Windows可视化编程的书. 在那时, printf, sprintf用得还不是很熟练的时代, 对于面向过程开发, 面向对象开发还缺乏基本概念的时候, 猛然看这样的书, 只觉得天书, 天书, 还是天书. 不过也想起来一位老师对于面向对象与面向过程开发的解释, 面向过程就是黑窗体的命令行程序, 面向对象就是可视化有窗体按钮编辑框的开发. 也曾经一度深信不疑. 现在想起来, 对自己当时虔诚的信仰不免有些好笑. 不过, 我不认为这位老师说的有什么太不靠谱. 毕竟, 当时对于C++的理解, 似乎还是一个蛮荒时代, 很多后来被奉为经典的书籍还正在酝酿之中, 苛求那位老师也是不公平的. 而且我认为能在那时大家基础都近乎空白的情况下, 可以用很直观, 很形象的解释给我们建立一个基本的印象, 把复杂问题用简单的语言表述出来, 也是件了不起的事. 正如我们现在的人, 没有必要去笑欧几里得几何太粗浅一样.

当时看 Windows程序设计时, 满眼的术语和定义, 一无所知, 根本不知所云. 比如Unicode, 句柄, 函数注册什么的. 这些基本的内容没有解决, 对于整体书的理解, 就完全成了问题. 当时的学习环境比起现在来说, 是艰苦多了,MSDN ? 这是什么东西? 到百度上google一下, 更是闻所未闻. 现在回忆起来, 我们没有一个具体明确的程序语言的学习路线, 才会出现这样的问题. 先看什么, 后看什么, 有个由浅入深, 循序渐进的过程. 而当时就是核桃西瓜一口吞.

有些动手能力很强的同学, 自己买了电脑, 在VB环境下调试一下应用程序, 加加图片, 操作文件, 数据库访问, 很是让人羡慕. 不过, 也许是我个人的惰性吧, 当时有了一点Pascal和C语言的基础之后, 对于大小写不区分的代码, 风格不统一, 生成了一种天生的偏见, 无法接受. 仍然在Console窗体中, 和C语言的printf作着亲密接触.

在上大三时, 学校也开始教授C++. 不过是个选修课, 由于知识体系的继承性, 我很自然地对C++青睐有加. 不过学校里的教学方式, 不得不承认带着深厚的应试教育的风格, 课堂上对C++的解释是一堆知识点的罗列, 最多只能回答"怎么做","how to do", 而背后的因果, 结构, 为什么却是只字未提. 结果是很多人听得一头雾水, 对于我也只是知其然, 不知其何以然. 有的时候向老师提问, 还记得代课的耿姓女老师也被问得一头汗的场面. 那时深深地痛苦着, 为什么要用虚函数的继承来实现多态??? 那时的水平仅仅达到能实现功能的要求, 对于多种C++语言特性, 没有直接使用的动机, 就很难去深刻地理解它. 那时出版的关于C++的书, 实在是差劲的多, 精华的少. 现在想起来, 有些书说得不客气点, 就是在骗钱呢. 一些从MSDN上查询得到的内容, 也当作个重点来介绍. 把VC++6.0上一些基本的界面操作也连篇累牍地讲述. 无语了. 多年之后, 我的建议是, 学习C++, 只看大师. 不是说国内的作家不行, 是我认为, 看国外的大师就足够了. 等你能把国外的大师经典读明白, 你已经上了层次, 没有必要再看国内的这些C++"科普"书了. 另外就是WROX出版社推出的红皮书系列, 真是很经典. 涉及的知识面也很宽. 想起来就要顺便表达一下感谢了.

现在看到读大学的本科同学们, 无论是否计算机专业, 也基本上是人手一台笔记本电脑, 真是羡慕得命. 那时条件有限, 家里每月也就是三五百元的生活费, 除了吃饭, 买几本书, 基本上是剩余无几, 买个属于自己的电脑, 真是天方夜谭. 不过我们学校的计算机室还是很棒的. 正常是两块钱一小时去上机. 那会儿上网刚刚开始时髦起来, 很多人都去上QQ, 或者是带着光盘上机去看电影, 日剧什么的. 不过我还算抓紧, 用有限的资源一方面也去接触一下互联网这个新生事物, 一方面去写些自己的程序. 金钱有限, 所以上机编译程序之前, 要好好地作准备. 这也迫使我在行动之前, 在思想世界里尽可能地仔细地把握程序本身. 这样从另一方面带来一个好处, 那就是尽可能在上机之前有足够的问题, 在问题的驱动之下, 更有目的性. 这里顺便插入一句我对互联网的评论. 现在从网络上获取有用的信息, 比起过去实在是方便多了, 但是同时也存在着太多的无用信息. 如果大家没有一个明确的目标, 自己想清楚, 我要干什么, 我要获取什么信息就泡在互联网上时, 反而很容易被信息牵着鼻子走, 看点这个, 看点那个, 脑子跟着鼠标走, 鼠标跟着网络走. 反而很容易花了大量的时间, 却不知道自己在干什么, 甚至成了浪费时间. 我是很不赞同的. 在一开始就养成一个良好的上网习惯, 多么重要. 当然, 如果有人就是喜欢上网聊天, 玩网络游戏, 看电视剧什么的, 那就是另外一回事. 对我来说, 计算机是工作用的工具, 而不是娱乐的设备.

在毕业设计时, 已经对C++的基本用法已经有了一点心得, 在选题时, 看到很多题目都是自己不熟悉的内容, 比如当时比较时髦的ERP, 数据库, 进销存系统等. 但是觉得自己对于领域知识的了解还非常有限, 与其这时就和业务相捆绑, 还不如继续打技术基础. 这时看到有个题目COM技术的应用, (Component Object Model), 接触了一段时间的COM技术, 不过当时学习的师资水平还非常有限, 就连给我们授课的老师(只记得是姓蒋的一位女研究生), 对于设计模式的了解也非常有限. 但是类厂模式, 代理模式在COM中是如此重要, 以至于没有它们, 有些基本的COM概念就很难解释得清楚. 现在回忆起当时学COM, 其实是对自己C++基础知识中, 以接口为基本概念进行的一次重新梳理, 终于有比较直观的印象来理解C++所体现的基本三要素, 封装, 继承和多态. 当然, 这还只是当时的理解, 其实, 后面还会大幅的再次改变对C++的认识.

本科毕业之后, 我也参加了研究生考试, 很不幸, 我心仪的学校并没有接受我, 不过所幸我在毕业设计期间的表现还比较突出, 给我当时的辅导老师留下了深刻印象, 她正好也是我们学院的研究生导师, 在她的帮助下, 我又重回母校, 投入她的门下进行研究生阶段的学习. 回到一个师资力量比较薄弱的学习读研, 是件比较浪费时间的事. 不过不幸之中的万幸, 我的老师虽然在技术上没有给我很直接的指导, 但是她对我作人, 作技术的认识, 产生了很深刻的影响, 在此, 回忆起她的谆谆教导, 仍然是感激不尽. 同时老师也给我提供了一些很好的实习机会, 一个我校与日本某公司合作的IT小公司. 现在想起来, 这段实习经历对我的影响非常深远, 实实在在地在一个项目上投入, 去思考, 去反思自己的学习方法和工作方法, 为以后的工作起了一个很好的头. 同时也小小地积累了一点与同事合作的经验.

想起的一点例子就说一说. 当时去公司实习的一共有同期同学七人. 大家的想法和出发点并不一样. 比如我就比较单纯, 当时已经认定技术是自己日后的唯一出路, 所以带着很个的热情和积极性. 可是有些同学已经是工作几年, 是打算通过考研来改变一下自己的方向, 比如变成老师什么的. 还有的是立志于读博士, 走学究这条路. 还有干脆就是通过读研, 再来享受几年大学生活而已. 不同的目的, 就会反映到不同的态度和行动上. 这对于我日后反思自己的行动, 有了初步的参考.

在公司实习了大约一年半, 也结识了几位朋友, 喜欢钻研技术的同道中人. 不过当时作的项目都是基于ASP.net平台的办公室自动化还有土建的工程项目管理平台. 所以也投入了很多的时间和精力去学习.net平台, 以及在此平台基础上的相关技术, 比如ado.net, asp.net, C#等等. 在这段经历中, 我感觉到, 有着明确目标的学习, 要比为了成绩学习, 有更大的驱动力. 目的是因, 行动是果. 给我很深的感触. 而且现在回忆起来当时的学习方法, 非常学生气, 还带着分章节, 划重点这样的应试风格. 而且笔记作得非常之多, 多却无用, 大部分是抄书, 或者是技术书籍的"缩写版本". 虽然一本一本写下来很有成就感, 但是, 没有真正体会其中的意义, 简单的抄写没有什么意义. 现在这些笔记, 除了留一两本作为当年纪念之外, 基本上已经被我用作草稿本了. 呵呵.

补充一句, 别怕吃苦, 因为我上的不是什么名校, 没有很好的学历背景, 那么让自己能在竞争激烈的地方站稳脚跟, 就只能靠自己的业务能力了. 有点危机感, 总是件好事情. 不过不得不承认, 高水平的学校, 无论是知识层面还是知识宽度, 都是我们这些弱校所不能比拟的. 学校给的资源有限, 只要通过努力, 还是可以把这个差距弥补上的. 另外我也看到有名校的学生, 没有充分利用自己所处环境的优势和资源, 以至于没有把自己从高考中获取的领先优势保持下来, 这是件非常可惜的事.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值