65.9K
CodeProject 正在变化。 阅读更多。
Home

软件开发中的混乱与秩序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.89/5 (5投票s)

2018年7月3日

CPOL

6分钟阅读

viewsIcon

8402

软件开发中的混乱与秩序

世界(以及软件开发)可能充满混乱,因此我们制定了惯例和规则来带来秩序。这能促进进步,但我们也必须认识到其代价。

万物伊始

在一个混乱的世界里,一切都是不可预测的,而且毫无意义。你的行为结果是随机的,这使得朝着目标前进变得不可能。个体为了自身利益而行动,没有任何合作或集体努力,进一步阻碍了进步。

因此,自古以来,我们就发展了社会规范和惯例来驯服混乱,带来一定程度的秩序。如果我们知道别人会如何与我们互动,那么我们就能在这个世界中找到自己的道路,并取得一些进步。我们也发展了共同的价值观,使我们能够就重要问题和集体目标达成一致,从而进一步加快进步。

因此,我们能够比任何其他物种组织起更大规模的群体,并相应地影响了世界。

群体之中

随着社会的不断发展,我们的一些规范变成了规则和法律,我们的一些价值观变成了道德,进一步增加了秩序性。然而,如果不受制约,这个过程会一直持续下去,直到集体角色压倒个人。这可能会导致高度高效的组织,但对创新和创造力来说是灾难性的。

在秩序与混乱的谱系中,两端都会变得相当糟糕,但幸运的是,古老的智慧给了我们识别和处理问题的方法。

太极图,在道教及其他哲学中使用,象征着看似矛盾的力量往往是互补和相互依存的。据说万物皆有阴阳,目标是在两者之间找到正确的平衡。

和谐共存

秩序与混乱的特定二元性在我们周围无处不在,其有趣的例子多种多样,例如:体育,有足够的规则使事物易于理解,而不压制个人创造力和灵感;音乐,作曲家将规律的音阶、节奏和和声与偶尔的不和谐音、升降记号自由节奏融合在一起;随机算法,如蒙特卡洛方法,受益于随机输入;以及现代民主制度,其中左翼(热衷于拥抱未知)(理论上)受到右翼(强调传统的重要性)的制约,反之亦然(理论上)。

最后,关于太极图有趣的一点是黑点中的白点和白点中的黑点。前者警示我们,极端有秩序性可能导致一种特定的暴政式混乱,在这种混乱中,个体的行为被群体意志所压倒,从而变得毫无意义。反之,后者则代表了秩序有时可以从一段持续的混乱中涌现出来。这个通常令人不快的过程,在它较温和的形式中,我们通过“走出舒适区可以带来益处”来熟悉,而在更严重的情况下,它被“烈火锻造真金”的格言所捕捉。

在软件开发中

尽管这可能很有趣,但质疑它是否适用于工作场所,或者更具体地说,是否适用于软件开发团队是公平的。结果发现,很容易找到上述普遍思想在我们作为软件开发人员的日常经验中得到印证的例子。

如果你遇到以下情况,你就能识别出混乱:

  • CI 中的测试有时会间歇性失败。
  • 你害怕从源代码管理中合并最新代码,因为担心应用程序当前已损坏。
  • 你运行了 npm install,结果一切都停止工作了。
  • 你的持续部署有时会失败。
  • 由于 CPU 或内存不足,你的 TDD 反馈周期缓慢,并且可能会因后台进程而停滞。
  • 你不确定是否有人和你一样在开发同一个功能。
  • 你不确定是否有另一个团队正在开发可能否定你团队工作的内容。
  • 你不确定客户是否真的需要你正在开发的功能。
  • 你不确定你的同事是否休假了,或者他们今天是否会来上班。
  • 领域术语在代码和文档中不一致。
  • 每日站会时长从 5 分钟到 1.5 小时不等。
  • 你注意到了“流失”

这个列表还会继续,甚至会深入到马斯洛需求层次的更低层级,例如,你不确定自己每天是否会处于一个稳定、舒适的工作环境中,或者简单的 HR 问题是否得到了一致的处理。

如果你识别出以上任何一种情况,那么你就需要找到一种方法来带来一些秩序。当列表中的这些情况出现时,它们可能会吞噬你数小时的时间,甚至数天的时间,严重破坏生产力。然而,它们都可以得到解决:有些需要时间,有些需要金钱,有些需要沟通,有些需要领导力,但都需要关注。如果你不解决呢?嗯,确实,如果你在荒野中待足够长的时间,你可能会遇到 JQuery,但我不会称之为好策略。

现实中

但是,正如历史告诉我们的那样,你能把它做得太过火吗?

  • 静态分析工具对于确保一致的编码风格非常棒,但你真的想因为有人错过了评论中的标点符号而破坏构建并阻止发布到 UAT 吗?
  • 代码审查是确保代码质量和共享知识的好方法,但一个简短的强制审查者列表可能会引入瓶颈,阻碍开发人员的进展。
  • 坚持经过检验的框架和语言可以使每个新项目快速启动并运行,但如果你仍然使用经典 ASP 编写 Visual Basic,你可能会难以高效地交付现代应用程序。
  • 修复版本号可以在短期内省去很多麻烦,但你可能会被绑定到一个库,而这个库又会绑定到其他库,以及一个语言版本,这会阻止你将来使用新的现代开发功能。
  • 公司价值观有助于集中大家关注共同的目标,但它们不应凌驾于你个人的道德观之上

好消息是,秩序与混乱之间的界限并非锋利如刀刃。如果你能意识到哪一方过于占主导地位的警告信号,并且在必要时采取谨慎的补救措施,你就可以舒适地走在这条路上。

快速发展、适应变化并允许个人蓬勃发展的小公司更有可能让混乱获得立足之地。它们也更有可能从混乱中汲取秩序,但在任何此类轶事中都要警惕幸存者偏差。因此,如果你在一家小公司,请考虑一些一致的流程和可预测性如何能改善情况。

拥有层层官僚机构和明确、公开的公司价值观的大公司更容易过度追求秩序。在这些公司里,个人自由受到自然限制,因此改变事物可能很困难。然而,尝试新技术和“蓝天日”可能会带来回报。你可以通过改变堆栈的一部分来分阶段开发,例如,前端切换到 TypeScript,同时保持堆栈的其余部分熟悉。

结论

好消息是,我们在情感层面天生就具备识别我们是否走在正确道路上的能力。引用多伦多大学的 Jordan Peterson 的话,他对这里表达的观点有很多论述

一只脚站在秩序中,一只脚站在混乱中……你足够安全,可以自信,但又不是足够安全到感到无聊。你足够感兴趣,可以保持清醒,但又不是足够感兴趣到感到恐惧。当你处于这种状态时,当你发现事物有趣且有意义时,时间就会悄悄溜走。”

正是在这里,个人可以蓬勃发展,群体可以合作,组织可以取得成功。这才是你应该追求的目标。

最初发布于 2018 年 3 月 12 日的 instil.co

© . All rights reserved.