当我们在讨论加班与提升的时候,需要首先明白,加班背后的原因。
加班并不简单粗暴的等于,工作太多,正常上班时间无法完成,所以需要加班。
从主观和客观上,我们大致梳理了导致程序员加班的“几宗罪”:
主观看上:
客观上看:
总而言之,这就是业务需求的不断增长和程序员人手短缺的基本矛盾。
认为,自我修炼不一定只能在加班后的私人时间进行,加班本身就是一次进行自我修炼的绝好时机,聪明的程序员知道如何充分利用好它。
具体的修炼建议见下:
业务导向:在业务实现基础上,多想一步
直白的讲,这就是做一想二:即当我们要实现一个业务功能时,我们不能仅仅停留在功能实现的层面。怎样可以多想一步?
技术导向:把你的代码当成自己的孩子
什么叫做把代码当成自己的孩子,其实就是要建立好:把技术的精进当成终生奋斗目标的观念。
举个例子,当你完成了一个简单的需求,你的业务的响应时间从10毫秒增加到了100毫秒,你就要有一种心痛的感觉(危机意识),不断地反复扪心自问,为什么慢了这么多。当你对自己有一个技术上的目标时,你就会打开自己的雷达,努力提高自己代码的性能。
那么,我们怎么做到进一步的技术提升呢?
首先,我们需要明白现阶段待解决的问题的关键核心点,找到影响你解决这个问题的缺口。刚刚那个例子,为什么我们会从10毫秒增加到100毫秒,你需要找到响应时间延长的原因。
怎么找到这个影响解决的缺口呢?
首先,你要对每个逻辑都了熟于胸;其次,你需要一个强大的监控数据的支持,找到关键的路径,集中进行性能调优。如果确实是因为业务复杂导致,可以考虑采用并行处理、横向扩展的方案。
勤于总结:不要在同一个坑里摔倒 N 次
程序员的工作,在接触A领域时,你可能踩了一部分坑,花了很多时间去寻找解决方案。但可能只是短短一个月没有接触A领域,你就渐渐忘记了曾经踩的坑。等到你又要去接触它的时候,又栽在了相同的N个坑里,再重新找解决方案。听上去就效率低下,所以如果实在觉得摔在坑里太疼,不如记下来吧。这样就做成了一本专属于自己的踩坑指南。
另外,就像Henrik Warne在《程序员,你会从Bug 中学习么?》所说:Nassim Nicholas Taleb 在 《Antifragile》中写到:“错误包含丰富的信息”。Bug 帮助我们更好地理解系统,告诉我们怎样提高编码、测试和调试技巧。
所以我认为尽可能从 bug 中学习经验,是再正常不过的事了。我发现为每个有趣的bug 记录下来,让我轻易学习到很多。在记录的行为中我会对发生的事情思考得更深刻。同样,一旦记录下来,我可以在之后检查发生的事情。偶尔,我也会浏览文件,只阅读教训部分,对我认为是从 bug 中学到的最有价值的经验加强记忆。
这里分享一个BUG修补记录的例子:
【日期】:2004-08-17
【问题】:当解码 Q.931 信令时无限循环
【原因】:当在Q.931信令中发现一个未知的元素id时,我们试图通过读取它的长度来跳过它,并且将位置指针迁移几个字节。但是,在这个例子中的长度是零,导致我们反复跳过相同的元素 id。
【怎么发现的】:在解码一个 Ethereal 从 Nortel 追踪到的安装信息时发现了这个问题。他们的信息是 1016 字节长度(包含大量快速启动元素),但我们的 MSG_MAX_LEN 是 1000。通常我们会收到一条来自 common/Communication.cxx 的信息,但现在,当直接输入需要解析的数据时,数组末端内存访问越界,其恰好是 0,暴露了这个问题。为了找到它,我仅仅在 9931 解码中添加一些打印输出。但很幸运数据恰好是零。
【修复】:如果长度是零,设置为 1。这方式总是行得通。
【在哪些文件修改了】:callh/q931_msg.cxxcallh/q931_msg.cxx
【我导致的】:是的
【解决Bug的时间】:1 小时
【教训】:信任收到信息中获得的数据。不仅仅是产生大量可能导致问题的数据。显示长度为 0 也同样不好。
PS,善用搜索、多多交流 比独自思考,会更提升效率。
保持好奇心:持续学习、拓展技术圈
技术总是不断变化的、快速迭代的,想要跟上新的技术变化潮流,可以给自己整理出专门的时间去泡一泡技术论坛,多勾搭一些技术达人,进行以技术为目的的社交。当然,最重要的还是要保持对新技术的好奇心。
技术的追求是无止尽的,多看源码、多看成熟的解决方案、多了解方案背后的原理、多看看视频,多写代码,在实践中强化能力。这些其实就是Stay hungry, stay foolish的基本知识点。
说了这么多方法,这里还有容易带来不必要加班的雷点分享给你:
这就是一时的偷懒带来的多余工作,当你发现很多地方都用到同一套逻辑,不如把它封装成一个函数,可能这个写起来比你c-c&c-v需要更长的时间,但是其实节约的是未来的时间,以及培养的是考虑代码复用性及程序的鲁棒性的思维。
当每次上线新的版本的时候,仅仅考虑function well的状态,忽略万一挂了的状态,带来的后果,可能就是真的挂掉,加班解决了。所以,做好风险把控,做足测试,克服万难做好回滚措施,不要掉以轻心,真的可以帮你少紧急加班哦。
以上就是关于这个问题, 想要分享的方法论。还是希望大家健康作息,少加班,多成长。