入门Java一年进阿里,分享我学Java的那些思考!

来自:程序之心(微信号:chengxuzhixin),作者:丁仪

也许今天的你在公司做着 CRUD 的工作,也许你还在为面试造火箭、工作拧螺丝悻悻不已,也许挣扎了许久却找不到进步的方向。


不是计算机相关专业的我,从开始学习 Java 到进入阿里,用了一年多点的时间,很多人觉得是进步比较快的,问我怎么学习 Java 才能快速进步,微信一一回复难以说的太明白,今天整理一下我的思考分享给大家。


打好计算机基础


计算机基础是所有编程语言的根基,不理解计算机运作原理就无法真正理解编程的意义。就像我们大一要从计算机基本原理开始学习一样,如果你想真正吃透一门语言,就需要理解进程、线程、堆栈、内存寻址、函数调用……


这些内容与任何一门语言都没有关系,却是所有计算机语言的根基。打好计算机基础以后,对你来说不同的语言就真的只是语法和特性的差异,在语言之间转换就变得很容易。当我从 C 语言转向 Java 的时候,看了一天 Java 基础语法就开始写业务代码了。


自学和培训的小伙伴往往在计算机基础上比较薄弱,一旦学习到比较复杂的概念就会感觉比较吃力,这个时候你需要好好补一下计算机基础知识。别说你没时间,今天不努力,明天就后悔。


熟练掌握 Java


《Java 编程思想》没有完整看完大体读懂两遍就不要说掌握了 Java。会用 Java 写代码只能说你入门了可以干活了,但也仅仅是初级阶段。


我遇到过很多工作了三五年的人,做过很多项目,Java 水平却和工作了一年的应届生没多大区别。大部分人迷茫和无法进步的根本原因就在于你仅仅掌握了java基础,看不到 Java 的无限可能,也不知道做什么可以继续进步。


熟练掌握 Java 需要你学习到 Java 特性的每个角落,不需要记住每个类和方法,但需要深刻理解每个特性的意义。工作中 SSM 框架为我们屏蔽了很多技术细节,Java 的特性可能并不经常用到。需要你主动学习,至少要把《Java 编程思想》看两遍以上,其中反射、泛型、容器、注解、并发需要重点掌握。


熟练掌握框架


很多人参加培训是从 JavaEE 开始的,问我如何学好 JavaEE?我想说的是 JavaEE 其实已经过时了,现在要学 SSM。


掌握框架的第一步是学会使用。学习 SSM 的基本用法能够帮助你完成绝大多数开发任务,掌握了高级用法能够提出更好的解决方案。学习框架没有捷径,在工作中一遍一遍地练习是唯一的方式。


掌握框架的第二步是理解原理。很多人面试阿里失败就败在原理上,只知其一,不是其二,稍微问的深入一点就答不上来了。理解原理就是理解 SSM 框架的灵魂,这也是一个程序员从体力劳动进阶到脑力劳动的门槛。

不理解原理只能做写代码的工具,理解原理才能成为真正的开发工程师。多思考、多总结、多请教,保持好奇心,多问一句是什么、为什么,才能探索到框架的奥秘。


掌握框架的第三步是设计框架。试着去写一个简化版的 spring,实现 IOC 功能,你就会发现真 TM 难。泛型、容器、反射、注解、设计模式、重构等都会用到,通过设计框架,能够深刻地理解这些 Java 特性和框架的设计原理。如果你还没有写过框架,尝试着写一个吧,边做边思考,好好体会下框架的秘密。


掌握应用技术


随着技术的发展,分布式、缓存等使用越来越广泛。Java 程序员需要掌握的应用技术也越来越多,比如 spring boot、spring cloud、dubbo、Redis、RabbitMQ、ZooKeeper ……不使用这些技术也能写出很好的单机程序,但掌握这些技术才能做好大型架构。学习这些技术也很简单,就是多加练习。


众所周知,阿里内部基本都是使用自己的技术,比如 hsf、diamond、metaq ……业界流行的这些技术用的很少。在阿里呆久了会感觉与社会脱节,于是我就每天抽出时间去看这些技术的文档,做自己的项目使用这些技术,通过日复一日的练习来掌握这些不常用技术。


理解编程的本质


前面说了那么多,其实都是编程的术。相对于武功来说,都是外在的招式。掌握了招式可以御敌,但想要再上一层则需要掌握心法。对于程序员来说,编程的心法就是道。而我也是在阿里工作了很久才体会到道的意义。


想必很多人都知道“程序等于算法加数据结构”的说法。算法和数据结构听起来都很高大上,也是大部分做业务的同学难以接触到的东西。很多人告诉我在公司自己是个 CRUD boy 不知道如何提高自己的能力,也有人抱怨“面试造火箭,工作拧螺丝”不知道该怎么办。


实际上在日常工作中,程序 = 控制 + 逻辑 + 数据,也就是算法可以拆分为控制加逻辑。优秀的框架都实现了控制、逻辑、数据的分离,实现了很好的解耦和灵活性,这也是所有框架的演进方向。


  • 数据容易理解,就是程序的配置、静态数据和运行时数据;

  • 控制是程序的主流程,一般在微内核或框架底层实现,控制逻辑一般与具体业务逻辑关系不大,只是定义了流程;

  • 逻辑就是具体的业务逻辑,在特定约束下被控制流程调用生产出符合预期的数据。


试着从控制、逻辑、数据的维度去理解框架、设计框架、优化代码,你很快就能成为优秀的程序员。如果你觉得在公司做业务很难提高技术,不妨尝试一下梳理出控制、逻辑、数据,然后进行重构。


最近问我如何学习 Java 的朋友有点多,这篇文章说的都是心里话。如果你觉得对你有帮助就支持一下我,欢迎留言。

推荐↓↓↓
Java编程
上一篇:Java 面试中遇到的坑 下一篇:1 分钟教会你用 Spring Boot 发邮件