it-swarm.cn

如果公司使用C++,C#或Java作为应用程序语言,为什么要学习Perl,Python,Ruby?

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

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

动态语言可以在仅仅几天的学习之后比使用多年的静态语言更快或更好地完成哪些帮助任务?

更新

在看到前几个回复之后,很明显有两个问题。我的主要兴趣是雇主作为一项费用是合理的。也就是说,我正在寻找雇主资助学习动态语言的理由。除了明显的员工将有更广泛的视野,雇主通常寻求一些“真正的”利益。

66
szabgab

很多时候出现了一些快速任务,它不是您正在开发的主要软件的一部分。有时候任务是一次性的,即将此文件与数据库进行比较,让我知道差异。在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++编程的额外问题(指针,没有数组边界检查等),这一点更加引人注目。

81
Cervo

让我通过询问美国英语使用者学习另一种语言有什么用处来转变你的问题?

我们所说的语言(以及我们编程的语言)为我们的思维方式提供了信息。这可以在基础层面上发生,例如c ++与javascript对比LISP,或者在实现层面上,其中Ruby构造为您的“实际工作”中的解决方案提供了尤里卡时刻。

说到你真正的工作,如果市场走向南方,你的雇主决定“适当规模”你,你怎么认为你会与一个灵活的人堆叠,因为他用几十种语言编写软件,而不是你的有限曝光?在所有条件相同的情况下,我认为答案很明确。

最后,你为了生活而编程,因为你热爱编程......对吗?

21
Pete Michaud

我认为还没有人提到这一点。学习一门新语言会很有趣!当然,这是尝试新事物的充分理由。

14
epochwolf

我主要使用Java和C#编程,但使用动态语言(Ruby/Perl)来支持更顺畅的部署,启动操作系统任务,自动报告,一些日志解析等。

在学习和试验Ruby或Perl之后,您应该能够编写一些可以改变数据格式或从日志中获取信息的正则表达式操作脚本。可以快速编写的小型Ruby/Perl脚本的示例是用于解析非常大的日志文件并仅以人类可读格式或csv格式报告一些感兴趣的事件的脚本。

此外,拥有各种不同编程语言的经验应该可以帮助您思考在Java,C++和C#等结构化语言中解决问题的新方法。

9
Alex B

学习Perl或Ruby的一个重要原因是帮助您自动执行必须反复执行的任何复杂任务。

或者,如果你必须分析日志文件的内容,你需要比使用grep,sed等更多的mungeing。

还使用其他语言,例如Ruby,没有太多的“设置成本”,可以让你在用C++,Java等实现它们之前快速构思原型。

HTH

干杯,

7
Rob Wells

你期望永远为这家公司工作吗?如果你曾经去过就业市场,那么一些潜在的雇主会意识到 Python悖论

5
Chris Upchurch

一个好的冰球运动员在Puck所在的地方比赛。一个伟大的曲棍球运动员在Puck将会出现的地方。 - Wayne Gretzky

我们的行业总是在变化。没有语言可以永远成为主流。对我来说,Java,C++,。Net就是Puck现在所处的位置。而python,Ruby,Perl就是Puck的所在。如果你想成为好人或伟大的人,请自己决定!

5
liangzan

Paul Graham几年前发表了一篇关于为什么Python程序员能够成为更好的Java程序员的文章。 ( http://www.paulgraham.com/pypar.html

基本上,无论新语言是否与公司当前的方法相关,学习新语言意味着学习新的想法。愿意学习不被视为“商务舱”的语言的人意味着他对编程感兴趣,而不仅仅是赚取薪水。

引用保罗的网站:

人们不学习Python,因为它会让他们找到工作;他们学习它是因为他们真正喜欢编程并且对他们已经知道的语言不满意。

这使得他们成为公司应该聘用的程序员。因此,由于缺乏更好的名称,我会称之为Python悖论:如果一家公司选择用相对深奥的语言编写软件,他们就能雇用更好的程序员,因为他们只会吸引那些很关心学习它。而对于程序员来说,悖论甚至更为明显:如果你想找到一份好工作,要学习的语言是一种人们不仅仅是为了找工作而学习的语言。

如果雇主愿意支付学习新语言的费用,那么自愿学习的人(假设它不是强制性的课程)可能是已经处于“快速通道”的人。

5
crystalattice

当我第一次学习Python时,我在一家Java商店工作。偶尔我需要做一些严肃的文本处理任务,这些任务使用快速Python脚本比使用Java程序更容易。例如,如果我必须解析一个复杂的CSV文件并找出它的哪些行与我们的Oracle数据库中的行相对应,那么使用Python比使用Java要容易得多。

更重要的是,我发现学习Python让我成为一个更好的Java程序员;我用另一种语言学习了许多相同的概念,我觉得我更了解这些概念。至于是什么让Python比Java更容易,你可以看看这个问题: Java - > Python?

4
Eli Courtwright

编辑: 我在阅读原始问题的更新之前写了这个。请参阅我的其他答案,以获得更新问题的更好答案。我会留下这个作为警告,反对成为西部最快的枪=)

十多年前,当我学习计算机的方式时,老聪明的胡须解释了C和C++是如何成为行业的工具。没有人使用Pascal,只有那些愚蠢的人才会冒险使用汇编程序。

当然, 没有人会提到一个叫做Java的糟糕丑陋的东西 。它不会是一个严肃的业务工具。

所以。嗯。替换上述故事中的语言,也许您可​​以预测未来。也许你不能。重点是,Java不会是最后的编程语言,你也很可能也会转换雇主。未来每天24小时为您收费。做好准备。

学习新语言对你有好处。此外,在某些情况下,它可以给你吹牛的权利很长一段时间。我的第一个大学课程是在Scheme。所以当人们跟我谈论新的 语言du jour 时,我的反应就像“一流的功能?那就是上个世纪”。

当然,你得到 更多的东西 用高级语言。

3
Antti Rasinen

为了回答更新的问题,它是一个鸡/蛋问题。证明费用合理的最佳方法是展示它如何降低其他地方的成本,因此您可能需要花费一些额外/个人时间来先学习一些东西以构建某种功能原型。

向你的老板展示一个类似“嘿,我做了这件事的演示,这节省了我这么多时间[或者更好的是,这个多少钱],想象一下如果每个人都可以用这个我们会节省多少钱”

然后在他们同意之后,解释它是如何进行其他技术的,并且花费更多的费用来获得更多的培训,并培训其他人如何更好地做到这一点。

2
John Gardner

学习一门新语言是一个长期的过程。在几天内你会学到基础知识,是的。但!您可能知道,任何语言的实际适用性都与标准库和其他可用组件相关联。学习如何有效地使用它需要大量的实践经验。

也许唯一的直接短期利益是开发人员学会区分需要Python/Perl/Ruby-hammer的指甲。并且,如果它们有任何好处,那么他们可以再研究一些(在线,也许!)并成为真正的专家。

长期的好处更容易想象:

  1. 员工成为更好的开发人员。更好的开发者=>更好的质量。这些天我们生活在知识经济中。投资那些已经适合你的大脑是明智的。

  2. 当下一个大语言出现时,它更容易适应。 NBL很可能具有当今脚本语言中的许多功能:一流的功能,闭包,流/生成器等。

  3. 新的市场可能性和更快速响应的能力。即使你不是在写Python, 其他人都是 。你的客户?该项目的另一个供应商?也许一个关键组件是用其他语言编写的?如果你没有能够理解代码并与之接口的人,那将花费金钱和时间。

  4. 招聘。如果您的公司以向人们传授新的和有趣的东西而闻名,那么招募顶级人才会更容易。 每个人 正在做Java/C#/ C++。在就业市场中区分自己并不是一种非常有效的方法。

2
Antti Rasinen

鉴于人们越来越关注在JVM上运行动态语言(da-vinci vm等)以及越来越多的动态语言(JRuby,Grrovy,Jython),我认为用例正在增加。我发现的一些场景非常有用

  1. 原型 - 使用RoR或Grails构建快速原型,并能够在标准应用服务器上运行它(并且可能)重用现有服务等。

  2. 测试 - 右侧单元在动态语言中测试速度要快得多

  3. 性能/自动化测试脚本 - 其中一些工具开始允许使用标准动态语言来编写测试脚本而不是专有脚本语言。副作用可能是能够重用您已编写的一些单元测试代码。

1
mataal

我认为动态语言的主要好处可归结为

  1. 快速发展

较短的设计 - 代码 - 测试周期时间使动态语言成为原型设计,工具以及快速和脏的一次性脚本的理想选择。恕我直言,后两者可以对程序员的工作效率产生巨大影响。令我惊讶的是,有多少人手动跋涉,而不是为他们做一个工具。我认为这是因为他们的工具箱里没有像Perl这样的东西。

几乎可以与任何事物(其他程序或语言,数据库等)进行交互的能力使得重用现有工作变得容易,并且可以自动执行需要手动完成的任务。

1
Michael Carman

我经常发现学习另一种语言,尤其是动态类型的语言,可以教你关于其他语言的东西,并使你成为一个整体更好的程序员。例如,学习Ruby将以Java的方式教你面向对象的编程,反之亦然。总而言之,我认为成为一名全面的程序员比单一语言更好。它使您对您工作的公司/客户更有价值。

1
Mike Farmer

我发现我玩Ruby的次数越多,我就越了解C#。

1)当你在这些语言之间切换时,他们每个人都有自己的构造和哲学背后他们试图解决的问题。这将有助于您找到工作的 正确的工具 或问题的

2) 编译器的角色 (或某些语言的解释器)变得更加突出。为什么Ruby的类型系统与.Net/C#系统不同?这些解决了哪些问题?你会发现自己在较低层次上理解了编译器的结构及其对语言的影响

3)在Ruby和C#之间切换真的帮助我理解 设计模式 更好。我真的建议用C#这样的语言实现常见的设计模式,然后用像Ruby这样的语言实现。它经常帮助我通过一些编译器仪式来看待特定模式的哲学。

4)一个不同的 社区 。 C#,Java,Ruby,Python等都有不同的社区,可以帮助你的能力。这是将您的手艺提升到一个新水平的好方法。

5)最后,但并非最不重要,因为新语言很有趣:)

1
Jimmy Lyke

使用灵活的OOP系统学习一些东西,比如LISP或Perl(参见Moose),可以让您更好地扩展和理解您对软件工程的看法。理想情况下,每种语言都有一些独特的方面(无论是CLOS还是其他技术),可以增强,扩展和增强您作为程序员的能力。

1
jshirley

看看这个thead的答案:

https://stackoverflow.com/questions/76364/what-is-the-single-most-effective-thing-you-did-to-improve-your-programming-ski#84112

学习新语言是为了保持开放的心态和学习新的做事方式。

1
Jean

我不确定这是否是您正在寻找的,但我们在我工作的小公司用Java编写我们的主应用程序,但是使用python快速编写较小的脚本。备份软件,操作数据的临时脚本和推出结果。有时似乎更容易坐下来使用python并编写一个快速脚本而不是乱用Java中的类和东西。

不会留下的临时脚本不需要浪费很多设计时间。

而且我很懒,但是当然可以尽可能多地学习并看看其他语言中存在哪些功能。了解更多从未在未来的职业变化中伤害你:)

1
Arthur Thomas

这一切都是为了扩大您作为开发人员的视野。如果你只限于强类型语言,你可能不会成为最好的程序员。

至于任务,Python/Lua/Ruby/Perl非常适合于简单的小任务,比如找一些文件并重命名它们。当与框架(例如Rails,Django,Lua for Windows)配对以快速开发简单的应用程序时,它们也可以很好地工作。地狱,37Signals基于在Ruby on Rails中创建简单但非常有用的应用程序。

1
Ed Schwehm

它们对于“快速黑客”非常有用,这种“快速黑客”用于填补主要语言的空白,以便快速(并且可能很脏)修复,而不是以主语言开发相同的方式。一个例子:Perl中的一个简单脚本通过一个大文本文件并用另一个实例替换所有电子邮件地址实例,在10分钟范围内花费了大量时间。同时将控制台应用程序黑客攻击以使用您的主要语言执行相同操作将需要多次。

您还可以将自己暴露给其他语言,从而扩展您的能力,从不同的语言角度学习攻击问题可以与语言本身一样有价值。

最后,脚本语言在扩展领域非常有用。以LUA为例。您可以用很少的开销将lua解释器固定到您的应用程序中,现在您可以创建丰富的脚本功能,可以向最终用户公开或快速更改和分发,而无需重建整个应用程序。这在许多游戏中都有很好的效果,尤其是魔兽世界。

1
Wolfwyrd

如果你拥有的只是一把锤子,那么每一个问题都会变成一个钉子。

有时候用螺丝刀或钳子会使一个复杂的问题变得微不足道。

没有人问承包商,木匠等,“如果我已经有锤子,为什么学会用螺丝刀?”。非常好的承包商/木匠有大量的工具,并知道如何使用它们。所有程序员都应该做同样的事情,学习使用新工具并很好地使用它们。

但在我们使用任何电动工具之前,让我们花点时间谈谈商店的安全性。请务必阅读,理解并遵守电动工具随附的所有安全规则。这样做可以大大降低人身伤害的风险。并记住这一点:没有比穿这些更重要的规则:安全眼镜 - Norm

1
John Gardner

我个人在Java应用程序上工作,但是如果没有Perl的话,我就无法获得一些支持脚本。

我有脚本快速翻转我指向的数据库,运行构建脚本的脚本,抓取数据和比较内容的脚本。

当然I 可以 用Java完成所有这些,或者也可以使用Shell脚本(我也有一些),但是当你需要某些东西时,谁想要编译一个类(确保类路径设置正确等)又脏又脏。了解脚本语言可以删除90%的无聊/重复性手动任务。

1
shelfoo

不要告诉你的雇主你想学习Ruby。告诉他你想了解Web框架技术的最新技术。只是最热门的是Django和Ruby on Rails。

1
ykaganovich

动态语言非常适合原型构思。通常出于性能原因,它们不适用于永久性解决方案或产品。 但是 ,使用像Python这样的语言,允许你在其中嵌入标准的C/C++/Java,反之亦然,你可以加速真正关键的部分,但是它与动态语言的灵活性结合在一起。

......所以你可以充分利用这两个世界。如果你需要为更多人学习这些语言的原因来证明这一点,那么只需指出开发相同软件的速度要快得多,以及解决方案的稳健程度是多少(因为根据我的经验调试/修复动态语言中的问题,相当容易!)。

0
Jon Cage

测试。

使用动态语言测试C#/ Java应用程序通常更快更容易。您可以在交互式提示中进行探索性测试,并快速创建自动化测试脚本。

0
Ryan

您还应该考虑学习像Scala这样的函数式编程语言。它具有Ruby的许多优点,包括简洁的语法和强大的功能,如闭包。但它编译为Java类文件,并无缝集成到Java堆栈中,这可能使您的雇主更容易吞下。

Scala不是动态类型的,但它的“隐式转换”功能提供了动态类型的许多甚至所有好处,同时保留了静态类型的许多优点。

0
sanity

对于下班后的工作,自由职业... :)和最后的编程识字尽可能... ...)

0
vaske

了解grep和Ruby可以缩小问题范围,并验证修复问题,这个问题涉及某些生产服务器上的大量Java异常。因为我在Ruby中将解决方案放在一起,所以在一个下午而不是几天内完成(设计,实现,测试,运行,错误修复,重新运行,增强,结果分析)。我本可以使用全Java解决方案或C#解决方案解决同样的问题,但它很可能会花费更长的时间。

拥有动态语言专业知识有时也可以让您在动态性较低的语言中使用更简单的解在Ruby,Perl或python中,您可以直观地找到关联数组(哈希,字典,您想要使用的任何Word)以获取最小的东西,在这些问题中,当您遇到问题时,可能会尝试使用静态类型语言创建复杂的类层次结构不一定要求它。

此外,您可以将大多数脚本语言插入大多数运行时。所以它不一定是/或。

0
JasonTrue

动态语言是一种不同的思考方式,有时您从动态或功能语言中学习的实践可以转移到更静态类型的语言,但如果您从不花时间学习不同的语言,您将永远无法获得你在编码时知道如何思考。

0
sontek

雇主可以看到的“真正的好处”是能够更快地实施解决方案的更好的程序员;但是,你将无法提供任何硬数据来证明费用是合理的,而雇主很可能会让你现在赚钱的是什么,而不是让你从事有助于改善未来的事情。

唯一一次你可以接受雇主一毛钱的训练,就是当他们认识到需要它时,它比雇用一个已经掌握了这种技能的新人便宜。

0
Dan

抛开哲学问题,我知道通过编写快速而肮脏的Ruby脚本来解决Java过于庞大的暴力问题,我已经获得了价值。去年我有三个独立的目录结构,它们或多或少相同,但文件之间存在很多差异(客户端没有听说过版本控制,我会把剩下的留给你想象)。

用Java编写分析器会花费很多开销,但在Ruby中我有一个工作时间大约需要40分钟。

0
Jim Kiley

通常,dynamc语言(特别是python和lua)嵌入在程序中以添加更类似插件的功能,因为它们是高级语言,可以轻松添加某些行为,而不需要低级/中级语言。

Lua特别缺乏所有低级系统调用,因为它的设计是为了便于在程序中添加功能,而不是作为通用编程语言。

0
Christian P.

不要打扰你的雇主,在书上花费40美元,下载一些软件,每天花一些时间阅读/做练习。在任何时候你都会受到训练:)

0
none

其他人已经解释了为什么学习更多语言会让你成为更好的程序员。

至于说服你的老板这是值得的,这可能只是你公司的文化。有些地方将职业和技能进步作为一项政策(向上或向外移动),有些地方重视这一政策,但却将其留给了员工的主动权,有些地方非常注重底线。

如果你必须解释为什么学习一门语言对你的老板来说是好事,我的建议是只在必要时继续工作,然后回家并自己研究新事物。

0
magpulse