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