当前位置: 首页 > news >正文

2018-11-10 专栏全年主题合辑-代码中文命名相关实践

注: 本文仅对个人亲自参与的尝试作一小结, 专栏中其他作者的尝试还望各自总结. 文中所有例子都尽量使用了中文命名

一些对中文命名的早期实践:

  • 2015年对JDK中接口的中文化尝试
  • 2016年的Spring Boot 1.3.3演示尝试了前后端中文命名
  • 2017年开始Java实现的汇编语言编译器
  • 将之前的插件项目中的代码中文化: 火狐插件实现浏览历史按主题显示(树)

在2017年发现多数流行编程语言已经支持Unicode/中文命名, 并开始小结中文命名的风格和特点. 2017年7月编写了中文代码示例教程之Java编程一天入门, 体验了选取例程题材的趣味与难度. 同月也在Maven Central发布中文API的Java库(后话, 在一年后喜获V2EX的用户反馈"第一次见以汉字命名的 Java 类"). 8月尝试对现有图形库p5js的接口进行中文化, 是在JDK接口中文化之后, 从通用库转向专用库的一步. 必须提到的是, 在2017年初发现13年前就有同仁提出中文命名的可读性优势与IDE支持问题, 而在半年后成立的"中文编程"GitHub讨论组中, 有幸碰到通过IDE插件实现拼音输入法和自动补全功能集成的同好.

在"中文编程"知乎专栏于2017年11月9月开通之前, 对现有框架的入门教程的示例代码尝试中文化, 并与VueJS开发组进行了中文命名相关问题的交流:

  • 中文代码示例之Vuejs入门教程(一)
  • 中文代码示例之Angular入门教程尝试
  • 中文代码示例之Vuejs入门教程(一)问题后续

专栏开通之际编写的对在代码中使用中文命名的质疑与回应是对之前看到的各种反对声音的总结, 至今尚未看到有力的反证, 并且在一路上的探索中发现了越来越多的佐证, 比如11月末发现的Python3选择支持非ASCII码标识符的缘由.

专栏开通的初期, 进行了一系列的相关思考, 对今后的实践方向有不小影响:

  • 中文命名实践的阻力和应对
  • 中文编程兴起的必然性
  • 中文编程兴起的可能途径

对在线编程对中文命名的支持初步调研:

  • 在LeetCode中的解答中使用中文命名
  • 向LeetCode报告编译信息中Unicode显示问题
  • 在线编程网站对中文代码的支持

之后重心转向自研编程语言, 也进行了一些相关项目的中文命名尝试:

  • 编写Visual Studio Code插件初尝试
  • 中文代码示例之5分钟入门TypeScript, 此文与GitHub讨论组内成员对TypeScript进行中文化有关, 半年后有了5分钟入门CTS-尝鲜中文版TypeScript
  • FriceEngine试用与API中文化也是与组内成员项目的交流尝试
  • 手机编程环境初尝试-用AIDE开发Android应用也与组内成员有关
  • 浅尝The Little Prover一书, 重逢Chez Scheme
  • 编程猫IDE体验:对Scratch的改进对少儿编程进行了初步了解
  • 尝试了一些短示例演示中文命名, 如中文代码示例之冒泡算法, 后感, 中文代码示例[译]Scala中创建隐式函数, 并在项目/教程中使用母语命名的"问题"中进行了一些反思.

在2个月后的2018年4月, 开始对Python官方入门文档的示例代码进行中文命名:

  • 搭建Python官方文档翻译环境-汉化示例代码
  • 中文代码示例视频演示Python入门教程第三章 简介Python
  • 中文代码示例视频演示Python入门教程第四章 控制流
  • 中文代码示例视频演示Python入门第五章 数据结构

原本是打算至少完成入门部分, 但过程中逐渐发现原教程示例的局限性, 如代码考古-Python3官方教程字典例程, 认为花精力在自己编写教程上也许更值得. 就有了"西游记"主题Python入门示例尝试-数据结构 5.1-5.1.2. 也尝试对国人原创教程中的示例进行中文化: 解谜计算机科学第一章示例汉化尝试

接下来是一段比较嘈杂的时期, 为Chrome和火狐浏览器编写扩展应该是为在插件中实现计算/编程工具做的技术复习. 此时发现了一系列针对中文编程/命名的软文:

  • 最近一波对中文编程(包括中文命名)的攻势
  • 万马齐喑究可哀-中文编程的又一波"讨论"
  • 后来的又见套路:如果计算机是用中文编程,你能成为计算机编程专家吗?.

不禁针对性地写了在代码中进行中文命名(类/变量/方法等)的优势. 至此, 深切感觉到进一步积极推广中文命名的必要性.

继续进行一些以中文命名作示例的小教程的编写:

  • 对DLL库中的接口进行中文命名
  • 中文代码示例之Python-如何遍历字典
  • 在Office的VBA代码里中文命名
  • 中文代码示例之Spring Boot 2.0.3问好
  • Head First OO分析设计一书略读与例子中文化

至此, GitHub讨论组已创建一年, 深感核心项目的必要性. 下面围绕编程术语命名进行了一些技术摸索:

  • 中文代码之Spring Boot实现简单REST服务
  • 中文代码之Spring Boot添加基本日志
  • 中文代码之Spring Boot集成H2内存数据库
  • 中文代码之Spring Boot对H2数据库简单查询
  • 使用JDT核心库解析JDK源码后初步分析API命名

8月末, 源于组内讨论, 开始了批量代码汉化工具的尝试, 并开发了必需的英汉词典相关工具, 从浏览器插件, 在线服务原型, 到今天的vscode插件:

  • 浏览器插件实现GitHub代码翻译原型演示
  • Java实现英汉词典API初版发布在Maven
  • 调研: 使用现有在线翻译服务进行代码翻译的体验
  • 代码翻译尝试-使用Roaster解析和生成Java源码
  • Java源码英翻中库以及服务原型
  • Java源码英翻中网页演示
  • Java源码英翻中进展-内测上线
  • 在浏览器插件中读取JSON资源文件
  • 浏览器插件-离线英汉词典
  • Chrome插件实现GitHub代码翻译v0.0.3
  • Chrome插件实现GitHub代码离线翻译v0.0.4
  • 浏览器插件-离线英汉词典 0.0.7
  • 在线代码离线翻译Chrome插件"一马"v0.0.8
  • 在线代码离线翻译Chrome插件"一马"v0.0.14
  • Visual Studio Code插件-英汉词典初版发布
  • VS Code英汉词典插件v0.0.4-驼峰下划线命名

主要出于此项目对中文命名的推广意义, 打算将这个系列作为个人在代码中进行中文命名实践的短期目标

8月之后在V2EX上交流甚多, 也催生了用Python3+tkinter开发简单图形界面程序这样的合作项目, 很希望看到类似项目的开展.

另有一个中期的目标来自于首次发现在例程中使用日语命名的编程书籍, 之后做了日语命名的调研:
它山之石-日本推广编程中使用日语命名的渊源. 发现将编程与传统学科结合的现实紧迫性, 并初步尝试将传统学科的内容程序/数据化. 这不仅与中文命名紧密相关, 也是潜在的中文语法编程语言的土壤(见前文末段). 个人非常期待.

转载于:https://www.cnblogs.com/program-in-chinese/p/10508376.html

相关文章:

  • 2009年全国软考网络规划设计师考试大纲
  • 字符串操作、文件操作,英文词频统计预处理
  • 摘抄《天龙八部》诗词回目
  • php项目命名规范
  • Jupyter Notebook不能在系统命令行里全局启动
  • php的基本内容
  • xpath获取一个标签下的多个同级标签
  • [笔记].I2C札记
  • 力扣——找数左下角的值
  • JavaScript之数组的常用操作函数
  • 缓存、队列(Memcached、redis、RabbitMQ)
  • Route组件GetVirtualPath方法性能优化结果
  • 吴恩达老师的神经网路和深度学习_02
  • 80后成人高考第二季
  • swoole 异步非堵塞 server/端 client/端 代码,已经测试完毕。贴代码
  • 0x05 Python数据分析,Anaconda八斩刀
  • css系列之关于字体的事
  • GraphQL学习过程应该是这样的
  • Linux中的硬链接与软链接
  • PHP面试之三:MySQL数据库
  • select2 取值 遍历 设置默认值
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • TCP拥塞控制
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 基于 Babel 的 npm 包最小化设置
  • 讲清楚之javascript作用域
  • 聊聊flink的BlobWriter
  • 深度解析利用ES6进行Promise封装总结
  • 数据结构java版之冒泡排序及优化
  • 想写好前端,先练好内功
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 正则与JS中的正则
  • UI设计初学者应该如何入门?
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #{}和${}的区别是什么 -- java面试
  • (C++)八皇后问题
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (论文阅读40-45)图像描述1
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (转)重识new
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .chm格式文件如何阅读
  • .gitignore文件---让git自动忽略指定文件
  • .NET Core 成都线下面基会拉开序幕
  • .NET Micro Framework 4.2 beta 源码探析
  • .Net Remoting常用部署结构
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • @vue/cli脚手架
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [ Linux ] Linux信号概述 信号的产生
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序