[入门]
我在2001年之前是C/C++阵营,有C和面向对象的基础, 后来转到Java ,发现没有指针的Java真是好简单,另外Java的类库好用的让人哭啊。后来我就看《Thinking in Java》 ,《 Java 核心技术 》, 感觉也不吃力。
如果我之前没学过别的语言,或者半路出家转到计算机行业,我不会先看上面那两本,相反我会选《Head First Java》, 这本书非常适合零基础的小白,读起来轻松搞笑,不信你看看第一页:
但是光看书也挺无趣的,不妨和视频结合着看, 我觉得传智播客的Java基础视频很不错 (唉, 给传智打了个广告), 网上一搜就有, 真搜不到找我吧(QQ 14703250)。
注意:视频的好处就是能看到敲代码的过程,代码是活的,这点很爽。 如果视频只是按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) 的基础啊(回复“反射”查看相关文章),先把基础学会,后面的JavaEE得用到它。
想真正地学好Java ,不了解Java 虚拟机怎么可能?《深入理解Java 虚拟机》一定得看,看完的目标就是写个简单的Java 反编译器。
【做个有素养的Java码农】
我记得08的时候, 我的IBM经理说设计模式是必备技能, 不懂设计模式的我们不能要了。
所以设计模式是必学, 其实Java里边用的非常多,简直就是设计模式的活教材, 工厂方法,单例,模板方法, 装饰者,责任链都有体现。
当然我会去先看一下轻松的《Head First Design》, 《设计模式》的作者之一 Eric Gamma 都大力推荐,绝对不容错过。
又过了几年, 我的IBM经理又说,现在我们默认设计模式大家都会了, 敏捷实践是必备技能 !
所以, JUnit 我得会, 重构我得会, TDD,持续集成这些最最基本的敏捷实践也得知道, 要不然会被人鄙视啊。
作为一个有追求的Java码农, 我写代码的时候要遵循Java 的编码规范,例如类名首字母大写, 报名要小写, 方法名要首字母小写...等等。
作为代码洁癖, 我受不了脏代码, 我会不断的打磨自己的代码,直到它像一个工艺品。
Java 的最佳实践 《effective java》 怎么能错过? 里边满满的全是JDK的作者们总结出来的java 编程最佳用法。不过翻译的实在是不咋滴,很多句子都得仔细的琢磨一下才知道什么意思,所以我打算录一系列视频讲解一下,敬请期待。