我一直在思考一个问题:为什么我们要为人类创造编程语言,而不是为IDE创造编程语言,然后用人类可读的格式来显示程序呢?

用文本来表示数学表达式是非常糟糕的方式。

完全不如下述表达式清晰:

在处理编程语言中向量等非简单类型的时候情况会更糟,你只能通过引用传递结构。如果你不想耗费无谓的内存开销,那么就必须使用如下形式:

这些还只是最简单的公式。我在做图形引擎的开发时编写的着色器代码在调试时就是一个噩梦,因为它的表现形式十分晦涩难懂。

其次是变量的命名。再次举一个数学的例子:P(A | B)能够精准地表达含义且易于理解,并且简洁易于辨认。不幸的是大多数的编程语言都不允许我们以P(A | B)的形式命名变量。同样,有关camelCase和snake_case的争论也是由于不能在变量名中使用空格而造成的。

另一个问题是:我们如何在智能手机上编程?虚拟键盘不适合代码,基于图形的解决方案可能有效,但我很确定没有多少人喜欢在台式机上绘制图形。

制表符和空格的争论也是另一个由文本书写代码的假设引起的。同时,这两种方法都是严重过时的对齐工具。

对于上述每种情况,关键问题都在于格式和语义之间存在紧密耦合。只要我们以纯文本显示代码,就会产生这些问题。

连字和自定义运算符提供了一些帮助,但这些方法始终没有解决核心的问题。

那么如果我们将文件的表现从纯文本改成其他更丰富或结构化更强的形式呢?通过去除这种格式和语义之间的耦合,我们还可以在不同的系统上使用截然不同的格式(例如图形编辑器),然后修改底层相同的语义。

对此,你怎么看?

Hacker News 上开发者的观点

评论1:

你忽略了一点:文本文件是最简单的。虽然有时它们可能有点麻烦,但作为“构成表达的物质”,它们是无可比拟的。你可以使用现有最常见的人机界面设备来创建或修改文本,现在的孩子在上学之前就学会使用文本了。你可以阅读包含一百万种不同程序的文本,并对其进行样式化、过滤、格式化、剪切和粘贴以及其他无数的操作。书写方程式时的不足只是为这种灵活性付出的很小的代价。

如果按照你提议的方式“解耦”格式和语义,那么将无法避免语义与编辑器的耦合。这种情况下就只能使用一种编辑器,直到你开发出其他一些可以与语法树的结构化表示交互的东西。并不是说我们做不到或不应该这么做,APL就曾经做过,像Scratch这样的教育工具做得也很好,当然还有各种“无需编程经验”的流程图和建模语言,但是这种想法只能在一些非常具体的情况下才能与文本文件对抗。

评论2:

我觉得Smalltalk可以作为一个回答你的问题的例子。Smalltalk就像你描述的那样:一种为IDE构建的语言。你无法在该IDE外部使用这种语言,因为它没有按照纯文本的格式存储数据,而是采用了图像格式。该IDE为用户提供了各种不错的功能和分析,自从20世纪70年代创建以来,Smalltalk的创意已经影响了许多其他语言和IDE。那么为什么我们都不使用Smalltalk呢?我认为关键在于互操作性。Smalltalk是一个独立的世界。它无法与Smalltalk世界之外的工具很好地交互。例如,如果不解决如何以二进制的图像格式合并代码,那么就不能享受Git带来的便利性。当我需要完成一项特定的任务时(比如某种构建任务),我需要知道如何使用Smalltalk的工具在Smalltalk世界中完成所需的一切。Smalltalk违背了Unix哲学:它提供的不是一个功能,而是所有一切,因为它是一个微型的虚拟机。

我无权说这是我们不使用类似于Smalltalk的语言编程的所有理由,但是我觉得这是其中一部分理由。很多新的编程语言在尝试用新的方式、交互式的方式推动编程语言(例如Eve),但它们都没有解决关键的问题或赢得人们的认可。其中必然存在一些内在的原因为什么这样的语言无法取得成功。希望以上文字可以提供一些见解!

评论3:

Donald Knuth在1979年描述了Literate Programming的概念(https://en.wikipedia.org/wiki/Literate_programming)。

我之前公司的一位同事Raymond Chen在研究生期间是Donald Knuth的学生,他曾用过Donald Knuth的Literate Programming进行编程。

但他建议是不要采用这种编程方式。

原文:https://dev.to/drbearhands/should-programming-languages-be-made-for-ides-rather-than-humans-3dnf

作者:DrBearhands,软件工程师和数据科学家,他感兴趣的领域有人工智能、3D算法(图形、导航等)、逻辑、高性能计算/并行、功能编程和创新。

译者:弯月,责编:郭芮

【完】


微信改版了,

想快速看到CSDN的热乎文章,

赶快把CSDN公众号设为星标吧,

打开公众号,点击“设为星标”就可以啦!

推荐阅读:

  • 从网络管理员到首席架构师,这 16 年我是如何实现每年加薪 10000 美元的?

  • 20 分钟教你搞懂 Git!

  • 开发者编程时应该围着“程序”转吗?

  • 老码农冒死揭开行业黑幕:如何编写无法维护的代码

  • 2018最后一战:25天编程PK赛!

  • 想让马云成为你的老大?揭秘阿里面试情景

  • 通证简史|从日进斗金到夹缝求存, 细数Token的前世今生

  • 如何用 Python 实现选择排序?

程序员是否应该创造面向 IDE 而非人类的编程语言?相关推荐

  1. 老程序员有技术为啥不单干?非要在公司呆这!

    >>原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! >>原文链接地址:老程序员有技术为啥不单干?非要在公司呆这! 网上不知道什么时候加的好友,他应该是做销售的,他突 ...

  2. python编程语言的优缺点-程序员千万不要入错行!常见的AI编程语言优缺点比较...

    人工智能编程是一种技术的提升,为不同公司的运营和人们的生活带来了极高的效率和最佳效益.人工智能为不同的行业带来了另一种智能技术,其潜力的前景仍在增长,期望它能够达到人类的智慧. 这是因为开发人员愿意探 ...

  3. python8个程序语言_所有程序员必知--2019年最流行的8种编程语言和框架

    上图是您应该在2019年根据各种,统计和事实寻找的8种最佳编程语言和框架的列表. 在技​​术不断进步的当代世界中,计算机无处不在.为计算机编写程序是当前IT市场上最关键的工作配置文件之一. 您是否想过 ...

  4. 新手编程:程序员 5 种编程入门方法,快速学会一门编程语言!

    程序员要精通一门语言,还是要掌握多门语言? 对于这个问题,公说公有理,婆说婆有理. 技术更新太快,精通一门编程语言已经实属不易,又怎么好意思说精通多门语言呢? 不过呢,当你精通一门语言同时,涉猎一下其 ...

  5. @程序员,快收下这份比特币“勒索病毒”应对须知!

    作者 | JiekeXu 责编 | 胡巍巍 风险从来都不是臆想和草木皆兵,就在你不经意的时刻,可能风险就突然降临到我们的身边. 发现比特币勒索病毒 业务账号无法连接数据库 2018年7月18日早上10 ...

  6. 不懂算法的程序员不是好工程师!

    时刻提醒自己,技术之路修远兮,予以自勉. 作者 |  菜鸟奋斗史 责编 | 胡巍巍 算法主要衡量标准 时间复杂度(运行时间) 在算法时间复杂度维度,我们主要对比较和交换的次数做对比,其他不交换元素的算 ...

  7. IDE 不是程序员的唯一选择

    我心目中,这篇文章的目标读者应该是在 Windows 下完全使用 Visual Studio 或 Borland C++ Builder (现在还有人在用么?)等系列 IDE 开发软件的 C/C++ ...

  8. java ide 进行图形化界面时不能显示汉字_主流开源IDE汇总,Java程序员一定能用上!...

    点击蓝字 · 关注我们 谈开发,Java肯定是个绕不过去的话题,那大家到底都用哪些IDE呢?下面给大家讲讲7个程序员最爱的开源IDE工具,当然了这只是整理出来的一部分,如果你有更好用的,也欢迎在评论区 ...

  9. 面向程序员的GPGPU技术系列(1) 为什么要理解GPU体系结构?

    GPU的计算能力在电脑游戏和计算机视觉领域已经得到了充分的证明.本文的目的不在于介绍GPU的发展史和其在上述领域的应用,而是侧重于如何在通用计算领域发挥GPU强大的计算能力,即GPGPU(Genera ...

最新文章

  1. PaddlePaddle yolov3
  2. linux之sort 命令详解
  3. 使用 IntraWeb (31) - IntraWeb 的 Xml 操作使用的是 NativeXml
  4. 【杂谈】从学生到讲师,我如何20天里在有三AI赚3万
  5. 获取对话框当前cfont_自绘对话框
  6. cocos 修改层级_cocos creator 场景如何透明,多个canvas层级显示
  7. 手把手教你在windows10下进行openFoam调试
  8. 技术绩效考量:你们可能都做错了
  9. jzoj3860-地壳运动(mst)【最小生成树,三分】
  10. 从graphql endpoint获取schema文件
  11. 体验最火的敏捷——SCRUM(厦门,2014.1.4)
  12. poj 3728(LCA + dp)
  13. SQL Server 2005 DTS导入平面数据
  14. vfp : 顶层表单附加菜单
  15. ExtJS(5)- Ext5的统计图Chart
  16. html网页中加入音乐播放器,HTML网页调用 网易云 音乐播放器代码
  17. Java 冒泡排序的使用
  18. matlab模拟塞曼图谱,基于MATLAB的塞曼效应数值模拟
  19. BERYL和COMPIZ FUSION的安装与使用
  20. 穷养儿,富养女一一原来是指这样

热门文章

  1. python中line.split_Python splitlines()方法
  2. 剑指Offer之左旋字符串
  3. 水下等离子切割机行业调研报告 - 市场现状分析与发展前景预测
  4. 中国塑料食品和饮料包装行业市场供需与战略研究报告
  5. 代码审查反馈提交修复时,是否应该压缩提交?
  6. Windows 11 高门槛“吓退”用户,Linux 成“香饽饽”?
  7. 一次解决Linux内核内存泄漏实战全过程
  8. 雷军:小米MIX α量产难度太大已放弃;iPhone 12系列将支持北斗导航;TypeScript 4.0 RC发布|极客头条
  9. 滴滴上线自动驾驶服务;微软宣布将永久关闭实体店;.NET 5.0 Preview 6 发布 | 极客头条...
  10. 老师,你确定注释不会被执行吗?