程序开发的墨菲定律
又是一年的初夏时节, 天气变化无常, 时而如爆款特卖急速升温, 时而满30减10, 人的心情也如气温一般起伏不定.
下意识的打开钉钉工作群看看发生了什么, 此刻的心情总是矛盾的, 看着同事的只言片语试着去理解事情的来龙去脉, 有时偶尔想插上几句话, 又生怕陷入其中脱不开身, 只读不回又让人觉得我对此莫不关心, 全然不顾又让人忐忑不安, 生怕因为我的原因让同事陷入麻烦. 这种心理应该是很普遍的现象吧.
流行在程序员间的一个很经典的笑话是这样的, 普通人见面的第一句话是问“你吃了吗”, 程序员见面的第一句话是问“呦, 最近又在写什么bug”. 这是一种自嘲也反应了一个普遍的现象, bug与程序总是形影不离, bug会导致功能异常, 会影响用户体验, 会失去客户, 甚至会让人怒砸手机、砸电脑, 造成财产损失.
程序员会因为自己开发的功能而沾沾自喜, 也会因为自己写的bug而垂头丧气, 如果你告诉一个程序员你开发的功能有bug, 程序员的第一反应是“你的环境是不是有问题, 你傻逼你会用吗”. 如果你换一个说法, 你实现的功能跟预期的有点不太一样, 你能否检查下, 程序员的第一反应就会是“我操, 有bug”. 同一件事, 不同的说法, 得到的回答截然不同. 不管怎么说, 程序员多少是有些不愿面对bug的, 可是又不得不解决, 因为我们都知道, 不解决的后果会很严重.
写了两年代码, 发现墨菲定律也适用于程序开发. 墨菲定律是一种心理学效应, 主要内容是: 1, 任何事都没有表面上看起来那么简单; 2, 所有的事都会比你预计的时间长; 3, 会出错的事总会出错; 4, 如果你担心某种情况发生, 它就更有可能发生.
先说第一项. 当你接手一个功能的时候, 产品经理告诉你, 你要做出这个效果, 能这样那样就行. 你看着原型图和流程图, 对照需求说明, 快速转动着你的大脑, 仿佛一瞬间, 你已经实现了这个功能, 它已经能在你的大脑中完美运行了. 你双手枕头, 身体往椅子上一靠, 轻松写意的告诉产品经理“这个简单, 明后天就搞定”.
随后你开始快速着手开发, 在这个过程中, 你突然发现不妙, 这件事似乎没有表面上看起来的那么简单. 如果这样改, 会不会影响到现有的功能; 如果这样走, 会不会流程走不通; 如果这样操作, 会不会产生bug. 突然之间似乎又多了很多功能要开发, 按照排期估计完不成啊, 可是已经答应了别人了. 此时又陷入烦躁和自责中无法自拔.
再说第二项. 一个大型项目的开发不是一蹴而就的, 需要将大版本划分成小版本, 小版本划分成大功能, 大功能划分成小功能, 小功能整理成一步一步的业务逻辑, 逐步实现. 理想的情况下, 项目经理将这些功能逐一排期, 开发按照这个排期完成开发、测试、发布, 最终完成整个大的项目.
不管做任何事都会遇到困难. 程序开发更是如此, 由于技术水平、开发经验、团队协作等多方面原因, 完成一个功能的时间总是会超过预期的时间. 为了在规定时间完成任务, 加班加点不可避免, 通宵熬夜家常便饭, 秃头脱发十有八九. 下次排期时多争取点时间, 时间和生命且过且珍惜.
聊聊第三项. 人体的组成、社会的运转、世界的构成、宇宙的形成看似无比精妙, 实则处处暗藏bug. 程序代码更是如此, 再优秀的架构, 合理的设计, 准确的编码, 也会产生意想不到的bug.
一个产品的成功不代表没有缺点, 只不过没有被放大而已. 以前我对于bug的心态是害怕, 害怕又要面对突如其来的问题; 现在我对于bug的态度是厌烦, 怎么又有bug, 真是烦不胜烦. 既然会出错的事总会出错, 与其把时间浪费在烦躁不安, 自怨自艾上, 不如叹息一声, 静下心来接受bug, 慢慢排查, 找到根本原因, 逐步解决.
最后一项. 每当完成一个功能的时候, 心中都会充满成就感. 我知道每个程序员都很享受这样的感觉, 因为他们知道他们的成果不仅可以换来面包, 更能改变世界, 实现自我价值. 虽有夸大其词之嫌, 但其实一点都不为过.
稍等一下, 似乎少了点什么步骤, 哦, 对了, 还要测试. 没有测试的代码是危险的,没有测试的代码是危险的,没有测试的代码是危险的, 重要的事情说三遍. 其实三遍都算少的了. 完成了一项功能, 如果没有全面测试各种条件, 当你发现某种条件还没有测试, 你担心会不会出问题, 但是你又觉得应该没有啥问题的时候, 无数次的事实证明, 问题总是会出现在你没有测试的那个条件中. 这似乎很讽刺, 但就是这么残酷, 现实一次次的打脸, 已经让我面红耳赤了. 下次完成功能的时候, 不要想着自己改变了世界, 先想想自己已红肿不轻的脸吧.
写着写着又到了这样的时刻, 夜里12点, 某年某月的某些天的此时, 我还在急忙的赶进度、修bug、思考未来的人生.
程序开发永远不要抱有侥幸心理, 此时未做好的事, 将来会花数倍的时间来修复, 可是将来的时间够用吗?明日复明日,明日何其多,我生待明日,万事成磋砣.