5

由于需要输入大量特殊符号等,编程与例如文字处理特别不同。

在当前的新用户界面技术中,哪些适合编程,为什么?

或者语言语法的想法是问题所在,我们是否应该更符号化地编程,如果是这样,这将如何影响用户界面?

编辑:当我指定用户界面技术时,我将它开放给使用现有硬件(鼠标/键盘)和其他一些东西,如多点触控、手势识别、增强现实(参见 HitLabNz 以获得一些很好的例子)。我对我们如何将这些应用于编程很感兴趣。

4

7 回答 7

4

我只是在想这个。我打算写一篇关于它的博客文章,我不妨从这里开始。在编程中,我认为我们需要的不仅仅是一种新的输入法,还需要一个新的隐喻来配合它。这是一个三层的东西。模型-隐喻-界面。

我最近越来越多地认为语言是表示计算的糟糕隐喻。语言是我们用来交流的东西。您可以将程序视为与计算机的通信,同时也是与其他程序员的通信。但是除了文字之外,还有其他的交流方式。我正在这里制作一个列表,请随时编辑这篇文章以向列表中添加更多内容。

沟通方式

  • 演讲
  • 身体语言,暗示
  • 手势
  • 面部表情
  • 标志语言
  • 绘画/绘图
  • 拨盘、按钮、滑块、指向、拖动 (gui)

编程的另一个比喻是构建。以下是构建功能性事物的一些可能方法,它们可以构成编程接口的基础

构建功能性事物的方法

  • 齿轮/弹簧和其他机械
  • 折纸/裁切/胶合
  • 跳线
  • 电子电路
  • 铰链、滚珠轴承、车轮
  • 喷泉阀门和管道
  • 阿基米德机器:滑轮、杠杆、螺丝
  • 乐高

指定计算的另一种方式是通过定义。

定义方法 - 约束 - 分类 - 集合论 - 属性 - 症状 - 逻辑表 - 规则 - 铁路(如铁路图)

但请记住我们为什么要这样做。现在编程语言的工作方式显然存在一些弱点,(否则我们不想制作新语言)所以让我们在设计新语言时牢记它们

当前语言的问题

  • 界面隐藏

  • API 被隐藏

  • 副作用是导致错误的一个重要原因——程序的任何部分都可能影响任何其他部分。

  • 重构——有时你发现你在重复自己,所以你需要一种简单的方法将重复分解成一个宏、一个函数或其他一些隐喻。这主要是通过大量的文本操作工作手动完成的(或在 java 中半自动完成)。有没有一个新的比喻会让这样的事情看起来非常愚蠢?

  • 您需要一种简单的方法来定义自己的构建块或“单词”或习语,以用于构建更复杂的结构。您自己的工具,您自己的环境部分。许多语言不允许你以一流的方式做到这一点。

  • 编译器会因为最轻微的错误而严厉惩罚程序员。

  • 变量缺乏时间感 - 无法查询变量过去设置的所有值的历史记录。换句话说,我们能否拥有一种可以“倒带”程序进度的编程语言?变量可以经常更改为意外值的事实是另一个错误来源。这是副作用问题的另一半

  • 大多数编程语言都有相当陡峭的学习曲线

  • 在整个代码中引用库或小部件 X 在很大程度上使您与该库结合——如果不进行大量重构,就很难切换到类似的等效库。这主要与库有名称这一事实有关,为了使用库,我们在整个代码中硬编码了该库的名称及其方法。有没有更好的办法?

  • 并行性差,多线程会导致错误、竞争条件、死锁。是否有更好的并行性方法可以使此类错误成为不可能?仅这个问题就导致了许多新语言的创建。

  • 超越电脑屏幕思考,人们。也许键盘是输入复杂关系和符号的最有效界面。你确定吗?除了鼠标、触摸屏或平板电脑之外,还有更多的选择。数以万计的与计算机交互的方式——我们都只选择了一种或两种相当普通的方式。

于 2009-01-14T04:41:34.073 回答
2

几乎所有的非文本编程语言的努力都失败了。没有文本语言,很难既精确又高效。

很多 UI 工作都用于制作更好的工具。例如,您可以只使用简单的文本编辑器进行编程,也可以拥有成熟的 IDE,如 Visual Studio 或 Eclipse。除此之外,还有像 Rational Rose 这样的可视化和设计工具。这些工具提供了探索和/或修改底层代码的补充方式。

于 2009-01-14T04:02:58.317 回答
1

诸如多点触控之类的东西可能会提高代码创建的机械效率,但我认为这不是编程中的主要问题。当您考虑分析、设计、记录和测试算法所需的所有工作时,实际输入代码所花费的时间比例是如此之小,以至于在此处或此处节省按键或鼠标点击不会太多.

在我看来,这些天编程的主要挑战不是特殊符号或语法,它们相对较少,主要是直观的,并且接近接近 C 约定的事实上的标准。在我看来,编程的主要挑战是理解更大的代码单元,即 API 和程序本身的函数和类:什么是可用的,每个类做什么,每个函数需要和返回什么,在哪里相同点和不同点,以及它们如何组合成一个架构。我相信最严重的问题是由于不了解代码可能遇到的所有可能条件组合的类和函数中的微妙之处。

也许 AR 可视化技术可以帮助程序员和分析师查看和操作代码结构或流程的更大图景,但坦率地说,可以使用更传统的 UI 技术和控件来完成很多工作,例如表格、表单和菜单,使其进入编码世界。晚期的 Gupta/Centura 编程语言使用树状控件来更容易查看更大的代码结构。Intellisense 是促进代码创建的正确想法,但可以做更多工作来为开发人员提供工具来理解和分析更大规模的代码。Roedy Green 的 Source Code in Database 是一个良好的开端 ( http://mindprod.com/project/scid.html ),允许开发人员智能地查询代码库。更好的是一个推动的编程 UI对开发人员的分析,明确开发人员在给定程序设计中需要考虑的内容。

于 2009-01-14T15:34:03.570 回答
1

我认为,即使您使用非文本(例如图形、语音识别、直接神经接口)输入法,对您的编程内容进行文本表示也是非常重要的。

程序基本上就像一个食谱:“要实现这一点,请完成这些步骤”。文本表示是这个食谱的一个书面记录。如果您需要制作配方的配方(“单击此菜单,使用此对话框...”),并且无法进行文本交互,那么您将与您生产的产品失去联系。

我认为程序员对替代输入/编程方法的愿望与他使用的语言的概念缺陷有关。最近我读到有人受命编写一堆 setter 和 getter——用更好的语言,这将是它的元编程设施的工作。

关于图形编程的主题:我可以更快地输入“for”这个词,而不是用鼠标绘制类似三角形的东西。即使通过让我从某个菜单中获取此三角形来“简化”此绘图也是如此。编程时,您使用数百种不同的符号;如何组织它们以在不输入的情况下访问?嘿,我知道,键盘快捷键怎么样......等等......

键盘是目前向计算机传达意义的最快工具,而一段文本是在计算机上存储意义的最简洁和有用的表示。

于 2009-01-14T04:41:22.903 回答
0

对此进行了多次尝试。

APL 使用一组特殊符号来表示每个操作。这仍然以“J”语言的形式存在——等待它——用两个或三个字母的 ASCII 字符组合替换所有符号。

IBM 的 Visual Age 大约在 1998 年。有一个图形 IDE,您可以在其中执行诸如将“套接字”图标拖到您的工作空间并将其连接到“流”图标的操作。不过它只是生成了 C++,并且在最初的 g-whizz 之后,大多数程序员找到了“文本视图”选项并坚持使用它。

Suns Fortress - 仍然是文本的,但它允许您使用像 √ 这样的 unicode 符号作为运算符。不过,大多数已发布的示例程序似乎都坚持使用 ASCII 字符集。

这里有两个问题。

文字非常非常好!几千年来,人们已经能够画出相当不错的图片,但亚马逊销售的 99% 的书籍都只包含简单的文字。这可能是有充分理由的。

虽然“插座”的图形和相关的“连接”点可能很容易使用,但它的开发并非易事。您现在需要一个图形设计师来设计一个“错误消息显示图标”并定义一组关于如何以及在何处使用图形的规则,而不是做一个方法签名和一些 Javadoc。

于 2009-01-14T15:52:44.483 回答
0

等等...您需要的不仅仅是文本编辑器和编译器/链接器?

于 2009-01-14T15:57:29.107 回答
0

好吧,某种符号场景的全部目的实际上只是归结为基于 GUI 的开发,这是 Visual Studio 慢慢调情的主题,但我们距离我们还有很多年的时间。

创建某种表示 FOR 循环的符号不会加快开发速度。如果您想更快地编写代码,只需使用任何体面的 IDE 已经支持的拖放代码块。

于 2009-01-14T04:13:21.930 回答