什么是“真正的”编程语言?[关闭]


69

最近,一位老师说“ PHP不是真正的编程语言”,但在我看来,这只是给出了微不足道的理由:

  • 它没有被编译。
  • 它是脚本。
  • 它并非在每个平台上都运行。

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

背景

两天前,我在学校的A级计算机班上了入门课–我们在课程的第一年使用Java。我不熟悉Java,但是对一般的编程基础知识(变量,函数,面向对象,循环等)有很好的了解。

我们的首要任务是老师快速完成任务。她没有费心去解释任何概念,它们是如何工作的,或者您将实际使用它们的目的,并且似乎非常高兴地看着大多数学生(总体上是编程新手)的蠕动。在他们的座位上没有对她的含糊之处有一个模糊的想法。事后看来,我认为她很快就经历了一次难以置信的学习,看看谁能真正“掌握”计算机A级水平,因为学生们仍然有机会在9月开始之前改变他们的学科。

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

不用吹牛,我可能在课堂上确实拥有最丰富的经验,并且在练习中学得最远。他问我以前有没有经验?我说是的,特别是在PHP中,并开玩笑地评论说,我可以编写一些东西,仅用几行PH​​P就可以将二进制文件转换为拒绝文件,而Java应用程序正迅速发展成几屏代码。

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


49
您的老师可能是真正的 程序员之一
Gordon

2
听起来您像一个苦涩的老师,可能在PHP方面苦苦挣扎,认为这很邪恶。
克里斯·迪弗

1
@Gamecat是对Mel Kaye的引用吗?还是一些我不明白的笑话...;)
杰克

3
顺便说一句,谢谢你的编辑。我真的太华夫了。:D
杰克

2
好老师似乎非常不寻常。
Daniel Earwicker 2010年

Answers:


102

首先,我们需要知道什么是编程语言。至少,编程语言是计算机读取并指示其执行某些操作的语言。许多人还希望通用的编程语言能够成为图灵完整的语言。但是,在某些情况下,特定领域的语言可能没有图灵完善,但仍然是该特定领域的有用编程语言。编程语言可以被编译或解释,它们可以在许多平台上运行,也可以在一种特定的平台上运行。不同的需求需要不同的编程语言。显然,PHP是一种编程语言。

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

PHP是一种实用的语言。它是出于能够快速制作网页(此名称最初代表“个人主页”)的特殊需要而创建的,并且根据需要扩展了该语言。由于没有理论背景或强大的设计原则来驱动其创作(甚至没有正式的语言规范),因此它不如许多其他更现代的语言那么干净。诸如正确处理外来字符/ unicode字符之类的功能显然是在之后添加的,并没有与其他语言完美地集成在一起。这种混乱和缺乏理论上的严格性导致许多人(尤其是学者)不喜欢该语言,这可能是您的老师不认为PHP是“真实”语言的部分原因。

但是PHP擅长于PHP的设计目的,许多站点都使用它,甚至是非常大的站点,例如Facebook,Yahoo!。和维基百科。


6
马克,好回答!我只是在想:PHP == 'PHP: Hypertext Preprocessor' || PHP == 'Personal Homepage'-?!
杰克

1
是的,我是用代码位写的。
杰克

3
@Jac Webb-Heller:该名称最初是“个人主页”的缩写,但后来随着PHP的发展而更改。
马克·拜尔斯

是的,谢谢您的澄清!
杰克

1
来自php.net/manual/en/history.php.php:PHP / FI代表“个人主页/表单解释器”
luiscubal 2010年

59

未编译

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

它是脚本

这只是说PHP未编译的另一种说法。

并非在所有平台上都可以运行

Java也没有。

听起来您那里的老师真的很糟糕。


1
PHP到优化的C ++!他们接下来会怎么想?
TNi

9
是的,老师正试图通过声称自己不知道的事不值得知道来证明自己的无知。
Bill Karwin 2010年

2
@约翰:但是他说的是正确的。老师在上面列出的所有方面都错了。
NikiC 2010年

1
@约翰:你到底在抱怨什么?大卫在老师的论证中发现错误吗?他是否同意完全无关紧要。
康拉德·鲁道夫

约翰可能是老师。
rgin 2014年

34

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


我大笑这个!
杰克2010年

4
这可能是某种形式的出现,但是...我喜欢乳蛋饼。我觉得我不得不说。
Jla

1
这是唯一没有将“真实”与其字面意义相混淆的答案……

21

定义:编程语言

据此看来,PHP是一种编程语言。它是否是真正的编程语言完全是主观的。它是否是一门语言也是主观的。当然,它最通常不用作应用程序编程语言,但可以用于通过CLI开发Shell应用程序。我从来没有做过,所以我对它的理解是粗略的,但是有可能

现在,PHP是“脚本化的”(我认为这是指脚本语言),并且它可以在每个平台上运行吗?您判断:

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

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

Java甚至可以在每个平台上运行吗?否。仅那些存在JVM的服务器。

最后,是否需要编译语言?许多不是。甚至Java都不以C或C ++的相同方式进行编译。然后,您还需要查看Perl,Python等。

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


1
太好了,彻底回答了TNi!谢谢!
杰克

10

首先,同一枚硬币的不同方面,而不是被编译和解释(他肯定是用脚本表示的,这有点含糊,无论如何都用于不同的目的)是同一枚硬币的不同方面,因此实际上是相同的原因。

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

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

计算机科学中的所有问题都可以使用另一种间接解决方案来解决。
  —戴维·惠勒

实际上,处理器甚至将汇编或“机器代码”解释为其本机动作。(我手头上没有很好的消息来源,但是我记得它在《现代硬件崩溃教程》中有介绍,无论如何这都是一个很好的演示。)由于处理器速度越来越快,我们几乎没有注意到使用不足的机器给定程序是使用asm还是通过解释器运行,但这正是“真实编程语言”的定义发挥作用的地方。

定义“真正的编程语言”的唯一明智的方法是“完成实际工作的语言”,但这也确实使“真正”的定义有些困难。(但是,它的确与深奥的编程语言区分开来,因为没有人从事实际工作,例如,在Malbolge中,对于“真实”的任何定义都可以使十个人达成共识。)而且,与今天相比,您的过去,编程语言的选择受到其实现策略和开销(例如运行时解释器)的限制更大。但是,即使在今天,对于某些应用程序和预期的负载,某些语言比其他语言更“真实” ,这完全取决于您的要求。

听起来您的老师只通过玩具Web应用程序体验过PHP(也许使用“应用程序”对他所见所闻不胜其烦)。玩具程序不是真正的工作。PHP肯定有很多问题,但是除非开玩笑,否则我不能说它不是真正的编程语言。

调试令人厌恶,勉强执行,并且永远吹牛。
  —丹·卡明斯基

“真实”与“很难做”之间存在某种关联(与“真实工作”有关),您的老师可能已经表达了这种情感。在我看来,这始终是一种“骑车脱落”的形式(确切地说是一个更好的词,但我不记得了),其中人们对一件事物的价值的估计与人们必须投入的努力有关(例如,当我提供有关屋顶颜色以及是否应该有标志的输入时,自行车棚更为重要。我们内在地比其他人更珍视自己的努力-仅仅是因为我们熟悉它,即使没有其他原因-即使这样做没有任何意义。尽管有错误,PHP确实使某些事情变得容易,


哇。惊人的答案!这种“骑自行车”概念是解释它的好方法。
杰克

9

Facebook,Digg,Wikipedia,Yahoo。我猜那些不是真正的网站。


5

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

我不确定从哪里获得灵感,但是我在某处了解到脚本语言不是编程语言。因此,我将此思想应用于其他语言,例如JavaScript和SQL。

从那时起,我改变了主意,并了解到,从高级语言(例如PHP,Javascript)到低级语言(例如c,汇编器)的语言种类繁多,介于C#和Java之间。


3

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


3

对不起,很抱歉,这张图片有很多错误!我只是希望您能尽快逃出那堂课,那个系和那个学校。我保证,二月份到来时,您将学到一个学期的知识。而且,如果您像我一样,当您的老师为您浪费时间时,您将在课堂上充满沮丧,怨恨和愤怒。

那个女人不是老师!十进制到二进制作为编码入门?太可怕了!

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


1

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

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

另一方面,Java是一种通用语言用于网页,但在微波炉和汽车等其他行业中也使用过,您可以使用Java编写桌面应用程序等。

考虑到这一点,您的老师为什么会说“ PHP不是真正的编程语言”是可以理解的。

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


PHP未锁定在Web服务器内部。php.net/manual/en/features.commandline.php // gtk.php.net
Quentin

1
大卫,我知道,当然,十年来我每天都在做PHP。在命令行中用PHP完成了多少个项目?我试图反映出他的老师如何看待PHP vs Java。
2010年

1

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


3
那可能只是一天一名编码员。如果您考虑循环,条件,数据结构等方面的问题,那么您就是一名程序员,无论使用哪种编程语言。
乔治·马里安

0

当然,PHP是一种编程语言。它甚至是图灵完备的语言,这基本上意味着它的“能力”等于其他编程语言的“能力”。从严格意义上(确实存在)和隐喻意义上来说,它都是“真实的”(有人用PHP谋生)。因此,看来您的老师有某种偏见。

但是,我认为您的老师态度有些问题。PHP和Java来自根本不同的背景。尽管有用,PHP还是很混乱。将Java中的标准类库与PHP函数的标准库进行比较-后者看起来就像是大量不相关的工具。此外,在网上有很多PHP教程的质量中等,礼貌地说。因为您正在学习编程,所以最好使用良好的工具进行学习,并且Java是学习编程的工具,比PHP要好得多。

PS。Google的“ PHP很烂”获得了大量信息,为什么PHP并不是世界上最好的工具。


0

“因此,在“一种编程语言的定义”中,是什么使PHP不能成为一种“合适的”语言呢?”

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

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

最终,打算用PHP编写通用应用程序的人大多是只非常了解PHP作为编程语言的人。因为没有理由用PHP从头开始编写新的应用程序:您会发现大多数有经验或有才华的程序员永远不会考虑这样做。


-1

它只是人们重复做的那些愚蠢的事情之一,使自己听起来更聪明,使您闭嘴,它的货物自鸣得意。如果您要求他解释一下,他会假装这是个玩笑(告诉他“很好尝试”),或者可悲地尝试捍卫他的位置(告诉他“哦,我知道”,然后慢慢退开)


-1

只是为了向其他所有人争论

将PHP视为编程语言时,我感到有点不自在,因为我不相信您最终会编写一个程序。您不会让您的PHP应用程序处于运行状态,而是需要一个PHP页面并进行加载和处理,以生成一个输出页面,并带有DB更改等副作用。

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


5
Cmon,有php-cli!究竟是什么在阻止您在PHP文件中具有无限while(true){},例如,检查mysql表是否由电子邮件地址从外部填充,并在它们出现在表中后立即向其发送电子邮件?然后,您必须在CLI中启动此php“进程”,并观看它永远处理电子邮件。那是php中“守护程序”的实现。真正研究过PHP的人会争辩说,当您使用对象时,内存中PHP的真正问题是泄漏。真正的php专家会回答说,自php 5.3起,那些内存泄漏就消失了。
bPizzi

有几个例子可以反驳这个想法。例如,有PHP-GTK应用程序,例如文本编辑器:Tulip tulip.solis.coop.br/us/install_lin.php或运行了很长时间的服务器:nanoweb.si.kz
mario

2
我已经用PHP编写了完全“正常”的命令行应用程序。您正在将PHP编程与Web编程混淆。您的论点基本上是说Web应用程序与客户端应用程序不同,但这与用于生成两者的语言无关。顺便说一句,我认为PHP是一种非常糟糕的语言。但是,毫无疑问,这是一种真实的语言。
康拉德·鲁道夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.