学习除Python之外的脚本语言

时间:2010-07-14 05:13:31

标签: python programming-languages scripting

曾经有人告诉我,程序员倾向于正确学习一种脚本语言,而忽视或不喜欢其他脚本语言。你有类似的经历吗?  我使用Python作为我的脚本选择已有几年了,但是,我确信有许多现有的和新兴的语言可以给Python主义留下深刻的印象。除了Python之外,你能推荐一些有趣且有用的脚本语言吗?

13 个答案:

答案 0 :(得分:22)

看,Python几乎拥有你需要的(在我看来)应用程序编程。您可以撰写从protocol stackYouTube,从media players3D games and graphics的任何内容,您可以获得出色的表现。

它与其他一些语言占据相同的位置:

  • C ,您可以访问几乎所有有用的C / C ++库。我选择在C语言中用Python编写内容的唯一原因是因为我需要性能提升。即便如此,我可能会先用Python原型化它;当你的应用程序是用Python编写的时候,修改你的设计要容易得多。

  • Ruby ,没有充分的理由使用Ruby而不是Python。

  • Perl ,它对于某些特定类型的任务非常有用,但如果你是一致的,可读的和理智的编程风格的粉丝,你会讨厌看大约95%的现有Perl码。我不知道这是因为在Perl中编程的人往往是(根据我的经验)系统管理员和程序员第二,或者因为Perl的设计理念允许多种不同的方式来实现相同的效果。 / p>

鉴于此,我会说,如果你要学习另一种语言,请确保它能让你有能力做一些新的事情。我建议您学习两种脚本语言:

  • Bash ,使用for循环和管道组合操作文件系统真是太高兴了。 Bash编程不会比你已经用Python做的更多,但如果你是* nix用户,你将在日常工作效率方面获得巨大的收益。

  • Javascript ,能够编写基于浏览器的应用程序是一项非常有用的技能,而且几乎肯定是将来大多数应用程序的完成方式。 Javascript /浏览器环境将在未来几年内获得一系列功能,从音频处理到OpenGL图形,一些非常快速的引擎要么已经投入使用,要么已经可用(如V8,它支持Chrome浏览器和将Javascript编译为本机字节代码。)您是否见过Quake2 ported to WebGL

我的回答基本归结为:首先,学习有用的语言。

答案 1 :(得分:6)

我建议学习Haskell和Lisp的方言,比如Scheme或Common Lisp,如果你掌握了其中任何一个,你将深入了解如何用功能范例完成任务,它也将帮助你的Python

以下是我学习的范例分类的一些语言:

命令式/程序性语言:

  • C

功能范例语言:

  • 的Haskell
  • Common Lisp / Scheme

类似面向对象的语言:

  • 红宝石
  • 的ECMAScript

其他:

  • 的Perl

我建议你远离PHP,除非你真的需要这项工作。您可能希望运行回Python。

答案 2 :(得分:6)

  • Ruby - 它启用和使用块的功能非常有趣,而且基于python的编程非常陌生

  • Erlang - 功能语言有很多有趣的例子,它肯定会让你的头脑以不同的方式工作(以一种好的方式)

  • Javascript - 是的,我很认真。尽管使用这种原型语言需要花费大量的时间,但它与原型设计有一些非常有趣的东西,与Ruby和/或Python略有不同。而且大量的人正在投入大量资金使Javascript成为一种非常快速的脚本语言。

答案 3 :(得分:5)

脚本语言非常相似,以至于从一种脚本语言转移到另一种脚本语言的边际收益通常很低。因此,人们不会费心去学习不止一个就不足为奇了。尽管如此,在我的职业生涯中,我的主要脚本语言(大致按时间顺序排列)是

  • awk中
  • 的Tcl
  • 图标
  • KSH
  • 的Lua

我也使用了Perl和Python,但从未发现它们更适合转换为。

如果您想查看其他脚本语言,我建议使用Lua,因为

  • 它功能强大且非常简单,具有此处所有语言的最佳功率重量比。

  • 与Tcl一样,它从一开始就被设计为无缝地合并C代码。这个设施运行得非常好,并且极大地扩展了它有用的问题范围(参见Adobe Lightroom,魔​​兽世界,Garry的Mod,CHDK)。

  • 该实施具有高度高效和精湛的设计。如果你想学习语言是如何实现的,那么它将会回报仔细研究。

但是,如果您的目标是学习一种新语言来扩展您的思维,那么除了脚本语言之外,还要学习其他内容。例如,学习Haskell并获取一些令人兴奋的想法(许多人从Guido偷走的相同来源中窃取),或学习C并真正理解硬件上发生的事情。

答案 4 :(得分:4)

你能真正寻找的唯一相对无偏见的答案可能是统计学的,你仍然需要考虑人们在发现或雕刻一个人时遵循阻力最小的路径的自然倾向。

有多少人将Python学到了不错的水平,发现语言与他们想要的工作方式产生共鸣,然后转向别的东西,因为语言或生态系统或两者都不支持他们的需求? 我说可能是受过良好教育的用户群的一位数百分比,如果它达到不到5%就不会感到惊讶。

除非你的工作相关的潜在客户涉及不同的语言,或者你需要因为类似的原因而横向移动,否则我会说你最好不要学习与Python相媲美的东西,而不是类似的或同等的东西。 用于低级或计算密集型任务的C ++,CUDA,如果你的领域可以利用它(med-viz,CGI等),无论是什么样的shell / sysadmin导向脚本和黑客浮动你工作的地方(bash,tcl,awk或无论如何)等等。

就个人而言,我没有过多地看过ruby,php或其他一些语言,这简直就是说,继续研究我的python技能比获取提供大多数相同品质的东西更好的投资回报率以不同的形式。

如果你真的想学习别的东西,为了开放你的思想,并想坚持“脚本”,那么LUA对我来说有一段时间是一个有趣的玩具,主要是为了你可以做的荒谬表现挤出一个相对容易的集成过程,因为与Python相比,它是一组相当不同的轨道。那个,WoW插件必须用LUA编写;)

答案 5 :(得分:3)

我会从我的角度给出一个诚实的答案。

没有

使用batch,bash和Perl开始编写脚本后,发现Python正是从脚本语言中发现了我想要的东西(还有更多,但这不是主题)。它集成了熟悉的Unix接口,是模块化的,不强制任何特定的范例,跨平台和积极的开发。我所知道的其他脚本语言也是如此。

我考虑使用的唯一其他脚本语言是Lua或Scheme,因为它们的占用空间小,适合嵌入,Python可能有点大。但是它们几乎不适合更通用的shell和其他形式的脚本。

Update0

我刚刚注意到在其他答案中提到了Ruby和PHP,这些都让我不知所措,因为我从不考虑使用它们。 Ruby更慢而且不那么受欢迎,而且PHP更像C / Perl,具有更平坦的界面,并且具有自己的性能优势。使用Python的这些替代品是一个品味问题。

答案 6 :(得分:3)

回答你的第一个问题:人们学习一种语言然后忽视或不喜欢别人吗? 好吧,如果你熟悉一种语言,你需要看到移动到另一种语言的巨大优势。

我开始使用perl并最终认为必须有更简单的方法来做一些事情。我拿起python几乎立刻停止使用perl。 过了一会儿,我以为我会尝试红宝石,并对此有所了解。使用python的优势不足以切换,所以我决定坚持使用python。如果我开始使用红宝石,我可能会继续使用它。 如果您正在使用python,我认为您不会轻易找到另一种能够赢得您的脚本语言。

另一方面,如果你学习函数式编程,你可能会学到一些新的东西,其中一些甚至在你的python编程中也很有用,因为python中的一些东西似乎受到函数式编程和知识的启发如何使用它们将使你成为更好的程序员和更好的python程序员。

答案 7 :(得分:3)

我会学习一种静态类型语言,它具有非常强大的类型表达能力和令人敬畏的并发性。

以下其中一项将是一个不错的选择(按照我的偏好顺序):

  • Scala的
  • F#
  • 的Haskell
  • ocaml的
  • 二郎

上述类型语言会让您认为不同。这些语言也有REPL,所以它们可以用作脚本语言,但实际上我并不确定“脚本”语言的定义是什么。

Python缺少良好的并发性内置于该语言,因此知道如何处理许多python程序员的并发性是一个挑战。

我发现强类型语言在大型项目中的扩展性更好,原因有很多:

  • 因为类型非常重要,所以它们成为传达问题的宝贵方式
  • 使用这些语言进行重构要容易得多。
  • 自动序列化有时也更容易(尽管Haskell不那么真实)。
  • 在类型检查上编写断言花费的时间少得多。
  • 浏览代码更容易,因为大多数IDE都允许您点击并转到不同的类型

答案 8 :(得分:2)

我实际上是在Python之后学习Scala。来自"Programming in Scala"

  

Scala这个名字代表“可扩展语言”。这种语言之所以如此命名,是因为它的设计是为了满足用户的需求。您可以将Scala应用于各种编程任务,从编写小脚本到构建大型系统。

语言中的面向对象和函数式编程与富有表现力的强静态类型系统的集成本身就很有趣。是的,您可以使用Scala作为脚本语言。我觉得使用动态类型学习的语言编码很不舒服,因此Scala似乎是一个不错的选择。除了在初始学习阶段的复杂性。

如果您对动态类型学科感到满意,请查看根。 Smalltalk当然。尝试使用Squeak随书的Squeak by Example或其开源二叉Pharo以及Pharo by Example本书开始。

答案 9 :(得分:2)

学习Lisp。无论是否“脚本化”,Eric Raymond在撰写时都有权利:

  

“Lisp值得学习   深刻的启蒙经历你   当你最终得到它时会有;   这种经历会让你变得更好   程序员剩下的时间,   即使你从未真正使用过Lisp   本身很多。“

需要在Lisp中高效运行的编程范例与您日常使用的Python完全不同,它提供的视角非常非常值得。

在Lisps中,我的选择? Clojure;与其他Lisps一样,它的宏系统为您提供了与Python中出色的元编程相媲美的功能(实际上更优越),但Clojure特别关注电池包含的实用性(以及智能的,自以为是的设计),这对任何喜欢的人都很熟悉GvR的直觉。此外,Clojure的优势与Python非常不相关 - 特别是它在高度多线程,CPU绑定的并发编程中占据优势,这是Python的弱点之一 - 所以在你的工具箱中同时使用它们会增加你有权利的机会当一个棘手的工作出现时,工具。

(它是脚本吗?在我看来,这些日子很有学术性;如果你有一个REPL,你可以输入代码并立即得到响应,修改正在运行的程序的状态,或者试验一下API,我看到一种语言就像“脚本”一样。)

答案 10 :(得分:1)

Ruby / Groovy / Perl如果你想坚持传统的脚本实践。

否则,我衷心地向您推荐Clojure和Scala--这是过去几年中两种更具创新性的编程语言。

答案 11 :(得分:1)

如果您已经熟悉Python,那么您不太可能在同一个利基市场找到引人注目的东西,尽管Ruby确实有非常强大的声音跟随,似乎非常喜欢它。也许您应该考虑填充不同角色的脚本语言,例如BASH shell脚本,用于快速,简单的脚本,不需要在浏览器中运行的Python或JavaScript的复杂性。

答案 12 :(得分:1)

我不能说我同意在地图上擦掉Ruby ... Ruby解决了Perl在语法方面遇到的所有问题...我首先喜欢Python但是让ruby变得更成熟了它会越来越多地参与竞争......为什么我强烈支持Ruby?离开python几个月然后给Ruby一个机会......当我是一个python的家伙时,我是一个Ruby仇敌。但是在这一点上我无法忍受使用python。有一天,有人会清理GC并抛出一些本地线程,每个人都要小心。

关闭咆哮,Python是一个功能齐全,不仅仅是好的,伟大的语言... Perl ......真是一团糟...我不知道Perl如何在镜子旁看着自己其他主流脚本语言... PHP更漂亮......至少Perl很快,正确...(CPAN从来没有伤害过它)如果速度是真正的问题,还有其他解释器将它榨取了一点...... Jython,jRuby,PyPy ......列表就是一个,搞砸Bash ......