代码之家  ›  专栏  ›  技术社区  ›  Jesse Pepper

在编程中应该采用哪些替代用户输入技术?

  •  5
  • Jesse Pepper  · 技术社区  · 16 年前

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

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

    或者,语言语法的概念是问题所在,我们应该更具象征性地编程吗?如果是,这将如何影响用户界面?

    编辑: 当我指定用户界面技术时,我让它既可以使用现有的硬件(鼠标/键盘),也可以使用其他一些东西,比如多点触摸、手势识别、增强现实(请参阅HitLabNz了解一些很好的示例)。我对如何将这些应用于编程感兴趣。

    7 回复  |  直到 16 年前
        1
  •  4
  •   Bermo    16 年前

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

    我最近越来越想 语言 是表示计算的拙劣比喻。语言是我们用来交流的东西。你可以把一个程序看作是与计算机的通信,同时也是与其他程序员的通信。但是除了文字之外,还有其他的交流方式。我正在制作一个列表,请随意编辑这篇文章,为列表添加更多内容。

    沟通方法

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

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

    构建功能性事物的方法

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

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

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

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

    当前语言的问题

    • 界面是隐藏的

    • API是隐藏的

    • 副作用是引起bug的一个巨大原因——程序的任何部分都可能影响其他任何部分。

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

    • 你需要一种简单的方法来定义你自己的构建块,或“单词”或习语,用来构建更复杂的结构。你自己的工具,你自己的环境。很多语言都不允许你以一流的方式完成这项任务。

    • 编译器会因为程序员的一点点错误而严惩他。

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

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

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

    • 并行性差,多线程会导致错误、竞争条件和死锁。有没有更好的并行方法可以让这些bug变得不可能?仅仅这个问题就导致了许多新语言的产生。

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

        2
  •  2
  •   Mr Fooz    16 年前

    几乎每一次尝试使用非文本编程语言的努力都失败了。如果没有文本语言,很难做到既精确又高效。

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

        3
  •  1
  •   Svante    16 年前

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

    一个程序基本上类似于一个菜谱:“要实现这一点,请完成以下步骤”。文本描述是对这个配方的总结。如果您需要制作配方(“单击此菜单,使用此对话框…”)的配方,文本交互是不可能的,那么你就失去了与你的作品的联系。

    我认为程序员希望使用其他输入/编程方法与他使用的语言中的概念缺陷有关。最近我读到有人被指派去写一堆setter和getter——用一种更好的语言,这将是一份元编程设施的工作。

    关于图形编程:我输入单词“for”比用鼠标画三角形要快得多。这是如此,即使这幅画是“方便”让我从一些菜单上得到这个三角形。编程时,你会使用数百种不同的符号;如何组织它们,使其无需输入即可访问?嘿,我知道,键盘快捷键怎么样。。。等待

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

        4
  •  1
  •   Michael Zuschlag    16 年前

    像多点触控这样的东西可能会提高代码创建的机械效率,但我认为这不是编程中的主要问题。当考虑到分析、设计、文档和测试算法所需的所有工作时,实际上键入代码所花费的时间是如此之小,以至于省去按键或鼠标点击在这里或那里不会有太大的作用。

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

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

        5
  •  0
  •   James Anderson    16 年前

    已经有过几次这样的尝试。

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

    IBMs视觉年龄约为1998年。有一个图形化的IDE,你可以在其中拖动一个“套接字”图标到你的工作空间,并将其连接到一个“流”图标。它只是产生了C++,而且,在最初的G-WHZZ之后,大多数程序员发现了“文本视图”选项并坚持下去。

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

    这里有两个问题。

    文本非常非常好!数千年来,人们一直能够画出非常好的图片,但亚马逊销售的99%的书籍只包含简单的文本。这可能有一个很好的理由。

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

        6
  •  0
  •   Omar Kooheji    16 年前

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

        7
  •  0
  •   TravisO    16 年前

    某种象征性场景的全部目的实际上可以归结为基于GUI的开发,这是VisualStudio慢慢关注的一个主题,但我们离它还有很多年。

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

    推荐文章