​这次在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之路的更多相关文章

  1. 开通博客-学习java之路

    已被西南交通大学录取,毕设也已经进入末期.开始狂神说的Java学习之路,纪念一下!!!

  2. 学习java之路 简单日历查询代码

    /** * 31天的 1, 3, 5, 7, 8, 10 ,12 30天的 4, 6,9,11 28天(平年) 2 29天(闰年) 2 */ class Demo{ public static voi ...

  3. (转)如何学习Java技术?谈Java学习之路

    51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...

  4. 论新手该如何学习java?

    由于我国高等教育制度教材陈旧,加上java自身发展不过十年左右的时间,还有一个很重要的原因就是java这门语言更适合商业应用,所以高校里大部分博士老师们对此语言的了解甚至不比本科生多. 在这种环境下, ...

  5. 谈初学Java历程

    学习Java一个月左右,本来很早就想好好静下心来写一点东西了.但由于不想手写,文档写了不知道放在哪好,所以一直拖着.最近注册了博客园,还是挺方便的. 即将大学毕业了,则面临了所以大学生所面临的问题,就 ...

  6. Java之路——敬JAVA初学者(作者:MoMo)

    作为一名大四的毕业生,大学三年过,有得有失.作为一个喜欢编程,喜欢JAVA的人,自学其实是一件美事,很有意思的事.要是能再找个女朋友一起学.嘿嘿,就不枉在大学走了一遭啊!    要离开学校了,还是想留 ...

  7. 【转】学习JAVA的步骤

      好东西大家分享: JAVA学习的一些重点 . Java语言基础 谈到Java语言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的 ...

  8. 学习java的阶段性理解(其它语言也一样)

    打算从今天开始学java啊,待会滚去找资料了.现在谈一下学习java阶段性的理解.由于现在对java真的啥也不知道啊,不过还是要瞎鸡儿写点自己的看法,以下看法应该也使适用于其它语言: 第一阶段,入门级 ...

  9. 学习Java必看书籍和步骤(转载)

    原地址:http://blog.csdn.net/yongjian1092/article/details/7372678 Java语言基础 谈到Java语言基础学习的书籍,大家肯定会推荐Bruce ...

随机推荐

  1. CS起源-havana地图红方打法分析

    作者:海底淤泥 havana是美国第一人称射击游戏<反恐精英>中的地图之一,编号为cs_havana,这张地图发生在古巴哈瓦那的某座城市中,恐怖分子们挟持了几名美裔的重要政治人物,以此为筹 ...

  2. Jmeter环境变量配置你不得不知道的事情

    在安装Jmeter的过程中大家肯定需要配置环境,但是为什么要配置JDK的环境变量呢?大家有没有好奇过,有没有仔细去像一下呢,其实在安装Jmeter前,大家应该都知道Jmeter是我们JAVA开发的,J ...

  3. vue项目报错如下:(Emitted value instead of an instance of Error)

    (Emitted value instead of an instance of Error) the "scope" attribute for scoped slots hav ...

  4. win下如何优雅的使用 Burp Suite最新版

    众所周知国内我们使用的 Burp Suite 大多数是大佬们分享出来的专-业-破-jie-版的 Burp Suite,每次启动的时候都得通过加载器来启动 Burp Suite,那有没有更加优雅的方式呢 ...

  5. Java Swing设计简单商品信息管理系统(java swing+mysql+eclipse)

    一.概述 为了管理好商店库存信息,提升店铺管理工作效率,结合实际工作需要,设计和开发本系统,主要用于商店商品信息维护出入库等.包含商品库存信息查看.商品信息修改,新增商品信息,删除信息等功能. 二.功 ...

  6. js 模块化 -- export 时 一个默认和多个默认的写法

    js文件 只有一个  food 类,一般写 export {food} 或者 export {food as default} 那么如果有多个呢? 这样 export {food, food2} 或者 ...

  7. windows更改pip源(可用)

    中国科学技术大学 : https://pypi.mirrors.ustc.edu.cn/simple 清华:https://pypi.tuna.tsinghua.edu.cn/simple 豆瓣:ht ...

  8. 第10组 Beta冲刺 (4/5)

    1.1基本情况 ·队名:今晚不睡觉 ·组长博客: https://www.cnblogs.com/cpandbb/p/14018650.html ·作业博客:https://edu.cnblogs.c ...

  9. 注意,你所做的 A/B 实验,可能是错的!

    对于 A/B 实验原理认知的缺失,致使许多企业在业务增长的道路上始终在操作一批"错误的 A/B 实验".这些实验并不能指导产品的优化和迭代,甚至有可能与我们的初衷背道而驰,导致&q ...

  10. Java 在PDF中添加工具提示|ToolTip

    本文,将介绍如何通过Java后端程序代码在PDF中创建工具提示.添加工具提示后,当鼠标悬停在页面上的元素时,将显示工具提示内容. 导入jar包 本次程序中使用的是 Free Spire.PDF for ...