什么是“真正的”编程语言?

时间:2010-07-11 08:04:26

标签: php programming-languages terminology

最近一位老师说“PHP不是一种真正的编程语言”,但在我看来,这只是一种弱的理由:

  • 它没有编译。
  • 它的脚本。
  • 它不会在每个平台上运行。

PHP不被视为“真正的”编程语言吗?什么是“真正的”编程语言?编写语言是否必须认真对待?

背景

两天前,我在学校的A-Level计算课上做过入门课 - 我们在课程的第一年使用Java。我不熟悉Java,但对常规编程基础(变量,函数,面向对象,循环等)有很好的把握。

我们的第一项任务是老师快速地跑得很快。她没有费心去解释任何概念,它们是如何工作的,或者你将如何实际使用它们,并且看起来非常高兴看到大多数学生(总的来说,他们是编程新手)在他们的座位上没有最简单的想法,她在谈论什么。事后看来,我认为她很快就能看到谁能真正“处理”计算A-Level,因为学生们仍然有机会在九月开始之前改变他们的科目。

第一个也是唯一的任务是编写一个Java命令行应用程序来将二进制转换为denary(十进制)。我们进行了两个小时的品尝会议,在解释了二元系统是如何工作的之后我们必须开始,尽管总的来说,没有人真正有一个最模糊的想法从哪里开始。一个小时后,有些人比其他人更进一步,但没有人真正取得任何重大成就。老师自己变得很困惑,她从隔壁叫另一位老师。他来帮助人们,看看下一步该去哪里。

没有吹牛,我可能确实在课堂上有最丰富的经验,并且在练习中得到了最大的帮助。他问我以前是否有过任何经历;我说是的,特别是在PHP中,并且开玩笑地评论说我可以在几行PHP中编写一些将二进制文件转换为denary的东西,而Java应用程序正迅速发展成几个代码屏幕。

他回答说,“PHP不是一种真正的编程语言!”......!经过一番讨论,他给出了上述三个原因。但是,我指出你可以在运行Apache的任何平台上运行PHP,但我不认为他真的知道Apache是​​什么而且没有这个!

15 个答案:

答案 0 :(得分:101)

首先,我们需要知道编程语言是什么。至少,programming language是计算机读取并指示它执行某些操作的东西。许多人还希望general purpose programming languageTuring complete。但是,可能存在domain-specific language不是图灵完整但仍然是该特定域的有用编程语言的情况。编程语言可以编译或解释,它们可以在许多平台上运行,也可以只运行一个特定的平台。不同的需求需要不同的编程语言很明显,PHP是一种编程语言。

我对“真实”编程语言的定义是任何在现实世界中具有至少一种实际用法的编程语言。这与esoteric programming language相反,{{3}}通常没有实际用途。由于PHP被广泛用于解决实际问题,因此它很容易满足成为真正的编程语言的要求,尽管它可能不是一种特别漂亮的语言。

PHP是一种实用的语言。它是为了能够快速制作网页(最初代表个人主页的名称)的特定需求而创建的,并且语言根据需要进行了扩展。由于没有理论背景或强大的设计原则推动其创作(甚至没有正式的语言规范),它不如许多其他更现代的语言干净。正确处理外来字符/ unicode字符等功能显然会在之后添加,而不是与语言的其余部分完全集成。这种不整洁和缺乏理论严谨性导致许多人(特别是学者)不喜欢这种语言,这可能是你的老师不把PHP视为“真正的”语言的部分原因。

然而,PHP擅长它的设计目的,很多网站都使用它,甚至像Facebook,Yahoo!这样的大型网站也是如此。和维基百科。

答案 1 :(得分:59)

  

未编译

PHP可以编译(例如通过HHVM)。

  

它是脚本化的

这只是说PHP不编译的另一种方式。

  

它不会在每个平台上运行

Java也没有。

听起来你在那里有一个非常糟糕的老师。

答案 2 :(得分:34)

当然PHP是一种编程语言。他可能意味着它不是“真正的”编程语言,就像“真正的”男人不吃乳蛋饼一样。

答案 3 :(得分:21)

  

define:programming language

根据这一点,似乎PHP是一种编程语言。它是否是一种真正的编程语言是完全主观的。它是否是一种好的语言也是主观的。当然,它通常不用作应用程序编程语言,但可以用于通过CLI开发shell应用程序。我从来没有这样做过,所以我对它的理解是粗略的,但是可能

现在,PHP是“脚本化”(我认为这是一种脚本语言),它是否可以在每个平台上运行?你判断:

  

PHP:Hypertext Preprocessor是一种广泛使用的通用脚本语言,最初设计用于Web开发以生成动态网页。为此,PHP代码嵌入到HTML源文档中,并由具有PHP处理器模块的Web服务器解释,该模块生成网页文档。作为通用编程语言,PHP代码由解释器应用程序在命令行模式下处理,执行所需的操作系统操作并在其标准输出通道上产生程序输出。它也可以用作图形应用程序。 PHP可用作大多数现代Web服务器的处理器,也可作为大多数操作系统和计算平台上的独立解释器。

     

来源:http://en.wikipedia.org/wiki/PHP

Java甚至可以在每个平台上运行吗?不。只有存在JVM的那些。

最后,是否需要编译语言?许多人不是。即使Java也不是以与C或C ++相同的方式编译的。然后你还需要看看Perl,Python等。

就个人而言,我认为PHP是一种真正的编程语言。我从那里开始,很容易转向C / C ++和Java。我不会将它用于与Java相同的目的,它的设计与Java不同,但这并不意味着什么。对我来说,学习更容易。

答案 4 :(得分:10)

首先,没有被编译和被解释(他的脚本确实意味着什么,有些模糊,无论如何用于不同的目的)是同一枚硬币的不同方面,因此也是如此。

最后一个原因,它不会在每个平台上运行,只是令人困惑。听起来他正试图宣传Java的可移植性,而PHP根本就不是Java。但是,Java在一个非常特定的平台上运行:JVM。该平台反过来在许多其他平台上运行,从而为Java提供了可移植性,但它与传统的“便携式”使用并不完全相同。例如,C是可移植的,可以运行从PDP-11到最新的嵌入式设备。

但是,C通过指定自己的抽象平台的规则来做到这一点,并且编译器根据这些规则将C代码转换为汇编。这就是Java的可移植性与C类似的方式:它们都定义了规则,这些规则被转换为特定的具体机器(处理器)的指令;差异在于何时发生。

  

计算机科学中的所有问题都可以通过另一层间接来解决    - 大卫惠勒

实际上,甚至装配或“机器代码”也被处理器解释为其原生动作。 (我手边没有一个好的消息来源,但我记得它被A Crash Course in Modern Hardware轻微覆盖,无论如何都是一个很好的演示。)随着处理器速度变快,我们几乎没有注意到我们未充分利用的盒子是否给定的程序在asm中或通过解释器运行,但这就是“真正的编程语言”的定义发挥作用的地方。

定义“真正的编程语言”的唯一合理方法是“完成实际工作的语言”,但这也是“真实”的定义。 (然而,它确实与esoteric programming languages建立了区别,因为没有人做真正的工作,例如,在Malbolge中,对于任何“真实”的定义,你可以得到十个人的同意。)与今天相比,您对编程语言的选择受到过去实施策略和开销(例如运行时解释器)的限制。然而,即使在今天,某些语言对于certain applications和预期的负载来说比其他语言更“真实”,这一切都取决于您的要求。

听起来你的老师只通过玩具网络应用程序体验过PHP(并且可能使用'应用程序'是他所看到的内容)。玩具程序不是真正的工作。 PHP肯定有很多问题,但我不能说它不是真正的编程语言,除了开玩笑。

  

调试是厌恶的,不情愿的,并且是永远吹嘘的    - Dan Kaminsky

“真实”与“难以做”(与“真实工作”有关)之间存在某种联系,而您的老师可能一直在表达这种情绪。这在我看来总是bikeshedding的一种形式(对于这个有一个更好的术语,但我记不住了),一个人对物品价值的估计与人们所付出的努力有关。投入其中(例如,当我提供关于屋顶颜色的输入以及是否应该有标志时,斜纹更重要)。我们本质上比其他人更重视自己的努力 - 只是因为我们熟悉它,如果没有其他原因 - 即使这样做也没有意义。 PHP尽管存在缺陷,但它确实使一些事情变得简单,因此它和编写在其中的程序可以被认为是值得的。

答案 5 :(得分:9)

Facebook,Digg,维基百科,雅虎。我猜这些不是真正的网站。

答案 6 :(得分:4)

当我学习PHP时,我也不相信PHP是一种编程语言。

我不确定我在哪里选择了这个想法,但我在某处学到了脚本语言不是编程语言。所以我将这种思想应用于其他语言,例如JavaScript和SQL。

从那以后,我改变了主意,现在明白有一系列语言从高级别(例如PHP,Javascript)到低级别(例如c,汇编程序),其中包括C#和Java之类的东西。

答案 7 :(得分:3)

你是对的。这些原因太弱了。实际上你甚至不需要Apache来运行PHP 前两个原因只是重复,因为它实际上只有一个原因。因此,可以说“PHP不是编译语言”,但这并不意味着它“不是真正的编程语言”。 Java程序也不会编译成机器代码 - 嗯,它也不是真正的语言。证明完毕

答案 8 :(得分:3)

对不起OT,但是有这么多,这张照片出了很多问题!我只希望你能尽可能快地从那个班级,那个部门和那所学校中拯救出来。我保证,当二月到来时,你将无法获得一学期的知识。而且,如果你像我一样,当你的老师浪费你时,你会在沮丧,怨恨和愤怒中花费你的课堂时间。

那个女人不是老师!十进制到二进制作为编码的介绍?可怕!

是凤凰城的大学(哈!)?

答案 9 :(得分:1)

更新:在投票前仔细阅读,这不是我的PHP / Java方法,我正在试图看看他的老师如何看待PHP / Java的事情。感谢。

我认为您的老师认为: PHP是一种锁定在网络服务器中的语言,主要用于生成网页。

另一方面,Java是一种用于网页的通用语言,但也用于其他行业,如微波炉和微处理器。汽车,你可以用Java等编写桌面应用程序。

考虑到这一点,你的教练说“PHP不是真正的编程语言!”是可以理解的。

我没有偏见,我不喜欢两者,Java& PHP :) ...但必须同时使用它们

答案 10 :(得分:1)

没有真正的编程语言,真人或现实世界。如果您可以用PHP编程,那么您就是程序员。

答案 11 :(得分:0)

“那么,在'编程语言的定义'中,是什么让PHP不是'正确的'?”

真正的原因是大多数人不将它用作通用应用程序编程语言。

这是因为总有一些语言更适合(有一个例外:PHP是为网络编程创建的)。 PHP是“另一种语言,甚至没有比现有语言更好的设计功能”。与其他语言进行比较时,一些问题的例子包括:缺乏稳定和可移植的GUI工具包(至少在Windows / MacOS上),缺少线程,缺乏速度等等。

最终,那些打算用PHP编写通用应用程序的人大多是那些只熟悉PHP作为编程语言的人。因为没有理由在PHP中从头开始编写新的应用程序:你会发现大多数实验或有才能的程序员都不会考虑这样做。

答案 12 :(得分:0)

当然,PHP是一种编程语言。它甚至是图灵完整的语言,这基本上意味着它的“力量”等于其他编程语言的“力量”。它在严格(它确实存在)和隐喻意义上都是“真实的”(有人用PHP生活)。所以看来你的老师有点偏颇。

但是,我认为你的老师态度有一点。 PHP和Java来自完全不同的背景。尽管有用,但PHP非常混乱。将Java中的标准类库与PHP函数的标准库进行比较 - 后者看起来就像一大堆不相关的工具。此外,网上有很多PHP教程,礼貌地讲,质量上乘,质量上乘。因为你正在学习如何编程,所以最好学习使用好的工具,Java是学习编程比PHP更好的工具。

PS。谷歌为“PHP糟透了”获取大量信息,为什么PHP不是世界上最好的工具。

答案 13 :(得分:-1)

它只是人们重复的那些愚蠢的事情之一,使自己听起来更聪明,闭嘴,货物崇拜的沾沾自喜。如果你要求他解释,他要么假装这是个笑话(告诉他“好的尝试”),要么小心翼翼地捍卫自己的位置(告诉他“哦,我看到了”,然后慢慢退开)

答案 14 :(得分:-1)

只是向其他人提出反对意见......

我觉得将PHP作为编程语言感到有点不舒服,因为我不相信你最终得到了一个程序。你不要让你的PHP应用程序运行,而是要求PHP页面被加载和处理,以便生成输出页面,带有DB更改等副作用。

这些都不意味着PHP在技术上不能被描述为编程语言,但我认为将它与Java / C ++分开是合理的,在Java / C ++中程序可以运行一些状态概念。每个PHP文件肯定都是它自己的“程序”,因为你可以请求任何PHP页面......除了调用正确页面的惯例之外,没有PHP Web应用程序的入口点。