Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1652362
  • 博文数量: 1481
  • 博客积分: 26784
  • 博客等级: 上将
  • 技术积分: 17045
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-12 09:22
文章分类

全部博文(1481)

文章存档

2014年(10)

2013年(353)

2012年(700)

2011年(418)

分类: Web开发

2013-06-24 11:30:39

2013年4月5日,来兄弟连的第196天,课程已进入尾声,但是人生还有很长的路要走。回顾这半年多的经历,确实有很多话想说,如果你是刚刚走到Java门口的兄弟,不妨听听我的心声。
        让我们先从一个经典的小故事开始:
        有三个人在工地上砌砖,问他们同样的问题:你在干什么?第一个人说我在砌墙;第二个人说我在建设一座大厦;第三个人说我在建设一座城市。据说后来这三个人的成就与他们的梦想大致相当。
        同样一件事情,在三个人心中有着本质的不同,从而决定了他们努力的方向,和发展的空间天差地别。
        刚刚走到门口的兄弟们,我们不妨想一想,我们学Java是为了什么?是为了做Java程序员,还是以Java程序员为入口,进入互联网行业。眼界的不同,会决定我们思考问题的方式和努力的程度。所以作为站在Java门口的兄弟们,首先要考虑的是自己职业规划的问题。不是要不要做Java程序员,而是要不要进入互联网行业,只有明确了这一点我们才不会在潜意识中束缚自己,才不会在将来与很多机会擦肩而过时还没有建立起敏锐的嗅觉。当然,这个问题只能由我们自己来回答,因为任何一个行业都没有好与不好,而只有适合与不适合。但可以肯定的一点是,作为我们这些没有任何背景的普通人,想通过职业生涯的发展逐步改善自己的生活,基本上都需要在一个相对固定的行业中慢慢积累,包括技能、人脉、资历等各个方面,不管是打工还是创业。也就是说,大跨度的转行会导致你在之前行业中的积累烟消云散,跨行之前你一定要想清楚自己是否真的要从零开始。但反过来,如果你愿意从进入这个行业的那一天开始,踏踏实实的努力,点点滴滴的积累,热情的与人分享,时刻展现自己积极的心态,并持之以恒的坚持下去,互联网行业还是非常欢迎你的加入的。因为总体来说这里需要的是真才实学,这里尊重的是踏实努力,是一个有望通过自己个人的努力改善自己生活的行业,同时她也是一片广阔的天地。但是这里再好也不可能是一个遍地黄金俯拾即是的地方,需要我们努力,需要我们有思想,而且首先我们要喜欢这个地方,需要对她有所了解。
        好的,如果我们现在已经燃起了如火般的热情,明确了自己未来大致的方向,并充满信心,那么我们进入下一个问题:以Java程序员作为互联网行业的入口是一个好的选择吗?可以肯定的说,Java在业界毫无疑问是一个被仰视的存在:在服务端能够提供稳定、健壮、高效的企业级应用支持,以云计算为发展方向;在客户端,随着移动互联网的突飞猛进,安卓系统一路高歌,在移动终端上的占有率超过70%,如果将来手机和平板电脑逐步取代传统终端,整个互联网行业将掀起一场新的变革,微软在客户端市场中的霸主地位将受到严峻挑战。但是对个人而言,随着技术的不断发展,Java程序员入门的门槛也是越来越高,现在和十年前相比已不可同日而语了,将来也只会更加严格。也就是说,更大的发展空间其实是来自于对从业者更高的要求。当到达一定程度,工作内容与使用什么语言关系不大的时候,Java背景的开发者能表现出更优秀的专业素质和更强大的思维能力。行业的发展为我们提供了展翅飞翔的广阔天地,而达到什么高度就完全靠我们自己了。在这里,作为一个基本上已经全程经历过兄弟连Java课程的人,我可以负责任的告诉大家:完成从零基础到达到企业用人标准的全部课程,只要你用心就都能学会,而且会掌握的很好,很扎实,没有任何问题。说到底,作为通过了入学考试参加培训的所有人来说,决定我们学习成果的唯一因素,就是我们在全部过程中所保持的学习状态,没有别的。六个多月的时间,和身边的兄弟们一起经历了许多痛苦与欢乐,真真切切的看到了许多人的进步,许多人的落后。在看似短暂,其实漫长的旅途中,谁能够用一天天,一夜夜最平凡无奇的坚守走到最后,谁就是成功者。所以我们有必要在探讨学习方法之前分享一些我个人总结出来的铁律——每一条都很重要,排名不分先后,且彼此之间绝不矛盾:
        1.学Java不吃苦肯定不行,但是光吃苦肯定也不行,效率天大
        2.熬夜,或者说学习时间长本身不等于努力,不能用学习时间的长短,甚至在教室停留的时间长短来衡量学习状态;但反过来说,学习任何一门语言都不可能一蹴而就,真正努力的人会把大量的时间用在学习上,这并不矛盾。所以最最关键的因素是你是否真的努力。那到底怎样才算努力呢?说真的,这个只有你自己知道,所有外在的表现都证明不了你努力了,因为这本来就不是做给别人看的,当你真的把心思放在学习上了,那就真的努力了!
        3.在宿舍也能学习?那是扯淡,要学习还是到教室里来,必须
        4.不要爆发力,不要一瞬间的闪光,要天长日久,要持之以恒,要耐得住寂寞,踏踏实实的努力
        5.你,是学习的主导,被动的学习永远学不好
        6.时间的管理,非常重要,你非学习时间的安排将对你的学习状态产生非常大的影响,举个例子:晚上12点下自习后,到你躺在床上进入梦乡,这中间的时间如果特别长,将直接导致你睡眠不足,进而严重的影响到你白天起床后一整天的学习状态,所以在被窝里玩手机、扯淡侃大山等等都最好免去。学习本身已经很累了,别自己给自己找罪受
        7.你知道真正的“休息”是什么吗?其实我们总是把放纵当成休息,结果“休息”完了比学习都累。其实休息和放纵有着本质的区别:休息是有目的的,为的是以最好的精神状态更好的学习;放纵是没有目的的,我们只是被游戏、小说、电影等等各种东西勾引而难以自拔,进而荒废了应该做的正事,进而对自己丧失信心,破罐子破摔,这就是堕落的开始
        8.浮躁是学习的大敌,更是做程序员的大敌,多少聪明的人死在了浮躁上,多少笨拙的人胜在了踏实上
        9.学编程不敲代码?就好像不下水能学会游泳一样
        10.学会问问题,这是门艺术。至少,不能因为自己懒得查资料、懒得百度、懒得上机测试而去问别人,要知道每个人的时间都是宝贵的,但是机器永远不烦,而且一遇到问题就问别人自己永远也成长不了;再者,当自己调试Bug就是调试不通,没办法只能问别人,但是时间长了自己也要不断总结经验,提高自己调试程序的能力。如果自己提出的问题很有营养,大家探讨的时候双方都能够更深入的理解知识和原理,那肯定大家都欢迎这样的问题。当然,如果不肯和大家交流,只是自己一味的闭门造车同样不可取
        11.既要埋头拉车,又要抬头看路,如果方向错了,越努力离目标越远
        12.所有职业素质课上讲的都是真的!千万别把职业素质课不当回事,对今后的发展有深远的影响
        13.永远用最积极的心态来面对!永远相信自己!永不放弃!
        14.坚持终生学习的理念,不要因为快毕业了就放松自己的成长,毕业并不等于你可以不用再学习了,再重复一遍:终生学习
        上面这些说来说去总感觉是车轱辘话,而且可以说我们从上小学开始就天天听这样的话了,但是尽管听得烦了,但是我们很多人还是做不到,是吧,所以还是多提醒一下自己。希望大家都能够在每一天中都保持最佳的学习状态,让自己从坐在教室开始就立即成为一柄出鞘的利剑,锋利而又敏锐,让一切难题都迎刃而解,在学习的道路上所向披靡。
        下面再说一下具体的学习方法。我个人认为,Java的学习概括起来,无非是“虚实”这两个字。实者具体,虚者抽象;实者容易上手,虚者不易掌握;实者可以通过大量的练习掌握,虚者需要用心体会。由于虚实之间很难找到明确的分界,所以我们按照由实至虚的顺序罗列一下Java中所要学习的东西:约定、结论、机制、原理、思想。
        何谓约定?约定也可以称之为规则。没有什么道理可言,不需要理解,人家Sun公司(唉,可怜的我家Sun公司被Oracle收购了,仅仅74亿美元)就是这么规定的,声明一个方法就得这么写:public void testMapping(){...},继承就是用extends,实现接口就是用implements,不需要任何解释,我们接受就好了。用生活中的例子来说明就是:有的国家规定在公路上必须靠右行驶,有的国家规定靠左行驶,没有为什么,大家都遵照这个约定,交通就有秩序了。这是我们学习过程中最具体的东西,也是最容易掌握的,因为如果你不会,那么敲50遍肯定会了,再不行就抄50遍,没有不会的。所以在学习中遇到约定的时候,我们应该马上把它抓住,派重兵猛攻,坚决拿下,彻底掌握,给后面的学习打下一个坚实的基础。
        何谓结论?就是基于事实和基本原理推导出来的固定东西,更重要的是,结论是需要在今后的学习中遵循的,比如:静态方法不能访问非静态成员变量和方法;如果父类中声明了一个有参的构造器且没有声明无参的构造器,则子类中就必须显示声明一个有参或无参的构造器。用生活中的例子来说明就是:吃饭尽量不要吃生冷的,这是结论,原因是那样对肠胃不好。结论有一个重要的特点:就是即使你刚开始并不理解结论的原理,不清楚它是怎么推导出来的,也可以先记住结论本身,派重兵猛攻,先掌握其用法和规则,以后在学习的过程中慢慢体会。
        何谓机制?像继承机制、异常处理机制、反射机制、多线程机制等等,都属于机制的范畴。相对于前面两项,机制在学习的过程中需要理解的东西更多,涉及到一系列互相联系的规则和结论,而且需要整体起作用,所以要求更高。这时候,根据每个人自身的不同情况,可以采取不同的方法,如果一开始就能理解其作用、原理和用法那再好不过,但如果开始时理解不了,那么还是先掌握其中的约定和结论,在以后的学习中慢慢体会,逐步形成整体认识,加深理解。比如异常处理机制,我刚开始的时候很不理解它到底是干什么的,总是和自己写代码时发生的语法错误、逻辑错误这些混淆。后来学了JavaEE,做了项目,再回过头来看,逐渐明白了异常处理机制其实可以视为一套“应急预案”,为现在能够预见到的异常情况提前设定处理方式,使程序在运行过程中不会因为遇到非正常情况就崩溃停止执行,也就是使程序更稳定更健壮。有点类似于现实生活中的安全保卫机制、消防预案等等。当我们完全理解它存在的意义时,其具体的细节也就全部理解了,但是理解不等于掌握,操作性的东西没有大量的练习是掌握不了的。
        何谓原理?比如Struts 2中的getModel()方法为什么能将model对象放到值栈的栈顶呢?因为在执行对应的Action方法之前,经过了ModelDriven拦截器,调用了getModel()方法,把返回值对象放到了值栈的栈顶;比如Spring中的AOP面向切面编程是靠什么实现的呢?动态代理;比如所有框架为什么都可以利用全类名创建对象呢?反射。通俗的讲,原理就是“背后的东西”。怎么理解“背后”呢?举个简单的例子:当我们复制文件的时候,首先要在源文件上面点“复制”,或者按“Ctrl+C”,这时候从用户界面看来没有任何的变化,没有任何的系统提示,就好像什么都没发生一样;但是到目标位置再点“粘贴”或按“Ctrl+V”,系统就开始执行复制操作,所有这一切都是操作系统在“背后”帮我们完成的,我们只是下命令,我们即使不知道系统如何实现这一操作也不妨碍我们下达这个指令。在整个学习过程中原理就是需要理解的部分,而前文述及的约定、结论以及相关的操作都是需要掌握的东西。必须指出的是原理的理解是基于完善的知识体系,如果知识体系中存在缺失,或根本就不成体系,那么很难谈得上对原理的理解。而对内部原理的理解直接影响到技能的使用,代码的调试和功能的实现。应该说,对内部原理加深理解不需要天赋、悟性和灵感,而主要依靠完善的知识体系、天长日久的积累以及正确的思维方法,特别是:即使原理方面一时难以理解,可以先通过大量的练习熟练掌握具体操作,在以后的学习中慢慢理解——正是因为这一点,我们才可以断言Java大部分人都可以学——只要通过正确的方法努力。
        何谓思想?比如软件分层、面向切面编程、面向接口编程、面向对象、POJO、ORM、IOC等等都可以视为编程思想。通常编程思想涉及到的范围都是宏观的,贯穿在整个开发过程中的指导思想。即便如此,我还是不认为领会这些思想需要天赋和悟性,因为提出这些思想并将其实现的人也未必都是天才。因为所有的思想无非就是为了让代码效率更高,程序的功能更强大而已。唯一需要的,我觉得只是有一个宏观的视角。
        可以说,学习的整个过程都是从实处入手的,没有实就没有虚,没有死就没有活。我们人生学会的第一句话是:“妈妈”,几乎天天都在呼唤这个称呼,可是真正能够理解这两个字含义的有几人呢?有的人自己为人父母时才能够理解,有人甚至一生都没能理解这两个字的真意。学习Java也是一样,先不管原理,让程序跑起来,然后再慢慢分析、体会其中的原理;学习过程中遇到了困难,也不要僵持太久,一时难以攻克,可以迂回婉转,待阅历丰富,兵强马壮时再率部猛攻。还有,学习任何一门编程语言都离不开大量的练习,因为这是一项操作性很强的工作,稍一疏忽就会出错,需要从业者具备深厚的功底和扎实的基本功,以及严谨的逻辑思维和丰富的经验。所有这些都是从练习中得来的。但练习的同时也不要忽略了原理的分析与思考,即便对于基础较差的同学可以暂时不把大量的精力放在原理上,以多多练习为主,但终究还是上升到理论的层面。虚实二者彼此依赖互相促进,是一个辩证统一的整体。就好像我们职业生涯的旅途,既要做到今天刻苦的努力,又要看到未来长远的方向,这两个方面同样不可偏废。一个公司创业时要励精图治,讲求实效,使自己能够生存下来;而当她发展成阿里巴巴那样的巨人时,领导者就必须放手具体的事务,用穿透时空的眼光去选择公司未来发展的方向,这就是为什么马云辞去了阿里集团CEO之后,诸多务虚的动作——嗯,扯远了。

        上大学的时候,老师说书要越读越厚,然后再越读越薄。意思是,开始学习的时候要细致的分析每一个知识点,记笔记、做题、举例、对照等等,这样书就越读越厚了;然后随着知识的积累,特别是有意识的归纳总结,会不断的从知识中找到规律性、纲领性、脉络性的东西,从越来越高的层次上进行概括,这时书就越读越薄了。这个道理对学习Java同样适用。不管是参加培训还是自学,面对教材、教学视频等学习资料时都要首先对知识点进行细致的拆解、融化、吸收、转化成自己的东西,进而不断的练习,在尝试中犯错误,在调试错误中深化理解,然后在这个过程中,对知识进行归纳总结、概括整合,在自己的精神世界中形成一个生机勃勃的知识体系。

        下面给大家介绍几款学习过程中使用的利器:

        一、笔记

        记笔记是一个梳理知识的过程,能够让自己对所学知识进行条分缕析的整理,并在此基础上进行归纳总结。其实,记笔记可以是一件很快乐的事情。我们不妨把笔记当作一个媒体,当作一份时尚杂志来做,用最新锐的思维梳理脉络,用最酷炫的图表整合知识,这样你对知识的理解一定与众不同,犀利精辟

        二、调Bug

        在大量练习的过程中,必然会遇到很多的错误,我们称之为Bug。这里要着重强调的是,在调试Bug,排除程序错误的过程中掌握的知识、经验、技能和体会都是最深刻的,同时也是不经历这个过程所得不到的。当兵的人说神枪手就是一匣一匣的子弹喂出来的,那么程序员就是一堆一堆的Bug调出来的。不管是自己的Bug还是别人的Bug,都应该像饿狼看到肥羊一样猛扑上去。虽然调Bug的过程很痛苦,有时候就因为"public"写成了"private"就害的你查了一个晚上——但一旦排除了Bug,那份快乐和从中得到的收获都是无可比拟的。

        三、与人分享

        与人分享自己的学习的所得可以说是又一大利器,因为你在学会之后,再给别人讲,这时候你完全站在了和学习完全相对的一个角度,这时候你可能会发现,本来已经学会的东西突然不会了,本来清晰的东西不清晰了,甚至在和别人交流的时候会发现自己的记忆中有些东西是错的,如果不是有人问你,不知道还要等到什么时候才能发现。也就是说,自己会的东西如果能够别人讲出来,给别人讲明白那就真的会了,会让自己对知识的理解更加深刻。

        总之,一个程序员的能力就如同一座冰山,水面以上看得见的部分,是他的编码能力,Bug调试能力和开发能力;而水面以下超级庞大的部分,由上而下分别是:大量的练习、完善的知识体系、深刻的编程思想,再往下就是最核心的部分:一个人的信心和意志。有了决心、信心和顽强的意志,就一定能够坚持到底,并找到最高效、最适合自己的方法。

        最后,希望大家都能够通过Java这条道路,在互联网这个缤纷的世界中收获最丰硕的果实。
阅读(395) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~