软件开发:一种主观的艺术 - vadim

发表时间: 2022-08-17 08:52


你们中的大多数人都熟悉加入一家新公司的感觉,并有那种重写一切的冲动。看到你的新团队成员几年前犯下的亵渎神明的行为,让你的眼睛很痛。当然,你知道的更多,你会在开发该功能时遵循最佳实践。对吗?
可能是吧。但多年来,我了解到,"最佳实践 "的问题在于它们非常主观。你工作的每家公司都有不同的规则要遵循,随着时间的推移,这些规则是有意义的,当你离开公司时,你会把这些规则中的一些作为你自己的 "最佳实践"。
但是,在软件开发中,没有一个适合所有的尺寸。我们所做的一切都非常有主见,只对我们有用。这是一个由不同范式的不同方面建立起来的怪物,它帮助我们,也只有我们,变得高效。

自以为是的实践
如果我们看一下开发实践,有许多不同的方法可以让你去构建软件。

  • 测试驱动开发--每个人都试图实现的开发的圣杯。
  • 接受测试驱动开发--TDD的一个变种,但更侧重于从业务角度解释需要做什么。
  • 行为驱动开发--另一个变种,着重于建立对软件的一部分应该如何工作的描述的共同理解。
  • 例子驱动开发和故事TDD--甚至更多的变化,你可以定义软件需要做什么以及如何测试它。


正如你所看到的,每一种都是非常自以为是的做法,每一种都有开发者宣扬它是构建软件的唯一正确方式。如果你不做TDD,你还能做软件开发吗?


自以为是的框架
javascript的世界充满了奇迹。有一些框架都声称对DOM的渲染和模块的封装有不同的方法。你可以用一千种不同的方式来构建你的网络应用(甚至是移动应用),而你使用的这些框架都有自己的最佳实践,并不匹配。
服务器端渲染不久前被放逐了,但现在它又回到了桌面上,成为新的酷事,用部分服务器端渲染来 "加速 "你的应用程序。现在的最佳做法是在服务器端渲染那些变化较少的内容,而在浏览器上渲染那些经常变化的部分。一些人同意,另一些人则会说这太疯狂了。
TailwindCSS是一个非常有意见的CSS框架的例子,它的样式是通过类来完成的。许多人讨厌这个想法,并争论说:"HTML变得臃肿,Tailwind就像内联样式,它违反了样式和标记的分离"。传统的智慧与Tailwind相反--在样式表中隐藏尽可能多的CSS,对一个元素使用单一的类。但我喜欢这个概念,并认为它使我在为我的博客做HTML修改时变得高效,比如说。
那么,谁是正确的呢?没有人。这只是我们的观点,即使我们有相反的观点,它们也是有效的。


自以为是的产品
你知道微软的Excel是如何试图猜测你要做什么的,有时它的假设是错误的,所以你必须到配置中去改变字体、表格等。这就是约定俗成的配置--这意味着产品在90%的情况下都能愉快地工作,但在必要时允许改变其他10%的情况。
有很多自以为是的产品--即使我们只拿日历应用来说。有许多不同的方式可以显示日历和每周的时间表,以至于有数百个应用程序是以强烈的意见建立的。例如,有的只允许以1小时为单位的预订时段,有的只允许以周为单位的查看。
在Java世界里,一个很好的例子是Ant与Maven的对比。这些都是用于创建java可执行文件的构建工具。Ant给你提供了灵活性,你需要指定一切,而Maven则隐藏了大部分东西,但允许你覆盖默认值。
在Java生态系统中,Maven比Ant更受欢迎,因为它90%的时间都很容易使用,而另外10%的时间你可以通过配置来改变。
惯例创造了一个自以为是的产品;“自以为是”创造了用户的喜悦;用户的喜悦创造了成功的商业。

自以为是的流程
你可能会认为,如果你没有完全按照敏捷的要求去做,你就是一个失败者。如果你不能按照敏捷之神的旨意去做,你还能做软件开发吗?
嗯,这也是错误的。关于做敏捷,有太多的观点,以至于最初的宣言不再有意义了。例如,在过去的几个月里,我听到了几个关于敏捷团队做估算和计划的矛盾说法。

  • 你应该以点来估算。
  • 你应该以小时为单位进行估算。
  • 你根本就不应该估算,应该把故事分解成最小的任务。
  • 根本就不要做敏捷。瀑布是最好的。


尽管你可能认为 "做敏捷 "是最好的做法,但关于如何做敏捷有很多自以为是的,盲目地遵循任何建议都是没有意义的。
采用任何东西都有一个简单的指南:你采取任何你认为适合你的目标的方法论,然后挤压它、拉伸它、压扁它,使其适合你的组织--这样你就可以尽可能地有效。如果方法论中的任何内容使你效率低下,就把它扔掉,然后定义你的规则。

自以为是的结论
没有任何银弹解决方案能让你自动高效。恰恰相反,如果你采用任何方法论并试图完全按照它的描述来实施,你的效率很可能会下降。
敏捷并不意味着对所有事情都有一个规则,而只是遵循红色的虚线。把事情做好是唯一重要的因素。即使你的公司对SCRUM方法有独特的适应性--这也很好,只要它对你有用。
观点很重要。你周围的环境使你的情况独特,你选择的工具也必须适应你的情况。
你选择的每一个框架、编程语言和IDE都只是一个工具,它应该帮助你以一种有效的方式从A点到B点,而不影响你的价值观。只要你有了这些,那么恭喜你,你有了一个工作系统。

软件开发是非常主观的 - vadim