守护石谈学习Java之路
这次在CSDN Blink发表了几篇关于Java编程学习的小作文,讲述了Java工程师的成长路线、Java学习的技能树和入门工作要关注的核心问题,我继续做一次文章的整合与延展,以文章的形式发表出来,勉励各位能在技术事业上不断突破。
1. Java学习之路,我们该怎么走?
我记得2002年的那一场雪之后快毕业了!有一天翻了一本杂志,好像是《程序员》,里面说Java将来牛逼,我就心动了,去招聘会面试Java开发,一点也不懂编程的我,被面试官怼得无地自容,就下定决心,买了本侯捷先生翻译的《Java编程思想》开始自学Java。从那时候起到现在,我自认已经是很高级别的企业级Java架构师了,好了不自吹了!
Java学习需要经历比较漫长的过程,才能达到高级别层次,具体来讲就是:编码级、效率级、模式级、架构级和骨灰级
编码级:一般常见于学习编程两年以内的Java程序员,当然不排除极高天赋的选手。在这个过程你并不追求代码质量(效率、结构和可扩展性),更多是模仿高工们的代码,实现应用逻辑。在这个过程一定要记住,要追求功能的完善与闭环,这个说起来简单,做起来往往有很多细节,千万不要指望产品经理,可能你们公司还没有此岗位。但是这对初级别程序员的习惯养成是关键时期。
效率级:当你对Effective Java这本书看的津津有味的时候,那么证明你开始进阶了!这一般常见3-5年的程序员,因为你开始对自己写的代码有讲究了,什么是单态,什么是工厂,如何控制异常等等,明白了代码重构的重要性,开始对各种技术框架品头论足,往往到了这个阶段的程序员前途光明!
模式级:设计模式不是书里面看出来的,而是经历了上个阶段的各种精益求精的技巧考究后,当你翻看不同的设计模式讲义时,心里会总有种似成相识的感觉,亦或者惊讶的赞叹:卧槽,原来可以这么搞啊!请相信我,这时候你的代码进入到了晦涩难懂的时期,源于过度运用设计模式会导致别人看不懂,当懂得推己及人的时候,自然就跳出来了!
架构级:进入这个阶段,应该有8-10年的开发经验,这个过程很容易进入管理路线,这是好事,但若能把持住自己,主心骨仍然继续深入技术探索当中,那么你就会发觉架构师的真正意义了,一件产品从创世到面世,架构师努力开拓出整体结构,又始终陪伴在产品的身边,守护着它的点点滴滴,就好像润物细无声一样,不断纠正和兜底技术团队在开发过程中的错误,让产品在正确的轨道静静等航行。
骨灰级:当你经历了很多事情,内功深厚,手中、心中已无剑,来什么新技术,直接了解技术框架就行了,再不成看看源代码,甚至可以提几个好的建议。这时候你更希望在某个应用领域成为名至实归的专家,更希望能将自己的所知所学用一种方式,也许是开源,也许是知识,影响更多的技术人。
2. Java学习的技能点有哪些?
接着就有同学问了,着重应该学习那些技能呢?我作为Java老架构师今天就不废话了,直接开讲!
首先刚开始学习Java除了语法之外就是数据结构了,一定要深刻理解和会用Java.util.collection框架,这是Java教父Joshua Bloch的传世之作,对于高频使用的List,Map脉系源代码建议通读,看看大师鬼斧神工的手法。
其次就是要记住Doug Lea这位大师,他是Java并发包的作者,要把学习Java多线程和并发控制作为Java学习的基础任务,因为这个复杂的互联网云平台时代,懂得多线程就是程序员的标配。
再次谈框架,很多新人一上来就是Springboot,殊不知它是一个技术栈的微型集成者。我们不要让它把所有技术封装屏蔽掉,而要从Servlet/Jsp规范,Tomcat容器的经典学起才能明白Web底层逻辑,再配上Springframework的Bean管理、ORM、AOP这才学到了根子上,当你明白了核心,看似高级的内容其实都是这些基本组件的集成!
Spring全家桶+Mybatis依然是主流,我至今依然认为这是一种程序员被码农化(开发简易自动)的趋势,但没办法,学习它们是必须的。不同于Hibernate的侵入性,MyBatis用起来更简易且更易于自定义,这是符合互联网发展需求的,但我更喜欢前者,充分的面向对象。
另外Java的学习离不开一些外部资源的高频结合:
第一就是数据库了,而数据库的学习重点在于设计范式和事务例如隔离级别,NVCC这些;
第二就是Redis,纯内存的K/V字典,主要为高并发查询缓存数据防止数据库穿透,这就是互联网发展的必然需求;
第三就是Http协议、SSL加密协议、操作Json和Restful架构风格的深刻理解,与前端主要的交互方式。
第四更高级别需要理解消息MQ的异步通讯机制和应用,Api网关对于微服务的调度,核心是Nginx,以及微服务的注册发现、RPC调用的技术实现。
第五目前物联网技术愈来愈普及,对于Netty,SocketIO这种网络通讯技术的掌握。
第六大数据技术方面,对于ES、Kafka、MongoDB、Cassandra这些适合与上层Java应用结合的框架会被大量应用。
最后就是容器技术,Docker必学,那么Linux Shell编程就要掌握了,容器太多要考虑K8s编排!
3. 找工作,Java学习到什么程度?
最后今天我再补充一点更实际的内容,就是Java学到什么程度就可以找工作了!
如果要着眼于找工作,那么就一定要了解真实的Java工作环境,在我二十年从业经验中,大概换了不同类型的公司不下六七家,面向包括能源、互联网、医疗、税务、金融、军工、政务等,都是以Java为主力,超过一半时间都是作为技术或项目管理者负责协助招聘。因此我说的更具有普适性。
Java的核心价值就在于互联网与企业的云应用,随着移动互联网时代成为主流,诱发了前后端分离的兴起,逐渐前端从Java web体系中异化出来(形成了前端h5+js框架(例如Vue),iOS和Android原生,微信小程序,以及原生统一开发框架Flutter),这是未来很多年都难以替换的移动化开发体系。
那么在以互联网业务为主的企业中Java工作机会就一定是向后端看齐,作为初中级工程师,关键是在非常成熟的开发框架下,将最基本的增删改查业务搞熟练。
很多程序员估计看到这里会嗤之以鼻,哪有高并发、性能调优、算法等等有难度,实际越高度复杂的问题往往在架构中会汇聚在很小的层面,需要的更少更富有经验的高程去解决。但是最直接的搬砖工作在架构中是树的枝叶,人体的毛细血管,遇到的业务问题比想象中要复杂得多。
重点就来了,熟练掌握Spring(Boot、IOC、MVC、Dao...)、Mybatis,仅仅是会用工具,
核心问题是流动在前后端之间的业务问题如何清晰的对象责任定义,就要对模型驱动、充血贫血有深刻的理解,不至于代码越写类越耦合越强,逻辑越混乱。
核心问题是分层间如何清晰的分工,多少的逻辑应聚合在一个事务内,多少逻辑应止步于控制层,就要对MVC深刻的理解与运用,形成服务接口与数据接口漂亮的扇形聚合,这也是对事务管理的极大可靠性保障。
核心问题是外界对接的不断干扰如何应对,可能今天要对接RPC,明天就是MQ,后天又是Restful,这些远程通讯协议不仅要掌握清楚,更关键是对象设计,如何利用适配器与主体结构解耦,如何避免远程接口调用耦合进本地事务操作导致拖死Jdbc。
这些问题都是在具体问题中高频发生,而又是毛细血管一样牵一发而动全身。因此作为实战经验丰富的开发组负责人,对新人在这些方面的考量才是重心。
因此作为初学者,不要一开始就把自己注水成胖子,什么都学,什么也学不好。另外不要忽视一个问题,这个行业还有大量传统的项目如同长尾一样,并不是目前互联网开发框架,有更老的ssh架构,很多时候前后端并不分离,那么对Web前端框架,例如像Struts这种JSP标签的Web前端体系扔需要掌握与学习。
本文由「守护石」CSDN/公众号出品,转载请注明来源和作者
守护石谈学习Java之路的更多相关文章
- 开通博客-学习java之路
已被西南交通大学录取,毕设也已经进入末期.开始狂神说的Java学习之路,纪念一下!!!
- 学习java之路 简单日历查询代码
/** * 31天的 1, 3, 5, 7, 8, 10 ,12 30天的 4, 6,9,11 28天(平年) 2 29天(闰年) 2 */ class Demo{ public static voi ...
- (转)如何学习Java技术?谈Java学习之路
51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...
- 论新手该如何学习java?
由于我国高等教育制度教材陈旧,加上java自身发展不过十年左右的时间,还有一个很重要的原因就是java这门语言更适合商业应用,所以高校里大部分博士老师们对此语言的了解甚至不比本科生多. 在这种环境下, ...
- 谈初学Java历程
学习Java一个月左右,本来很早就想好好静下心来写一点东西了.但由于不想手写,文档写了不知道放在哪好,所以一直拖着.最近注册了博客园,还是挺方便的. 即将大学毕业了,则面临了所以大学生所面临的问题,就 ...
- Java之路——敬JAVA初学者(作者:MoMo)
作为一名大四的毕业生,大学三年过,有得有失.作为一个喜欢编程,喜欢JAVA的人,自学其实是一件美事,很有意思的事.要是能再找个女朋友一起学.嘿嘿,就不枉在大学走了一遭啊! 要离开学校了,还是想留 ...
- 【转】学习JAVA的步骤
好东西大家分享: JAVA学习的一些重点 . Java语言基础 谈到Java语言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的 ...
- 学习java的阶段性理解(其它语言也一样)
打算从今天开始学java啊,待会滚去找资料了.现在谈一下学习java阶段性的理解.由于现在对java真的啥也不知道啊,不过还是要瞎鸡儿写点自己的看法,以下看法应该也使适用于其它语言: 第一阶段,入门级 ...
- 学习Java必看书籍和步骤(转载)
原地址:http://blog.csdn.net/yongjian1092/article/details/7372678 Java语言基础 谈到Java语言基础学习的书籍,大家肯定会推荐Bruce ...
随机推荐
- C. Tourist's Notes
C. Tourist's Notes time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 1371 - Energetic Pandas
1371 - Energetic Pandas PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB ...
- RabbitMQ学习笔记五:RabbitMQ之优先级消息队列
RabbitMQ优先级队列注意点: 1.只有当消费者不足,不能及时进行消费的情况下,优先级队列才会生效 2.RabbitMQ3.5以后才支持优先级队列 代码在博客:RabbitMQ学习笔记三:Java ...
- CS5211完全替代兼容LT7211|PS8625|CH7511方案|EDP转LVDS|Capstone CS5211
CH7511|LT7211|PS8625替代方案--Capstone CS5211AN 设计EDP转LVDS优势方案原理图+PCB板设计 CH7511|LT7211|PS8625这三款都是专门用于设计 ...
- IntelliJ IDEA 2019.3 代码提示忽略大小写(IDEA 2019版本如何设置代码提示不分大小写?)
最近在使用IDEA,发现每次只能进行完全匹配,且区分大小写,界面变了IDEA 2019.3 忽略大小写设置跟之前的版本稍微有点不同,跟之前的软件有点点区别,在此记录一下不区分大小写的方法. 1. 使用 ...
- Unity——卡通渲染实现
效果展示: 原模型: 一.简单分析 卡通渲染又叫非真实渲染(None-Physical Rendering-NPR),一般日漫里的卡通风格有几个特点: 1.人物有描边 2.有明显的阴影分界线,没有太平 ...
- 解决eclipse中Findbugs检查不生效的问题
eclipse安装了Findbugs插件, 但是在eclipse中发现不了bug错误, 具体表现为指定的类存在findbugs, 已经通过其他工具检查出来, 但是在eclipse中就是无法报告错误. ...
- 浅议像素化与体素化Part.1——平面图形像素化
什么是像素化 学计算机的人往往都比较清楚图形和图像的区别,而且往往能够从数据结构的角度理解这两者的区别,一般来说,图形是由几何空间中的基本图元所组成,表现为用外部轮廓线条勾勒成的矢量图.例如由计算机绘 ...
- Docker_部署本地镜像仓库(6)
在部署本地镜像仓库之前,需要在主机上安装Docker.本地镜像仓库是registry镜像的一个实例,在Docker中运行. 1.创建本地镜像仓库服务 $ docker run -d -p 4000:5 ...
- [ unittest ] 文档粗读
参考: https://blog.csdn.net/ljl6158999/article/details/80994979 1.概念提出 unittest最初灵感来自于Junit,它有着和其他单元测试 ...