假如时光倒流,我会这么学习Java (转载)

回头看看, 我进入Java 领域已经快15个年头了, 虽然学的也通常, 可是分享下个人心得,估计也能帮你们少走点弯路。java

入门

我在2001年以前是C/C++阵营, 有C和面向对象的基础, 后来转到Java ,发现没有指针的Java真是好简单, 另外Java 的类库好用的让人哭啊。后来我就看《Thinking in Java》 ,《 Java 核心技术 》, 感受也不吃力。程序员

Paste_Image.png

Paste_Image.png

若是我以前没学过别的语言,或者半路出家转到计算机行业, 我不会先看上面那两本, 相反我会选《Head First Java》, 这本书很是适合零基础的小白, 读起来轻松搞笑, 不信你看看第一页!算法

Paste_Image.png

可是光看书也挺无趣的,不妨和视频结合着看, 我以为传智播客的Java基础视频很不错 (唉, 给传智打了个广告), 网上一搜就有,真搜不到就来个人QQ群里吧(群号码:589809992) 注意:视频的好处就是能看到敲代码的过程, 代码是活的, 这点很爽。 若是视频只是按PPT讲编程, 果断扔掉。 书也有书的好处,能写成书的, 确定是做者通过系统化思考,梳理才能造成的东西, 因此系统性比较强。 书还有其余优势, 例如能够随便的翻, 找到重点反复的看。  因此混合着看经典书+优秀的视频 应该是最好的入门。  Java 入门, 我不会去上培训班,白白浪费钱 ,自学就够了。 自学过程当中若是有实战经验丰富的高人指导一下, 给我绘出路线图, 指出攀登的方向,哪些地方有陷阱, 哪些地方不该该浪费时间, 个人自学就能够减小摸索,少走弯路,  很不幸, 我当年没有遇到, 若是时光倒流, 我会想办法找一个来指导我。编程

实践

软件行业的一大特色就是光看不作永远都学不会,编码不到10万行都很差意思出去打招呼。 因此实践,实践,实践! 在校期间,我仍是会尽量的去找项目作(参见个人另外一篇文章《从如今开始丰富你的简历》, 回复“简历”查看) , 实在没找到,也能够先把基础打好 我上大学的时候用的是严蔚敏的《数据结构》, 当时我也把习题都作了一遍,考高级程序员的时候, 成绩很是好。  后来我知道了一本更好的算法入门书《算法》, 若是时光可以重来, 我仍是会这本书上提到的全部数据结构和算法用Java 都实现一遍, 课后做业也争取都作一遍。  这是个很是重要的训练,由于我知道, 真的作了, 就会发现工做之后只要不是设计算法, 基本的数据结构没有能难住个人。设计模式

Paste_Image.png

Java SE

对于Java集合框架, 不但要学会用, 我还会尝试着实现一遍,List, ArrayList, Set ,HashSet, Map ,HashSet 等等, 要是不知道怎么写, 看看JDK的源码就能够了, 那里有最好的老师。  实现一遍能更好的明白面向对象的设计, 接口,抽象类, 具体类的关系, 怎么分离职责,会学习到设计模式中的模板方法, Iterator 等 。  值得一提的是Iterator, 颇有趣, 我还清楚的记得那一年本身实现集合框架中 Iterator 的时候的激动心情啊 :-) 在实现Java 集合框架的时候, 能够顺便把泛型也学了, 不学不行,要否则实现不了啊。服务器

Java 世界里,万事万物都是对象, 你们都知道封装,继承,多态, 可是仅仅了解这些只是入了门, 不可能作出真正的面向对象的程序。  有一本经典的书《敏捷软件开发, 原则,模式,实践》,里边详细的讲解了一个薪水支付案例,是迄今为止最好的面向对象设计的例子 我会用Java 把它实现一遍, 真正的体会一下OOD, 了解怎么才能把合适的责任分给合适的类, 什么叫面向接口而不是面向实现编程, 什么是优先使用组合而不是继承。数据结构

Paste_Image.png

对于Java线程, 重点仍是理解概念, 由于我知道在之后的工做中(除非从事系统级编程) ,本身写线程/线程池的机会是很是罕见的,都被类库,框架给封装好了。因此重点是理解, 看书的话就固然是《Java并发编程实战》 ,一大群大牛写的啊。架构

Paste_Image.png

对于Java IO, 我以为架构设计的很优雅,典型的学院派, 可就是不太实用, 打开读取一个文件都得用装饰者模式包装来包装去, 太累了。 项目实战中呢,也就是读取个property 文件, xml 文件。 我仍是重点去理解概念和设计吧。  不过本身写个简单的xml 解析器却是不错。并发

至于 AWT, Swing , 简单看看就好了, 我不会去深刻研究, Java 是典型的服务器端的语言, 开发客户端程序的极少, 你想一想, 你用Swing/AWT搞个桌面程序出来, 还得让客户装个JRE才能运行, 是否是有点过度 ? 据我所知,也便是银行的一些应用在用Swing ,AWT了。  有人可能说 Applet, 它曾经流行过, 如今早都没人用了。 因此我不会在Swing和AWT上浪费时间。mvc

Java Reflection 看起来没有集合框架,线程,OO等那么耀眼, 但它但是不少框架(SSH) 的基础啊(回复“反射”查看相关文章), 先把基础学会,后面的Java EE得用到它。

想真正的学好Java ,不了解Java 虚拟机怎么可能? 《深刻理解Java 虚拟机》必定得看,看完的目标就是写个简单的Java 反编译器。

Paste_Image.png

作个有素养的Java码农

我记得08的时候, 个人IBM经理说设计模式是必备技能, 不懂设计模式的咱们不能要了。  因此设计模式是必学, 其实Java里边用的很是多,简直就是设计模式的活教材, 工厂方法,单例,模板方法, 装饰者,责任链都有体现。  固然我会去先看一下轻松的《Head First Design》, 《设计模式》的做者之一 Eric Gamma 都大力推荐, 绝对不容错过。

Paste_Image.png

又过了几年, 个人IBM经理又说,如今咱们默认设计模式你们都会了, 敏捷实践是必备技能 ! 因此, JUnit 我得会, 重构我得会, TDD,持续集成这些最最基本的敏捷实践也得知道, 要否则会被人鄙视啊。 做为一个有追求的Java码农, 我写代码的时候要遵循Java 的编码规范,例如类名首字母大写, 报名要小写, 方法名要首字母小写…等等。 做为代码洁癖, 我受不了脏代码, 我会不断的打磨本身的代码,直到它像一个工艺品。

Java 的最佳实践 《effective java》 怎么能错过? 里边满满的全是JDK的做者们总结出来的java 编程最佳用法。  不过翻译的实在是不咋滴, 不少句子都得仔细的琢磨一下才知道什么意思, 因此我打算录一系列视频讲解一下,敬请期待。

Paste_Image.png

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的认识, 开启了新的时代。(Java学习交流QQ群:589809992 咱们一块儿学Java!) 有了这本书的铺垫, 本身写个简化的依赖注入也不是难事, 写好后仍是在本身的Web程序中用起来, 最后一次吃本身的狗粮。

Paste_Image.png

等你作了就知道, 全部这些,都依赖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 ,这是我这么多年来的感觉, 也只是个人一家之谈。 欢迎和我交流 。 学习编程历来就不是一件容易的事情, 不可能看看视频,看看书就学会, 须要大量的编程和实践。 编程虽然是极为辛苦的脑力和体力劳动, 但其中蕴含的创造的乐趣也是无与伦比的。 但愿每一个人都可以享受这个过程,乐在其中。

相关文章
相关标签/搜索