编程特别不同,例如,由于需要输入大量特殊符号等文字处理。
当前的新用户界面技术,适合编程以及为什么?
或者语言语法的概念是问题,我们是否应该更符号地编程,如果是这样,这会如何影响用户界面?
编辑:当我指定用户界面技术时,我使用现有的硬件(鼠标/键盘)和其他一些东西,比如多点触控,手势识别,增强现实(请参阅HitLabNz一些伟大的事情)例子)。我对如何将这些应用于编程感兴趣。
答案 0 :(得分:4)
我只是想着这个。我打算写一篇关于它的博客文章,我也可以从这里开始。在编程中,我认为我们需要的不仅仅是一个新的输入方法,需要有一个新的比喻来配合它。这是一个三层的事情。模型隐喻接口。
我最近一直在思考 language 是一个用来表示计算的不好的比喻。语言是我们用于交流的东西。您可以将程序视为与计算机的通信,同时与其他程序员进行通信。但除了书面文字之外,还有其他方式进行交流。我正在编制一个列表,随时编辑这篇文章,以便在列表中添加更多内容。
沟通方法
编程的另一个隐喻是构建。这里有一些构建功能性东西的可能方法,可以构成编程接口的基础
构建功能性物品的方法
另一种指定计算的方法是定义。
定义方法 - 限制 - 分类 - 集理论 - 属性 - 症状 - 逻辑表 - 规则 - 铁路(如铁路图)
但请记住我们为什么要这样做。现在编程语言的工作方式显然存在一些缺点,(否则我们不想制作新的语言)所以在我们设计新语言时要记住它们
当前语言的问题
界面隐藏
隐藏API
副作用是导致错误的一个重要原因 - 程序的任何部分都可以影响任何其他部分。
重构 - 有时你发现自己在重复自己,所以你需要一种简单的方法来将重复分解为宏,函数或其他隐喻。这主要通过大量文本操作工作手工(或在Java中半自动)完成。是否有一个新的比喻会使这样的事情看起来完全愚蠢?
您需要一种简单的方法来定义自己的构建块或“单词”或习语,以用于构建更复杂的结构。您自己的工具,您自己的环境部分。很多语言都不允许你以一流的方式做到这一点。
编译人员因严重错误而严厉惩罚程序员。
变量缺乏时间感 - 无法查询变量在过去设置的所有值的历史记录。换句话说,我们是否可以使用编程语言来“回滚”程序的进度?变量可能经常变为意外值的事实是另一个错误来源。这是副作用问题的另一半
大多数编程语言都有相当陡峭的学习曲线
在整个代码中引用库或小部件X很大程度上将您与该库结合在一起 - 很难在没有大量重构的情况下切换到类似的等效库。这很大程度上与库有名称这一事实有关,为了使用库,我们在整个代码中硬编码该库的名称及其方法。有更好的方法吗?
并行性差,多线程导致错误,竞争条件,死锁。是否有更好的并行方法可以使这些错误无法实现?仅此问题导致了许多新语言的创建。
想想电脑屏幕以外的人。也许键盘是输入复杂关系和符号的最有效界面。你确定吗?除了鼠标,触摸屏或平板电脑之外,还有更多选择。数以万计的与计算机交互的方式 - 我们已经完成了一两种相当普通的方式。
答案 1 :(得分:2)
几乎所有使用非文本编程语言的努力都表现平平。没有文本语言,很难既精确又高效。
很多UI工作都在于制作更好的工具。例如,您可以使用简单的文本编辑器进行编程,也可以使用Visual Studio或Eclipse等完整的IDE。除此之外,还有像Rational Rose这样的可视化和设计工具。这些工具提供了探索和/或修改底层代码的补充方法。
答案 2 :(得分:1)
我认为,即使您使用非文本(例如图形,语音识别,直接神经接口)输入法,对您编程的内容进行文本表示也非常重要。
程序基本上就像一个食谱:“要实现这一点,请完成这些步骤”。文本表示是对该配方的记录。如果您需要制作配方的配方(“单击此菜单,使用此对话框...”),并且无法进行文本交互,则会失去与您生成的内容的联系。
我认为程序员对替代输入/编程方法的期望与他使用的语言中的概念缺陷相关。最近我读到有人写了一些编写器和编程器的任务 - 用更好的语言,这将是它的元编程设施的工作。
关于图形编程的主题:我可以更快地输入单词“for”,而不是用鼠标绘制三角形。即使通过让我从某个菜单中获取此三角形来“促进”这种绘图,也是如此。编程时,您使用数百个不同的符号;如何在不打字的情况下组织访问?嘿,我知道,键盘快捷键怎么样......等等......
键盘是目前用于向计算机传达意义的最快的工具,而一段文字是用于在计算机上存储意义的最简洁和最有用的表示。
答案 3 :(得分:1)
多点触控之类的东西可能会提高代码创建的机械效率,但我不认为这是编程中的一个主要问题。当您考虑分析,设计,记录和测试算法所需的所有工作时,实际键入代码所花费的时间比例非常小,以至于在此处保存按键或鼠标单击或者不会有太多。
在我看来,目前编程的主要挑战不是特殊的符号或语法,它们相对较少,大部分都是直观的,并且接近C约定的事实标准。在我看来,编程中的主要挑战是理解更大的代码单元,即API和程序本身的功能和类:可用的内容,每个类的功能,每个功能需要和返回的内容,哪里有相似之处和不同之处,以及它们如何融合到一个架构中。我认为最严重的问题是由于不理解代码可能遇到的所有可能条件组合的类和函数中的细微差别。
也许AR可视化技术可以帮助程序员和分析师查看和操作代码结构或流程的大图,但坦率地说,可以使用更多传统的UI技术和控件(例如表格,表单和菜单)来完成很多工作。还没有进入编码世界。已故的Gupta / Centura编程语言使用树状控件来更容易地看到更大的代码结构。 Intellisense是提示代码创建的正确理念,但可以做更多工作来为开发人员提供工具来理解和分析更大规模的代码。 Roedy Green在数据库中的源代码是一个良好的开端(http://mindprod.com/project/scid.html),允许开发人员智能地查询代码库。更好的是一个编程用户界面推动分析开发人员,明确开发人员需要考虑的特定程序设计。
答案 4 :(得分:0)
那么某种符号场景的整个目的实际上只归结为基于GUI的开发,这是Visual Studio慢慢调情的主题,但我们距离它们还有很多年。
创建表示FOR循环的某种符号不会加速开发。如果你想更快地编码,只需使用任何体面的IDE已经支持的拖放代码块。
答案 5 :(得分:0)
已经有过几次尝试。
APL使用一系列特殊符号来表示每个操作。这仍然以“J”语言的形式存在 - 等待它 - 用两个或三个字母的ASCII字符组合替换所有符号。
IBM视觉时代大约在1998年。有一个图形IDE,您可以在其中执行诸如将“套接字”图标拖到工作空间并将其加入“流”图标的操作。它只是生成了C ++,并且在初始g-whiz之后,大多数程序员找到了“文本视图”选项并坚持使用它。
太阳堡垒 - 仍然是文字但它允许你使用像√这样的unicode符号作为运算符。大多数已发布的示例程序似乎都坚持使用ASCII字符集。
这里有两个问题。
文字非常好!几千年来,人们已经能够绘制出相当不错的图片,但亚马逊销售的99%的图书只包含简单的文字。这可能是一个很好的理由。
虽然“套接字”的图形和相关的“连接”点可能很容易使用,但开发并非易事。您现在需要一个图形设计器来设计“错误消息显示图标”,并定义一组关于图形的使用方式和位置的规则,而不是进行方法签名,也许还有一些Javadoc。
答案 6 :(得分:0)
等等......您需要的不仅仅是文本编辑器和编译器/链接器吗?