如果公司使用 C++、C# 或 Java 作为应用语言,为什么还要学习 Perl、Python、Ruby? [关闭]

2024-05-07

我想知道为什么 C++、C#、Java 开发人员想要学习动态语言?

假设公司不会将其主要开发语言从 C++/C#/Java 切换到动态语言,那么动态语言有什么用呢?

与您已经使用了几年的静态语言相比,只需学习几天的动态语言就可以更快或更好地完成哪些辅助任务?

Update

看到前几个回复后,很明显存在两个问题。 我的主要兴趣是雇主认为合理的开支。 也就是说,我正在寻找雇主资助动态语言学习的理由。除了员工将拥有更广阔的视野之外, 雇主通常会寻找一些“真正的”福利。


很多时候,会出现一些快速任务,但这些任务不属于您正在开发的主要软件的一部分。有时任务是一次性的,即将此文件与数据库进行比较并让我知道差异。在 Perl/Ruby/Python 中进行文本解析比在 Java 或 C# 中容易得多(部分原因是使用正则表达式要容易得多)。使用 Perl/Ruby/Python(甚至可能是 vbscript)解析文本文件可能会花费更少的时间cringe然后将其加载到数据库中,而不是创建 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++ 编程的额外问题(指针、无数组边界检查等),这一点甚至更加引人注目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果公司使用 C++、C# 或 Java 作为应用语言,为什么还要学习 Perl、Python、Ruby? [关闭] 的相关文章

  • 如何重写一个列表列表,使值的“孤岛”彼此唯一?

    假设我有一个列表列表 或更概念上准确的二维数组 list 1 1 0 0 0 1 1 2 0 0 0 2 2 2 0 0 0 0 2 0 0 0 0 1 0 我想识别具有相同值的不同区域并重写列表 以便每个区域都有唯一的值 如下所示 lis
  • 从二进制文件读取字节到 long int

    我有两个问题 我有二进制文件的数据 我想使用 read 函数读取前 8 个字节以签署 long int 但我不能 你知道我该怎么做吗 如何直接读取一块数据到字符串中 我可以像所示那样阅读吗 前任 ifstream is is open te
  • Web 文本编辑器中的 RTF 格式

    网络上是否有支持 RTF 格式文档输入的文本编辑器 我知道这对 webdev 来说有点奇怪 但我需要从数据库中读取 RTF 文档 并在基于 Web 的文本编辑器中对其进行编辑 然后将其存储回 RTF 中 在我在转换工具上投入太多资金之前 我
  • 2D 矩阵上的 Numpy where()

    我有一个像这样的矩阵 t np array 1 2 3 foo 2 3 4 bar 5 6 7 hello 8 9 1 bar 我想获取行包含字符串 bar 的索引 在一维数组中 rows np where t bar 应该给我索引 0 3
  • 将连续行与相同的列值合并

    我有一个看起来像这样的东西 我该如何处理 0 d 0 The DT 1 Skoll ORGANIZATION 2 Foundation ORGANIZATION 3 4 based VBN 5 in IN 6 Silicon LOCATIO
  • 使用 Hibernate Envers 的复合表

    我有一个带有复合表的应用程序 其中包含一个额外的列 一切正常 直到我们添加 Hibernate Envers Audited org hibernate MappingException 无法读取 no pack response Resp
  • 如果出现重复,则主键取正值

    我有一个数据框df Key1 Key2 Value K11 K21 V1 K11 K21 V1 K13 K23 V2 K13 K23 V2 现在 例如对于相同的键 K11 K21 组合 我们有 2 个值 一负一正 如何从此 df 中仅获取正
  • 用于生成 ISO 文件的 Maven 插件

    有没有可以生成ISO镜像的maven插件 我需要获取一些模块的输出 主要是包含 jar 的 zip 文件 并将它们组合成一个 ISO 映像 Thanks 现在有一个 ISO9660 maven 插件可以完成这项工作 https github
  • 如何在 SQLite 中检查数据库是否存在 C#

    我目前正在用 C 编写一个应用程序 并使用 sqlite 作为嵌入式数据库 我的应用程序在启动时创建一个新数据库 但如何让它检查数据库是否存在 如果它确实存在 我如何让它使用它 如果不存在如何创建一个新数据库 这是我到目前为止所拥有的 pr
  • DataFrame 对象没有属性“sort_values”

    dataset pd read csv dataset csv fillna 100 dataset Id 0 dataset i 0 dataset j 0 entries dataset dataset Id 0 print type
  • 具有默认参数的Python类构造函数[重复]

    这个问题在这里已经有答案了 可能的重复 Python 中的 最不令人惊讶 可变默认参数 https stackoverflow com questions 1132941 least astonishment in python the m
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • 假布尔值=真?

    我在一本书中找到了这段代码 并在 Netbeans 中执行了它 boolean b false if b true System out println true else System out println false 我只是不明白为什
  • 在 lua 中加载 C++ 模块时出现“尝试索引字符串值”错误

    我正在尝试使用 lua 用 C 编写的函数 下面给出的是cpp文件 extern C include lua h include lauxlib h include lualib h static int add 5 lua State L
  • 从值数组中计算 sympy 表达式

    我正在尝试 sympy 但遇到了一个无法解决的问题 使用 scipy 我可以编写一个表达式并计算 x 值数组 如下所示 import scipy xvals scipy arange 100 100 0 1 f lambda x x 2 f
  • 如何使用“路径”查询 XDocument?

    我想查询一个XDocument给定路径的对象 例如 path to element I want 但我不知道如何继续 您可以使用以下方法System Xml XPath Extensions http msdn microsoft com
  • 带有远程解释器的 Python 控制台无法在 PyCharm 中接受输入

    我是使用 PyCharm 进行远程开发的新手 我设置了一个远程环境 除了一个例外之外它工作正常 无法在控制台中接受用户输入 在控制台中运行以下语句时 控制台被阻塞 提示 上一个命令仍在运行 请等待或按控制台中的 Control C 来中断
  • 对象对于所需数组来说太深 - scipy.integrate.odeint

    我昨天刚开始使用Python 使用时遇到错误scipy integrate odeint 我定义了一个函数 def SIR x t beta gamma mu M 这需要numpy array物体x t and M 标量浮动beta gam
  • boost::spirit::qi::语法和可变参数模板

    我在使用可变参数模板定义语法时面临一个问题 我首先定义一些包含在某些结构中的简单语法 例如纬度 经度 如下所示 include
  • 有没有办法在 C# 中仅通过文件名查找文件?

    我们现在使用绝对路径或相对路径在 C 应用程序中查找文件 如果文件位于当前工作目录下或 路径 之一下 有没有办法仅通过名称查找文件 使用绝对路径不好 使用相对路径也不够好 因为我们可能通过重命名或移动项目文件夹来更改项目结构 如果我们的代码

随机推荐