守护石谈学习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 ...
随机推荐
- 【LeetCode】789. Escape The Ghosts 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 3942 - Remember the Word
3942 - Remember the Word 思路:字典树+dp dp[i]前i个字符,能由给的字串组成的方案数,那么dp[i] = sum(dp[i-k]);那么只要只要在字典树中查看是否有字串 ...
- 【.NET 遇上 GraphQL】 ChilliCream 平台介绍
ChilliCream ChilliCream 是一个开源免费的 GraphQL 平台, 提供了构建.管理, 和访问 GraphQL API 的端到端的解决方案. https://chillicrea ...
- Gradient-based Hyperparameter Optimization through Reversible Learning
目录 概 主要内容 算法 finite precision arithmic 实验 Maclaurin D, Duvenaud D, Adams R P, et al. Gradient-based ...
- Towards Evaluating the Robustness of Neural Networks
目录 概 主要内容 基本的概念 目标函数 如何选择c 如何应对Box约束 attack attack attack Nicholas Carlini, David Wagner, Towards Ev ...
- Ranger-Kylin插件安装
Ranger-Kylin插件安装, 从Ranger1.1.0版本开始支持Ranger Kylin插件, 从Kylin2.3.0版本开始支持Ranger Kylin插件的权限控制. 1.获取安装包 sc ...
- javascript实现base64格式转码与解码
最近碰到一个需求,后端返回base64格式的数据,前端需要进行base64格式解码,好了,前端采用内部提供的atob函数进行解码,开完成,交付测试,然后测试小哥哥小姐姐反馈说中文乱码! 然后查了一下, ...
- 【Redhat系列linux防火墙工具】firewalld与iptables防火墙工具的激烈碰撞
前言 iptables与firewalld防火墙管理工具在linux发行版Redhat7系列使用较为广泛. UFW则是在linux发行版Ubuntu下进行管理防火墙的一款管理工具. 在选用防火墙工具的 ...
- websocket在线测试工具
为了测试websocket, 根据网上的一些工具修改了一些, 因此得到了这个工具 源码 源码: <!DOCTYPE html> <html lang="en"&g ...
- Python_关于python2的encode(编码)和decode(解码)的使用
在使用Python2时,我们习惯于在文件开头声明编码 # coding: utf-8 不然在文件中出现中文,运行时就会报错 SyntaxError: Non-ASCII character... 之类 ...