大家好,我是飞哥!

很多同学都和我说过一个问题,有心想扎实地提高技术能力,但无奈工作太忙没有时间该咋办。相信你的实际工作中可能也有过过类似的困境。

当你工作了以后,你会发现抽出时间来学习貌似是一件很困难的事情。现在很多公司都是 996,早9晚9,12小时的高强度工作导致下班后根本不想再动脑子。

当你工作了以后,你会发现工作不像你想象的那么美好,并不是时时刻刻都是在做高技术含量的事情。你的大部分时间将被的各种琐碎的会议、业务需求评审会、线上维护、bug处理所占据。

当你工作了以后,可能感觉每天做的都是各种杂事。不单单技术感觉难以成长,就连年底的绩效考评成绩可能也是平平淡淡,没有亮点可言。你的自信也在一点一点的被磨没。

如何在繁忙的工作中来保证自己的技术能力能够持续进步,工作绩效能够突出?我觉得这是一个共性的问题。我个人 2010 年硕士毕业,有在腾讯、搜狗十多年的工作经验。我今天就结合我的工作经验,来谈谈对这个问题的看法。

一、高效成长方法

我觉得办法总比困难多。怎么破局,关键点是在于要协调好工作绩效和技术成长这二者的关系,争取让它们能够达成一种互相促进的状态

我分享的方法可以分成如下几步。

1. 保持好奇,勤于在项目中发现问题

我觉得第一点应该要保持一颗好奇心,多多去项目中发现问题。我举两个我个人刚工作前两年时间里的两件事情。

第一件事情是在 2010 年的时候,我在第一家公司还是一个新人,我发现我们所开发的客户端启动一次特别的慢。于是我开始思考 Windows 进程启动的过程中都干了啥,有哪些地方可以优化一下。后来进行过系统的研究后我用了两个手段进行改进,将启动速度提升了 15% 左右。并总结成文反馈给了我的领导。鉴于此类的工作输出比较多,刚工作一年多的时候,我的 leader 就准备提升我为副组长了。不过我还是更热爱互联网,于是婉拒了领导的挽留,我在 2011 年跳槽到了腾讯。

第二件事情是在腾讯内部我同样在工作中进行了深度的知识整理。当时老大给我分配到了一个模块,所有合作方数据源的图片下载模块。这个模块的需求描述起来也很简单,就是把合作方数据中的图片 url 摘出来,然后下载并存储到腾讯的服务器上。在这个过程中,引发了我很多的思考。比如新建一个空文件的话消耗磁盘空间吗?一个文件夹下最多能存多少个文件?文件名太长了的话会影响系统性能吗?

基于这些深度的思考我进行研究和学习,后来的技术方案就是为了提高性能,我们将文件通过 hash 的方式散列到三级目录结构下。保证每一次获取文件都很快完成。基于此我还整理出了一篇热文,该文章在腾讯内部KM年度热文榜上登顶,而且在外网也是广为流传,参见《Linux文件系统十文》。

2.带着问题去深度思考、查各种资料

在我思考的过程中,我需要回头去翻各种经典书籍、看 Linux 的内核源代码,以及其它各种网上的资料。曾经有一次为了把一个内存的工作原理的问题弄明白,我嫌家里的书少,网上的资料不够,直接跑到国家图书馆待了半天。

下图是我日常工作思考中参考的一部分书籍。值得强调的是,我更多地是把它们当成工具书。在遇到疑惑的时候来查。而不是像在学校里那样,逐本逐页的硬啃

有想下载的同学我提供给大家。不过如果大家有需要,我仍然建议大家购买纸制版。纸质书使用起来要比电子书方便的多。

下载地址: https://pan.baidu.com/s/1yzSbhD96wdfYW6ncA9cN7A
提 取 码: 4uqa
解压密码: kfngxl

3. 别偷懒,加上动手验证实测

在看完书,查完各种资料后,理论上你可能得到初步解释了。但其实这个时候你的理解深度还远远不够。而且还有可能是你查到的资料是片面的,甚至有可能都是错的。

这时候的动手实际测试显得尤为重要,用各种性能测试工具也可以,自己直接亲手写一段代码也ok。反正就要用实践检验理论是否正确。不正确的时候,再去别的地方搜其它的解释。如此往复迭代,直到把疑惑彻底消灭掉为止~

举个例子,我曾经为了搞懂一条 TCP 连接消耗多大的内存,一台机器到底能不能突破 65535 条连接而进行了大量的实验,参见:

  • 漫画 | 一台Linux服务器最多能支撑多少个TCP连接

  • 漫画 | 理解了TCP连接的实现以后,客户端的并发也爆发了!

  • 百看不如一练,动手测试单机百万连接的保姆级教程!

  • 漫画 | 花了七天时间测试,我彻底搞明白了 TCP 的这些内存开销!

4. 将你的成果用起来,提升项目效果

最后这一步是点睛之笔。只有对实际工作提升的技术才是有价值的技术。把你的深度思考的结论应用到项目中,将项目的效果进行提升。

举个我几年前的小栗子,当时接手了前任开发留下来的一个推送模块,推送一次要跑将近 12 个小时。经过我剖析业务逻辑后发现主要耗时都花在了用几百万的 imei 到一个几千万条记录的数据库里查询了,大量的网络 IO 加随机磁盘 IO。

我把业务逻辑进行了改造,而是一次性将表中数据全查下来。然后在本地机器上在执行顺序读取遍历查询。这样大量的网络 IO 、大量的远程 mysql server 的随机磁盘 IO 全被我干掉了。在 mysql 上和本地服务器上全部都是磁盘顺序 IO。整体耗时直接从 12 小时下降到了 20 分钟左右。

再比如在近两年里,我们接手了一个新的业务。在该业务中,由于各种历史原因,存在大量的本地网络 IO(每天几十亿量级)。这些网络 IO 其实都可以通过其它方式优化掉的。说到这里,可能很多同学也会隐隐约约地觉得本机网络 IO 没有多大的开销,这个认知其实是非常有问题的。

本机网络 IO 和跨机 IO 比较起来,确实开销会低一些。比如发送数据不需要进 RingBuffer 队列,直接把 skb 传给接收协议栈(经过软中断)。但是在内核其它组件上,开销可是一点都没少,系统调用、协议栈(传输层、网络层等)、网络设备子系统、邻居子系统整个走了一个遍。连“驱动”程序都走了(虽然对于回环设备来说只是一个纯软件的虚拟出来的东东。对细节感兴趣的同学参见《127.0.0.1 之本机网络通信过程知多少 ?!》

所以我们接手该项目以后,花了一些人力把所有的本地网络 IO 都优化掉了。优化逻辑上线后,该服务线上的总 CPU 核数就得以节约掉了 30%,一个非常不错的效果。

二、时间管理

最后一点,但是也非常重要,那就是时间管理。我分两个角度来说,一是专注度、二是时间分配。

1. 精力高度专注

在时间管理中,首先我觉得最最重要的一点就是要精力高度专注

现在的各种手机应用已经成为了人们深度思考的最大障碍。各个 App 都希望能瓜分你的时间,让你在它的各种碎片,低价值甚至是垃圾的信息里逗留。吸取你的注意力,为他们创造广告价值。你一定要学会控制住自己刷手机的欲望。

当然现在生活中你完全脱离手机也不可能。至少工作中还有很多事情需要你通过手机处理。累了也需要需要打开某个 app 消遣一会儿。

所以我推荐的时间管理方法是番茄工作法。某段时间内,比如半个或者一个小时,集中精力只对某一件事的高专注度的学习或工作。在这段时间内,王者荣耀、抖音、微博、朋友圈等会分散你注意力的东西统统丢开,甚至连整个手机扔到手摸不到的地方都可以。中间间隔比如 5 - 10 分钟,可以掏出手机来刷一会儿,稍事休息,然后再进入下一个半小时。

平时我都是尽量保持这种方式来进行学习和工作的。我把手头的事情按照轻重缓急排个序,然后就一个时间段,一个时间段地进行安排。在我专注处理某个问题的时候,周围的很多干扰我都会自动屏蔽(倘若这段时间内有人胆敢打扰我,哼,我就生气!

飞哥:程序员完全没时间提升自己该怎么办?相关推荐

  1. 程序员完全没时间提升自己该怎么办?

    先声明一下,封面图是开发者内功修炼的飞哥,不是我啊!这篇文章也是转自他公众号. 很多同学都和我说过一个问题,有心想扎实地提高技术能力,但无奈工作太忙没有时间,该怎么破? 的确,现在很多公司都是 996 ...

  2. 【初级程序员】的十点提升建议,以及10个【程序员】的好习惯,让你“秃”然变强

    前言 工作前三年是职业生涯中成长最快的几年,在这段时间里你会充满激情,做事专注,也容易养成良好的习惯.在我们公司有些同学在前三年中就快速成为某一个领域的技术专家,有些同学也可能止步不前.本文和大家一起 ...

  3. 帮公司面试了一个30岁培训班出来的程序员,没啥工作经验...

    首先,我说一句:培训出来的,优秀学员大有人在,我不希望因为带着培训的标签而无法达到用人单位和候选人的双向匹配,是非常遗憾的事情. 最近,在网上看到这样一个留言,引发了程序员这个圈子不少的轰动. &qu ...

  4. 大写的服!90 后程序员利用业余时间帮网友鉴定毒蘑菇,拥有百万粉丝成网络大 V...

    整理 | 王晓曼 出品 | 程序人生 (ID:coder _life) 近日,有媒体爆料南京一程序员利用业余时间,研究菌物做科普,去年帮网友鉴定毒蘑菇达 2000 余次,成为拥有百万粉丝的网络大 V. ...

  5. 千万不要相信程序员在加班时间写的代码!

    其中最重要的就是这条:不要相信一个程序员在加班时间写出来的代码. (软件工程的学说表明,连正常时间好好写的代码,也不要太相信.不过这不是本文的重点,略过不提.) (不懂代码的人,看到本文中的Java代 ...

  6. 不要相信程序员在加班时间写的代码

    http://www.cocoachina.com/programmer/20161215/18359.html 不要相信程序员在加班时间写的代码 2016-12-15 00:01 编辑: suili ...

  7. java程序员那些提升_Java程序员如何进行自我提升?

    只有不断积累项目经验以及提高自己的技术,如果一直没有明确自己的职业规划,请扪心自问: 1.我到底适不适合当一名程序员? 2.我到底应不应该一辈子以程序员为职业? 3.我对编程到底持有的是一种什么样的态 ...

  8. 工作996,没时间提升自己怎么办?

    最近,996的话题挺火的,我不想声援或者谴责996,更不不想纠结于996是否合理,只是想站在程序员的角度,思考一下如果暂时无法摆脱996的现状,程序员们又该如何提升自己呢? 一个程序员996之后,留给 ...

  9. java开发有不加班的吗_千万不要相信程序员在加班时间写的代码!

    作为一个最底层的程序员,我先记录一些只有底层程序员才会知道的事情.如果多年后,我违背自己进入这个行业的初心,走上管理岗位,也能回想起一些禁忌,避免一些错误. 其中最重要的就是这条:不要相信一个程序员在 ...

最新文章

  1. RabbitMQ (三)消息重试
  2. ICML 2019全纪录:论文解读、workshop讨论、核心知识都在这里了
  3. SPL--Serializable
  4. mysql中序列的使用,在MySQL中使用序列的简单教程
  5. UE4 使用VaRest的最佳实践
  6. java gui框架_推荐!程序员整理的Java资源大全
  7. C#趣味程序---理财高手
  8. Project Student:维护Webapp(可编辑)
  9. STM32 资料整理贴
  10. Grails 1.2参考文档速读(4):第3章剩余内容
  11. 有趣的python代码实例_Python之路:200个Python有趣的小例子一网打尽
  12. 如何解决js地址栏中传递中文乱码的问题
  13. oss读取txt文件
  14. 各种学习资料库,非常好的收藏汇总!!!!!
  15. 6410裸机加载linux内核,KG—Tiny6410裸机环境搭建(补充篇)
  16. DTU和工业网关的区别是什么?怎么选?
  17. 12 项目收尾管理:项目验收、项目总结、系统维护、项目后评价
  18. 用python绘制熊猫图案,在python中绘制熊猫系列的CDF
  19. 学习论文写作课程的心得体会
  20. 华为发布业界首款5G基站芯片:天罡

热门文章

  1. beta分布_浅谈脑电的beta频段振荡
  2. 谷歌浏览器32位版本安装包_Windows 10 OEM渠道告别32位版本 这意味着什么?
  3. 201205阶段二FFmpeg编码
  4. C语言基本类型和存储类别
  5. linux环境下zookeeper部署
  6. Linux中断处理与定时器
  7. WPF学习12:基于MVVM Light 制作图形编辑工具(3)
  8. 关于Html中jsp调用Android中方法无效的一点建议
  9. 又拍网架构-又一个用到python的网站
  10. 查看数据库系统字符集