【问题标题】:What programming language paradigm fits which job?哪种编程语言范式适合哪种工作?
【发布时间】:2010-09-16 09:06:11
【问题描述】:

据我所知(我承认不多),当前流行的编程范式是面向对象(Java、C#、Ruby)与函数式(F#)。作为最熟悉第一范式的人,我有几个问题:

  • 程序员能否一生都坚持一种范式?或者换句话说,所有问题都可以归结为一把锤子的钉子吗?
  • 如果不是,哪种工具适合哪种类型的任务?例如:基于 Web 与桌面、创建美观且响应迅速的界面、能够快速处理数据等。
  • 人们是否曾经需要学习新的范式?对于我过去的两份工作,我的工作场所需要 Java 和 C#。是否有专门使用非面向对象语言的工作场所?

显然,没有“最好”的语言,但我想知道是否值得投入时间和精力来学习新范式。提前致谢!

【问题讨论】:

  • Ruby(和 Python)既是面向对象的又是动态的。面向对象与程序与功能是一维的(这是有争议的)。动态与静态是另一个维度。 Web 与桌面 - 未提及。这个问题令人困惑。
  • 对范式的混乱感到抱歉,我仍在学习它们,因此提出了这个问题。除此之外,我的问题的哪一部分令人困惑?
  • @echoblaze:由于范式没有意义,因此尝试解析其他任何内容都没有意义。这就是为什么我专门列出了范式问题。这是一个表演停止者。也许你可以简化开头的段落。

标签: paradigms


【解决方案1】:

“或者换句话说,所有问题都可以归结为一把锤子的钉子吗?”是的。时期。您可能遇到的任何编程语言都将与其他所有编程语言一样完整。实际上,对于编程语言,“完整性”有一个正式的定义。

“人们曾经需要学习新的范式吗?”总是。

实际上有一个技巧可以跟踪“范式转变”的起起落落。在我职业生涯的最后 30 年中,我见证了编程已经从相对简单的命令式/过程式模型发展为许多更丰富的模型,其中包括在流程和数据之间实现更好的平衡。

我注意到以下...

部分驱动力是人工智能社区。这些“新模型”中有许多是作为 AI 知识表示方案开始的。他们在那里获得了吸引力,然后他们逐渐进入了更多主流应用程序。

实体关系模型最初用于知识表示,而不是业务交易。类似地,对象模型用于知识表示。然后模拟人发现了它。现在我们其他人都拥有它。

这是我的结论。

软件是知识的表示。

您对范式或模型或方法或风格的选择基于对以下问题的回答:

“我怎样才能最好地表达这个问题?”

如果问题有对象和关系,OO。如果问题有算法和转换、映射、过滤器和归约,函数式。如果问题是动态的、变化的和灵活的,动态的。如果问题是静态的并且会迅速扩大,那就是静态的。

【讨论】:

  • 完全一致,总结得很好。编程语言发展史的特点是嵌入在语言中的知识不断增加。
【解决方案2】:

值得学习替代范式(OO、功能、程序、动态等),因为它可以帮助您以不同的方式思考问题。

例如,想想以线性方式(我第一次这样做)解决树遍历与使用递归的区别。或者 Google 结合使用 Map 和 Reduce 来帮助他们索引互联网。

将新的思维方式应用于旧问题可以帮助解决一些最棘手的问题。

【讨论】:

    【解决方案3】:

    范式独立于语言。您可以在 C 中以 OO 风格进行开发(看看 GTK)。当我用 Java 编程时,我主要使用函数式风格。

    了解尽可能多的范式是值得的。有些问题在一种范式中解决起来很简单,而在另一种范式中则需要精心设计。

    作为一个(简单的)示例,在此页面上比较 Java 和 Ocaml 或更好的是 Haskell 中的快速排序实现:http://www.rosettacode.org/rosettacode/w/index.php?title=Quicksort

    (这并不意味着功能性更好。OO更好地解决了一些问题)。

    【讨论】:

    • 谢谢,这让事情变得更清楚了!使用 OO 更容易解决什么样的问题?
    【解决方案4】:

    所有问题都可以归结为一把锤子的钉子吗?

    是的。你可以用一把锤子解决问题。它只是将那扇门锯成两半需要更长的时间。

    人们是否曾经需要学习新的范式?对于我过去的两份工作,我的工作场所需要 Java 和 C#。是否有专门使用非面向对象语言的工作场所?

    开发人员必须每 15-20 年左右进行一次。

    肯定有整个行业的小公司都在使用过程 VBA 编写的基于 Access 的系统。 (我认为我为他们中的大多数人工作过)。 经典的 ASP 开发人员必须学习 ASP.NET。 Perl 开发人员正在学习 Python。批处理驱动开发让位于事件驱动开发。

    【讨论】:

    • 用锤子把那扇门锯成两半不仅需要更长的时间,而且看起来真的很糟糕。 :)
    【解决方案5】:

    我认为您会在所有方面找到答案。我工作得越多,我就越发现了解其他一些人是“有帮助的”。作为一名 C#/VB/SQL Server 开发人员,我发现了解 F# 和其他一些语言对我更有帮助,以便获得广泛的接触,真正找出什么工具是正确的......

    【讨论】:

      【解决方案6】:

      动态的东西把我吓坏了,但是 Ruby on Rails 是迄今为止我见过的最好的 Web 开发系统。我不喜欢将它用于一个非常大、需要大量维护的项目,因为它太容易改变现有的、已编译的、已完成的代码的含义。对于一个人的编码风格来说,也太容易将其变成一种新的语言。

      对于系统管理员和任何运行 Linux 系统的人来说,了解动态/脚本也很不错。用 BASH 或 Ruby 编写一个快速脚本,比在 Java 或 C++ 中实现相同的功能更胜一筹。

      OO 使理解大量代码变得更加容易。如果您有一个大型团队或多个大型团队,并且需要快速提供概述,那么 OO 可以更轻松地描述和隔离给定的功能。我应该说正确编码 OO!

      我知道函数式编程对多线程编程很有好处,因为一切都趋于不可变。

      【讨论】:

        【解决方案7】:

        在考虑 OOP 的情况下开发设计和架构技能是出色的语言无关职业最理想的技能组合。

        在 Oops 中编写代码的好处是对其他团队成员和整个组织都有好处。因为代码对所有人来说都是可以理解的,如果开发人员辞职,公司不需要太担心。在另一种情况下,如果您遵循功能样式,其他人将很难理解您所做的事情。

        【讨论】:

          【解决方案8】:

          正如大多数其他人所说,您通常可以使用任何语言来解决任何问题,并且您通常可以以一种范式的风格编写另一种范式。

          如果您花时间学习按预期使用不同的范式,那么您确实会学到关于知识表示和解决问题的不同知识,这对您将来使用的任何范式都有帮助。

          虽然范式和领域之间存在一定的一致性,但通常最好根据您的软件需要在其中运行的环境的具体情况来选择一种语言。

          • 是否需要在多个桌面平台上运行?
          • 如果是桌面应用程序,是否需要具有原生外观?
          • 设计的快速迭代很重要
          • 如何维护?
          • 它需要使用哪些第三方系统?
          • 现有的程序员知识/技能/偏好。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-07-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多