编程语言应该直观吗?

时间:2009-08-29 02:12:47

标签: programming-languages usability

可以将哪些功能添加到新的编程语言中 使它更“直观”?说到网站和 桌面,我们赞成高可用性,几乎直观 可用性。人们越来越期待你的 应用程序应该“正常工作”。对于某一类 应用程序必须RTFM的想法,是一个标记 反对申请的有效性。人们倾向于 期望应用程序以他们“思考”它的方式工作 应该管用。有人可能会说这是一个有价值的标准 设计师应该努力争取。

相同的可用性严谨性是否适用于编程语言 和开发者环境?我意识到有类似的工具 提供提示的IntelliSense和一个好的IDE提供了一个 很多协助。但核心语言本身呢?什么 可以添加(或删除)进行某些编程 技术或算法更明显实施?如何 一个使正则表达式或递归更具有创造性?要么 这只是愚蠢的吗?

举个更具体的例子:HTML,CSS中的液体布局 或Flex和MXML。在HTML和CSS中,盒子模型是任何东西 但直观的给出了不同的实现 Internet Explorer和其他浏览器。除非有人 阅读文档或研究框的概念 模型在设计时很难“得到它” 在CSS的第一次刺中布局。我认为这是 为什么桌子在早期蓬勃发展。盒子模型是 隐含在表格单元格的概念中。在...的帮助下 像Dreamweaver这样的工具可以解决他们的想法 表格约束中的百分比宽度和布局 细胞。然后CSS开始成熟并且整套有效 出现了为什么表格不适合布局的原因。但是 实现同样的效果设计师不得不真正研究 CSS实现和盒子模型,并注入新的 他们思考的抽象层。

在另一个例子中,我发现在编写很多东西时 在ActionScript和MXML中,流体布局的整个概念 基于百分比的元素宽度不是很明显 并不总是遵循直觉。我理解基本的 Adobe Flash player和布局需要的问题 以绝对像素术语理解事物。当谈到 对于组件的潜在宽度,我理解为什么 百分比并不是立即显现出来的 核心级别的代码。从理论上讲,Flash 玩家需要知道(或计算)a的确切宽度 组件,以便它可以提供适当的几何形状 在屏幕上画画时的视频卡。但是当你 介绍一些百分比的概念然后你介绍 无限宽度的理论可能性。并找到 “无穷大 - 1”像素不是计算机所能做到的 没有一些抽象和直接做 计算。必须引用视口。该程序 必须知道它的界限。所以绝对宽度是常态, 虽然人类可能更喜欢设计 百分比。

当谈到编程语言时,可以有 在思考时帮助直觉的表达和特征 关于编程任务。或者我们最好“思考 像计算机一样“只需要我们需要的RTFM手册” 了解如何实现某些功能或布局 码?

如果你可以改变你的语法或语义 选择的编程语言你会添加,改变, 或删除以改善它的“直观性”?

附录,提出这个问题的原因受到了启发 看看“新手”能够实现的例子 Alan Kay's lecture: Doing with Images Makes Symbols中的Smalltalk。

3 个答案:

答案 0 :(得分:8)

“如果您可以更改所选编程语言的语法或语义,您会添加,更改或删除哪些内容以提高其”直观性“? “

编程很难。真的很难。语法更改无关紧要。 IDE与编程的基本挑战无关。

令人困惑的是语言的语义。

我不知道“直觉”对于像编程语言这样抽象的东西意味着什么。实际上,“直觉”可能是一件坏事。使用直觉来编程语言意味着先入为主的观念,偏见和知识分子将接管。

我永远不会期望在任何地方任何地方都可以“获得它”。编程需要清晰的思考 - 不是“直觉” - 而不是“期望”。

我们唯一能做的就是阅读手册,了解我们所遇到的新事物的独特,独特,新颖的语义。

我知道这一点:优雅的简约至关重要。特征的正交性。明晰。精确。没有例外或特殊情况。最重要的是,简单。

分层语言功能从根本上说是糟糕的。

通过在复杂的IDE中分层来解决语言问题更糟糕。


请参阅http://www.cs.utexas.edu/~EWD/transcriptions/EWD08xx/EWD854.html

“当面对一些新的和不熟悉的东西时,我们会尝试将它与我们熟悉的东西联系起来。在这个过程中,我们发明了能够让我们这样做的类比。

很明显,当我们面对一些如此全新的东西时,上述试图理解的方式并不能很好地运作,所以我们能够提出的所有类比都太弱,太浅而无法做到。很有帮助。一种全新的技术可以创造这样的环境,对编程的广泛误解强烈暗示这种情况随着自动计算机的出现而发生。 “

简而言之,“直觉”和“智能包袱”是程序员的问题。 理解技术的最佳方式是将其视为新鲜,新颖和未知的东西。


底线

复杂性是固有的。

你有两个选择。

  1. 开发智力工具(即抽象,摘要等)以应对它。

  2. 在另一个领域找到工作。

  3. 要求本身复杂的计算世界变成任何一个人发现“直觉”的东西都不会发生。计算太复杂,不能“直观”。

答案 1 :(得分:5)

我所看到的另一个解决编程语言“语法”复杂性的领域是Visual Programming Languages。 VPL背后的基本思想是采用编程语言(决策,子例程,函数等)的构造,并以图形方式表示它们,通常作为数据流图。最近流行的一种语言是Microsoft Visual Programming Language。我没有使用它,并且不能声称它的力量,但我使用LabView效果很好,我可以说你甚至可以在LabView中做任何你能想到的事情 - 但你< em> do 必须以一种非常不同的方式来思考它。

那就是说,我发现我个人偏好代码而不是VPL。

答案 2 :(得分:3)

一步到位的人与基类库的关系与语言本身一样多 - 虽然说实话,这两者通常是同义词 - 是Fluent API的概念。基本思想是使代码“像句子一样读”,这个想法是使代码更灵活和可维护。