作者:程序之心丁仪
来源:https://chengxuzhixin.com/blog/post/zen_me_cheng_wei_ji_shu_da_niu.html
天天写业务代码,感觉没长进,技术深度止步不前,感觉很烦躁。很多人都在问,怎么样才能成为技术大牛?机会总是留给有准备的人,还是有一些方法可以帮助我们在工作中提升技术水平的。
看优秀源码并模仿
《黑客与画家》里说到,画家学画必须要临摹,从大师的作品中进行学习,美术博物馆便是他们最好的学校。而黑客则是通过观看优秀的程序来学习编程,研究它们的源代码,开源社区是他们最好的学校。
看优秀源码是非常有效的学习方式,比如通读 spring 代码可以深刻理解 IOC、AOP 关键技术。通过对优秀代码的探索和发现,可以深刻理解技术方案和涉及的知识点,加深自己的技术深度。优秀的开源项目经过千锤百炼,架构设计是比较优美的,可以学到很多架构设计方面的知识和技巧。
模仿是进步最快的学习方式。看了源代码之后,不妨从模仿开始,搭建一套自己的框架。通过模仿可以站在巨人的肩膀上,直接把前辈的经验转变为自己的能力,少走了很多弯路。很多良好的设计,并不是一开始就一步到位设计好的,也会经过很多人的讨论和优化,才变成我们看到的模样。而模仿可以帮助我们更深刻地理解设计背后的思考。
主动解决问题
很多人会抱怨,公司的代码很烂,学不到牛逼的技术。其实大部分技术问题并不难,难在没有多少人愿意去做。解决的问题多了,才能建立起个人影响力,才会有更多的疑难杂症交给你,才能获得很多成长的机会。当别人遇到问题首先想到你,你不进步谁进步呢?
公司除了需要技术能力,更需要的是作为技术专家解决公司实际问题的能力。只有知道烂代码烂在什么地方,才能写出更好的代码,得到上级更多的赏识和认可。如果能全面掌握现有代码,看的越透彻,越能轻松进行重构和变革,就会成为不可替代的人。
画类图流程图
学习一项技术,理解一套代码,最重要的是学习技术原理和设计思想,这是很长时间内都不会改变的东西。通过画类图可以很好的理解技术方案和设计思想。大部分抱怨工作重复学不到技术的同学,可能都聚焦在具体的技术细节上了,而技术细节是变化比较频繁的东西,既消耗了大量的时间和精力,又让人把握不住重点。
要想深刻理解系统的运作原理,需要画出系统流程图,才能看到整个系统如何工作。通过分析流程,可以整理出一个业务完整的交互图,写成文档,在后续的重构和需求沟通中会起到非常大的作用。
在画图过程中,最好适当运用系统化思维进行一些分析。找到软件系统中存在的各个部分,和这些部分之间的关系。通过观察和分析,划定各个部分的边界,明确系统中可变和不变的东西。通过分析关系可以很好地理解系统的运行机制,明确系统中贯穿如一的关键核心事件,方便理解系统思想。
从 0 到 1 做产品
如果说最好的提升技术的方式是什么,那一定是从 0 到 1 做一个产品。从头开始做一个技术产品,非常锻炼架构设计能力。能够让开发者在架构方面有极大的提升,又同时会锻炼一些领域的纵深点。
如果从零开始设计一个数据同步系统,假设每天要处理上亿数据,这个系统对开发者的技术成长是巨大的。在大数据处理、性能优化、分布式部署等方面也会有前所未有的积累。尤其是在用户量大起来后,要解决很多问题,倒逼自己有更多的深入学习和实战。
很多程序员突破瓶颈的临界点,都是在从 0 到 1 的时候。这意味着,我们要全方位思考和复盘,被迫放大自己的技术视野,对很多问题的理解很快就加深了。
刻意练习
轮子哥说他在学校的时候每天8小时,连续练了4年。大三去了微软上海实习,晚上还在写自己的代码。陈道明有句广告语,如果再演一次,可以演的更好吗?我觉得就讲的很好。回到程序员身上,不妨问一问,如果再写一次,可以写的更好吗?
如果真的想成为优秀的程序员,不要管那么多,静下心多写代码就够了,剩下的交给时间,学会做时间的朋友。可能开始练习的时候还是模仿,但是经过多轮练习,一定会产生属于自己的认知和经验。经过反复的推倒重来,当有一天写出的代码和模仿的对象不一样了,融入了自己的真知灼见,那可能就是突破的临界点了。
只有深度的思考,才能逼近问题的本质。而深度思考,必然是需要反复练习的。如果总是浮于表面,永远无法突破瓶颈,很难得到提升。刻意练习可以一次次、一层层不断突破自己的认知极限,在反复思考中逐渐走到问题的中心、逼近问题的本质,自然能够开阔视野看到不一样的风景。
总结
本文整理了 5 种提升技术的有效方式,可以交叉运用:
- 看源码:向优秀的代码和架构设计学习;
- 解决问题:解决项目中存在的问题,把握更多进步的机会;
- 画类图:画出系统中的模型和流程,适当运用系统化思维进行分析;
- 从 0 到 1 做产品:锻炼架构设计能力,加深对技术的理解;
- 刻意练习:深度思考,逼近问题的本质。