很多时候,会出现一些快速任务,这些任务不是您正在开发的主要软件的一部分。有时任务是一次性的,即将此文件与数据库进行比较,并让我知道差异。在Perl / Ruby / Python中进行文本解析比在Java或C#中容易得多(部分原因是使用正则表达式要容易得多)。使用Perl / Ruby / Python解析文本文件(甚至可能是vbscript畏缩然后将其加载到数据库中)所需的时间可能比创建Java / C#程序来执行此操作或手动执行所需的时间要少得多。
此外,由于大多数动态语言解析文本的便利性,它们非常适合代码生成。当然,你的最终项目必须使用C#/Java/Transact SQL,但不是剪切和粘贴100次,查找错误,再剪切和粘贴100次,通常(但并不总是)更容易使用代码生成器。
最近一个工作的例子是,我们需要将数据从一个会计系统获取到我们的会计系统中。该系统具有导入格式,但旧系统具有完全不同的格式(固定宽度,尽管某些内容必须匹配)。任务不是创建一个程序来一遍又一遍地迁移数据。它是将数据推入我们的系统,然后继续维护它。因此,即使我们是C#和SQL Server商店,我也使用Python将数据转换为我们的应用程序可以导入的格式。最终,我使用python并不重要,重要的是数据在系统中。我的老板非常感动。
我经常看到动态语言用于测试的地方。创建一个Python/Perl/Ruby程序来链接到Web服务并向其抛出一些数据比创建等效的Java程序要容易得多。您还可以使用python来攻击命令行程序,生成大量垃圾(但仍然有效)测试数据等。很容易。
动态语言的另一件事是代码生成。创建 C#/C++/Java 代码。下面是一些示例:
我经常看到的第一个代码生成任务是人们使用动态语言来维护系统中的常量。动态语言可以用来相当容易地解析文本文件,并使用枚举创建Java /C#代码,而不是手动编码一堆枚举。
SQL是一个完全不同的球类游戏,但通常你可以通过剪切和粘贴100次而不是尝试执行一个函数来获得更好的性能(由于执行计划的缓存或将复杂的逻辑放在函数中,导致你逐行而不是在集合中)。实际上,使用表定义自动创建某些存储过程非常有用。
购买代码生成器总是更好。但是,即使您不这样做,花时间剪切/粘贴是更有趣,还是创建一次Perl / Python / Ruby脚本然后让它生成代码更有趣?如果手动编写代码需要花费数小时,但创建代码生成器的时间更少,那么即使您在节省时间并因此节省金钱后使用它。如果创建代码生成器花费的时间比手动编写代码所需的时间长,但您知道必须多次更新代码,则可能仍然有意义。如果你需要2个小时来处理代码,4个小时来做生成器,但你知道你必须手动处理代码等效工作另外5或6次,而不是创建生成器显然更好。
此外,使用动态语言,有些事情比Java / C #/ C / C++更容易。特别是正则表达式浮现在脑海中。如果你开始在Perl中使用正则表达式并意识到它们的价值,你可能会突然开始使用Java正则表达式库,如果你以前没有这样做过的话。如果你有,那么可能还有其他东西。
我将给你留下最后一个任务的例子,这个任务对于动态语言来说会很棒。我的工作伙伴不得不拿起一个装满文件的目录,并将它们刻录到各种CD上,供各种客户使用。有一些客户,但有很多文件,你必须查看它们才能看到它们是什么。他用手做了这个任务。Java/C# 程序本来可以节省时间,但对于一次来说,由于所有的开发开销,这是不值得的。然而,在Perl / Python / Ruby中将某些东西拼凑在一起可能是值得的。他花了几个小时来做这件事。创建Python脚本来检查每个文件,匹配它转到哪个客户,然后将文件移动到适当的位置,这将花费不到一个。同样,不是标准工作的一部分。但这项任务是一次性的。是自己做更好,花更多的时间让Java / C#完成任务,还是花更少的时间在Python / Perl / Ruby中完成它。如果您使用的是C或C++由于C或C++编程的额外问题(指针,无数组边界检查等),这一点更加引人注目。