节省代码生成器需要多长时间?

时间:2009-01-14 00:07:41

标签: java code-generation

我的问题似乎很容易,但理论上看起来并不像看起来那么简单。有代码生成软件或应用程序构建软件,无需使用编程语言即可完成。来自Intelliun的VE Server和VE Designer等应用程序应该完成此任务。我的问题是,实际上有人跟踪这种工具的实际节省量,而不是开发团队和源代码演化过程。

对于VE Designer的特定示例,应用程序从设计器完成,您没有看到它的代码,您只需在VE Server中运行该应用程序。所有代码看起来都像XML内部命令。

4 个答案:

答案 0 :(得分:3)

这取决于我们如何衡量时间。

如果比较两个控制组 - 一个手动输入所有代码,另一个使用代码生成器 - 我毫不怀疑使用代码生成器的组将需要更少的时间。当然,这取决于你想要使用发生器的程度,但毫无疑问,随着生成代码的百分比上升,手动输入看起来越来越差。

我唯一关心的问题与代码生成器的来源以及设计的思考程度有关。

如果您不想触摸向导/代码生成器生成的代码,因为您不理解它,则应该将其计入代码生成器。

如果代码生成器强迫您进入错误的设计,则应该将其计入代码生成器。

如果代码生成器吐出这么多类,没人能跟踪正在发生的事情,那么它应该计入代码生成器。

如果代码生成器使你的维护生命在地球上成为一个地狱,它应该计入代码生成器。

如果可以的话,我喜欢理解和创建自己的工具的想法。由他人提供的向导可能会导致问题。对它们的核算或反对应该反映出这些问题。

答案 1 :(得分:2)

您可能想看一下问题“Are code generators bad?”的一些答案。虽然问题本身更多地涉及应该/不应该使用代码生成器,但许多响应都有关于代码生成器使用的缺点以及生成的代码通常必须由实际人员查看/编辑的注释。存在。情况并非总是如此,并且很大程度上取决于生成的代码的质量(毕竟它实际上只是由一个潜在可怕的程序员编写的模板,他们真的想成为一名伐木工人并且不应该被允许在键盘附近)。如果它生成高质量的代码,那么您可能会节省时间。否则,重构结果所花费的时间可能最终与实际编写代码所花费的时间相同或更大。

我个人对代码生成器的结果好坏参半。由Visual Studio自动生成的代码(例如表单设计器)我发现这可能是一个噩梦,如果我需要突然实现某些特殊行为,表单看起来或表现不如预期通常最终会花费我的成本更多时间。我喜欢eclipse中的那个(不是真正的全自动代码生成工具),因为它允许我布局一个类,然后使用内置的可编辑模板构建所有方法签名等(我也知道如果它吐出废话它的我自己的错)。我发现一般框架更节省时间(例如,给予汽车的底盘),而不是获得认为它是好的东西并且完全按照完全但是没有(例如获得) '完全'构造的汽车,只有三个车轮只向右转。)

答案 2 :(得分:1)

我曾经在两种情况下使用代码生成(即一个程序自动吐出2/3左右的代码并让程序员填写其余代码),一次是在一家拥有巨型产品的大公司中时间使用我自己写的工具。在这两种情况下,我发现结果是混合的。

1)它节省了我们开发我们当时需要完成的工作的时间。

2)然而,它将我们锁定在我们的设计中,使得代码变得不那么灵活。它为我们提供了许多我们无法轻易修改的重复逻辑。

据我所知,虽然我确定有例外,如果您使用代码生成工具,输出人类以后必须修改的代码,从长远来看,您将浪费时间。从本质上讲,如果它不像编译器那样,并且不允许你轻易地重构,那么它可能会有上面提到的权衡。

答案 3 :(得分:0)

“代码生成器”和“编程语言”之间并没有明显的区别。如果您使用软件生成代码,即使您不了解详细信息,也会进行编程。 C ++,Java和C#是“代码生成器”,因为它们被编译成较低级别的语言,如果程序员选择这样做,那些较低级别的语言本身可以手工编码。许多编程语言都是以宏工具开始的,使用基于XML的工具编写脚本并不比使用Perl,Python或Ruby编写相同脚本的“程序”更少。

一般来说,通过使用软件生成高度重复的代码来节省时间是一个好主意。潜在的缺点是您可能将自己锁定在一个平台中 - 也就是说,您仅限于代码生成器提供的功能。代码生成器(或编程语言)是否值得完全使用取决于它对给定问题的有效性。

不要因为认为某些格式(如XML甚至HTML)是死“数据”而其他格式(如C ++和Python)是“代码”而陷入困境。数据和代码是可以互换的。需要HTML中的“代码”示例吗?请考虑以下事项:

HTML是一种声明性语言。在其中,您以“这里是一个段落,这里是标题”等方式指定存在的东西。 Python和其他编程语言有必要的部分,你指定“现在添加x和y,现在将x写入内存”等等。

但是,您可以反转此关系。在HTML的情况下,通过浏览器提供时必不可少。 “这是一个具有这些属性的段落”被Firefox解释为“现在使用这些参数呈现文本正文”。作为一个文件,HTML只是死数据,但在解释器的上下文中,它变成了实时代码。与Python相反的情况也是如此。在执行期间,Python指令成为解释器的指令,但Python文件本身就是死文本。从某种意义上说,Python程序作为数据形式的潜在指令集合存在,直到您通过Python解释器运行它。以完全相同的方式,HTML作为数据存储在文件中,直到浏览器对其进行操作为止。

XML是一种数据格式,但指令是一种数据。您可以使用XML来包含命令式语句,例如数学运算或函数调用。是否将XML解释为数据或代码完全取决于上下文;从某种意义上说,所有计算机数据都同时是数据和代码。数据和代码之间的区别是人类的惯例,而不是计算机固有的现实。

编辑:我想我应该在这里承认,在处理器架构层面,代码和数据之间通常存在非常具体的区别。代码是通过处理器内核提供的,并改变了机器的状态。典型的体系结构将等待在单独的存储器区域中执行的位与其他不代表可执行代码的数据保持在一起。但是当你开始谈论口译员时,这种区别会很快变得模糊。