仓库源文站点原文


layout: post comments: true title: 跳出编程语言本身看中文编程语言设计 description: date: 2020-01-28 22:05:00 -0700

categories: 小结

一些个人建议,仅为有志于设计和实现中文编程语言的开发者作参考。

编程语言,是开发者为了实现某个具体功能,使用的工具。

因此它应该将目标开发者群体的用户体验放在首位。

JetBrains 首先是开发了 IDE,在过程中发现 Java 的各种不便才设计了 Kotlin。

个人认为,编程语言设计不应只单纯考虑编程语言本身而已,而是应该将开发者体验、生态建设、甚至软件工程综合考虑之后,得出的一整套设计。

从小处说,比方语法中的中文关键字,早先有过讨论,已见过至少三个项目(CTS、LingaScript、草蟒)中的风格是尽量使用两个字作关键字,比如”如果/否则/结束“等等。除了顺口之外,这种设计的一个好处是(最近才发现)利于视觉上的齐整。当然,个人对所有设计都持开放态度。之前做了这个中文关键词替换体验页面原型的目的也就是可以非常迅速直接地测试不同关键词对于开发者的视觉体验。

另一个常被忽略的方面,是编程环境对开发者的反馈。尤其是编译器的报错/警告信息,个人认为至今都还处于非常原始的阶段。对于新手开发者来说,各种如同天书一样又”言简意赅“的报错信息几乎无法通过自己理解来找到问题所在。作为中文编程语言,自然应该将反馈信息的本地化放在最高优先级。之前的扩展Python控制台实现中文反馈信息所作的仅是最简陋的直译。如果是自研的编程语言,当然可以自行设计更加易于开发者理解的语句,或者其他形式的提示(最讲究用户体验的网页设计可能是个很好的参考)。

如何通过最平缓的学习路径使开发者上手也应该纳入设计考虑。现在的一种方式是通过 IDE 提供模板或者例程,但其实语言设计者本身对“该如何更有效合理地利用我的编程语言”有很大的发言权。或者说,在语言设计时,就应该有了一个全面的认识。这也和既然开发新中文编程语言离不开API, 何不从开发API开始呢? 更进一步, 何不从例程开始呢?一文中在设计之初就从例程着手异曲同工(也可以对例程的视觉效果进行用户体验调查)。能否将一套利于新手上手、老手提高效率的模板、例程纳入编程语言一道发布呢?

对中文编程语言来说,在例程选择方面,应尽可能扬长避短。应该尽可能发挥可读性强的优势,使用语义丰富的代码进行演示。比如编程也可以走中国风。即使要演示算法相关代码,也可以改进一些标识符,使之更具有语义也更易理解,比如:中文代码示例之冒泡算法, 后感。也可以与英文代码进行对比,以显差别:中英文代码对比系列之Java一例。哦对了,还有,用于公开演示的,一定尽量带语法高亮,这样看起来”炫“的多。

关于生态建设,如何能利用现有编程语言的生态自不在话下。如何快速进行生态建设是个大课题。从立创EDA,Gratipay看中文编程开发环境和推广运营的一个趋势的第一部分和潜力需要分享来加速挖掘:大疆机甲大师Python开发两周感想之一供参考。

对于中文编程语言来说,也应考虑中文 API 的特性如何与编程语言设计结合,这也是用户体验的重要部分。前文一种改进中文 API 可读性的方法:参数不限于在末尾开发中文 API 的一些策略仅作参考。

关于软件工程,用最小的代价在尽量早期获得对代码的诊断和反馈已经是公认的趋势。比方说 IDE 用各种手段对代码进行静态检查等等。那么编程语言设计时,也可以将如何使这种检查更加简易纳入考虑。

还有 TDD 这一可以改进代码开发效率的手段,是不是也可以将自动测试框架部分融入语言设计中,省得用户选用各种第三方开发相关框架的麻烦?

刚想到关于文档方面,编写代码时同时编写说明,之后通过自动提取说明部分生成文档,已是常见的实践。也许编程语言也可以对这一功能提供支持?

当然,所有这些都考验编程语言该“操办”多少内容的问题。可以在实践中总结和演进。

最后,望设计者们既要有坚持初心的毅力,但也尽量将快速开发的思路引入编程语言设计实现中。以尽可能小的工作量试错,以尽可能小的迭代进行自我改进,尽早建立用户/兴趣者社区(比方说通过发布例程)。不要太指望“一鸣惊人”,而是稳扎稳打。再小的用户群也好,尽早建立稳固活跃正能量的的小社区,比松散又噪声/内耗极大的社区有价值的多。

还有,绝对不用追求语言特性的“高大上”,用 10% 的代价满足 90% 的需要,对于后发者来说是更加合适的第一步。

祝各位新年快乐,身体健康,万事如意。