这里的例子:
是的,我了解HTML和CSS并不完整。是的,我知道它们是说明性语言,而不是命令性语言。但是,为什么人们在询问有关这些语言的问题时总是总是被这个学问(可能是显而易见的)事实所吸引呢?
这里的例子:
是的,我了解HTML和CSS并不完整。是的,我知道它们是说明性语言,而不是命令性语言。但是,为什么人们在询问有关这些语言的问题时总是总是被这个学问(可能是显而易见的)事实所吸引呢?
Answers:
真的有什么区别?
编程语言和这些其他语言之间的真正而重要的区别是:
HTML和CSS描述表示,而编程语言描述 功能
我打算说明为什么这种区别很重要,但是在这个问题上的脚步有时会放错地方。
一个真实的故事:
我曾经花了几个月的时间使用“适当的”编程语言来开发复杂的绩效管理系统。它自动化了从其他各种系统收集数据的过程,对该数据执行了各种操作,然后将结果显示在一个简单的表中。
一旦投入使用,一位高级经理就看到了为类似业务编写的工具,并询问我们是否可以用他们的替代品代替我编写的内容。此外,他为我花了数周的时间开发解决方案而感到沮丧,因为这个新应用程序在几天之内就被编写出来了。
进一步的调查显示,经理的首选选项是所有陈述都没有实质内容:有很多颜色,图标和图形,但它们背后绝对没有逻辑。所有数据必须手动收集和处理。尽管界面漂亮,但该应用程序实际上是无用的。
我很高兴地说,有问题的经理被说服了,我的方法可以满足他的实际业务需求。
介绍的重要性:
通常暗示HTML,CSS等方面的技能在某种程度上不如“真实”编程语言中的技能。这是一个严重的错误。
在我的故事中,高级经理认为设计对他来说非常重要,以至于他最初准备忽略对它有利的功能。现在,如果这是一起孤立的事件,我可能建议经理只是愚蠢的。但事实并非如此。我一次又一次地遇到了那些对华丽的图形和精致的小部件印象深刻的用户,但对原始的功能和我的技术成就印象深刻。我认为这里有几课要学习:
因此,面向表示的语言(HTML,CSS)很重要。可以有效使用这些工具的人所增加的价值不应被低估。
真正的编程语言的重要性
正如OP所指出的,“真正的”编程语言是图灵完备的。作为一个适当的悲伤怪胎,我发现这令人着迷。这意味着,对于任何书面的TC语言程序,功能相当的程序可以以书面任何其他 TC语言。当然,这并不是说所有语言都是相同的。他们每个人都有自己的长处和短处,这使他们或多或少地适合于某些任务。但是,除了I / O,这意味着所有程序都可以用所有真正的编程语言编写。
(顺便说一句,重要的是TC。声明式与命令式在这里是一条红线。例如,SQL是声明式的,但由于它是TC,因此也是一种适当的编程语言。)
当然,对于诸如HTML或CSS这样的标记语言,情况并非如此。实际上,这些语言存在无法解决的全部问题。在哪里我可以用一种真正的编程语言编写任何我想编程的东西 -包括布局引擎-用非TC语言不可能实现相同的目的。
正如我的故事中强调的那样,HTML及其类似内容用于产生演示文稿。实际的编程语言用于产生功能。
为何程序员对此感到痴迷?
做书呆子总是合适的吗?
让我们面对现实吧,作为程序员,我们自然是个书呆子。它与领土。当非程序员无法理解我们所做的事情时,我们很多人被烧死并没有帮助。
不过,(老实说,这违背了我的本能),我认为我们不必在任何人忽视每一个细微差别的时候就叫他们出去。
这里重要的是上下文 和观点。
有人告诉我,从生物学家的角度来看,西红柿是一种水果。但是,当我在超市购买它们时,我会在蔬菜中寻找它们。为什么?因为在特定情况下技术区别并不重要。而且,这种区别实际上会妨碍它们的用处:例如,如果我足够傻,可以在水果沙拉中加入西红柿。
计算机语言也是如此。有时候,编程语言和其他语言之间的差异确实很重要。但是,经常地,将它们全部融合在一起,我们通常都能很好地进行有效沟通。对于由OP链接的问题,实际上什么语言是真正的编程语言而哪些语言不是真正的编程语言并不重要。指出区别并没有以任何方式推动讨论。值得庆幸的是,除了增加一点噪音(并成为进行有趣讨论的刺激!)之外,由OP链接的学步车也没有什么意义。但是,在最糟糕的情况下,修脚术会激起负面的情绪并破坏人际关系……至少根据我的妻子所说。
:-)
如何在程序员中处理学究
我的一位传教士朋友曾经发表过一次布道,题为:
这山值得死吗?
他指的是将军们对哪些战役值得进行战略评估的将军:这些收益是否值得付出代价?
当然,有时候需要加以区别。我的目标是,当我做出贡献时,它将为我们的集体努力增加价值。
毕竟,这是每个真正的程序员的工作。
告诉土木或机械工程师您学习过“软件工程”,他们会告诉您“软件工程”不是真正的工程。
告诉F-16飞行员您为了娱乐而乘坐塞斯纳斯,他会告诉您您不是真正的飞行员。
告诉医生你是脊医,他会告诉你...好吧,我们不要去那里:-)
我认为主要是人们不喜欢伪装者或不真正“有价值”的人渗透到他们的职业中。
现在,公平地说,很明显,HTML和CSS不是编程语言。它们不再是.docx格式是一种编程语言的编程语言,并且如果您只知道HTML和CSS肯定不准确,就声称您是一名程序员。但是我认为答复中的某些强烈含义可以归因于我上面所说的内容。
另外,在您链接的问题中,发问者将HTML和CSS称为“语言”,而不是“编程语言”。HTML是一种标记语言,而CSS也是一种语言(不过,我不知道您将CSS称为哪种“语言”?),所以我认为将他称为“语言”有点不公平。 “ ...
对我而言,这并不重要。
但是,我认为对于HTML,CSS,XML等和Real Programming Languages™而言,对它们所做的区分就像是木材和油漆作为建筑材料之间的区别。您不能像使用木材那样使用油漆来构建事物,同样,也不能像使用RPL那样使用HTML进行编程。
不过,对于某些对话,我同意你的看法,这可能是无关紧要的,因此令人讨厌而且令人讨厌。
这可能不是“重要的”区别,因为可以说某些网站的html / css部分和编程部分所做的工作一样多。
但这是一个重要的区别,因为任何人都不知道这意味着什么,因此在进行Web开发的团队中没有位置。
如果设计师认为HTML正在编程,请让他继续使用Adobe工具进行设计,并进行与打印相关的设计;但不要相信他会对网络应用说什么。
如果开发人员以为他的语言是图灵完备的,所以认为他高于设计师,就不要指望他与设计师合作良好,否则不要指望代码完成后可以“美化”。
if ... then
构造并且以某种方式可以重复执行以前未知的次数,那么我倾向于说这不是一种编程语言。当然,有一些边缘语言使定义变得复杂。但是HTML / CSS 远非如此。
当您说“声明性的,不是命令性的”时,您就把它打在了头上。标记(无论是HTML,CSS还是其他任何东西)都可以描述事物。编程的全部意义在于做的事情。
使用标记所需的技能与编程所需的技能完全不同。
通过编写标记解决的问题类型与通过编程解决的问题类型完全不同。
这对某些人来说很重要,因为表面上都不是火箭科学,但是由于它们在您实际关心的通常5到数十种不同的环境中以不同的方式实施,因此围绕它们存在大量奥秘。这种不可预测性和对工艺的关注使一定数量的技术专业人士感到恐惧,他们被无法量化的风险吓到了,甚至在获得学位后绝对不知道要学什么,因此更加恐惧。
如果有人问我知道什么语言,然后我把CSS扔了出去,他们说“那不是REAL语言”,我会问他们如何处理div在IE 5,IE 6-8和IE9 +中居中居中。然后,我们可以继续讨论圆角,alpha透明度问题,所有这些荒谬的表即布局参数背后的REAL罪魁祸首,这些参数才刚刚变得真正无关紧要,还有许多关于所说的uber编码器的主题,他们可能知道一个语言,并声称一到两个他由于十年前被迫上大学而上课,几乎没有功能素养。
它们肯定是“语言”。我不会称它们为“编程语言”。我很乐于描述用这些语言“编码”编写的过程。
但是,就我而言,任何能够熟练掌握CSS的人都具有chtzpa和职业道德,可以成为一名优秀的程序员,已经具有一些面向对象的思想背景,并且毫无疑问已经学会了思考他如何现在的写作可能会影响他未来25个项目的工作。
HTML和CSS不是编程语言。克服它。
但是:JavaScript是一种编程语言。机器是浏览器。PHP是一种编程语言。该计算机是服务器中的虚拟计算机。
因此,如果仅使用HTML和CSS,则无需进行任何编程(尽管您可能正在进行一些工程设计)。
但是,如果您使用的是JavaScript,PHP或其他脚本语言。您正在编程。
至于REAL编程语言。如果您在一台机器上(真实的或虚拟的)运行。并且正在使用您自己的算法来告诉机器执行操作。然后,您正在使用REAL编程语言。
编程语言是一个不太精确的术语,因为它是从业人员和非专业人士都使用的通用术语。从业者对该词的含义有些微妙的含义,而外行人士通常没有。通常,他们的定义是如果它有我不立即理解的有趣的单词/语法,而程序员使用它,那么它一定是一种编程语言。并非完全偏离标准,但我们可以同意它是不精确的。
声明性,命令性和图灵完备之类的词是更精确的术语,具有非常特定的含义。当您问诸如HTML / CSS为什么不是编程语言之类的问题时,您是在要求更精确地定义什么是编程语言。我们不是在ped脚,而是试图回答您的问题。当即使您谷歌搜索它们很难理解它们的含义时,它们是最好的术语吗?要看。您想要简短还是长久的答案。:-)
编程人员通常认为编程语言可以完全完成,但这意味着什么?这意味着该语言可以描述行为或做事方式。我们正式称其为逻辑。HTML / CSS可以描述在右上角有一个按钮,或者有一个包含4列5行的表格,前两行是黄色,而下一行是绿色文本,表格中的每个单元格都有5像素内容周围的空白。
HTML / CSS不能做的是表达单击按钮时发生的行为或逻辑。它不能说当我单击该按钮时从该表中获取值并将其加起来,然后将该值写入表底部的新行。描述行为大致等同于“翻车完成”,而不会过于学究。
更准确地说,图灵完备意味着您可以自己实现语言。那意味着我可以编写一个采用字符串的javascript的javascript程序,并且可以执行它(而不使用eval()函数)。实际上,我可以编写一个javascript程序,该程序可以采用用任何Turing完整语言编写的程序并对其进行评估。那就是图灵完成的意义。所有可以转换的语言在可以表达哪些程序方面都是等效的。如果您考虑一下,这将是非常惊人的启示。
这是我的两分钱。HTML和CSS显然不是编程语言。因此,当我在某人的简历上的“编程语言”下看到HTML或CSS时,这只是告诉我该人不知道他在说什么。
除此之外,不,这并不重要。
顺便说一句,程序员通常倾向于学究。这只是工作带来的。
没关系 这也是定义的问题。什么是编程语言?有些意味着它必须是图灵完备的。其他人则具有其他定义,这些定义使HTML成为一种编程语言。(在您的示例中,它们甚至没有被称为编程语言,而只是被称为语言)。
我的建议:试着忽略那些指出这些毫无意义甚至在很多方面甚至是错误主张的人。这只是语法纳粹主义的一种变体。从任何有意义的意义上讲,将HTML称为编程语言都是不正确的。
我认为可以归结为这一点-HTML和CSS虽然很复杂,需要一些技巧,但它们是表示语言,最适合作为生成报告的格式。因此,只能执行这些操作的人员不被视为编码人员。请记住,一些编码器的计算时间已经足够长,以至于让普通的文字处理器比HTML花费更多的命令语法来设置文本样式。
有人称其为“真实”语言是指以某种方式处理数据以生成报告的语言。或者可以用来编写游戏的东西。内外都知道HTML和CSS是一项宝贵的技能,但要与前端的JS知识和后端的Java,PHP,Perl,Ruby,Python,C / C ++或C#知识相结合,那就更重要了。
相反,只知道其中一种“真实”语言却没有任何Web前端技术的人在很大程度上限制了自己作为编码器的灵活性。
逻辑上的“左脑”或创造性的“右脑”信鸽/刻板印象准确地描述了许多人的技能。以我的经验,“ HTML / CSS是一种编程语言”更多地是关于擅长HTML / CSS的人是否也可以擅长其他编程任务。
在过去的13年中,与我一起从事Web开发工作的大多数Web设计师都能够创建有效的HTML和CSS,但无法应对更为苛刻的编程挑战(除了最简单的裁剪和-粘贴的JavaScript)。大多数热衷于编程的程序员和数据库设计人员对可视化表示的关注都不够,无法很好地使用HTML / CSS或一般的表示。大多数人实际上拒绝尝试。
HTML和CSS需要一些编程技能:实验,解决问题,仔细测试,对继承的理解...但是它们至少需要同等数量的设计技能:对颜色,线条,间距,平衡的敏感性-大部分都相同各种视觉构图技巧,可以拍出好照片。
由于HTML / CSS是一种布局或表示语言,因此它位于数据流程图的末尾。没有其他代码位于其下游。HTML和CSS并未使用某人为设计良好的API,服务或数据库架构所需的更高级别的设计技能。通常不需要模块化任何与HTML或CSS相关的东西,或者,如果有的话,图形设计者不可以这样做。很少有功能是使用HTML / CSS进行的。下拉菜单可能是最常见的例外,但是可以通过在网上剪切和粘贴配方而不是通过设计代码来完成。
对于程序员来说,具有一些视觉设计或布局技能,或者使设计师具有一些编程技能,这是不寻常的,但并非不可能。这些人在Web团队中特别有价值,因为他们帮助弥合了我们大多数人之间的鸿沟。但是它们通常受制于成见,对于“真正的程序员”来说,做HTML / CSS是不可能的,反之亦然。但是,与同一位程序员成为一个体面的水手,画家,厨师或在业余时间实践其他技能相比,这种技能组合并非没有可能。
正如其他人所说的,这种区别在招聘时最受关注。由于具有交叉人才的人很少,因此大多数工作职位必须针对一种或另一种技能。如果程序员在“ Programming Languages”(编程语言)下列出HTML / CSS,它会发出危险信号,表明他们无法完成一般的编程任务,或者他们的编程定义很狭窄。也许他们可以,这只是一个问题。如果设计人员列出了HTML / CSS,则您肯定希望查看他们的产品组合,以确保他们具有创造所需视觉效果的艺术能力。
HTML / CSS可能会一再被误认为不是真正的编程语言,因为它比丢弃无法跨越他们所代表的半球鸿沟的人更安全,也更能为社会所接受。当然,有些人可能没有这种抑制作用。我实际上和一位经理一起工作,他经常说:“他在[在这里插入了部门骨干功能]编写了代码?我以为他只是做HTML的?”
好问题!