java - 用java重写Perl和shell脚本有意义吗?

标签 java perl shell

我有一堆脚本——一些在 perl 中,一些在 bash 中——用于:

  • 创建数据库(表、索引、
    约束、 View )
  • 解析电子表格并将数据加载到数据库
  • 获取有关一堆文件的信息并将其加载到
    数据库。

  • 这些脚本与用 java 编写的更大的应用程序结合使用,我的经理要求我用 java 重写脚本。他的理由是,如果全部使用一种语言,则更容易使用、移植、管理、理解和支持,而太多的单独部分是设计问题。

    我最初的 react 是,这是一个坏主意。脚本非常简洁和快速,脚本中的琐碎任务 - 例如使用正则表达式查找和替换无效值 - 在 java 中完成时会更加冗长并且很可能会更慢。

    脚本的一个缺点是,当它们在 Windows 上运行时,它们需要 cygwin 才能运行。因此,我想提出一个相反的主张,即我将所有 bash 脚本移植到 perl,以便它们可以在没有 cygwin 的 Windows 上运行,并且我花时间组织和记录脚本。

    问题是“直觉 react ”类型的 react 不足以说服我的经理。我来自 linux 背景,他来自 Windows,我们在方法上有一些经典的 linux 与 windows 差异。

    所以我有两个问题:
  • 我的“本能 react ”正确吗?对于数据库管理、电子表格解析和文件处理任务,java 是否更慢、更冗长且更难维护?
  • 如果第一个问题的答案是肯定的,那么陈述我的案例的最佳方式是什么?


  • 编辑:感谢大家的见解。我想澄清一点:这些脚本并不是隐藏在混淆脚本中的成熟应用程序。在大多数情况下,它们是我通过脚本自动完成的手动完成的任务,后来随着需求的发展而加以修饰。我开始使用脚本语言而不是 Java 的原因是因为这些任务在脚本中更容易完成。例如,一个脚本运行一堆查询,格式化结果,并将它们输出到一个文件。您认为在 Java 中需要多少 LOC 才能做到这一点?

    最佳答案

    问题是,你的直觉 react 可能是对的,但这并不意味着你的经理一定是错的——他可能有很好的理由希望这一切都用 Java 完成。尤其重要的是,如果你被困在公交车上,找到一个懂 java、perl 和 bash 的替代者比找到一个懂 Java 的人要困难得多。撇开“它们只能在安装了 cygwin 的 PC 上运行”的问题不谈。而且很可能,性能并不像您想象的那么大。

    话虽如此,您最好的办法是花一些时间估计将它们全部移植到 Java 所需的时间,以便他做出明智的决定。当你在做的时候,估计将 bash 脚本移植到 perl 需要多长时间 记录它们。然后让他决定。记住 - 他不会像你一样把大部分时间花在编码上,所以他可以做出一些决定是公平的。

    如果他决定继续使用 java 选项,尽可能地移植其中一个脚本,然后报告两个版本,如果你对 perl/bash 脚本的简洁性是正确的,你应该能够从并排检查两个版本中获得一些经验。

    编辑: MCS,老实说,在我看来,这些脚本在 perl 和/或 bash 中实现得更好,而不是在 java 中实现,但这并不是重点——重点是你如何向你的经理证明这一点。如果你解决这个问题,你就解决了“直觉 react ”问题(顺便说一句,这是一个提示 - 开始将你的直觉 react 称为“基于经验的判断”)和“陈述我的案例的最佳方式”问题。

    现在,您必须意识到的第一件事是,您的经理(可能)不会走这条路只是为了激怒您。他几乎肯定对这些剧本有真正的担忧。考虑到它们可能是真正的担忧(如果不是,则没有任何进一步的意义-如果他出于某种政治原因下定决心要做这件事,那么您不会改变主意,无论如何什么,所以只要继续做并将其添加到您的简历中)因此,如果您要去任何地方,您需要向他提供解决他担忧的信息。如果你能做到这一点,那么你就已经成功了一半以上。

    那么,他的顾虑是什么呢?根据您的帖子,以及我的判断和经验:-) 我会说它们是:

  • 可维护性
  • 就是这样,只是可维护性

  • 我也猜他担心的是不是 :
  • 业绩

  • 当然,最后一个我可能是错的。在我最后工作的地方,我们遇到了一个 SQL Server 性能问题,与复制有关,它影响了企业提供客户支持的能力,所以性能是一个问题,所以我们解决了它。但一般来说,性能并不像程序员想象的那么严重。如果他真的告诉你性能是一个问题,那么把它考虑进去。但是如果他没有提到它,忘记它 - 可能只有你认为这些脚本在 perl/bash 中运行得比它们在 perl/bash 中运行得更快这一事实java很重要。

    所以,可维护性。这归结为回答“如果 MCS 落入总线之下,谁将维护这些脚本?”的问题。和补充问题“这会不会给我(即你的经理)带来问题?” (旁白:不要被整个巴士事情所困扰。“跌倒在巴士底下”是各种风险的有用且外交的速记,例如“如果有人用我公司无法支付的薪水引诱他离开会发生什么匹配?”,“如果他决定移民到百慕大会怎样?”,“如果我想解雇他会怎样?”,“如果我想提升他会怎样?”,当然,“如果会怎样?只是他有一天因为某种未知的,可能与公交车有关的原因停止上类?”)

    请记住,考虑和减轻这些风险是您的经理的工作。

    那么,该怎么做呢?

    首先,演示这些脚本实际上是如何可维护的。或者至少它们的可维护性如何。记录它们(在适当的文档中,而不是在代码中)。培训一位同事来维护他们(选择一个想要获得/提高他们的 perl 和 bash 技能的人,以及你的经理信任的人)。重构它们以使其更具可读性(必要时牺牲性能和巧妙的脚本技巧)。如果您想继续使用 bash,请创建一个文档,其中提供安装 cygwin 和 bash 的分步说明。无论如何,记录安装 perl 和运行脚本的过程。

    其次,选择其中一个脚本并将其移植到 java。随意选择最能展示 perl/bash 优于 java 的脚本,但 尽你所能移植它。 使用 java.util.regex 来做你在 perl 中做的同样聪明的事情。将其记录为记录其他内部 java 实用程序的标准。如果性能实际上是一个因素,则测量其相对于 perl/bash 脚本的性能。

    第三,经过那次练习后,请对自己诚实地了解它们的相对可维护性。问问你训练的那个人他的想法。如果您仍然认为 perl/bash 脚本或多或少与 java 版本一样易于维护,请尽可能准确地估计将剩余脚本移植到 java 所涉及的工作(现在您将能够非常准确地做到这一点,因为你实际上已经移植了一个)。然后将比较脚本、文档和估算(以及绩效数据,如果适用)交给您的经理,并与他一起检查。提出您的反建议(a. 将它们留在 perl 和 bash 中,但将它们记录下来并培训一位同事,b. 将 bash 脚本移植到 perl,记录下来并培训一位同事)。

    最后,让你的经理权衡所有信息并做出决定,并遵守他的决定。事实上,不要只是遵守他的决定,接受他可能是对的事实。仅仅因为你比他更了解 perl/bash/java 并不意味着你一定比他更了解管理团队/部门。如果他的决定是坚持使用 perl/bash 或移植到 perl,请庆幸!因为您不仅按照自己的方式行事,而且在经理的评价中有所提高,并在此过程中学到了宝贵的一课。

    关于java - 用java重写Perl和shell脚本有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/484355/

    相关文章:

    java - 聊天应用程序的 recyclerview 不显示任何数据或 View

    java - 我如何知道特定函数的 Java 类是否存在?

    perl - 如何使用 mod_perl 在 CGI::Application 中拥有持久的 DBIx::Class?

    c - 获取和设置路径

    linux - 使用bash脚本获取当前目录的第二个根文件夹

    java - 如何剪切字符串以适应 MySQL 中的文本字段

    java - 检索 servlet 中的 GWT 单选按钮值

    Perl 打开动态生成的文件

    Perl 高效代码

    c - 如何将后台进程移动到前台