一、解决真实问题很重要

先给你讲个故事。多年前刚参加工作时,刚转正不久就被派到客户现场解决一个紧急问题,对于一个刚入职场的新人小白来说,内心其实是非常惊慌无措的。

刚开始还算顺利,前辈同事们已经大致定位到了问题原因,也做了一些补救措施,貌似已经没有问题了。但不久后的一天凌晨,在同步数据的过程中,系统突然就失灵了,重启之后,问题仍然出现。此时,部分数据丢失,而且客户开始越来越没有耐心。

而后,另一位架构师来一起开始排查问题。合作时,发现他熟练地通过各种 Linux 命令在线上环境查看性能指标,dump 出日志文件,查看源码,然后分析原因,定位问题,制订解决方案。其中,还特别针对丢失的数据如何进行正确地恢复做了非常详细的操作说明,作为一个新手小白,按照这个操作手册就能完成数据的恢复。那是第一次深刻感受到解决真实问题的重要性。

二、应该重视程序设计的基本功

这些年在生产环境中遇到的事故越多,越能深切体会一句话:代码质量既是设计出来的,也是迭代优化出来的。换句话说,无论是前期的产品需求分析、架构设计,还是后期的详细代码设计与编码,都离不开良好的设计。

程序设计是每个程序员的基本功。但是,大多数人都只是对新技术充满热情,却很少有人愿意沉下心来,花几个月甚至一两年的时间来重温基础知识,修炼基本功。在面对所谓“新技术”的浪潮下,他们一直看不透背后隐藏的朴实规律,只是东一榔头西一棒槌地在原地踏步。

工作近十年间,遇见过各种各样才华横溢又异常努力的程序员,他们能力都很强,可是不知为什么,却总是在无意识地走入一个循环:不断寻找捷径,却又在重复地走老路。

那到底有没有快速修炼基本功的捷径呢?有!学习设计模式其实就是一条捷径。

过去,我也固执地认为,程序设计不过是空中楼阁,只是架构师们诓骗大家的谎言,但当真正亲身参与到编码实践和设计中后,才猛然发现设计模式的诸多优势,比如,提升源码阅读效率,快速解决短期项目中的问题,降低维护成本等。

三、主动学习+刻意练习很有效

有了学习设计模式的目标之后,你还得找对学习设计模式的正确方法。

实际上,学习设计模式最有效的办法就是:主动学习+刻意练习。

在实际工作中,很少有人告诉你一个程序该如何设计,他们只会要求有一个结果——做出一个好的程序并能运行起来。

面对这样的要求,我们常常只能处于被动学习状态:任务里需要什么你才学习什么,东一榔头,西一棒槌。这样短期虽然有效,但是长期下来,你的知识积累速度其实很慢。所以,要想学好设计模式,就得放弃这种被动学习的方式,要有目标、有系统地去主动学习:找寻好的资料,分析理解,开放思维

有了主动学习的意愿后,还得刻意练习。那怎么去刻意练习呢?最好的方法就是借助工作中的项目实践。因为实践过程中一定会遇见很多问题,就像升级打怪一样,这个不断解决问题、反复思考的过程才是发挥设计模式的最佳途径。

Java设计模式的一个特点就是入门相对容易,但是真正掌握并精通是非常困难的,原因有以下几个。

  • 1、涉及的知识面比较广。 Java 语言涉及各种比较难的知识点,比如,多线程编程、异步和同步编程模型、内存池、HTTP 协议、面向对象设计思想、UML 等,如果对这些基础知识掌握得不扎实,是很难真正学好设计模式的。

  • 2、效果检验比较困难。 因为这是一个见仁见智的经验,有人觉得拿来用就好,又有人觉得应该理解原理再实践应用,但由于缺乏数据支持,很难说哪种模式更好。

  • 3、被面向对象(OO)实现所误导。 由于设计模式被面向对象编程语言使用得最多,也给人造成了一种错觉:只能是面向对象编程语言才能用。因而,让人很容易忽略设计模式更重要的作用:一种为了解决特定设计问题的经验总结。

  • 4、资料比较零散,缺乏相关的实践案例。 网上各种 Java 设计模式的资料非常多,但是多以理论讲解为主,与企业内真实的应用还相差很远,并且很多人对设计模式的解读又存在很多误区,再加上一手的案例实践资料很少,又缺乏系统性的实践总结,就让落地变得更加困难。

文章(专栏)将持续更新,欢迎关注公众号:服务端技术精选。欢迎点赞、关注、转发