你好,我是臧萌。从这一节开始,我们就进入到了技术成长篇。不过在这篇里,我们不去深入聊任何具体的技术细节,而是围绕技术这个核心,和你聊聊如何看待技术,聊聊围绕技术的那些事儿。这是技术成长篇的第一篇文章,我来带你一起看看,我们应该如何定义自己的技术舒适区。

程序员的舒适区

平时我们谈论所处的工作状态的时候,都喜欢用舒适区、学习区、恐慌区这三个词来形容。我觉得这几个词形容得非常贴切。一个人处在舒适区,就是可以轻松愉快地应对自己工作,闭着眼睛都能把工作完成。学习区呢,就是工作有一点挑战,需要学点东西,但是也不需要费什么劲儿。恐慌区,就是看啥啥不懂,干啥啥不会,满满的压力,完全无法进行工作。

不要相信舒适区

其实很多职业都可以轻松打造出自己的舒适区。比如出租车司机、售货员、手机贴膜员这些职业,从技术技能角度来讲,花个几个月,就可以打造出自己的舒适区,然后就可以轻轻松松完成自己的工作了。

但是程序员这个职业不同。程序员所在的软件行业是一个高速发展的行业,如果要把技术当做安身立命的本事,那么程序员就必须要一直学习知识,才能保证自己不被淘汰。下面我来说说为什么。

假设现在你可以不太费劲地完成自己的工作,紧接着的一段时间,你也不需要学什么东西,也可以完成自己的工作,看似岁月静好,十分惬意。但是设想一下,在IT这么一个飞速发展的行业中,为什么没有给你所做的工作带来新的挑战?为什么不需要你们的技术进行升级换代?

答案很可能就是你所在的公司,或者现在所从事的职业,已经处于淘汰、停滞不前的状态了。公司业务非但没有增长,可能还缩水了。这时候一切舒适、惬意、轻松所营造的岁月静好的氛围,其实都是表象。而表象下面,则是你很可能被淘汰。

技术要么发展,要么被淘汰

急速发展的软件行业,尤其是互联网行业,是一个不进则退的行业。业务量和业务的复杂度都在增长,留给开发的时间则是越来越短。为了满足这一切,技术的更新换代,甚至技术方向的完全改变,都是不可避免的。

比如微服务架构,一个重要的目标是能解耦依赖,进而加快迭代。本着配置简单、从轻从快的思想的SpringBoot,很好地满足了微服务的要求,让原本部署在J2EE容器里的war包,变成了返璞归真的jar包,可以直接运行,吃过的都说香。

最近几年风行的Docker,就颠覆了之前打包部署的方式,让打包部署上线这个过程简单又标准。同时与之一起的虚拟化技术,也颠覆了计算资源分配和管理。当然还有很多很多别的技术,比如熔断降级,监控等等,这些技术串在一起,犹如一条龙服务一样,解放了我们程序员的生产力,让我们可以更快地对业务需求作出响应。

如果一个程序员现在还在使用Tomcat、web.xml、打包、物理机、拷贝部署war包,一方面说明公司对程序员的效率要求不高,业务压力不大,也就是业务发展的不好。另一方面,如果这个程序员想出来找工作,和面试官一聊,好么,考古级的技术栈,请问谁愿意要这样的程序员?

我们不能拿公司用不到做借口,程序员就是要有学习的本能冲动,推动公司的技术进步,至少要让公司的技术能跟得上行业标准水平。所以,就好像北上广不相信眼泪一样,我们程序员也不要相信有舒适圈的存在。如果一个工作让一个程序员享受到了舒适圈待遇,那么就说明这个工作可能要凉,可以考虑换个工作了。

学到手的技术会贬值

其实从利益的角度来讲,我们程序员也不应该呆在所谓的舒适区。一个客观事实是,软件行业的技术在飞速地发展,也就是说,程序员现有的技术知识存量,会一直贬值缩水。

长期来看,你觉得公司会为贬值的技术付出不变的,甚至还要增加的薪水吗?如果人才市场上,有性价比更高的人才,要的薪资更少,能做的事情更多,你觉得公司会不会考虑换人呢?

所以说,也许老的技术应对公司的业务足够了,但是这并不代表一个程序员就可以守着老的技术,在一个公司一直混下去。只要技术还在进步,那么就会有人可以用更少的工作经验,更低的薪水,更好地完成一份工作。别等到自己的看家本领被淘汰了,才想起来学习。

做一个合格程序员,就要拒绝技术舒适圈。但是拒绝舒适圈,不代表不能有一个舒适的状态。下面我们就来聊聊程序员的舒适状态。

程序员的舒适状态

程序员的生涯中,只有一直学习才是最舒适的状态。这里说的舒适当然不是指轻松随意,而是通过不断的学习,让自己可以轻松地应对工作,知道自己能够一直学得会、跟得上最新的技术。而自己的这种状态,可以带来发自内心的自信。这种技术自信,就是让自己舒适的根本。那要如何建立这种技术自信呢?我们接着往下讲。

找到提供正反馈的学习目标

其实关于学什么这个问题,我也走过弯路。立过很多flag,最后大都啪啪打脸。捂着“打肿”的脸,我就开始反思,为什么没坚持学下去呢?最后我得出了一个结论:学习没有形成正反馈。

没有正反馈,就是指学了之后找不到用的地方,没有看到学习带来的好处,没有感觉到自己在成长,热情就开始大大下降。最后,心里随便找个什么借口,比如工作很忙啦、这个东西用不到啦之类的,也就弃坑了。

最后,我发现我是一个比较懒的人,也发现工作确实让人“急功近利”,很难像学生时代那样心平气和地为学而学。后来,我总结出来一个寻找学习目标的法则:没事儿不找事儿,遇事儿不怕事儿。

没事儿不找事儿,就是当遇到对你没太大帮助的技术,不去投入大把精力学它。只去简单了解这个技术的大概,细枝末节不去深究,只要知道它解决的问题是什么就可以了。

这样做有两个原因,一方面,当一个技术名词频繁出现在你眼前的时候,不能完全无视它。我们得先知道它是干嘛的,通过什么方法和技巧,解决了什么问题。不到这一步,你就是固步自封了。接下来,你就得想想在自己的兴趣和工作的范围之内,这个技术能否用得上,用上了是否能带来好处。如果不能给你带来好处,那就先不去管它。

遇事儿不怕事儿,就是说每当你遇到任何需要解决的技术问题,不要绕着走,要记下来,挤时间吃透它。因为根据我的经验,你遇到过一次的问题,就会遇到第二次第三次。与其让问题一遍遍地欺负自己,不如自己主动点,第一次遇到问题的时候就别认怂,直接学起来。这样的好处就是正反馈来得很直接,成果立竿见影。

对比上一条说的“没事儿不找事儿”,如果你工作中遇到问题或者某个细节不清楚的情况,正愁不知道学啥呢,忽然一个问题“千里送人头”。这时候还等啥,送上门的不收割,难道还放走了不成?

在这里我举个自己的例子。大概在10年左右吧,Hadoop在国内已经开始火了。我的心也躁动得不行,大数据、分布式、Google论文这些词儿都在撩着我。于是我就立了一个flag:“今年学Hadoop”。结果毛都没学,只是知道了一个HDFS和Mapreduce的基本概念,一丁点实操都没有。

忙吗?那一年其实不算忙。就是自己懒,而且内心就知道这玩意学了用不上。后来过了几年,我换了工作,有一个工作要用到Hadoop和HBase,从把集群折腾起来了,到用客户端API跑通POC,总共也没用俩星期,期间还做了别的很多工作。

无数的经验告诉我,有需求的情况下,知识的供给才是有效的供给。知识解决了问题,就有了正反馈,学习的飞轮才能持续地转下去。还有就是人的潜力是很大的,deadline才是第一生产力,哈哈。

有效的学习姿势

前面说的方式也有一个问题,就是可能无法系统地学习知识。如果只是东一榔头西一棒槌的学,知识会很不成系统。这样不是一个好的学习姿势。我总结出一个学习的方法,就是主动花功夫构建骨架,被动增加知识点。

主动花功夫构建骨架,就是指有大的方向不会,就选个趁手的资料,有计划成系统的学习。任何一门新技术,都要先经历这个过程。比如Spring,核心就是管理对象的创建和依赖关系。你得深入了解Spring内部机制,了解Spring是如何做到这一点的。

如果再往细了说,可以从以下五个点来构建骨架。

构建这个技术骨架,我大部分都是靠自己的业余时间来完成的。在我日常工作中,如果统计下来算的话,应该有30%到50%的时间在学习。其中很大一部分都是在学习一些细碎的小东西,比如某个API或者某个library怎么用之类的。这些东西,都是技术骨架上的点缀。有了自己的技术骨架,接下来就可以等着问题上门了。问题送上门一个,收割一个,so happy。

技术骨架的重要之处还在于,它一方面可以让我们学习相关的新东西时能抓住精要、触类旁通、学得更快更准。另一方面,技术骨架可以让我们学的知识成系统成生态,这样我们才能记得更牢固,用得更顺手。

总结

程序员的舒适区,其实就是自己的技术领地。技术领地越大,舒适区越大。当你精通Java了,Java就是你的舒适区。当你听到一个Java的问题,心里就很舒适,因为你知道这对你来说根本不是问题。

技术只有被淘汰和正在进步两种状态。即使是网络,操作系统这些基础,也在不断地进步。随着IPv6的普及,原来IPv4的知识就被淘汰了。随着计算机硬件的发展,操作系统里的CGroup也应运而生,可以让我们更好地管理资源的分配。即使你原来精通网络,精通操作系统,如果几年不学习,回过头来也会发现自己的知识已经过时了。

所以说,程序员就是要在自己的旧领地被慢慢淘汰的同时,积极地去开拓自己的新领地,让自己的舒适区不断扩大。

思考题

这篇文章,可以说是我这个懒人关于“如何打造技术舒适区”的一套方法。你是如何学习新技术的呢?哪些技术是你领地呢?哪些技术让你觉得自己可以舒舒服服地解决相关问题呢?

欢迎你在评论区写下自己的思考,也欢迎把这篇文章分享给你的朋友或者同事,一起交流一下。

评论