You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
12 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 22 | 学习观:程序员如何定义自己的技术舒适区?
你好,我是臧萌。从这一节开始,我们就进入到了技术成长篇。不过在这篇里,我们不去深入聊任何具体的技术细节,而是围绕技术这个核心,和你聊聊如何看待技术,聊聊围绕技术的那些事儿。这是技术成长篇的第一篇文章,我来带你一起看看,我们应该如何定义自己的技术舒适区。
## 程序员的舒适区
平时我们谈论所处的工作状态的时候,都喜欢用舒适区、学习区、恐慌区这三个词来形容。我觉得这几个词形容得非常贴切。一个人处在舒适区,就是可以轻松愉快地应对自己工作,闭着眼睛都能把工作完成。学习区呢,就是工作有一点挑战,需要学点东西,但是也不需要费什么劲儿。恐慌区,就是看啥啥不懂,干啥啥不会,满满的压力,完全无法进行工作。
### 不要相信舒适区
其实很多职业都可以轻松打造出自己的舒适区。比如出租车司机、售货员、手机贴膜员这些职业,从技术技能角度来讲,花个几个月,就可以打造出自己的舒适区,然后就可以轻轻松松完成自己的工作了。
但是程序员这个职业不同。程序员所在的软件行业是一个高速发展的行业,如果要把技术当做安身立命的本事,那么程序员就必须要一直学习知识,才能保证自己不被淘汰。下面我来说说为什么。
假设现在你可以不太费劲地完成自己的工作紧接着的一段时间你也不需要学什么东西也可以完成自己的工作看似岁月静好十分惬意。但是设想一下在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是如何做到这一点的。
如果再往细了说,可以从以下五个点来构建骨架。
* 核心架构设计这个技术有哪些核心的架构设计。架构设计决定了技术的特征也决定了这个技术的优劣势和适用的场景。比如Java是基于字节码和虚拟机的HBase的本质就是一张排序的大表Aerospike本质就是一张大的散列表等等。
* 功能模型:这个技术有哪些功能,功能的接口是什么。
* 状态模型:系统在运行时有哪些状态,状态之间的变化原因是什么。
* 数据模型:这个技术是怎么组织数据的,是怎么处理数据的。
* 线程模型:这个技术有哪些线程,分别是做什么的。
构建这个技术骨架我大部分都是靠自己的业余时间来完成的。在我日常工作中如果统计下来算的话应该有30%到50%的时间在学习。其中很大一部分都是在学习一些细碎的小东西比如某个API或者某个library怎么用之类的。这些东西都是技术骨架上的点缀。有了自己的技术骨架接下来就可以等着问题上门了。问题送上门一个收割一个so happy。
技术骨架的重要之处还在于,它一方面可以让我们学习相关的新东西时能抓住精要、触类旁通、学得更快更准。另一方面,技术骨架可以让我们学的知识成系统成生态,这样我们才能记得更牢固,用得更顺手。
## 总结
程序员的舒适区其实就是自己的技术领地。技术领地越大舒适区越大。当你精通Java了Java就是你的舒适区。当你听到一个Java的问题心里就很舒适因为你知道这对你来说根本不是问题。
技术只有被淘汰和正在进步两种状态。即使是网络操作系统这些基础也在不断地进步。随着IPv6的普及原来IPv4的知识就被淘汰了。随着计算机硬件的发展操作系统里的CGroup也应运而生可以让我们更好地管理资源的分配。即使你原来精通网络精通操作系统如果几年不学习回过头来也会发现自己的知识已经过时了。
所以说,程序员就是要在自己的旧领地被慢慢淘汰的同时,积极地去开拓自己的新领地,让自己的舒适区不断扩大。
![](https://static001.geekbang.org/resource/image/96/de/96d69ee22bce1293c3b9b724864dd7de.jpg)
## 思考题
这篇文章,可以说是我这个懒人关于“如何打造技术舒适区”的一套方法。你是如何学习新技术的呢?哪些技术是你领地呢?哪些技术让你觉得自己可以舒舒服服地解决相关问题呢?
欢迎你在评论区写下自己的思考,也欢迎把这篇文章分享给你的朋友或者同事,一起交流一下。