守护石谈学习 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 前端体系扔需要掌握与学习。
本文由「守护石」公众号出品,转载请联系作者
版权声明: 本文为 InfoQ 作者【程序员守护石】的原创文章。
原文链接:【http://xie.infoq.cn/article/960ed255fd84c86567939eea8】。文章转载请联系作者。
评论 (1 条评论)