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