InfoQ|反 996 有理:催程序员交代码,写不出好软件( 二 )

//id overflowing and corrupting //acceleratorAngle... //QA says wheeeeee! charbluetoothId[30]; intacceleratorHash; intacceleratorAngle =0; if(!validateHash( acceleratorHash, acceleratorAngle)) { report_critical; abort; return; } char*deviceId){ memset(bluetoothId,0, sizeof(bluetoothId)); strncpy(bluetoothId, deviceId, sizeof(bluetoothId)-1); } 评点:你是否曾经面临过这样的压力 , 被告知只需完成即可?你交付的代码真的完成了吗?催促工程师按截止日期交付的组织往往很愿意按期交付 。 这是因为他们的重点在于按期交付 , 而不是一切就绪后再发布有价值的、没有混乱的产品 。 控制汽油流向汽车发动机的代码需要通过各种方式进行反复锤炼 , 以确保永不失效 。 而时间驱动型的组织很少会加上这样的要求:“锤炼关键代码 , 找到破坏价值的缺陷!”在这种情况下 , 唯一的可取之处是 , 值得信赖的工程师在发现混乱时 , 往往会做一次性的尝试 , 而不是被迫在周五之前进行检查 。
错乱的金额 客户报告间歇性转账金额非常大 。 转账本应是 1~2 美元 , 但结果却超过了 2 万美元!
迫于时间压力下完成的代码
//Code was ported from single //threaded embedded device to //multi-threaded env //ToBcd is being called from //multiple threads! unsignedintgTemp; intgShift; unsignedintToBcd( unsignedshortamount){ gTemp =0; gShift =0; while(amount >0) { gTemp |= (amount%10) << (gShift++<<2); amount /=10; } returngTemp; }精心编写的代码
//during Representative Load //testing - no more //unnecessary globals! unsignedintgTemp =0; unsignedintgShift =0; } returngTemp; } 评点:你有没有听过这样的说法 , 将现有代码移植到新平台应该很容易 , 只需简单地重新编译和部署即可?组织向工程师施压 , 迫使他们走捷径 , 例如将深度嵌入的代码移植到新的平台和编码范式 , 而在日程安排中却没有列入用典型负载来追捕意外混乱的计划?
不稳定的依赖项 后端出现间歇性的崩溃 , 导致事务取消和时间损失 。
迫于时间压力下完成的代码
lib3rdPartyUnstable.doSomethingGood精心编写的代码
lib3rdParty.doSomethingGood评点:如果你是在任意的时间压力之下 , 你觉得有多大可能确保方案在负载下保持稳定?你是否应该牺牲你的周末时间去做公司可能会抱怨的工作 , 因为他们只是认为你这是在拖延交付日期?在任意时间压力下 , 工程师更有可能跳过或通过快乐路径进行负载和性能测试 , 而这些测试正是发现未知混乱根源所需的 , 比如上面那个第三方依赖项 , 就需要更换或升级 。
竞争危害 最高出价有时会显示出疯狂的巨量金额 。
迫于时间压力下完成的代码
voidsetHighestBid(longbidCents){ highestBid = bidCents } }精心编写的代码
/*Note: This needed to be


推荐阅读