什么编程语言范例适合哪种工作?

时间:2008-10-09 19:55:52

标签: paradigms

据我所知(我不会承认),目前流行的编程范例是面向对象(Java,C#,Ruby)和功能(F#)。作为一个大多数熟悉第一范式的人,我有几个问题:

  • 程序员可以简单地坚持他/她生活中的一个范例吗?或者换句话说,一把锤子的所有问题都可以减少到指甲吗?
  • 如果没有,哪种工具适合哪种类型的任务?例如:基于Web的桌面与桌面,创建漂亮且响应迅速的界面,能够快速处理数据等等。
  • 人们是否需要学习新的范例?对于我过去的两份工作,我的工作场所需要Java和C#。是否有专门使用非OO语言的工作场所?

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

8 个答案:

答案 0 :(得分:12)

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

“人们是否需要学习新范式?”总是

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

我注意到以下内容......

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

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

这是我的结论。

软件是知识表示。

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

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

如果问题有对象和关系,OO。如果问题有算法和转换,映射,过滤和减少,功能。如果问题是动态的,变化和灵活,动态。如果问题是静态的并且会迅速扩大,静态。

答案 1 :(得分:9)

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

例如,考虑以线性方式(我使用它的第一种方式)与使用递归来解决树遍历的区别。或谷歌将Map和Reduce结合起来帮助他们为互联网编制索引。

应用于旧问题的新方法可以帮助打破一些最棘手的问题。

答案 2 :(得分:7)

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

值得了解尽可能多的范例。在一个范例中解决一些问题是微不足道的,并且需要在另一个范例中进行精细的制作。

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

(这并不意味着功能更好。使用OO可以更好地解决问题。)

答案 3 :(得分:5)

  

一把锤子可以将所有问题都减少到指甲吗?

是的。你可以用一把锤子解决问题。它刚刚看到那扇门变得更长了一半。

  

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

开发人员必须每隔15 - 20年左右这样做。

肯定有整个行业的小型公司使用基于程序的VBA编写基于Access的系统。 (我想我已经为大多数人工作了)。 经典的ASP开发人员不得不学习ASP.NET。 Perl开发人员正在学习Python。批量驱动开发让位于事件驱动开发。

答案 4 :(得分:2)

我认为你会在全面找到答案。我工作的越多,我就越发现知道其他一些人是“有帮助的”。作为一名C#/ VB / SQL Server开发人员,我发现对我学习一些关于F#和其他一些语言以获得广泛曝光更有帮助,真正弄清楚哪种工具是正确的...... < / p>

答案 5 :(得分:1)

动态的东西吓跑了我,但Ruby on Rails是迄今为止我见过的最好的开发系统。我觉得将它用于一个非常庞大,繁重的维护项目并不舒服,因为它很容易改变现有的,编译的,完成的代码的含义。一个人的编码风格也很容易变成一种新的语言。

对于系统管理员和运行Linux系统的任何人来说,动态/脚本编制也很有用。在BASH或Ruby中编写快速脚本会使HELL无法尝试在Java或C ++中实现相同的功能。

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

我理解功能对于多线程编程很有用,因为一切都是不可变的。

答案 6 :(得分:0)

以OOP为基础开发设计和架构技能是一个伟大的语言不可知职业的最理想的技能。

在Oops中编码时的好处既适用于其他团队成员,也适用于整个组织。因为代码对所有人都是可以理解的,如果开发人员辞职,公司也不必担心。在另一种情况下,如果你遵循功能风格,其他人就很难理解你所做的事情。

答案 7 :(得分:0)

正如大多数人所说,你通常可以使用任何语言来解决任何问题,你通常可以用另一种范式来写一种范式。

如果您花时间学习如何使用不同的范例,那么您将学习有关知识表示和解决问题的不同内容,这对您将来使用的任何范例都有帮助。

虽然范例和域之间存在一些对齐,但通常最好根据软件运行所需的环境细节选择一种语言。

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