构建网站就是编程。编写 HTML 和 CSS 就是编程。我是一名程序员,如果你在这里阅读 CSS-Tricks,你很可能也是一名程序员。
问题是,用 CSS 进行编程布局的细节不同,例如,用 Ruby 进行编程API 端点的细节。或者用 Python 进行机器学习。或者用 C++ 编程浏览器引擎。
但这些差异只是细节!很多细节,但仍然是… 细节。它都是编程。
我认为程序员是这样的

HTML 和 CSS 在这个奇怪而可爱的宇宙中处于什么位置?在网络上编程用户界面是什么感觉?
编程盒子,我喜欢这样说。一切都是一个盒子,作为 HTML/CSS 程序员,我们在浏览器的范围内编程盒子。就像这样

可爱。所以呢?
所以… 我相信我们,作为独立的程序员和整个技术行业中的网络部分,需要对成为一名程序员的含义达成更全面、更包容的理解。这种观点不仅使技术变得更加友好,而且使我们程序员更加强大和适应性更强。
对我来说 - 嗯,2019 年的我 - 编程就是为计算机编写1指令,以便其他程序员(例如你未来的自己)能够阅读和维护。作为一名程序员,我相信,一旦我精通一门语言,我就可以学习另一门语言2。归根结底,它们都是由相同的东西构成的。
然而…
我以这种方式做程序员大约八年了,但直到大约两年前,我才认为自己是一名程序员。事实上,我一直反对称自己为程序员,最近我从其他人那里也听到了同样的感觉。为什么,究竟是为什么?这是对“不算是真正的编程”现象的反应吗?这种情况还在发生吗?影响是什么?对我来说和对其他人来说,曾经的影响是什么?
是的,我知道“守门员” - 也就是说,自我膨胀地将他人排除在某个社区或身份之外 - 是存在的,有些人就是混蛋,但我认为这个故事还有更多内容。
所以,今年让我3感兴趣的是什么?与其他构建网站的人4交谈并开始回答这些迫切问题的过程。
- 我强烈建议您阅读编程就是写作,就是编程,这是Felienne的一篇博文和研究论文。 ↩
- 盒子程序员:他们知道什么?他们知道些什么?让我们一起找出答案吧!在 2020 年,我的目标是学习 Rust,这是一种类似于 C++ 的低级编程语言。更正一下:我的目标是开始学习 Rust - 这是一项超过一年的任务。为什么要学习 Rust?关注我的博客https://notlaura.com/blog,我很快就会写更多关于这方面的内容。 ↩
- 很难选择写这篇文章的内容!我对很多事情都很感兴趣,特别是单元测试 CSS,我的设计工程师工作https://notlaura.com/designgineering-chronicles-the-first-month/,以及探索/分享更多关于CSS 算法的内容。
- CSS-Tricks 读者,您怎么看?您称自己为程序员吗?为什么,或者为什么不?您是否经历过这种“不算是真正的编程”现象?它对您有什么影响?随时给我发推文或给我发邮件。
我同意,作为一名只做前端开发的人,我经常会有一种感觉,Java 开发人员认为我们不是程序员。我认为这种感觉至今仍然存在,至少在你加入一个真正的全栈团队之前是这样,当 Java 开发人员开始编写 JS 和 CSS 时,他们就会明白。
此外,这让我想起了今年的 ServerlessConf 上的一个演讲,主题是 yaml,但演讲者提到了“不算是真正的程序员”这个话题,从 1:00 开始。
https://acloud.guru/series/serverlessconf-nyc-2019/view/yaml-better
感谢您分享这个信息,Kelly!我真的很想知道这种情况还会出现在哪里。
相关话题,以及我为什么认为这是一个非常重要的对话主题 - https://speakerdeck.com/heathermiller/the-times-they-are-a-changin
“为什么,究竟是为什么?”
让我分享一下我的见解。HTML 是一种描述语言,对于描述静态数据结构(树、列表、表格)和静态标记文本非常强大,它提示如何解释文本片段。CSS 添加到 HTML 中用于静态描述样式数据,因此它仍然只是一种描述语言。
编程语言描述动态事物、过程,从一个静态状态到另一个静态状态的变化。不仅如此,用编程语言编写的文本可以被编译器或解释器处理,并为计算机添加新行为。可以在编程语言中描述数学函数,并让计算机进行计算。
PDF 是一种描述语言(它向打印机描述文档是什么以及如何打印),但我不会将手动编写 PDF 文件的人称为“程序员”。
对于那些使用 HTML 和 CSS 的人来说,“网页开发人员”不是一个很好的描述吗?我认为为“程序员”这个词而战,这个词已经对“程序员”应该做什么有了既定的预期,不值得。这会导致混淆和误解。
这不是关于守门。这是关于准确表达“程序员”工作的意义。通过使这个词变得平庸,你会误导很多人,让他们相信他们是程序员,而实际上他们不是,像这样的事情,正如 2007 年的记录所证明的那样,会发生
为什么程序员不能… 编程?
根据 wiktionary.org,程序员
以及程序
所以,编写 HTML/CSS 似乎符合这些定义。
但是那些制作电子表格的人呢?他们似乎也是程序员。那些编写文档并使用 GUI 将某些区域设置为粗体并将图片居中的人呢?这似乎是灰色地带。但如果他们使用 LaTeX 来做这件事呢?也许他们就是程序员?
程序员似乎是一个相当含糊的术语。
我不能完全同意这里的观点。如果你只是编写 HTML 和 CSS,那么发生的事情只是描述布局。
除非有某种流控制,否则你并没有真正编程任何东西。
这很好。设计也很难!然而…
如果我发布一个使用严格的默认 Bootstrap 设置的网站,并称自己为设计师,你会生气吗?我的意思是,为什么我们这些 JavaScript 程序员和后端开发人员需要设计师,如果我们不能只是使用 Bootstrap 或类似的东西?看看,设计非常简单!我是一名设计师!
是的,这有点贬低了所有那些艺术院校的学位和学习如何进行良好设计的辛勤工作,不是吗?
“如果我发布一个使用严格的默认 Bootstrap 设置的网站,并称自己为设计师,你会生气吗?”
这取决于。你是将自己称为设计师来填写简历,告诉同事,还是只是参加设计师的会议?分别来说,我会觉得这很不诚实,有点烦人,或者完全可以接受。
当出现这种对话时,我看到开发人员想要的是包容。不是要争强好胜。我从未看到过关于“为什么我们需要后端程序员?”的对话。
声明式语言怎么样?它们从定义上来说没有流控制。这里有一个很好的概述:https://www.youtube.com/watch?v=4A2mWqLUpzw
那个视频并没有说服我。特别是根源论点。
我想再次指出,设计和布局很难。做一名设计师是没关系的,在一个项目中,设计师应该与任何给定的程序员一样重要。
话虽如此,如果你自称程序员,然后申请编程工作,如果你只会 CSS 和 HTML,你很可能会被嘲笑。要么就是你很快就会发现自己力不从心。
成为一名“程序员”不仅仅是代码。它是能够理解系统和逻辑。你应该能够看到一种语言,并且能够至少通过查看好的代码示例来开始学习它。
另一个类比。能够换机油并不意味着你是机械师。你可以自称是机械师,开一家修理店,但一旦有人带着变速箱故障的车来找你,你该怎么办呢?
我一直觉得如果我说自己是程序员,就是在欺骗。但 CSS 世界近年来发生了很大变化,它变得更加强大和复杂,现在我觉得我们有权利称自己为程序员或开发者。
HTML 和 CSS 的设计目的是包容性。即使是完全不懂编程的人,也可以编写最终会被转换成可消费内容的 HTML&CSS 代码。源代码会很难以维护,但普通用户不会因为程序员的错误而受到“惩罚”。
加入“编程语言”带来的复杂性,环境就会变得不那么包容了。不会出现“哦,你没有关闭这个标签,但我确信你想关闭它,让我替你做吧”或者“哦,你使用了一些我无法识别的属性,好吧,我猜我会忽略它,继续解析样式,就好像什么都没发生一样”。更多的是“错误!错误!错误!无法识别的错误代码和错误消息,没有告诉你任何信息,但最终意味着你犯了一个愚蠢的错误,你的 IDE 无法识别,现在你将花费数小时思考你的人生选择”。
每当出现这种情况,我倾向于看到对词语的特定定义被用作论据,就好像词典是某个神灵在刻好的石碑上传下来的神谕,而不是为了更好地交流而由人编写的活生生的文档——它通常包含根据语境的不同定义。
对我来说,它归结为“番茄对生物学家来说是水果,但对沙拉厨师来说是蔬菜”的论据。在讨论我们作为网页开发者是否编写了可以被认为是程序或程序化代码的东西时,事情变得复杂、微妙,并且具有元属性,而且随着时间的推移而不断变化。(我个人认为答案是肯定的,但我认为没有问题进一步剖析这一点。)但是,没有理由将这种深层次的定义引入到关于开发者是否是真正程序员的讨论中。在大多数情况下,“程序员”这个词并不代表它的技术含义,而是指一个智力价值很高、能够与计算机交流、知识使他们有资格受到尊重的人。在这方面,编写网站代码的人一直都是真正的程序员。
我会称自己为程序员吗?这取决于情况。我站在一群写 BASIC 的计算机科学毕业生面前吗?那不,我编写的是浏览器使用的标记、样式表和脚本。我决定是否我有权在程序员网站上发布博客文章吗?那当然,也许吧。我正在向我的曾祖母解释我的工作吗?她从小就通过与人工接线员通话来打电话?那绝对是,任何能让她想象我实际工作内容的词语都是有效的。
编程是用编程语言编写计算机能够理解的指令。根据定义,编程语言是一种允许递归、循环、比较等的语言。HTML 和 CSS 是标记语言,因为它们不像 Python 或 C++ 等语言那样强大。因此,只知道 CSS 和 HTML 的人不能被称为程序员。不过,如果你通过在 JavaScript、PHP、Python 或 Golang 等编程语言中编写脚本将动态元素整合到网站中,那么你就可以被称为程序员。
此外,如果你使用处理网站这一方面的软件(比如 WordPress),你只是一个用户。但是,如果你修改了软件以满足你的需求,那么你就可以被称为程序员。我所说的修改是指用编程语言编写插件并扩展功能,而不是修改样式表或在 HTML 中添加侧边栏。
恕我直言,人们为什么如此关心这个问题?人们的自我意识如此脆弱,以至于他们认为这是一个危机吗?
对你所做的事情充满信心,做到最好,为那些你服务的人提供价值和经验,你会发现头衔越来越不重要。
我非常关心这个问题,因为我怀疑“不是真正的编程”的批评会让许多人在职业生涯早期(或者可能是学校里的孩子们)放弃学习更多关于编程的知识,也许还会让他们完全放弃进入科技行业。
对我来说,关心这个话题等同于关心让更多人更容易接触到编程。一个人的自我意识与之息息相关,当然,因为不是每个人都能以相同的方式获得自信。
我们关心这个问题,因为作为人类,我们是一种社会物种,使用口头语言和书面语言来表达意义。
我们必须相信彼此会使用正确的词语来表达正确的含义,这有助于我们进行演绎推理和归纳推理。
如果我需要一名程序员,并且我愿意为此付费来完成工作,我不想浪费时间去面试那些可能做得很好,但做的事情并非我需要的那些人。
如果我想聘请一名设计师,我想聘请一个有创造力的人,一个了解色彩理论的人,一个理解负空间如何工作的人,一个理解圆形和直线形状不会引起相同情感的人。如果我想聘请一名设计师,我并不需要一个会使用 Bootstrap 的人。
词语很重要,那是我们所拥有的全部。
开发人员这个词并不排斥任何人。开发人员这个词只是暗示了大多数行业同意的通用定义。
这就是我们建立信任的方式。
我理解这一点,但认为它方向错了。
CSS 是真正的设计吗?HTML 呢?JavaScript 呢?
它们都是这些,而且更多。与其说是某种东西是什么,倒不如说是它如何使用更重要。
与编程语言相比,它们更像是创造的工具,我无法想到比这更高、更令人兴奋的目的了。
如果连接方块是编程,那么在任何软件中打开选项面板,用复选框切换布尔值也是编程。
如果 CSS 是编程,那么打开任何 JSON 配置文件并更改它也是编程。
HTML 和 CSS 是对文档某些部分是什么以及它们应该是什么样子的声明性规范(分别)。声明性地指定一段文本不是编程。
这就像说,如果你要求某人将网站的背景颜色设置为红色,那么发送电子邮件就是编程。你可以在电子邮件中直接告诉他“background: red”,就可以了。
编程就是制作一个图形引擎,它解析 CSS 文件并遵循开发者的声明性指令。单独编写这样的文件不是编程。
你需要了解 HTML 和 CSS 才能成为网页开发者,但仅仅了解这些并不能让你成为开发者。你只是使用 HTML 中的一些特殊符号来编写内容,并且只是使用 CSS 列出一些配置参数。CSS 与在图形程序中打开配置设置面板,从下拉菜单中选择“颜色”,然后从出现的另一个下拉菜单中选择“红色”没有什么不同。
LOL。整个网站都在证明事实并非如此。
我从根本上不同意这种观点。
dictionary.com 将程序定义为
1) 为实现特定目标而制定的行动计划
2) 要遵循的活动、程序等的计划或时间表。
所以这个词,在其起源中,甚至在用于描述任何与计算机相关的遥远事物之前,就已经暗示了某种算法方法;按照步骤顺序排列的清单。
从相反的角度来看,它们的功能也无法比较。真正的算法编程工具与布局设计工具截然不同。即使在面向对象编程、函数式编程等不同的编程范式中,也有一些共同的概念,比如循环、递归、作用域等,这些概念在 HTML 或 CSS 中并不存在。
最后,我不认为放弃这种区别有什么意义。“程序员”与设计师相比既不更好也不更差,它们只是不同的学科,有很多重叠。它们都可以被广泛归类为软件开发。但说它们是一样的,充其量会让人困惑,最糟糕的是会让没有编程经验的人认为他们可以直接跳入 C 语言,因为它是一样的。事实并非如此。
请注意,我完全支持包容性。如果有人真的对编程感兴趣,我会很乐意帮助他们,我认为做 HTML 或 CSS 的非程序员是开发者群体的一部分。我只是认为我们不需要玩假装游戏,以便那些做某事的人可以称自己为另一个人。这对于那些真正投入时间学习的人来说是不诚实的。
我完全同意这里。我也认为这是一种自我贬低的自我,它必须不断地试图说服自己,否则。做“开发者”或“UI/UX 专家”或其他任何事情有什么不对吗?做你该做的事情,并称之为它本来的样子。当你开始编写相当程度的程序时,你就是一个程序员。我认识很多优秀的程序员,他们对布局和 CSS 一无所知,他们并没有试图插手并抢走任何人的学科和实践的权利。
的确。将所有使用计算机的人称为“程序员”或“开发人员”会导致这些词在几十年后失去所有意义,届时使用电子设备会像使用纸张一样普遍。
我们还没有达到那个程度,但你已经可以清楚地看到我们正在接近那个状态。越来越多的人开始使用声明式设置(无论是通过配置文件还是将配置文件映射到复选框、输入字段和下拉列表的 GUI)。
这些人和程序员一样,我们所有人就像游泳健将,仅仅知道如何游泳,就像厨师,仅仅知道如何煮鸡蛋,就像画家,仅仅知道如何使用白板。
“偶尔做 X 的人”和“以做 X 为职业的人”之间的界线总是模糊的,这在很大程度上取决于具体情况。为了“配得上”“厨师”这个称号,你需要掌握哪些烹饪技能?没有一个明确的标准。它是一系列东西,根据具体情况,意味着不同的东西。
但对于 CSS,很明显你甚至没有进行编程。在语法高亮的文件中编写代码并不能让你成为程序员。思考问题和理解问题的方式才是关键。正如你所说,CSS 甚至没有循环!
我一直不明白为什么 CSS 从业者如此执着于这一点……我在这个行业工作了几十年,从未听说过有人说“CSS 不是编程”。说真的,谁在乎呢?CSS 程序员的自卑情结一开始还挺可爱的,但过了一段时间就让人厌烦了。
如今,CSS 通常是使用 Sass(Less 或其他)编写的代码的生成结果,这些代码具有变量、函数、流程控制、数据类型等。
顺便说一下,CSS 也有变量。
我们应该专注于我们最擅长的领域,成为我们领域的专家,并通过我们的工作赢得尊重。
不要像孩子一样只说自己是谁,要展现出自己是谁,无论是程序员还是不是,这真的无关紧要。
自称程序员没什么特别的,和开发人员或设计师没什么区别。
你精通 CSS,很棒,你会比许多自称程序员的 PHP 开发人员赚得更多。
头衔无关紧要,重要的是你的作品。
“我非常关心这件事,因为我怀疑‘不算是真正的编程’的批评会让很多人放弃学习……”
这是你的猜测,事实上我认为这根本不是真的。如果你因为一些随机人的不同观点而放弃学习,你必须问问自己你到底有多想学。
老实说,你拉出心理学的论点来说明人们对你观点的反应方式,让我感到有点恶心。