不知不觉中进入计算机行业已有几个年头了,回首往事依然历历在目。今天我把我这几年的学习经历,体会写出来,与大家一起分享,我想其中的一些经历大家也会遇到过,而且会与我产生共鸣,并且我希望自己的一些经验与教训能对大家有一定的启发作用。了解别人的经历也许会对自己有一定的帮助作用,那么我的目的也就达到了。
这篇回忆基本上按照时间顺序来的,我尽量完整,真实的记录下自己所走过的路,其中一些我认为对我产生了比较大的影响的事情我尽量详细说明。回忆从我的大学时代开始吧。
我本科时读的学校是天津大学,我相信很多北方的学生都会知道这个学校,而很多南方的学生对这个学校了解的并不是很多,但是一提到南开大学,我相信全中国没有人不知道吧。我在那里呆了四年,我发现之所以天津大学的名气这么低主要原因还在于学校的宣传力度不够,让人一听以为是民办大学呢,开个玩笑。其实天大是近代中国的第一所大学,原名北洋大学,学校的实力还是很强的,当时我上的时候网大有一个大学排行榜,当时是排在全国第七,这或多或少能说明了该学校的实力吧。当时我考大学的时候不想离家太近(我家在辽宁),我想出去走走,看看外面的世界,因为从初中到高中,几乎大部分时间都在上学,考试中度过,对外面知之甚少,因此填报志愿的时候我就和我父亲商量,根据我当时的成绩就报了天大,这个决定至今我认为还是很正确的。
我当时的专业是港口航道与海岸工程,这个专业我相信很多人都没听过,确实我当时也不知道这个专业能做什么,不过听名字好像还不错。到了大学后感觉与高中确实大不一样了,没人管你,你来不来上课,交不交作业都没人问,主要还是靠你的自觉性,确实,大学主要还是给人极大的自由,发挥个性。由于我当时的专业特点,我们大一上学期时开了一门计算机课,是全校公共课,叫计算机基础,其实这门课就是讲讲计算机的基本东西,让大家练练word,excel操作啥的,我在上大学前几乎没碰过计算机,所以第一次上机时异常紧张,连登录都不会,我记得特别清楚的一件事是,windows登录时需要按ctrl + alt +delete,老师也说按照屏幕提示登录系统,我很认真,就在键盘上按下了ctrl,加号,alt,加号,delete,死活都进不去系统,后来问老师,老师说,那个加号是连接的意思,不是让你输入的,现在想来真汗啊!不过当时却没觉得有什么。然后就是打字的练习了,盲打根本不会,打字时全是看着键盘一个字母一个字母敲进去的,大一上学期就在这种情况下度过了,不过我当时数学和英语学的特别好,总是班里第一,这也与我的性格有关,我这个人自小就数学特别好,尤其是逻辑思维,但是空间思维很差。因此我高中时平面解析几何学的非常好,但是立体几何就比较差,因为空间的东西我总是想不明白。当时还有一门课叫画法几何,主要就是训练人的空间思维,当时学的就非常差,尽管也努力了,而我有的同学基本不怎么复习,但是考试成绩就是很好,人跟人不同啊,我还是踏踏实实的按照自己的路线走吧。
大一下学期时我们开设了第一门计算机课——Fortran,我想现在很多学生都不知道有这么计算机语言吧,其实Fortran是世界上第一门高级计算机语言,历史要比C悠久。因为我当时的专业工程专业,而Fortran在科学计算上表现是最好的,所以我们专业都会开设这么课,当时这门课的学习可以用惨不忍睹来形容,我当时的脑袋完全不能理解计算机的工作方式。我们去机房上机的时候,老师说带上软盘把程序拷回来(当时还没有U盘,都用软盘拷东西),我就花两块钱买了一张软盘,结果我就是不知道软盘应该插到那里去(也没人告诉我软驱在哪啊)。后来问了一下宿舍的同学,解决了这个重大问题。当时觉得他好强啊,老师不说就知道软驱在什么地方。考试的时候基本就靠的死记硬背,结果还考了80分,就这样大一生活就结束了,整个学期的成绩,我排在班里的第一名,之所以这样是因为我其他课的成绩很好。当时也得了几百块的奖学金,到这个时候我还没上过网,因为我们机房不能上网,所以我也不知道怎么上,其实也不明白上网到底是个啥意思,迷迷糊糊中迎来了大二,那个时候是2000年。
大二以军训开始,天大有个传统,军训不是在新生刚来时进行的,而是在大二时进行。然后又是上课,下课,吃饭,我过的简单而不单调,我这个人喜欢踢球,经常和同学去操场踢球去,现在工作了很少有时间踢了,挺怀念那段的时光的。在大二下学期时我到隔壁宿舍闲聊,看到我有一个同学看着一本书,叫《C程序设计》,就是那本非常著名的C语言教程,作者是谭浩强,我相信很多人都知道该作者以及这本书,我问他这是什么书,他说他准备考计算机2级,我当时对这个考试完全不了解,回去后问了别人才逐渐明白全国计算机等级考试是怎么回事,这主要是面对非计算机专业的学生举办的一个计算机考试,用来测量应试者的计算机能力,现在还有一些城市要求毕业生具备计算机等级考试证,我知道上海就是这样的。也是在这个时候,我们宿舍买电脑了,我们宿舍七个人,大家一起凑钱买的,很清楚的记得内存是64M,这在当时已经不算很低了,我有的同学还在用32M呢。当时买电脑时大家都信誓旦旦的说要学习,可是没过几天承诺都不知道跑哪去了,整天就是上网,打游戏,看电影。我相信这也是现在很多学生的生存状态,买电脑的初衷是好的,可是自己抵抗不了游戏的诱惑,慢慢的陷了进去。
当时那个准备考等级考试的同学成绩不是很好,我就在想他都能考,我为什么不能考呢,于是我也买了书,报了名,天天去教室自习,看书。这其实也犯了一个大忌,计算机的书要看,但是一定要操作,光看不做的话没几天就全忘光了,尤其是刚刚接触编程的人来说更是这样,一定要多练,尽快熟悉程序的运作方式,有时候你看了一天,也不如自己上机一个小时来的效果好。当然我不是说看书不重要,相反,看书非常重要,但是看与练一定要结合起来才能达到最佳效果。我当时还是沿用了学习数学,英语的学习方式,天天在教室呆着,只要没课我就自习。终于考试的时间来了,计算机等级考试分为笔试和上机两部分,结果我那部分也没过,白白损失了80块的报名费。其实现在想想当时没过实在是太正常了,因为当时光学习c语言的关键字就用了好久好久,现在想来真是有些可笑,我当时都把那些关键字死记下来,包括每种类型可以存储多少位,都记下来了。其实在学习一门语言时,对于语法这部分一定不能死记硬背,这个时候最好上机练练,多写一些简单的程序,有时候你写一此基本就不会忘记了,但是如果不写光看的话可能当时记住了,过后也很快忘掉了。
大二也就随之过去了,这时我挂了一门课,叫材料力学,当时我非常痛苦,因为我的成绩一直在班里都非常好,而考试不及格是不敢想象的。后来我明白了,我之所以不及格不是我不努力,而是我确实不喜欢学,我并不喜欢这个专业,我发现我对计算机有着强烈的学习冲动,也就是在这个时候,我做出了一个重大决定,我要考研,而且要考计算机,这个时候刚刚大三。要知道我对计算机可是没什么基础的,仅仅凭借计算机等级考试产生的兴趣就要考计算机系的研,别人都说那简直是不能的事情,人家计算机系的学生也不是随便都能考上的,你哪有啥希望啊。可是我这个人一旦做出了决定就不会轻易更改,而且这也是我为我自己的人生做出的第一个重大决定。我打电话与家里说了,我父母对考研都不是很了解,不过他们都说不管你做出什么样的决定我们都支持你,让我们非常感动,也认识到自己已经长大了,应该为自己的人生好好规划了。
这时我再一次报了计算机等级考试,不过这次我直接报的三级(全国计算机等级考试共四级,可以跳着报,而不用一级一级报),但是这次我依旧没有过,而同时我也在旁听计算机系的课程,自己也买了很多资料在看,从离散数学,数字逻辑,计算机组成原理到计算机系统结构,数据结构,操作系统,C语言程序设计等,我几乎全部自学。我上大学最大的两个收获就是:决定了自己的人生方向,掌握了自学的方法。这时我开始经常逃课了,但是我逃课不是玩,也不是睡觉,而是去学我感兴趣的东西。考研是艰辛的,也是痛苦的,尤其对跨专业的人来说更是如此。我们很多同学也考研,但是大多数还是考本专业,并且倔强的这个时候再一次报考了全国计算机等级考试,这次我报的是最高级别—四级。其实这个四级还是有些难度的,考试的范围也很广,基本上计算机的所有主干课程都要覆盖到,我也边准备考研边准备等级考试,功夫不负有心人,这次我通过了,当时真的特别开心,因为这给予我很大的自信心,要知道人的自信心是可以被残酷的现实逐步瓦解的,也会被成功的喜悦建立起来的,而我在那个时候最需要的就是这种信心了,当时我同学也都相信我了,他们相信我能成功。
这里还要说明一点,我报考的学校并不是天大,而是上海的同济大学。并不是因为我不喜欢天大,相反我对天大是非常热爱的,现在也是这样。之所以选择外校是因为我对天大太熟悉了,学校对我来说一点陌生感都没有,而天津这个城市相对来说也有些落后,所以我决定走的远一点,但是学校的选择也是个问题,总不能考个比天大差的学校吧,因此我选择了同济,两个学校实力应该差不多,但是同济地处上海,有更多的机会,可以吸收到更多国际化大都市的气息。
在经过了漫长的考研复习,彷徨,焦虑后考研的成绩出来了,我上了复试线。而我很多同学都在考研的准备中相继退出。4月份我只身一人来到了上海,参加了复试,在复试的三天后,我给学校打了电话,得到通知: 我复试通过了!
当我从电话那头得到这个消息时,整个人都有些颤抖,我还是不太敢相信,所以我和电话那头的老师说,您能确定我通过了吗,老师笑着说:我能确定。这一刻,我彻底释放了。一个非计算机专业的学生依靠着自学跨校跨专业考研成功了,这对于我来说是一个极大的挑战,但是我勇敢的接受了这个挑战,并且成功了,我这个时候相信这个世界没有什么能难倒我的了。也许有人说,不久考个研吗,有那么激动吗,我想说我这里的感受完全代表我自己,不代表其他人,因为我认为这个事情对于我来说是很有成就感的,也许有的人觉得并没有那么困难,每个人不同嘛。
在复试后的几个月里,我想靠自己的努力挣钱,不想向家里再伸手要了,而且这个时候时间也比较充裕,所以我开始想找一个计算机方面相关的事情,但是自己动手能力太差,考研时完全都是学习理论,自己很少动手,很多东西也是在纸上画的,基本没写过什么像样的程序。所以我先找了家教的活,然后又在街上发传单,当时发传单的时候我就想锻炼自己一下,让自己脸皮更厚一些,而且当时发传单的是卓越网(http://www.joyo.com,后来被亚马逊收购了),是国内很大的一个b2c电子商务平台,在这个过程中也了解了人家的一些工作流程,我想不管做任何事情,只要你用心去做,认真去做,肯定能有收获的,就这样几个月的时间过去了,这几个月的花费我是靠自己挣来的,没管家里要,经过了流火的7月,大家都离校各奔东西了,我也知道我的新生活即将开始了!
9月份,我再一次来到了上海,这是我第二次来上海,第一次是来面试,这次是来报道的。几天的调整后,新学期开始了,看着发下来的课程表,我感觉兴奋异常,因为这不再是我以前专业的那些课程,什么结构力学,弹性力学之类的,而是高级面向对象程序设计,Linux高级程序设计,Arm嵌入式系统等等,我当时想我一定要努力学好每一门课,大家都知道研究生课程是按学分来的,只要学分够了就行,我当时为了要学好,将我们一学期所有的课全选了,开始还很兴奋,没过几周开始吃不消了。为什么呢?因为自己底子太薄,一下学这么多课根本学不过来,还搞的特别疲惫,所以我就和我要好的同学沟通了一下,他给我一些建议:学习自己感兴趣和以后准备从事的课程,对于一些不准备涉及的领域就不要去学了,计算机技术这么多,什么都学是不现实的,所以我当时根据自身的情况和能力,选择企业计算这个方向,因此将所有的嵌入式课程全部放弃了,现在想想,当时的决定真的是非常正确的。这也给我一些启示,对于计算机领域的技术,切不可盲目的学,因为技术是学不完的,一定要找准自己的方向,将某一个方向学好,学精,这就够了,在学精某一个方向后再去涉足其他领域会容易的多。换句话说在起步或者积累阶段,找准突破口扎进去,切不可浅尝辄止。就好象现在的J2EE与.NET,其实你学好哪个都够用了,除非公司同时要求你会两样,一般来说对于绝大多数公司,你只要对其中一个掌握比较深入就足够了。
上学期基本都在教室与实验室度过的,在这个时候我买了电脑,我没管家里要钱,是向其他同学借的,当时是4000多,配置还算不错,我想用这个电脑为我带来效益。到了研一下学期课程已经很少了,我也尝试着在外面找一些兼职,我的运气还比较好,第一份简历投出去就被人看中了,之后叫我过来面试,问了一些技术上的问题,当时感觉答的一般吧,毕竟实际经验还太少,后来公司给我打电话说录用我了。我后来与公司的项目经理聊天谈到这个面试,他说主要是看中我比较有潜力,学习能力比较强,对于不会的东西很快就能学会,而不是因为我当时技术有多好,其实当时技术说实在的还是很菜的。
这个公司是个小公司,但是项目经理非常强,技术,设计都做的非常棒,我来的时候他们刚刚接下了一个项目,是柯尼卡—美能达公司的经销商管理系统,需要用struts,当时struts在国内刚刚兴起,资料还非常少,我对struts的了解也仅仅局限于一些概念,但是项目不等人,我只能硬着头皮上,费了好大劲才把一个流程调通,当时的第一感觉就是哪个蠢货设计的这个破玩意儿,一个jsp或者servlet就能搞定的东西怎么要绕那么大弯子?又是ActionForm,又是Action,还要配置那个xml文件,真麻烦,可是随着项目的不断深入我越来越体会到struts给我们项目带来的好处了,模块划分清晰,代码组织良好,便于团队开发。这个时候我也开始系统的研究struts了,发现做的真是好啊!在这个项目中我学到的东西非常多,也积累了人生中第一份宝贵的项目经验。现在很多毕业生都说我们刚毕业哪来的工作经验啊,而招人的企业说没有工作经验的毕业生我们不要,除了少数大公司如Google、Microsoft等,非常看重应聘者的潜质外,国内很多中小公司还是希望毕业生去那就能干活的。对于这个问题我是这样理解的,公司的要求没错,有经验的与没有经验的真的就是不一样,这一点我体会非常深刻。这种不同不是体现在技术上,更重要的是体会在代码规范,对业务的理解,对常见问题的解决等等。因此我想对那些在校生说,少玩一会游戏吧,把你的精力放在正确的事情上去,不要等毕业时才追悔莫及。我这里建议在校生多利用假期的时间出去闯闯,尽自己最大努力去公司实习,或者兼职,赚取工作经验,这时,钱并不是最重要的,你获得的能力与技术上的提升才是最重要的。
在这个公司呆了几个月,公司对我也不薄,我很快就将买电脑的那4000多块钱还了,这也是我第一次挣这么多钱,有些激动!
之前的那个柯尼卡—美能达公司的经销商管理系统做完后,我对struts的认识也比较深刻了,这时公司又接到一个项目,是做一个游戏点卡的销售网站(项目本身不复杂),客户要求要采用ASP.NET来做,项目经理对我说希望我能负责这个项目,我当时真是受宠若惊啊,从来没有负责过一个项目,但是最大的问题是我对.NET一点也不了解,从来没用过,我能做好吗?而且项目周期只有半个月,我这个时候已经没有了退路,只能往前冲了,那个时候很是疯狂,每天都在公司呆到很晚,一边做一遍学,一边学一边做,半个月过去了,项目竟然让我顺利完成了(当然了,这个项目本身是个不大的系统,否则即便打死我也无法在这么短的时间内完成),我不敢说自己完成的有多好,但是在这么短的时间内完成还是让我很自豪的,公司的项目经理也对我很满意。通过这个事情使我认识到,人有时候是需要一些压力的,适当的压力更可以激发人的动力,但是压力不可过大,否则人就容易被压坏。
这个项目完成后,正好是暑假了,我也想回家了,我这个人还是比较恋家的,基本每个假期都要回家呆几天。
等我从家回来时看到还有一个公司在招聘兼职,而且做的项目也比较大,我就去了,很幸运,有一次通过了,我想幸运是一方面,更重要的还是自身的努力吧。可能有人会说我怎么没有呆在之前那个公司呢,我主要是考虑现在是兼职,想多接触一些东西为以后的就业打下基础,而之前的那个公司的技术框架已经很熟悉了,在呆下去学到的东西有限,所以就离开了,当然公司的领带还是很希望我能留下的。
来到了新公司,这个项目是上海市公安局治安管理系统,采用的技术架构是struts+hibernate,当时hibernate在国内用的也不是非常多,所以我还是比较早的接触了该框架,这个项目规模非常大,业务逻辑非常复杂。也就是这个项目让我学到了最多的东西。这个项目干到了一半时,项目经理走了,而在公司里面我对这个项目是最熟悉的,无论从技术层次还是从业务需求来说,所以公司领导希望我能负责完成这个项目,这是我第二次负责一个项目,而且这个项目也是一个比较大的项目,自然感觉到肩上的担子更重了,自己也去客户那里谈需求,回来做设计,当时真的感觉每天都非常忙, 但也非常充实,这个时候也是我技术能力提升最大的阶段。经常加班,晚上有时候就在公司睡了,因为当时只有一个念头,一定要把这个项目完成好,经过半年多的努力,这个项目终于顺利完成了,项目中Java类的数量有400多个,jsp页面有300多个,数据库表有30多个,事后想想自己也真强,这么大项目在自己手上完成,真的好有成就感!
我自我感觉我这个人表达能力还是比较强的,在这其中我在上海的不少培训学校担任过培训讲师,主要讲J2EE方面的课程,还给不少公司做过企业培训,比如西门子(上海)移动有限公司,上海华腾软件系统有限公司,浙江人本集团,贵州电力系统有限公司等等,在这期间自己的技术又得到了很大提高,而且表达能力也不断加强。因为你自己会一个东西不难,难的是给别人讲出来,还要讲明白,要将复杂的技术讲的浅显易懂。这期间,我在这方面的能力得到了加强。
其实在上研的2年半时间里,我的很多时间是在外面度过的(当然,这与导师的支持也有莫大的关系),自己也确实做了很多事情,可以这么说,计算机系的学生用了4,5年时间学的东西,我用了2年多,而且掌握的还非常扎实,无论从理论的细节,还是宏观的架构,都有一定的积累。这其中的艰辛只有我才能体会到。每个人都不笨,智商也都差不了太多,决定你是否能够成功很大程度上在于你的努力和付出,我是一直坚信这一点。在公司里面时我也发现了很多问题,那就是现在社会上很多都太浮躁了,都太急功近利了。无论学什么都浅尝辄止,不想去深入研究,拿我之前的第一个struts项目来说,其实我从用struts到最后掌握,花的时间并不多,只是由一般的jsp,servlet到struts的过度开始让我不太适应,不过这个阶段过后,后面就一马平川了,为什么这样呢?因为我之前jsp和servlet以及http协议与原理性的东西掌握的很好,这些都是最最重要的基础,可以说任何web框架都是构建在这上面的,有了好的基础再去学习其实会很快的,而且也不会觉得特别困难。但是这些基础的东西是不会给你带来直接的收益的,他们的作用都是隐性的,会在你不知不觉中给你带来帮助。真的是这样的。就像现在很多人上来就struts,hibernate,spring,然后会发现这些东西好难,其实并不是这些东西难,而是你该有的基础还不具备,比如很多人连HttpServletRequest是什么都不知道,request与session是什么关系也不知道,request.getParameter与request.getAttribute也不清楚是什么区别,这种情况就去学那些优秀的框架无异于高中数学还没学就去学高等数学一样,也许你能看着别人的例子自己照猫画虎的做出来,可是一旦让你自己去做你就无法下手了。为什么这样呢?还是基础不行的缘故。甚至有很多人连最重要,最基本的HTTP协议都不了解就敢作项目。所以在这里我希望这些人能静下心来好好学一下基础的东西,原理清楚了再去学习高级的东西是水到渠成的事情。
不知不觉到了找工作的时候了,自己也和很多同学一样每天去笔试,面试到处的奔波,还好我的找工作也还是比较顺利的,签下了理光软件研究所,后来又有cisco、hp、中兴、博朗等公司邀请我去面试,也都被我婉言谢绝了。
不知不觉中写了这么多,也很感谢大家能耐着性子坚持看完,最后我给大家提一些建议,这些建议都是我的切身体会,未必适合每一个人,但是只要能对大家起到帮助的作用我就满足了:
基础的重要性。我总是不断强调基础的重要性,因为我是有切身体会的。基础的东西可以让你受用一生。有了好的基础会让你学习新东西更快,也更扎实,走的也更远,否则你永远都是在跟着别人的脚步。
还是基础。我们都知道Spring是非常优秀的框架,也是很多公司采用的技术选型。但是你是否真的了解Spring的核心IOC与AOP了吗?适当看些设计模式的书会让你受益匪浅。其实你只要掌握了java的动态代理与字节码生成技术对于AOP的理解就是自然而然的事情了。
舍得投入。 有时间的话买些书看看,好书可以让你系统的学习一些技术,而不是一些支离破碎的技术点。
抓紧时间。将游戏的时间控制的少一些,把精力放在学习上吧,如果你想投身it行业,做好不断学习的准备
要有激情。 没有激情的人生是惨淡的人生。生活和学习要有激情,否则你体会不到淋漓尽致的快乐与苦痛。
要有耐心。 没有耐心是无法成为一个优秀的程序员的。其实写程序的时候大部分时间是与错误,异常相伴的,不要幻想一下就能将程序写对,优秀的程序实际上是不断重构的过程。
要能耐得住寂寞。 很多时候我们都是与计算机为伴的,如果你没有对程序的兴趣与热情,时间长了你会坐不住的。
英语的重要性。如果你想进外企的话,那么英语是必须要过的一关;对于英文技术文档的阅读与理解力也是特别重要的。
最后一点,坚持学习。活到老学到老是对程序开发人员最好的描述。
以上就是我的一些学习感悟与走过的路,希望与你共勉!(完)