我想知道为什么C++,C#,Java开发人员想要学习动态语言?
假设公司不会将其主要开发语言从C++/C#/ Java切换为动态语言,那么动态语言的用途是什么?
动态语言可以在仅仅几天的学习之后比使用多年的静态语言更快或更好地完成哪些帮助任务?
在看到前几个回复之后,很明显有两个问题.我的主要兴趣是雇主作为一项费用是合理的.也就是说,我正在寻找雇主资助学习动态语言的理由.除了明显的员工将有更广泛的视野,雇主通常寻求一些"真正的"利益.
很多时候出现了一些快速任务,它不是您正在开发的主要软件的一部分.有时候任务是一次性的,即将此文件与数据库进行比较,让我知道差异.在Perl/Ruby/Python中进行文本解析比在Java或C#中进行文本解析要容易得多(部分原因是使用正则表达式要容易得多).它可能会少走很多时间来分析使用Perl /拼音/ 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++编程的额外问题(指针,没有数组边界检查等),这一点更加引人注目.
让我通过询问美国英语使用者学习另一种语言有什么用处来转变你的问题?
我们所说的语言(以及我们编程的语言)为我们的思维方式提供了信息.这可以发生在基础层面,例如c ++与javascript对比lisp,或者在实现层面,其中ruby构造为你的"真正工作"中的解决方案提供了一个尤里卡时刻.
说到你真正的工作,如果市场走向南方,你的雇主决定"适当规模"你,你怎么认为你会与一个灵活的人堆叠,因为他用几十种语言编写软件,而不是你的有限曝光?在所有条件相同的情况下,我认为答案很明确.
最后,你为了生活而编程,因为你热爱编程......对吗?
我认为还没有人提到这一点.学习一门新语言会很有趣!当然,这是尝试新事物的充分理由.
我主要使用Java和C#编程,但使用动态语言(ruby/perl)来支持更顺畅的部署,启动操作系统任务,自动报告,一些日志解析等.
经过短时间学习和试验ruby或perl后,您应该能够编写一些可以改变数据格式或从日志中获取信息的正则表达式操作脚本.可以快速编写的小ruby/perl脚本的示例是用于解析非常大的日志文件并且仅以人类可读格式或csv格式报告感兴趣的一些事件的脚本.
此外,拥有各种不同编程语言的经验应该可以帮助您思考在Java,C++和C#等结构化语言中解决问题的新方法.
学习Perl或Ruby的一个重要原因是帮助您自动执行必须反复执行的任何复杂任务.
或者,如果你必须分析日志文件的内容,你需要比使用grep,sed等更多的mungeing.
使用其他语言,例如Ruby,没有太多的"设置成本",可以让你在用C++,Java等实现它们之前快速构思原型.
HTH
干杯,
抢
你期望永远为这家公司工作吗?如果你曾经去过就业市场,那么一些潜在的雇主会意识到Python悖论.
一个好的曲棍球运动员在冰球的位置上打球.一个伟大的冰球运动员将在冰球的位置上进行比赛. - Wayne Gretzky
我们的行业总是在变化.没有语言可以永远成为主流.对我来说,Java,C++,.Net就是现在的冰球.而python,ruby,perl就是冰球的所在.如果你想成为好人或伟大的人,请自己决定!
Paul Graham几年前发表了一篇关于为什么Python程序员能够成为更好的Java程序员的文章.(http://www.paulgraham.com/pypar.html)
基本上,无论新语言是否与公司当前的方法相关,学习新语言意味着学习新的想法.愿意学习不被视为"商务舱"的语言的人意味着他对编程感兴趣,而不仅仅是赚取薪水.
引用保罗的网站:
人们不学习Python,因为它会让他们找到工作; 他们学习它是因为他们真正喜欢编程并且对他们已经知道的语言不满意.
这使得他们成为公司应该聘用的程序员.因此,由于缺乏更好的名称,我会称之为Python悖论:如果一家公司选择用相对深奥的语言编写软件,他们就能雇用更好的程序员,因为他们只会吸引那些很关心学习它.而对于程序员来说,悖论甚至更为明显:如果你想找到一份好工作,要学习的语言是一种人们不仅仅是为了找工作而学习的语言.
如果雇主愿意支付学习新语言的费用,那么自愿学习的人(假设它不是强制性的课程)可能是已经处于"快速通道"的人.