读一位资深程序员大牛给予Java初学者的学习建议
最近工作有点懵懵懂懂的,也可以说是迷茫吧
总是觉得工作中有时候会没有事情做,但是其实自己还是有任务的(待确认的任务,自己却没有主动去跟经理沟通,下一步该如何做,什么时候讨论,要讨论什么,然后记录讨论结果,执行)
然而自己却停留在第一步,主动跟经理下一步该怎么做...
那我呢,登录qq和朋友聊聊天
突然找出个bug,最后发现还是自己造成的,急匆匆改掉等待测试...(结果半天没轮的上测试我的功能)
百无聊赖,刷新闻,看头条,几个小时就过去了
还有一个小时下班,终于测试通过,提交个merge request, 好心的同事大哥又提醒我要及时查询近期内bug影响的用户,查了一下还好没大的影响(那么问题来了,为什么自己就没有主动想到呢?...深深自责ing)
其实自己也有很多个小计划没有进行下去的(java专业知识梳理和总结)
做计划的时候就开始懵逼了:
没弄清楚自己要做什么吧,捡了芝麻丢西瓜
有时候也是觉得自己的技术水平还不到家,还需要磨练才能长出好的果实
但是有时候又觉得,自己应该干脆点,别多想就是干,走出第一步才是真的
在学习了基本路线后,又总结了一下知识点,在想把知识点和详情贯穿起来以后,就变得无从下手了
今天读到这篇文章,又把自己的思绪拉了回来,我心里面就一个观点,我应该跟着作者的思路去做
然后对上面的计划的完成度补充完整,而下面的东西也将补充道计划内
书籍内容快速回顾:
java基础
ssm 框架搭建
制作简单项目
构建工具
参加工作...
接下来就是自己遇到的问题了,应该也是大部分同行遇到的炕
在以后都不能停下学习。上面这些内容你只是囫囵吞枣的学会了使用,你可以逐步尝试着去了解更多的东西,网络是你最重要的老师。
是的我也是这么做的
他们说还要看书
《Java编程思想》 3个月-半年 正常速度,还得多读几遍-是Java基础的升级版,深入的了解Java基础
《大话设计模式》 已经对Java有了一个更加深入的了解。但是对于面向对象的体会可能还不够深刻,编程的时候还停留在完成功能的层次,很少会去考虑设计的问题。 于是这个时候,设计模式就来了。
代码编写优化的书。比如《重构 改善既有代码的设计》,《effective java》。
有一本书是你必须看的,它叫做《深入理解Java虚拟机》。
另外,在过去2年的工作当中,你肯定或多或少接触过并发。这个时候,你应该去更加深入的了解并发相关的知识,而这部分内容,我比较推荐《Java并发编程实战》这本书。
这个阶段,你应该对于你所使用的框架应该有了更深入的了解,对于Java的类库也有了更深入的了解
因此,你需要去看一些JDK中的类的源码,也包括你所使用的框架的源码。 这些源码能看懂的前提是,你必须对设计模式非常了解。否则的话,你看源码
的过程中,永远会有这样那样的疑问,这段代码为什么要这么写?为什么要定义这个接口,它看起来好像很多余?
还有一种学习的方式,在2年这个阶段,也应该启用了,那就是造轮子。 不要听信那套“不要重复造轮子”的论调,那是公司为了节省
时间成本编造出来的。重复造轮子或许对别人没有价值,因为你造的轮子可能早就有了,而且一般情况下你造出来的轮子还没有现存的好。但是对别人
没有价值,不代表对你自己没有价值。 一个造轮子的过程,是一个从无到有的过程。这个过程可以对你进行系统的锻炼,它不仅考察你的编码能力,还
考察你的框架设计能力,你需要让你的轮子拥有足够好的扩展性、健壮性。 而且在造轮子的过程中,你会遇到各种各样的难题,这些难题往往又是你学
习的契机。当你把轮子造好的时候,你一定会发现,其实你自己收获了很多。 所以,这个阶段,除了上面提到的了解JVM、JDK和框架源码以外,也请
你根据别人优秀的源码,去造一个任何你能够想象出来的轮子。
第四部分:参加工作3年到4年的同学 这个阶段的同学,提升已经是很难了,而且这个阶段的学习往往会比较多样化。
因为在前3年的过程中,你肯定或多或少接触过一些其它的技术,比如大数据、分布式缓存、分布式消息服务、分布式计算、软负载均衡等等。
这些技术,你能精通任何一项,都将是你未来面试时巨大的优势,因此如果你对某一项技术感兴趣的话,这个时候可以深入去研究一下。这项技术不一定是你工作所用到的,但一定是相
关的。
而且在研究一门新技术时,切忌朝三暮四。
又去研究分布式缓存,比如Redis。然后又过不了一段时间,又去研究分布式计算,比如整整Mapreduce或者storm。
结果到最后,搞得自己好像什么都会一样,在简历上大言不惭的写上大数据、分布式缓存、分布式计算都了解,其实任何一个都只是浮于表面。到时候面试官随便一问,就把你给识破了。
一定要记住,作为一个程序猿,平日里所接触的技术可能会很多,但是想要让一门技术成为你的优势,那么一定是你对这门技术的了解强过绝大多数人才行。
因此在这个阶段,你就不能再简单的去学习前3年的内容了,虽然前面的学习如果还不够深入的话依旧要继续,但这个时候你应该更多的考虑建立
你的优势,也可以称为差异性。
差异性相信不难理解,就是让你自己变得与众不同。你前面三年的学习足够你成为一名基本合格的Java开发者,但你离成为一名优秀的Java开发者还有很大的距离。
所 谓优秀,即能别人所不能。而你前三年所学习的内容,是很多做过几年的Java开发都能够掌握的。
那么为了让自己有差异性,你就需要另辟蹊径,找一个方向深 入研究下去,以期在将来,你能够成为这个领域的专家,比如分布式计算领域的专家,大数据领域的专家,并发领域的专家等等。
此 外,你除了建立你的差异性之外,还要去弥补你基础上的不足,直到现在,我都没有提及基础知识。原因是基础是很枯燥
无味的,学的太早不仅容易懵逼,而且懵逼 的同时还容易产生心理阴影,以至于以后再不想去研究这些基础。但基础又是你深入研究一些领域时所必须掌
握的,比如你去研究分布式计算,你不懂算法你玩个毛 毛?比如你去做分布式缓存,你对计算机系统的内存不了解,你如何去做缓存?
如果你的基础本来就非常强,那么恭喜你,相信你在之前的工作中已经充分体会到了这些基础对你的帮助。
但我相信大部分人的基础都很薄弱,哪怕是科班毕业的人,很多人也不敢说自己当初的基础学的多么强大,比如算法、计算机系统原理、编译原理这些。
但是每个人时间都是有限的,而且这些基础的书籍每一本读下来,没个一年半载的,还真拿不下来,因此还是要有所抉择的。虽然艺多不压身,但问题是艺多是有代价的,是需要你付出时间和精力的,而我个人更赞成在同等代价的情况下获取最大的收获。
首先,我比较推崇的基础书籍有三本,分别是《深入理解计算机系统》,《tcp/ip详解 卷一、二、三》,《数据结构与算法》。
其中TCP/IP有三本书,但我们这里把这三本看成是一本大书。 这三本分别适合三种人,
《深入理解计算机系统》比较适合一直从事Java Web开发和APP后端开发工作的人群。
《tcp/ip详解 卷一、二、三》比较适合做网络编程的人群,比如你使用netty去开发的话,那么就要对TCP/IP有更深入的了解。
而《数据结构与算法》这本书,则比较适合做计算研究工作的人,比如刚才提到的分布式计算。
另外,我要强调的是,这里所说的适合,并不是其它两本对你就没有用。
比如你做java Web和APP后端开发,《tcp/ip详解 卷一、二、三》这本书对你的作用也是很大的。这里只是分出个主次关系而已,你要是时间足够的话,
能把三本都精读那当然最好不过了。但如果时间有限的话,那么就先挑对你帮助最大的书去读。
理论上来讲,这一年你能把这三本其中一本精读下来,就已经非常厉害了。有了基础,有了前面的工作经验,你就可以去开拓属于你的领域了。
在这一年里,一定要规划好自己的领域,建立好自己的优势,制造出差异性。如果你对自己的领域不够清晰的话,随着你工作的时间日益增多,你接触的技术会越来越多,这个时候,你很容易被淹死在技术的海洋里,看似接触的技术越来越多,会用的也越来越多,但你毫无优势。
有的同学可能会问,“我,我也不知道我的领域是什么啊?怎么办呢?” 对于这种人,
我只想说,“卧槽,这还问我?要不干脆我替你学习得了,好不好?”
第五部分:参加工作4年到5年的同学 经过前面一年的历练,相信你在自己所钻研的领域已经有了自己一定的见解,这个时候,技术上你应该已经遇到瓶颈了。
这个时候不要着急提高自己的技术,已经是时候提高你的影响力了,你可以尝试去一些知名的公司去提高你的背景,你可以发表一些文章去影响更多的人。
当然,你也可以去Github创建一个属于你的开源项目,去打造自己的产品。这次的开源项目不同于之前的造轮子,你这个时候是真的要去尽量尝试造出来真
正对别人有价值的轮子。
同时个人推荐关注阅读优秀博客:
个人目标:
我要成为猎头清单上的人员之一
个人倾向于用百度脑图整理知识点,使用有道云笔记编写总结文档,所以博客上会有比较多的链接,阅读体验可能不太好.
脑图阅读建议:
1 根据序号阅读
2 有链接的地方是可以直接跳转链接的 (),比如下载 ; 外链基本都是官方文档,本人也是比较推荐看官方文档的,这样学习才能有整体性
3 有 详细说明()的地方是需要鼠标浮动显示的
4 有 有道云笔记总结的是对应知识点的总结,适合实践参考阅读