大多数程序员对于语法高亮的配色方案都有自己的个人喜好,但是我一直在想,有没有人对最佳配色方案进行过实际的科学研究?我想象这样的研究将研究诸如代码的可读性,程序员的眼睛是否被最重要的部分所吸引等问题。
也许已经为默认的Visual Studio主题完成了此操作,但是我想知道是否有任何公开可用的研究以及它们的发现。
大多数程序员对于语法高亮的配色方案都有自己的个人喜好,但是我一直在想,有没有人对最佳配色方案进行过实际的科学研究?我想象这样的研究将研究诸如代码的可读性,程序员的眼睛是否被最重要的部分所吸引等问题。
也许已经为默认的Visual Studio主题完成了此操作,但是我想知道是否有任何公开可用的研究以及它们的发现。
Answers:
特定的配色方案不可能客观上优于所有其他配色方案,它们的排名将根据口味和文化因素而分别主观。
但是,适用于可读性/清晰度的某些规则,在特定的环境光环境中使用等等等是适用的,这些规则将从图形设计/版式,人机界面和其他相关研究中继承下来。
Ethan Schoonover的Solarized项目是一件有趣的工作:http : //ethanschoonover.com/solarized
他们只是与我所知道的主题遥相关的近期适度研究是2004年的一项研究:Hall&Hanna撰写的“网页文本-背景颜色组合对可读性,保留性,美观性和行为意图的影响”。但是,不是代码,而是网页,它们考虑的唯一配色方案是前景色和背景色。
我曾问过有关Skepics.SE上与程序员有关的配色方案的研究问题:“针对计算机屏幕的浅色暗配方案是否更适合程序员?” 。现在已经有将近两年的时间没有回答了,而通常情况下这类问题很快就会得到回答。这使我相信没有这样的科学研究。
最近,我们对代码演示进行了用户研究,这些演示在视觉上比语法突出显示更丰富。尽管对语法高亮方案的研究还不多,但您可能会发现它很有见地:
D.Asenov和O.Hilliges和P.Müller- 丰富的可视化对代码理解的影响 ,这是CHI 2016上10分钟演讲的视频。
我们将标准的Eclipse语法突出显示与带有视觉效果的两个更丰富的代码展示进行了比较,例如:
研究表明,增加演示文稿的视觉多样性对开发人员理解代码结构的速度有很大影响-时间最多减少了75%。重要的是要注意,这是关于代码结构的简单问题(例如“方法中是否存在嵌套循环?”)。我们没有测试需要复杂思考的任务(例如,“此方法做什么?”),因为这些任务是由人员的技能而不是代码表示的效果决定的。
从我们的研究中一个有趣的发现是,我们并没有观察到任何视觉超负荷由于更丰富的视觉效果。即使许多参与者说他们感到视觉上有些过载或困惑,但我们收集的数据(提供答案的时间以及答案是否正确)仅通过更丰富的可视化显示出改善。
关于语法突出显示,我们的发现间接表明,使用更多的视觉变化(例如,更多的颜色,以及更多类型的编程构造的颜色)将是有益的。例如,与对所有类型使用单一颜色的普通主题相比,在内置类型,控制流关键字和其余关键字中使用单独颜色的主题在某些情况下可能会提高对代码结构的理解关键字。
我认为这种研究不存在。实际上,当公司创建新的IDE时,语法突出显示颜色方案是基于其他IDE 的现有方案。
例如,默认的Visual Studio主题既没有new也没有original。多年来,蓝色一直用于关键字,包括旧的Ada IDE在内。绿色评论也一样。某些颜色或多或少是“新的”,例如用于类别名称的蓝绿色,但是您可以轻松理解选择这些颜色的原因:设置与蓝色相距不远的颜色是合理的(因为就像保留字:Int32
.NET,int
C#等),但是它必须保持基本颜色,与已经使用的蓝色有所区别。
现在,如何选择其他方案,例如深色背景上流行的浅色文字呢?它们不是由科学家研究多年,并进行了一些复杂的演算以获得精确匹配的结果而创建的。而是,开发人员创建一个对他来说可读的方案。他在网站上共享它,并且变得很流行。这就是所有的魔力。
最后一件事:是否存在可读性规则?不会太多
在大多数情况下,这是主观的:您不能说蓝色关键字比紫色关键字更具可读性,因为在他的显示器上,某个人比他能回答的比他更能理解紫色关键字比蓝色关键字更具可读性。
另一方面,这只是合乎逻辑的。黑白方案的可读性不如默认方案。以同样的方式,您不能#eee
在白色背景上将关键字设置为浅黄色,而将注释设置为浅灰色(假设),因为它不可读,甚至不必解释原因。在建立网站或印刷书籍时,这些规则是相同的。
作为一种粗略的研究,下面的屏幕截图显示了用于突出显示XSLT的3个颜色主题。我之所以选择XSLT,是因为它存在大量的语言元素,而且由于许多开发人员将其描述为丑陋,因此它会带来特殊的挑战。
日晒
汤姆莫罗之夜
Github
观察结果
样本中使用的颜色数量有助于区分不同的语言元素,但可能会使开发人员分心。
如果可能的话,它可以帮助从冷色转变为暖色,将冷色用于语言的中性部分。另一种选择是从柔和的阴影过渡到更鲜艳的阴影(色相饱和度)。
背景颜色对前景色的感知有很大的不同。
某些相邻的前景色可能会导致严重的碰撞,从而干扰眼睛,尤其是红色和绿色似乎不能很好地融合在一起。
在深色背景下,更容易提供各种相互之间和背景具有足够对比度的前景色。
最后,外部因素(例如环境光以及显示器的质量和校准)会产生巨大的差异。
结论
最好使用提供可扩展方式设置颜色主题的工具,因为任何单一颜色主题都不可能满足所有开发人员的需求,甚至同一位开发人员也可能会经常根据各种因素更改其偏好。
好吧,我想第一个问题将是白色背景是否是一个好主意。仅仅因为它接近真实的纸张,并且这些天我们可以在Internet上找到无处不在,不一定使它成为一个不错的选择(或者我可以说是完美的选择)。
我记得(很多)年前,我们只有黄底黑“配色方案”。我还记得那还不错。它没有黑白对比。不久之前,我了解到它对人眼也更好。
有时我真的很想知道是谁设计了配色方案,例如,随操作系统一起提供。我通常不理会它们,但我记得看到粉红色和绿色以及其他东西的混合效果真棒。好吧,我不吸毒...
有一些关于什么颜色会对您的潜意识产生影响的研究(镇定下来,引起侵略...)。我认为常用的配色方案是基于此的。也许他们只是增加了可读性。编码不应该是自杀的任务。
但是就目前的IDE的配色方案而言,我对此表示满意。让我们面对现实:它背后的简单想法是使查找与常规“代码噪声”不同的内容变得更加容易。老实说,我并不在乎他们使用哪种颜色来实现这一点。它只是不应该伤害我的眼睛或将部分代码烧入我的脑后,就像在某种绿色调上刺眼的红色。
编码应该轻松些。这就是我的意思。