在混沌的世界中,一切都是不可预测的,没有任何意义。行为结果随机,这使得实现目标变得不可能。个体为了自己的利益行事,没有任何合作或集体努力,进一步阻碍了进步。因此,自古以来,就发展了社会规范和惯例来驯服混乱,带来一定程度的秩序。如果对他人将如何与互动有一个概念,那么就可以在这个世界上找到自己的道路,并且可以取得一些进步。还发展了共同的价值观,使能够在重要问题和集体目标上达成一致,从而进一步加速进步。
因此,能够以比其他任何物种更大的规模组织起来,并对世界产生相应的影响。随着社会的不断发展,一些规范变成了规则和法律,一些价值观变成了道德,进一步提高了秩序。然而,如果不加以控制,这个过程可能会继续下去,直到集体的角色压倒了个体。这可能会形成高效的组织,但对创新和创造力来说却是灾难性的。
在秩序与混乱的谱系上,两端的情况可能会变得相当糟糕,但幸运的是,历代的智慧给了认识和处理问题的方法。在道教和其他哲学中使用的太极图象征着看似相反的力量往往是互补和相互依赖的。据说一切都有阴阳,目标是在两者之间找到正确的平衡。
秩序与混乱的特殊二元性在周围无处不在,有趣的例子包括:体育,有足够的规则使事情变得可以理解,而不压制个体的创造力和风格;音乐,作曲家将规则的音阶、节奏和和声与偶尔的不和谐、偶然和自由时间混合在一起;随机算法,如蒙特卡洛,从随机输入中受益;以及现代民主制度,其中左派(渴望拥抱未知)在理论上被右派(强调传统的价值)所制衡,反之亦然(在理论上)。
最后,值得注意的是太极图中的黑点在白色中,白色在黑色中。前者警告,极端的秩序可能会产生一种专制的混乱,个体的行为被群体的意志所压倒,因此变得毫无意义。相反,后者代表了秩序有时可以从持续的混乱时期中出现。这个过程通常是不愉快的,其温和的形式是熟悉的,因为从舒适区之外的时间中受益,而在更严重的情况下,它被谚语所捕捉:最热的火产生最坚强的钢铁。
在软件开发中,很容易找到上述一般观念在作为软件开发人员的日常经验中的真实例子。如果认识到混乱,可能会经历以下情况:CI中的测试失败是间歇性的;害怕合并源代码控制中的最新代码,以防应用程序当前已损坏;运行了npm install,一切都停止工作;持续部署失败是间歇性的;由于CPU或内存不足,TDD反馈循环变慢,并且可能因为后台进程而停滞;不确定是否有其他人正在处理相同的功能;不确定另一个团队是否正在处理可能会抵消团队工作的事情;不确定客户是否真的需要正在处理的功能;不确定同事是否休假,或者他们今天是否会来;代码和文档中不一致地使用领域术语;每日站立会议从5分钟到1小时半不等;注意到了“混乱”。
如果以上任何情况都认出来了,那么需要找到一种方法来带来一些秩序。当这个列表上的事情出现时,它们可能会从一天中抹去几个小时,甚至从一周中抹去几天,破坏生产力。然而,它们都可以被解决:有些需要时间,有些需要金钱,有些需要沟通,有些需要领导力,但都需要关注。如果不这样做?嗯,如果在荒野中度过足够的时间,可能会最终得到JQuery,但不认为这是一个好策略。
但可以,正如历史教那样,做得太过分吗?静态分析工具对于确保一致的编码风格很有用,但真的想因为有人在注释中错过了标点符号就中断构建并阻止发布到UAT吗?代码审查是确保代码质量和分享知识的好方法,但一个简短的强制审查者名单可能会引入瓶颈,阻碍开发人员。坚持使用经过测试的框架和语言可能会让每个新项目快速启动,但如果仍然使用Visual Basic和Classic ASP,可能会发现很难有效地交付现代应用程序。固定版本号可以在短期内节省头痛,但可能会被绑定到一个库,这会绑定到其他库,以及一个语言版本,这会阻止使用新的现代开发功能。
公司价值观有助于让每个人都专注于共同的目标,但它们不应该被允许压倒自己的个人道德。好消息是,秩序与混乱之间的界限并不是刀刃。如果意识到一边变得过于占主导地位的警告信号,并在必要时采取谨慎的补救行动,可以舒适地走在它上面。
快速移动、适应变化并允许个体蓬勃发展的小公司更有可能让混乱站稳脚跟。它们也更有可能从混乱中提取秩序,但要警惕任何此类轶事中的幸存者偏差。如果在一家小公司,因此,考虑一些一致的流程和可预测性可能会改善事情。拥有层层官僚机构和明确、公开的公司价值观的大公司更容易过度秩序化。在这些公司中,个体自由自然受到限制,所以很难改变事情。然而,尝试技术和蓝天日可能会带来回报。可以逐步开发,例如切换到前端的TypeScript,同时保持其他堆栈熟悉。