Language agnostic 实际代码与支持代码的比率

Language agnostic 实际代码与支持代码的比率,language-agnostic,coding-style,Language Agnostic,Coding Style,我发现只有大约30%的代码真正解决了问题,其余的则被日志记录、测试、参数检查、异常、错误处理等等所占用。您是否在代码中发现了这一点,并且是否有IDE/编辑器允许您隐藏不感兴趣的代码 有哪些语言可以使支持代码更易于管理和更小 编辑-我想我们都知道业务逻辑和其他代码之间的区别。我不是说日志记录等不重要。问题是,当我编码时,我要么实现业务逻辑,要么确保事情不会中断。对我来说,这是两种不同的思维方式,其他人是否也这样开发,是否有一个IDE支持这种开发方式?如果我的IDE可以隐藏“不感兴趣的代码”,我肯定

我发现只有大约30%的代码真正解决了问题,其余的则被日志记录、测试、参数检查、异常、错误处理等等所占用。您是否在代码中发现了这一点,并且是否有IDE/编辑器允许您隐藏不感兴趣的代码

有哪些语言可以使支持代码更易于管理和更小

编辑-我想我们都知道业务逻辑和其他代码之间的区别。我不是说日志记录等不重要。问题是,当我编码时,我要么实现业务逻辑,要么确保事情不会中断。对我来说,这是两种不同的思维方式,其他人是否也这样开发,是否有一个IDE支持这种开发方式?

如果我的IDE可以隐藏“不感兴趣的代码”,我肯定会关闭该功能。我敢打赌,你不会希望这种情况发生的:)

当然有一些语言可以最大限度地减少支持代码的数量,但我不认为您可以从Java切换到JavaScript,因为在JavaScript中,您不必声明每个异常。。。我认为将支持代码放在适当的位置是非常必要的


哦,你可以正式指定你的程序并进行数学证明,这样你就不需要太多地支持你的代码了;我不想让所有的例行程序都万无一失,只想让那些暴露在外部世界的程序万无一失


更高级、更动态的语言通常不那么冗长。弱类型还可以节省大量代码。当然也有权衡。

我在Visual Studio中使用#region指令来折叠不是主要焦点的代码块,例如单元测试。对于log4net,日志记录语句只有一行。我还没有找到任何方法来减少参数检查代码,尽管听起来C#4有某种契约框架可以帮助减少参数检查代码

您所指的真正代码通常称为“业务逻辑”

在一个好的单元测试系统中,您的单元测试应该在它们自己的类(可能还有它们自己的程序集)中,所以这不应该是一个问题

其余的大部分是基于语言的。语言越高级,在某种程度上避免编写支持代码的能力就越好。此外,目标明确的开发系统可以帮助您避免编写大量代码(VisualBasic的ScreenBuilder、RubyonRails等等),但如果您使用它来开发预期应用类型之外的目标,这些抽象可能会崩溃,并导致您编写的代码与其他任何代码一样多。(如果你在计算素数,VB和Ruby不会有多大帮助)

除了语言/平台之外,还有重构——一种消除所有支持代码(以及业务逻辑中的冗余)的艺术,以保持代码库干净和小

在练习高级重构时,您可能最终会为自己编写工具

有时,将数据从代码中抽象出来并放入某种类型的结构化文件可以消除大量支持代码,并将其余部分转移到“业务逻辑”中,因为现在解析数据并进行设置是程序执行的“业务”的一部分

这是一个很好的折衷方案,因为这种类型的业务逻辑更易于理解和考虑。这种抽象的另一个优点是,您的所有“配置”现在都是在数据中完成的,这往往会使它成为别人的问题


作为这类工具的一个例子:Rails本身!它需要大量的web开发样板文件,并将其从代码中分离出来,放入由数据和简单代码驱动的库中(Ruby模糊了代码和数据之间的界限——它们的数据文件实际上是循环回到Ruby代码中指定的!)

支持代码与“真正的代码”一样重要。产品的质量取决于支持代码和其他任何东西

以汽车为例。就从A点到B点而言,这只需要一辆手推车:一个车架、一个座椅、一台发动机、几个轮胎。但是现代汽车不仅仅是基本的。采用电子发动机正时的高效发动机。自动变速器。桶形座椅。加热和空调齿条和齿轮转向。电动刹车。防抱死刹车。安静舒适的小屋,免受天气影响。安全气囊。褶皱区和其他高级安全功能。等等等等

即使在软件中,细节和执行也很重要。如果你发现你的“支持代码”看起来更像是乱七八糟的东西,那么是时候重新思考你的基本方法了。但最终,合身性和光洁度决定最终产品的质量,与其他任何东西一样

编辑:你应该问自己的问题:

是您的“支持代码”

  • 是用带子绑在杆子上的伞管,还是用金属和玻璃制成的机舱框架
  • 系在汽车前部的一根管子,还是集成在褶皱区的能量吸收保险杠
  • 系在车架或四轮防抱死动力制动器上的绳索上的抓钩
  • 一副护目镜和一件厚外套,还是一块挡风玻璃和一个加热系统
这些问题的答案可能会影响您对“支持代码”的关注程度

编辑:对戴夫·特维评论的回应:

我鼓励大家重新阅读最初的问题,“支持代码”的一个例子是“错误处理”。考虑一下。想象一下,比如说,汽车,微波炉,甚至是操作系统。错误处理是否应该降级为二等公民身份,因为它在某种抽象意义上具有“支持”功能?在汽车中,安全特性是车辆基本设计的一部分,并构成t值的很大一部分