开发者怎样在枯燥的工作中寻求技术的提升

技术成长是很多同学面临的问题,一些工作了几年的同学会遇到成长瓶颈,觉得自己进步缓慢,无论是公司业务的原因还是个人原因,觉得自己的技术水平得不到成长了。或者一些刚工作没多久的同学和在找工作的同学,都想在一个好的环境下工作,提升自己的能力。

如果你有一个好的平台,你可能做一个很小的功能就会有几十万几百万的用户使用。做一个新产品,从主线产品稍微导入一点流量过来可能就有几十万几百万的访问。你不仅要将功能开发出来,还要考虑到性能问题,能支持多少的访问,是否需要水平扩展,是否需要做负载均衡等等问题。每次不断有新问题不断有新挑战,就可以不断成长。

如果你没有这样一个平台,可能你们公司运营了1、2年的产品才有几千、一万的用户,有些技术问题你根本连遇到的机会都没有。用户量没有上去,业务不复杂,什么分库分表、读写分离、负载均衡、分布式设计等等和你无关,因为公司产品还没有发展到那样的级别。

我偶尔会听到一些在二线城市的朋友说:“做技术就在北上广待着,别回来,小城市的项目不养人。做的东西没什么挑战,没几个用户,都是CRUD,时间久了人就废了。”

这是外部原因,不得不承认,一个好的平台对一个人的发展至关重要,无论什么职业。我个人对技术提升有一些自己的见解,我们高中物理都学过「匀加速直线运动」,他的公式是这样的:

我们都学过这个公式,S是位移,V0是瞬时速度,a是加速度,t是时间。在技术成长之路上,S是你的技术能力,V0是你当初决定钻研技术的热情,a是你技术成长的加速度,t是时间。你技术的能力有多少,不是你一时的热情决定的,而是你成长的加速度和时间决定的。t很好理解,如果你坚持学习,随着时间的推移,现在的你一定会比以前的你更有能力。

a是我认为最重要的一项,它指的是技术成长的加速度,由两部分构成:

1. 你所在的平台,这一点我刚才已经提到了,一个好的平台很重要。
2. 个人的学习

当你同时满足这两点时,你才能在相同的时间内比别人学的多很多。然而并不是每个人都会有一个好的平台,毕竟BAT就招那么多人,明星互联网企业就那么点,不是每个人都能进去。还有大量的二三线城市的开发者,可能他们的业务做的并不是那么大。

当你没办法保证你的第一项时,你只能想办法让自己的第二项足够优秀。这样,你的整个a才能不至于比别人小很多。

怎么通过个人学习来提升自己呢?我们都知道一定要学以致用,学了的东西如果不用,过一段时间就忘了。如果你 平时经常写PHP,突然一段时间因为工作原因去写Golang了,等再回来写PHP的时候发现手生,写起来没有以前流畅了。

你看了《高性能MySQL》,看了《Unix网络编程》还看了《深入理解Nginx:模块开发与架构解析》,你不去实践,你是很难更深层次的理解他们的。但你所处的环境又涉及不到这些怎么办?你就是个写业务层代码的,你们公司产品没多少用户根本用不上这些,你只是一个小外包公司做网站的,功能要求能用就行。我觉得这些根本不是你追求更深层次技术的借口,或许你现在用不上,但总有一天你会用得上的。只是你现在的方式可能有一些问题。

你需要先从你手上的工作开始。

如果你是一个写业务层API的,每天的工作就是照着套路去写代码,按照一定的规则一个一个的写。或许你可以尝试一下让自己不再去做这种重复性的体力劳动,能不能写一个程序,让这个程序自己生成API,而你每次只需要做一些简单的配置。这样腾出的时间可以去做自己感兴趣的事情,可以学习一些新东西。你的领导发现后,你也会有机会做更有意思的事情。

同样,你也可以阅读一下你所使用的框架的源代码,学习一下别人的设计思想,如果你觉得哪里有问题或者不够好,你可不可以给作者提交一个Issue或者PR。

平时用到的Apache、Nginx、fpm这些,你知道他们的master进程是怎么管理worker进程的吗?他们是怎么接收请求的,select、epoll这些你了解吗?

你平时开发解决的一些特殊场景,例如加解密、支付接口调用、Excel导出、绘图等,可不可以单独做成一个库,开源出来和大家交流学习?

你有写博客吗?或坚持写博客吗?

或许我们表面上在做着一些枯燥乏味的事情,这些没有办法帮助我们成长,但我们自己要有极客精神,我们要用极客的手段释放自己的劳动力,我们要乐于分享乐于学习,能从简单的事物中发掘它的本质。工作大部分都是重复性的、枯燥的,不同层次感受都是一样的,你每次设计功能知道怎么支撑并发怎么高可用,重复这一套大同小异的东西,你一样也会觉得没什么意思。我们不断在这种枯燥的工作中寻找有趣的事情,才是有价值的。

和团队的同学聊天时的感悟,即兴而写,希望对你有一些帮助。

发表评论

电子邮件地址不会被公开。 必填项已用*标注