- 我是一个线程(修订版)
- 我是一个 Java class
- Javascript:一个屌丝的逆袭
- Java : 一个帝国的诞生
- JSP 一个装配工的没落
- TCP/IP 之 大明王朝邮差
- TCP/IP 之大明内阁
- TCP/IP 之蓟辽督师
- CPU 阿甘
- CPU 阿甘之烦恼
- CPU 阿甘:函数调用的秘密
- 我是一个网卡
- 我是一个路由器
- 我是一个进程
- 我是一块硬盘(上)
- 我是一块硬盘(下)
- 我是一个键盘
- 张大胖的 socket
- 张大胖学递归
- 学习面向对象的令狐冲
- 张大胖学数据库
- 数据库村的旺财和小强
- 小李的数据库之旅(上)
- 小李的数据库之旅(下)
- 漫画:什么是机器学习?
- 那些烦人的同步和互斥问题
- IE 为什么把火狐和 Chrome 给打伤了?
- 对浏览器村的第二次采访
- 节约标兵 IE 的自述
- EMail 诞生记
- Email 诞生记(下)
- Http 历险记(上)
- Http 历险记(下)-- Struts 的秘密
- 动物王国的面向对象
- 冯·诺伊曼计算机的诞生
- Http Server : 一个差生的逆袭
- 张大胖的加法器
- 从 1 加到 100:一道简单的数学题挑战下你的大脑
- 编程语言
- Javascript:一个屌丝的逆袭
- 计算机语言之战
- 我和编程语言的爱恨情仇(上)
- 我和编程语言的爱恨情仇(下)
- Android 为什么选择了 Java
- iOS 为什么选择了 Object-C?
- Basic : 一个老兵的自述
- Node.js : 我只需要一个店小二
- 命令式编程 vs 声明式编程
- 编译还是解释?
- 程序人生
- “架构师"小赵
- 师兄说
- 师姐说
- 小王的架构师之路
- 小李的版本管理系统
- 小超穿越记
- 小李的 Build 之路(上)
- 小李的 Build 之路(下)
- 张大胖改 Bug
- 我的编程之路--大学趣事
- 码农小王的一天
- 小李在外企
- 张大胖的需求估算
- 从厨师到码农
- 聊一聊那些神一样的程序员们(上)
- 聊一聊那些神一样的程序员们(中)
- 聊一聊那些神一样的程序员们(下)
- 谁是互联网之父?
- 一个价值百万的创业教训
- 让自己与众不同 - 提升工作的价值
- 看看你的“易燃性”
- 从无聊的工作中寻找价值
- 什么样的学生适合报考计算机?
- 谈谈程序员的职业方向(上)
- 谈谈程序员的职业方向(中)
- 谈谈程序员的职业方向(下)
- 谈谈培训班的作用
- 码农需要知道的“潜规则”
- 学习编程的加速度
- 码农在工作中的必备能力
- 码农和英语
- 老司机经验
- 假如时光能够倒流, 我会这么学习 Java
- 假如我是计算机系老师
- 学会编程, 而不是学会 Java
- 从增删改查中突围
- 抽象:程序员必备的能力
- 懒就一个字
- 编程的自学方法
- 小王买房记
- 从一道面试题谈谈一线码农应该具备的基本素质
- 想写框架的看过来
- 苹果手机变砖头以后
- 如何快速的学习一门技术?
- 唯一不变的是变化: 谈谈微信应用号
- 什么是企业应用?
- 勿以浮沙筑高台
- 为什么敏捷开发难于成功?
- localhost vs 127.0.0.1
- GitHub/Stackoverflow 找工作时有什么用?
- 动词 or 名词 :这是一个问题
- 如何选择入行语言
- 有时候,沉默是金
- 零 Bug 的代码是怎么炼成的?
- 浮点数为什么不精确?
- 文章错误大全
- Open Source--不要为了开源而开源
- 一不留神,代码就腐化了
- 先做个“键盘侠”, 再来写程序
- 不加断点调试的程序员是好程序员
- 码农必备技能:烂代码的处理之道(上)
- 码农必备技能:烂代码的处理之道(下)
- 学习数据结构有用吗?
- 从现在开始,丰富你的简历
- 那些永不过时的书,你看过几本吗?
- 学好编程必备的一个品质你知道吗?
- 你最爱的 Java
- 搞懂了这几点,你就学会了 Web 编程
- Spring 的本质系列(1) -- 依赖注入
- Spring 本质系列(2)-AOP
- 三层架构和 MVC 那点事儿
- Java 帝国之拨云见日识回调
- 小张的 Duck Typing
- JDBC 的诞生
- JDBC 后传
- 一个不安分的 JDBC 驱动
- Java 帝国之 Java bean (上)
- Java 帝国之 Java bean(下)
- Java 帝国之函数式编程
- Java 帝国之函数式编程(下)
- 关于 Java 初学者需要知道的 10 件事
- JUnit 你不知道的那些事儿
- 圣诞礼物:Java EE 的历史
- Java EE 读书指南
- 给小白的 Java EE 指南
- 给小白的 Java EE 指南(2)
- 给小白的 Java EE 生存指南(3) : XML
- 给小白的 Java EE 生存指南(4) : 一只叫 Tom 的猫
- 给小白的 Java EE 指南(5) : AJAX
- 给小白的 Java EE 生存指南(6) :Java 反射
- 闲聊
- "饿了么"初体验
- 来自大脑的控诉
- 一个高中生是怎么玩自媒体的?
- 尝试 分答
- 到底应不应该上培训班?
- 自学编程中遇到问题怎么办?
- 据说 99%的初级程序员看完后都不迷茫了
- 一行代码引发的“血案”
- 对一个死锁问题的思考
- 通过外包进入名企
- 请开往十年前的今天
- 为什么自学中最好有个师傅指导一下?
- 这个网站值得你花时间投入
- 为什么你无法坚持自学编程?
假如时光能够倒流, 我会这么学习 Java
回头看看, 我进入 Java 领域已经快 15 个年头了, 虽然学的也一般, 但是分享下我的心得,估计也能帮大家少走点弯路。
[入门]
我在 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) 的基础啊(回复“反射”查看相关文章) , 先把基础学会,后面的 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 ,这是我这么多年来的感受, 也只是我的一家之谈。 欢迎和我交流 。
学习编程从来就不是一件容易的事情, 不可能看看视频,看看书就学会, 需要大量的编程和实践。 编程虽然是极为辛苦的脑力和体力劳动, 但其中蕴含的创造的乐趣也是无与伦比的。 希望每个人都能够享受这个过程,乐在其中。
我在自学的过程中, 有个非常强烈的感受,那就是缺乏牛人的指导, 在黑暗中摸索乱撞, 容易走上弯路。并且一个人学习的话,遇到问题,没人沟通, 非常苦闷。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论