时间黑洞

为什么你总在加班?为什么你下班后身心俱疲,但又感觉一天没做什么?你的时间都去哪儿了?如何才能早点下班回家?今天,我们来探讨一下这个如今非常普遍现象背后的原因。

办公环境

不知道你有没有这样的经历:你的旁边是电话销售或者售后服务,当你准备将构思好的一段代码写下来时,他们的一通电话让你的构思像被一阵龙卷风袭击一样,再也想不起来。你感觉自己就像置身于菜市场一样,根本无法写出什么像样的代码。

现在开放式办公越来越受欢迎,看起来似乎让同事间的沟通更加的高效、同事的关系也更加融洽,但事实却是你经常被旁边同事与他人的讨论打扰,忍受着视觉与听觉的污染,让你无法集中注意力。原本半小时就可以完成的任务,你需要经常停下来重新捋一下思路,你花费了更长的时间来完成任务,质量还打了折扣。

开放式办公与格子间办公各有利弊,前者更便于沟通,让员工无法在上班时间娱乐;后者给员工一个相对独立的空间,能更加专注高效处理事件。二者似乎难以抉择,正如没有最好的方式,只有合适的方式一样,可以为员工提供两种办公环境,让员工自由选择。如果采用开放式办公只是为了防止员工上班“摸鱼”,你或许应该改善的是招聘标准,而不是让工作效率降低的工作环境。

会议

你可能也有过这样的经历:被邀请参加一个会议,进去之后发现很多的参会者,认真听了一会儿后,发现似乎和你没有什么关系。当你正想看一下之前收藏的博客时,又突然被提问。眼看会议室时间就要到了,组织者似乎对本场会议不是很满意,又约定两天后继续讨论。

毫无疑问,会议是一种高成本的高效沟通方式,但很多人将这种沟通方式滥用,反而浪费了很多的时间。因此,这种形式需要组织者在会前认真做很多准备工作,如:明确会议主题、必要与会人员、参会者会议前需要了解的内容、会议所要达到的效果等。

需求评估

产品需求的合理性,需求与系统间的平衡,投入产出比等,这是我们每个开发者在需求评估时都需要考虑的问题。产品经理与开发者应该站在各自的角度评估需求,并给出合理的解释。对于那些收益较少,但会对系统稳定及维护造成很大冲击的需求,请严辞拒绝,如果产品经理用领导向你施压,而领导又无法给出令人信服的理由,你或许应该考虑换一个团队了。

一个畸形的需求会像核辐射一样污染整个项目。到时你不得不每天充当救火队员,即使在下班时间也会常常收到报警提醒。

如果你评估后认为需求合理,但产品要求你3天完成一个不可能完成的任务,请不要高估自己的能力,说明你的真实情况。要么延长开发时间,要么增加人手。说明自己在不可能的时间完成任务并不丢人,承诺失信才更加丢人。

拼凑代码

你编程的方式是不是在不停的试验,寻找一种看上去能工作的组合?即使你这样随意的开发过程能够产生出一个正确的程序,但你真的清楚你写的代码是如何运行的吗?清楚其中所隐藏的 bug 吗?你需要真正理解你的代码是如何工作的,而不是瞎猜。

相比与拼凑代码的程序员,优秀程序员会首先理解需求,然后在脑海中模拟程序的执行,再将执行过程用伪代码的方式记录下来,检索逻辑是否存在漏洞,是否有值得优化的地方。当他们确定好之后,再转换为代码语言。在这个过程中,他们用80%的时间思考,用20%的时间写出高质量的代码,而他们大多数时间看起来并不是那么忙。他们用伪代码来检查自己的整个代码,也确保自己在编写代码过程中不会走偏而浪费时间。

在编写完成后,差的程序员自己跑一遍代码就提交给测试,而优秀的程序员会重新审视自己刚写的代码,这个过程中又能发现80%的错误,诸如拼写错误,判断边界条件等。不经审视的代码在测试后收到一大堆的问题反馈,如需求不符,数据显示错误等显而易见的问题,在来回反馈问题、处理问题的沟通中,时间又在不知不觉间来到了下班时间,但现在的问题还很多,意味着你今晚要加班解决了。

在这个过程中,我们发现好的开发过程并不会提升你的工作时间和工作量,反而会让你更早下班,安心休息。

  • 认真评估与理解需求
  • 用伪代码检查可行性与常见问题
  • 将伪代码转换为编程语言
  • 审视自己的代码,你通常能找到80%的错误,从而节省大量时间

调试 bug

你可能在工作中经常会听到这样的话:

  • 这问题不可能是我的,我什么也没改
  • 昨天还好好的,怎么今天突然就不行了呢?
  • 我本地跑的好好的,为什么一到线上就不行了?

要知道,如果你写的程序出了问题,那就是你的原因,不是计算机的,也不是编译器的。程序不会每次都产生不同的结果。它不是自己写出来的,是你写的,所以,请对它负责。

我们可能还会在工作中遇到这样的一种人:

  • 查找bug时不停的在程序中散布print,如果print没有找到原因,那就随便修改点什么,让程序看起来好像正常了
  • 出现的问题不值一提,要解决它们并不需要彻底弄懂程序。只要能让程序看起来正常运行就行了
  • 不需要重写这段自己两个月前的烂代码,只要能让这段程序跑起来就行

在大多数情况下,查找并理解 bug 通常占用了整个调试工作的 90%。因此,如果你已经在查找 bug 中花费了太多的时间,你或许应该优化你的异常处理,能够快速定位到问题所在;也应该优化你的代码,不要让那些难以阅读的代码花费太多时间。治标不治本的问题处理方式同样会让你和这个问题纠缠在一起,浪费更多的时间,

质量

不让苍蝇烦扰你的最好方式就是消灭苍蝇,因此,我们需要高质量来减少我们在 bug 中所花费的大量时间。而质量保障在项目中又是一个设计面很广泛的话题,更详细的内容可阅读《代码大全》等经典书籍,也可以查看我的《代码大全》笔记

软件质量大体包括以下方面:

  • 需求调研
  • 产品设计
  • 技术架构(是否包含取悦老板的部分?)
  • 项目实施人员配置(《人月神话》)
  • 数据表设计
  • 开发规范
    • 高质量的类
    • 高质量的子程序
    • 防范式编程
  • 质量保障是否全程关注
  • 自动化测试
  • bug 追踪
  • bug 分析统计

经验告诉我们:错误越早引入软件当中,问题就会越复杂,修正这个错误的代价也就越高,因为错误会牵涉到系统的更多部分。因此,保障开发质量并不会让你做很多工作,而会让你节省很多时间。那些为了追求速度而放弃质量的决策者是愚蠢的。提高质量不仅能缩短开发周期、降低开发成本,也让工作与生活的平衡成为可能。

远离老好人领导

这样的领导大包大揽一大堆,不清楚职责边界。看似做了很多工作,但又有很多问题。这不会给你增加成就感,反而徒增挫败感:每天的问题如洪水猛兽吞噬着每个人的时间,你和他反馈现状,他只会让你放弃你的想法;你和他讨论问题的解决方案,他的方案是权宜之计。请远离这样的领导,他只会不停吞噬你宝贵的时间。


那些经常哭诉自己每天从早干到晚的人不值得同情,抱怨解决不了任何问题,只会浪费更多的时间。

最后,我想引用一段知乎用户在相似问题下的回答

为什么几十年前,很多思想家都幻想过。
随着科技发展,人们每天只需要工作3-5小时。
人们可以享受生活,享受自由,享受家庭,享受大自然。

为什么科技越发展,人们越没法享受科技发展的红利?
人们不仅没法每天工作3-5小时,996还成了福报,35岁被裁员成了标配。
为什么科技越发展,劳动者越痛苦,劳动时间越长。
为什么现在的绝大部分劳动者,都养不活两个孩子?

科技真的进步了吗?社会真的发展了吗?
如果科技进步了,社会发展了,文化繁荣了。
那么是什么夺走了人们的生活,时间,孩子?


相关阅读
Top 12 Things That Destroy Developer Productivity

因为热爱,所以执着。