【问题标题】:What alternative user input techniques should be adopted in programming?在编程中应该采用哪些替代的用户输入技术?
【发布时间】:2010-10-01 07:21:09
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我们只需要 Emacs 和 C-x M-c M-butterfly ...xkcd.com/378

标签: user-interface hci input-devices


【解决方案1】:

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

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

沟通方式

  • 演讲
  • 肢体语言
  • 手势
  • 面部表情
  • 手语
  • 绘画/素描
  • 转盘、按钮、滑块、指向、拖动 (gui)

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

构建功能性事物的方法

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

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

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

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

当前语言的问题

  • 界面被隐藏

  • API 被隐藏

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

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

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

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 除非你想出一个编程隐喻来取消 for 循环,并用更有用和更有表现力的东西来代替它。
    • “for 循环”是一种语言隐喻。如果您在不同的媒体中工作,则需要不同的隐喻
    • @Travis:事实上,我们离 GUI 开发还没有很多年。例如,看看 Labview。我并不是说它是完美的(事实上,远非如此),但你不需要输入一行代码来实现整个应用程序。
    • 我认为我们在这里的想法有点狭隘。目标可能并不总是产生我们目前认为的窗口 gui 应用程序。生成应用程序的选项可能比“使用 gui 或使用文本编辑器,它们是你的选择”更广泛。看看我的清单。这是什么意思...
    • 用乐高积木构建程序?我不是指在电脑屏幕上。我的意思是在真正的街区之外。举个例子。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      对此已经进行了多次尝试。

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

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

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

      这里有两个问题。

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

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

      【讨论】:

      • 当今环境中非文本编程语言的最大障碍是,现在常见且无处不在的计算机界面针对文本输入进行了优化。原始形式的 APL 在能够使用相应键盘的用户中非常受欢迎。
      【解决方案5】:

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

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

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

      【讨论】:

        【解决方案6】:

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

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

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

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

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

        【讨论】:

        • 您的第一点可能是正确的,但抽象程度是主观的。将 PDF 与 HTML 进行比较。大多数人没有意识到 PDF 不是一种文件格式——它是一种编程语言源文件,可以在文本编辑器中打开。但是这个方面被非常有效地抽象掉了。
        • HTML 具有图形创作环境,但很多时候您仍然需要知道如何手动编写代码以获得更有趣的效果,并获得适当的可访问性。
        • 至于你的第二点,它是真的-绘图可能不是最有效的隐喻。但是还有其他的可能比绘画或写作更合适。在我们尝试之前我们不会真正知道。
        【解决方案7】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-13
          • 1970-01-01
          • 2018-07-01
          • 1970-01-01
          • 2014-01-30
          • 1970-01-01
          • 2015-09-19
          相关资源
          最近更新 更多