同学们大家好,欢迎来到今天的分享。
我今天带来的分享是——程序员如何快速进阶,希望通过这次沟通分享,能带给大家一点不一样的学习思路。
那么,为什么需要快速进阶呢?都知道,现在的技术革新可谓飞速,拿前端来说,放眼三五年前吧,技术栈还是简单的 jquery、css 等,随着 mvvm 框架的兴起,前端赢来了飞速发展期,以 vue、angular、react 为主的 mvvm 框架已经层出不穷,倒逼前端工程师们进步。阿里的技术栈对国人影响也是很深,node 中间层的应用成功带来了一大批国内公司的效仿学习,也使得 node 在一段时间里保持着蓬勃的活力,往往 node 被归为前端工程师必备技能,也就是所谓的大前端。另外拿后端来说,从单体应用的 mvc 模式,到近几年流行的微服务架构、Service Mesh 等等,不但语言革新快,架构的演变更是迅速,稍不留神就有可能落伍。
在过去的几年间,我先后遇到过也面试过很多同学,其中发现一个很有意思的地方,那就是优秀的程序员和普通程序员的很大一个区别就是:是否主动学习。不管是编程还是其它,都是一个兴趣和野心驱动的,优秀的程序员最重要的就是始终保持强烈的学习兴趣,能够解决问题,进而用技术改变一点生活。好的程序员从来都不是复制粘贴、靠代码堆起来的,代码写再多,不会学习就好比有名无实,随着年龄的提升,年轻程序员的代码累积量迟早会超过你,这个时候你又拿什么和他们去比呢?
学习其实就是一个知识累计的过程,一般来说 20% 的知识可以解决 80% 工作中遇到的问题, 剩下 20% 的问题需要 80% 的知识与经验才能解决,这就是所谓的二八原则。大家可以试着说下,如何在外界变化复杂的今天静下心来学习,自己平时的学习途径又有哪些?
我上面也说了,不管如何学习,兴趣驱动我觉得是第一位的,毕竟兴趣是成功的导师嘛。现在很多人都在抱怨,特别是一些从业三年左右的开发,抱怨技术发展遭遇瓶颈、公司没有人带,还有抱怨公司技术栈太 low、完全跟不上市场主流等等。我觉得这个问题不是一个特例,大多数开发都会经历这种技术瓶颈,所以我一直在强调,如何学习?如何保持自己的核心竞争力?如何快速进阶、持续稳步提升?
如何做到这些,我大概总结了以下几点,希望对大家有所帮助:
大环境的变化我们是控制不住的,但是我们也不能被大环境所左右。我遇到过很多的程序员,对技术的追求有点激进,对新技术的学习渴望过于强烈,导致沉迷新鲜技术,觉得 rust 好去学 rust,几天后看见 go 又不错回来又学 go,这种三天打鱼两天晒网的情节不在少数。摆正好自己的心态,万变不离其宗,算法、思维、解决问题的方式这些才是最重要的,当然,前提是首先静下心来。
我为什么要强调技术方向呢?再好的技术说到底,也是为了靠技术生活,技术方向选择错的话技术能力再强,没有合适的坑就是一个好树苗也很难长成参天大树。
首先,明确方向,想清楚自己要干什么,理想还是要有的,万一实现了呢对吧!技术路线分为很多种,完全可以根据自己兴趣来选,比如前端、后端、DBA、运维、测试开发等等,想清楚自己的方向,完了之后由方向再去确定自己需要学习的语言或技术栈,比如我想做前端,那么建议你去学习 vue、angular、react 这些,还要学习 es6、typescript、less、sass 等等,又比如说我的目标是架构师,那么打好基础的同时,把部分时间也要留下来学习服务架构,数据库建模、消息队列、缓存、并发、微服务等等。
编程语言其实区别并不大,但是一门编程语言会让你接触不一样的群体,不一样的知识层面,比如学习 nodejs 你会接触到异步编程、io、事件回调等,这个群体大都是 js 爱好者;学习 java 你会接触到 jvm、多线程、队列等;又比如学习 go,你会感受到通道、协程、切片的魅力。总的来说,语言不同、方向不同,带来的技术视野是完全不同的。所以,在你开始之前,明确自己的技术方向。
其次,做好职业规划,凡事预则立,不预则废。何为职业规划,刚入门的小伙伴可能没有太多感触,大都还是停留在大学课堂里,老师教我们的第一堂课就是如何做好职业规划。可能大部分人跟我一样,也已经忘记了自己当时递给老师的规划里面写的什么,不过没关系,现在规划还来得及。特别是从业三年左右,对自己未来已经有点迷茫的人,一定要去规划,多花几周甚至数月时间想想,我要在技术方向上走多远,每个节点需要达成什么目标,这些目标的达成我还差哪些需要怎么做等等。虽然说计划有时赶不上变化,但是前提是你得有计划。
为什么首先强调基础,很多同学一上来就是想学习微服务、消息队列、缓存、分布式等,诚然,这些是高级开发必须掌握的能力,听着也很高大上,掌握这些对自己后面找工作啥的是很有利的。但是,基础不牢固而持续在上面添砖加瓦,就好比根基不稳,房子是迟早要塌的。
什么是高级开发人员,会十余门编程语言的不叫高级开发,我有时候说自己也会十几门开发语言,但是都是 Hello World,你觉得有用吗?我说我会微服务开发,什么 Zookeeper、Feign、Eureka、Hystrix、Zuul、Sleuth 都会用,但是你让我自己开源一个我不会,你觉得这是高级开发吗?我觉得并不是,这算得上是高级应用开发工程师,注意,这还是一个应用开发的层次。所谓知其然还要知其所以然,能知其所以然的我觉得才是真正厉害的大牛。
高级开发是需要客户信赖、企业依赖的人才,给公司带来的价值往往也是数量级的。要想实现这种自我价值,牢固扎实的基础是必不可少的。所谓万变不离其宗,数据结构、算法、设计模式这一整套才是软件设计的核心,掌握这些之后,你说用 java 去写还是 node 去实现,那只是实现思路的区别罢了,往后要做的也就是多去实践适应语言而已。
想要突破技术瓶颈,那就建议你多去学学这些,技术可能过时,语言可能过时,但是这些是不会过时的。大家觉得呢?
基础扎实之后,要做的就是快速形成自己的技术栈,打造核心竞争力。如何才能让自己在一个点上能够发光发热呢?我觉得还是需要持续钻研,业精于勤、铁杵磨成针。优秀的人才往往都有自己的闪光点,现在开发中流行全栈工程师,其实,我觉得真正做到全栈的还是比较少的。部分前端学了一些 node 会写点 crud 就说自己是全栈的人比比皆是,部分后端学了点 vue 也说自己是全栈的也一扯一大堆。我认为,初级开发拼的是基础,中级开发拼的是基础+技术栈的宽度,而高级开发拼的绝对是核心竞争力。
如何打造核心竞争力,我觉得有以下几点建议:
- 多学习,多向前辈请教,积极主动,少点抱怨;
- 横向发展过后,不妨试试纵向发展,学会取舍,选择性的学习,而不是大刀阔斧。知识是学不完的,学会择优,选择适合自己的,不要见啥都想学;锻炼某项核心技能的编码熟练度及编程思想,把握好兴趣点,持续不懈;
- 尝试培养自己的业务抽象能力、沟通能力等这些软实力。核心竞争力其实不仅仅在技术,核心技能提升之后想要拉开和同行的差距就要靠这些软实力了。
上面说了那么多,其实最重要的就是多思考,多坚持。再好的人才也经不住荒废,好钢不用那么迟早也会锈迹斑斑。保持良好的学习态度,以及多点兴趣,在做的时候再多点思考,我觉得成功不会太远的。
最后,人生最宝贵的就是时间,不能浑浑噩噩过日子,你把时间荒废了,到头来就是把自己荒废了。永远不要停止阅读,永远不要停止学习。
希望大家能从本次的分享中有所收获,有所启发,谢谢。
·············
欢迎关注专栏:
《设计模式深度解析34讲》
热门评论
绝对的好文,里面的观点跟我现在的想法一样,非常感谢,我知道自己努力的方向了。
绝对的好文,里面的观点跟我现在的想法一样,非常感谢,我知道自己努力的方向了。
有所启发,写的不错。