假如时光能够倒流, 我会这么学习 Java
RosGrassi
8年前
<p>回头看看,我进入Java 领域已经快15个年头了,虽然学的也一般,但是分享下我的心得,估计也能帮大家少走点弯路。</p> <h2><strong>[入门]</strong></h2> <p>我在2001年之前是C/C++阵营,有C和面向对象的基础,后来转到Java ,发现没有指针的Java真是好简单,另外Java 的类库好用的让人哭啊。</p> <p>后来我就看《<strong>Thinking in Java</strong>》 ,《<strong>Java 核心技术</strong>》,感觉也不吃力。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/ece9e2b25cd269a706ff8ed906cec55b.jpg"> <img src="https://simg.open-open.com/show/51a0202a4ac8b6f7ebf996f70c30f167.jpg"></p> <p>如果我之前没学过别的语言,或者半路出家转到计算机行业,我不会先看上面那两本, 相反我会选 <strong>《Head First Java》</strong>,这本书非常适合零基础的小白,读起来轻松搞笑,不信你看看第一页</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/59caeac232bb38512a327512c2850857.jpg"></p> <p>但是光看书也挺无趣的,不妨和视频结合着看,我觉得传智播客的Java基础视频很不错 (唉,给传智打了个广告),网上一搜就有,真搜不到找我吧(QQ 14703250)</p> <p>注意: 视频的好处就是能看到敲代码的过程,代码是活的,这点很爽。如果 <strong>视频只是按PPT讲编程, 果断扔掉</strong> 。</p> <p>书也有书的好处,能写成书的,肯定是作者经过系统化思考,梳理才能形成的东西, 所以系统性比较强。</p> <p>书还有其他优点,例如可以随便的翻,找到重点反复的看。</p> <p>所以<strong>混合着看经典书+优秀的视频 应该是最好的入门</strong>。 </p> <p>Java 入门,我不会去上培训班,白白浪费钱 ,自学就够了。</p> <p>自学过程中如果有实战经验丰富的高人指导一下,给我绘出路线图,指出攀登的方向,哪些地方有陷阱,哪些地方不应该浪费时间, 我的自学就可以减少摸索,少走弯路,</p> <p>很不幸, 我当年没有遇到,如果时光倒流,我会想办法找一个来指导我。</p> <h2><strong>[实践]</strong></h2> <p>软件行业的一大特点就是 <strong>光看不做永远都学不会</strong> ,编码不到10万行都不好意思出去打招呼。</p> <p>所以实践,实践,实践!</p> <p>在校期间,我还是会尽可能的去找项目做(参见我的另一篇文章《从现在开始丰富你的简历》,回复“ <strong>简历</strong> ”查看),实在没找到,也可以先把基础打好</p> <p>我上大学的时候用的是严蔚敏的《数据结构》,当时我也把习题都做了一遍,考高级程序员的时候,成绩非常好。</p> <p>后来我知道了一本更好的算法入门书《算法》,如果时光能够重来, 我还是会这本书上提到的所有数据结构和算法用Java 都实现一遍, 课后作业也争取都做一遍。 </p> <p>这是个非常重要的训练,因为我知道, 真的做了,就会发现工作以后只要不是设计算法, 基本的数据结构没有能难住我的。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/305d9eb18212d4bfef6bf59d9adbe72d.jpg"></p> <h3><strong>【Java SE】</strong></h3> <p>对于Java集合框架, 不但要学会用,我还会尝试着实现一遍,List, ArrayList, Set ,HashSet, Map ,HashSet 等等,要是不知道怎么写,看看JDK的源码就可以了,那里有最好的老师。</p> <p>实现一遍能更好的明白面向对象的设计,接口,抽象类,具体类的关系,怎么分离职责,会学习到设计模式中的模板方法, Iterator 等 。</p> <p>值得一提的是Iterator,很有趣,我还清楚的记得那一年自己实现集合框架中 Iterator 的时候的激动心情啊 :-)</p> <p>在实现Java 集合框架的时候, 可以顺便把泛型也学了, 不学不行,要不然实现不了啊。</p> <p>Java 世界里,万事万物都是对象,大家都知道封装,继承,多态,但是仅仅了解这些只是入了门,不可能做出真正的面向对象的程序。</p> <p>有一本经典的书《敏捷软件开发,原则,模式,实践》,里边详细的讲解了一个薪水支付案例,是迄今为止 <strong>最好的面向对象设计的例子</strong></p> <p>我会用Java 把它实现一遍, 真正的体会一下OOD, 了解怎么才能把合适的责任分给合适的类, 什么叫面向接口而不是面向实现编程, 什么是优先使用组合而不是继承。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/821293f6f7b3a6603f29763b6ee71f5b.jpg"></p> <p>对于Java线程,重点还是理解概念,因为我知道在以后的工作中(除非从事系统级编程),自己写线程/线程池的机会是非常罕见的,都被类库,框架给封装好了。所以重点是理解,</p> <p>看书的话就当然是《 Java并发编程实战》,一大群大牛写的啊。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/eb00418ca9ad8206a3cdc7996f5497af.jpg"></p> <p>对于Java IO, 我觉得架构设计的很优雅,典型的学院派,可就是不太实用,打开读取一个文件都得用装饰者模式包装来包装去,太累了。</p> <p>项目实战中呢,也就是读取个property 文件,xml 文件。我还是重点去理解概念和设计吧。</p> <p>不过自己 <strong>写个简单的xml 解析器</strong> 倒是不错。 </p> <p>至于 AWT, Swing , 简单看看就行了, 我不会去深入研究, Java 是典型的服务器端的语言,开发客户端程序的极少,你想想,你用Swing/AWT搞个桌面程序出来,还得让客户装个JRE才能运行,是不是有点过分? 据我所知,也即是银行的一些应用在用Swing ,AWT了。有人可能说 Applet,它曾经流行过,现在早都没人用了。</p> <p>所以 <strong>我不会在Swing和AWT上浪费时间</strong> 。</p> <p>Java Reflection 看起来没有集合框架,线程,OO等那么耀眼,但它可是 <strong> 很多框架(SSH) 的基础 啊 (回复“反射”查看相关文章) </strong> ,先把基础学会,后面的Java EE得用到它。</p> <p>想真正的学好Java ,不了解Java 虚拟机怎么可能?《 深入理解Java 虚拟机》一定得看,看完的 <strong>目标就是写个简单的Java 反编译器。</strong></p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/0e79cc3459d33b370574ffe81f1d0256.jpg"></p> <h3><strong>【做个有素养的Java码农】</strong></h3> <p>我记得08的时候,我的IBM经理说设计模式是必备技能,不懂设计模式的我们不能要了。</p> <p>所以设计模式是必学,其实Java里边用的非常多,简直就是设计模式的活教材,工厂方法,单例,模板方法,装饰者,责任链都有体现。</p> <p>当然我会去先看一下轻松的 《Head First Design》,《设计模式》的作者之一 Eric Gamma 都大力推荐,绝对不容错过。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/ac852c47583d435cfcfec8c439a41ce9.jpg"></p> <p>又过了几年,我的IBM经理又说,现在我们默认设计模式大家都会了,敏捷实践是必备技能 !</p> <p>所以,JUnit 我得会,重构我得会,TDD,持续集成这些最最基本的敏捷实践也得知道,要不然会被人鄙视啊。</p> <p>作为一个有追求的Java码农,我写代码的时候要遵循Java 的编码规范,例如类名首字母大写, 报名要小写, 方法名要首字母小写...等等。</p> <p>作为代码洁癖,我受不了脏代码,我会不断的打磨自己的代码,直到它像一个工艺品。</p> <p>Java 的最佳实践 《effective java》 怎么能错过? 里边满满的全是JDK的作者们总结出来的java 编程最佳用法。</p> <p>不过翻译的实在是不咋滴,很多句子都得仔细的琢磨一下才知道什么意思,所以我打算录一系列视频讲解一下,敬请期待。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/c5be09e02ceafbdb0ef7737379d6f2b6.jpg"></p> <h3><strong>【Java EE】</strong></h3> <p>走了这么远,终于来到Java EE了,Java 不就是写服务器端的Web应用的吗?</p> <p>我会 自己写个Web程序,可以考虑把上面提到的经典的薪水支付案例改造成Web 版,用最基础的技术Servlet/jsp/jdbc 。 </p> <p>然后 研究struts,自己写个简单mvc框架,在自己的Web 程序中用起来,这叫 <strong>吃自己的狗粮</strong> 。 </p> <p>然后研究Hibenete,自己写个简单的OR mapping框架,再吃一次自己的狗粮。</p> <p>然后读一下经典的书《 J2EE development without EJB》,对,就是Spring 的作者 Rod Johnson写的,它颠覆了大家对于重量级EJB的认识,开启了新的时代。</p> <p>有了这本书的铺垫,自己写个简化的依赖注入也不是难事,写好后还是在自己的Web程序中用起来,最后一次吃自己的狗粮。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/58b9a3a74f01e9580d15407ec3ce9d4b.jpg"></p> <p>等你做了就知道,所有这些,都依赖Java Reflection。</p> <p>再往后走,就应该是找真正的项目做,或者去找实习了,那是另外一个话题了,以后再聊。</p> <h3><strong>【阅读代码】</strong></h3> <p>熟读唐诗三百首,不会作诗也会吟</p> <p>模仿是最好的学习!多看看大牛们的代码是怎么写的,潜移默化,自己的武功也能提高。</p> <p>我身边要是有个好师傅,跟着他,看着他编程,提高的该有多快啊。</p> <p>在学习Java SE和Java EE的同时,我会读一下这些源代码:</p> <p><strong>JDK中的 Java Collection 源码:</strong>老祖宗的东西绝对经典</p> <p><strong>JUnit 源码:</strong>看看Eric Gamma 和 Kent beck 是怎么通过模式来创建系统的 (回复"JUnit"查看)</p> <p><strong>SpringSide: </strong>以Spring Framework为核心的,Pragmatic风格的JavaEE应用参考示例,是JavaEE世界中的主流技术选型,最佳实践的总结与演示。</p> <p>国人开发的,大力推荐一下。 </p> <p>此外我还是会研究下本世纪初著名的 <strong>Jive论坛</strong> ,虽然非常古老,虽然源码学院派十足,但简直是设计模式的大本营,都是活生生的应用的例子 </p> <p>里边有个用代理模式实现权限控制,让我记忆犹新。</p> <p>另外如果有余力的,有兴趣的话,当然可以阅读Struts, Spring, Hibernate的源码,甚至参与进去开发了。</p> <p>如何学习Java ,这是我这么多年来的感受,也只是我的一家之谈。欢迎和我交流 <strong>。</strong></p> <p>学习编程从来就不是一件容易的事情, 不可能看看视频,看看书就学会, 需要大量的编程和实践。编程虽然是极为辛苦的脑力和体力劳动,但其中蕴含的创造的乐趣也是无与伦比的。希望每个人都能够享受这个过程,乐在其中。 </p> <p>我在自学的过程中,有个非常强烈的感受,那就是缺乏牛人的指导,在黑暗中摸索乱撞,容易走上弯路。并且一个人学习的话,遇到问题,没人沟通,非常苦闷。</p> <p> </p> <p> </p> <p>来自:http://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=415513252&idx=1&sn=1c1211e23c507c34f9befbf5282a85c8#rd</p> <p> </p>