Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

索引: 在其他论坛关于用中文编写代码的讨论 #3

Open
nobodxbodon opened this issue Jul 30, 2017 · 27 comments
Open

索引: 在其他论坛关于用中文编写代码的讨论 #3

nobodxbodon opened this issue Jul 30, 2017 · 27 comments
Labels
推广 not only 中文编程 长期 原则上仅对索引帖适用
Milestone

Comments

@nobodxbodon nobodxbodon added the 长期 原则上仅对索引帖适用 label Jul 31, 2017
@nobodxbodon
Copy link
Member Author

对论坛了解不多, 不知还有哪些地方会聚集对中文编程有潜在兴趣的开发者呢?

@nobodxbodon
Copy link
Member Author

GoCN社区: 邀请对在编程中用中文命名有兴趣的一起探讨
因为看到了这个5%的Gopher对中文命名有兴趣的民调. 头一次看到这种市场调研, 比想象中的比例高 :)

@nobodxbodon
Copy link
Member Author

这是SO关于是否用母语编程的一个讨论, 不少回复觉得需要看情况: Should you use international identifiers in Java/C#?

@azige
Copy link

azige commented Aug 14, 2017

https://stackoverflow.com/a/61620

It depends:

    1. Does your team conform to any existing standards that require your using ASCII?
    2. Is your code ever going to be feasibly reused or read by someone who doesn't speak your native language?
    3. Do you envision a scenario where you'll need to ask for help online and will therefore not be able to copy-paste your code sample in as-is?
    4. Are you certain your entire suite of tools support code encoding?

If you answered 'yes' to any of the above, stay ASCII only. If not, go forward at your own risk.

其实这个“看情况”就有很多无法回避的情况,例如 1. 在 Java 中的回答就是 Yes,很难回避 JavaBeans 的 set/get 命名约定。对于 2. 本人觉得凡是面向国际的开源项目都要考虑这个问题,无法回避。对于 3. 可能大部分中国人不知道,在一些外国人的电脑上根本没有中文字体,中文字符最他们来说都是豆腐(不过最近几年的操作系统可能稍有好转)。对于 4. 也是问题,整个工具链里万一哪个玩意不支持中文字符集就会让人蛋疼万分。

不过在条件允许的情况下,本人支持在非公开的代码中使用中文命名。

@nobodxbodon
Copy link
Member Author

对set/get这样已经约定俗成的命名规则, 很多的框架都有依赖, 短期内恐怕难以改变. 之前的基于spring的实验里用了混用命名:

  public double get数量() {
    return 数量;
  }

  public void set数量(double 数量) {
    this.数量 = 数量;
  }

  public 商品 get商品() {
    return 商品;
  }

  public void set商品(商品 商品) {
    this.商品 = 商品;
  }

  public Date get创建时间() {
    return 创建时间;
  }

  public void set创建时间(Date 创建时间) {
    this.创建时间 = 创建时间;
}

@obj404
Copy link

obj404 commented Aug 16, 2017

GoCN社区: 邀请对在编程中用中文命名有兴趣的一起探讨
因为看到了这个5%的Gopher对中文命名有兴趣的民调. 头一次看到这种市场调研, 比想象中的比例高 :)

其实,那个调查也不算太公平的,在专业的Go群进行的调查,并非接触到全部受众,样本不均匀。
如果你在易语言编程群进行编程中用中文命名的调查,能达到99.9%的感兴趣。
而且更多的真实中文编程用户群体并非在编程群里面,而是各种IT相关的行业群里面

比如广告营销,新闻媒体。网赚,还有其他的需要自动化操作的领域。
这些人,他们都希望自动化,但是,他们又请不起专业的程序员,也不想外包
就我个人的收入而言,我也觉得外包的一个小软件相当的贵。功能需求也不多。

程序员都是高傲的,不想变得廉价,也不想降低了B格。
所以,只要是学会了一门的英文编程的,对中文编程态度不友好概率更大。

如果你决定了中文编程,就不要说面向世界。因为本来不是 I18N !
想做去做就好了。价值看得到。按键那么成功,易语言那么多人用,中文受众群体那么多。
所以,已经知道这个是个刚需,为什么还要做各种调查,问别人的反驳点。去自己找不自在呢。

@nobodxbodon
Copy link
Member Author

@chencun 赞一下. 其实我在各种论坛中发声首要目的并不是为了调查, 而是为了召集那些论坛对中文编程感兴趣的开发者. 也在易论坛发了帖. 看到这个5%也不是觉得"荣幸", 而是觉得这个比例比想象中的高.

现在我已经很少看到比较新颖的反对的理由了, 基本就是你之前提到的那些. 我也不会有什么不自在, 有空的话就针对性回复一下 :) 其实很希望找到对中文编程(包括在英文编程语言中用中文命名)感兴趣的用户群进行宣传. 这样讨论组的规模能够更大. 毕竟这是个需要群策群力的任务.

完全同意这是刚需. 也很同意你对其他领域的看法. 所以之前开了帖跨界: 哪些中文非IT领域会偏好中文API, 编程/脚本语言?. 欢迎深入探讨. 最好能找到一个入手点一起做一些益人益己的小项目.

@buyouyuan
Copy link

我认为中文编程就是面向全世界喜欢用中文的朋友,难道一定要得到用西文的认可吗!

@nobodxbodon
Copy link
Member Author

@buyouyuan 嗯, 其实我也想过国外程序员如果对中文感兴趣也可以一起进行中文编程. 不过打铁还要自身硬啊, 如果没有一套比较系统的代码风格和规范(比如中文命名规则), 而且没有积累足够在现有框架中使用中文代码编程的经验的话, 恐怕不会那么容易推广和合作. 所以我比较倾向于从自己做起, 从熟悉的领域和语言/框架着手实践, 积累经验, 并且提高开源合作的力度, 逐步形成成规模使用中文编写代码的氛围和社区. 这样自然会越来越多的认可.

再强调一下, 我在其他社区发声的首要目的不是为了求认可, 而是为了召集同好. 也很希望各位也在熟悉的圈子里推介一下我们这个组或者相关项目.

@qwas982
Copy link

qwas982 commented Sep 2, 2017

我觉得步骤应该是
1,志同道合者 建立理论 建立标准 -模仿C语言或javascript的ecma标准
2,根据标准实现编译器 -模仿C语言或javascript的ecma标准
3,用这门语言开发应用或者建立操作系统一样的平台
这样 用的人才会越来越多 用户群才会形成

@farteryhr
Copy link

https://www.zhihu.com/question/66370337/answer/241411868
vzch大爷作品,重点是实现了不需要加空格的语法分析

@nobodxbodon
Copy link
Member Author

nobodxbodon commented Oct 8, 2017

@farteryhr 多谢! 已添加到顶楼索引.

好像这是个思路, 还没有实现吧. 个人感觉有无空格/符号的主要区别是分词. 能做到没有歧义就好(前人的例子文言Perl语言).

又看了一下例程, 感觉如果是看惯了空格分隔的代码, 看无空格的代码可能开始会有点不习惯. 比如:

只要丙小于或等于乙就
        令结果为结果加丙

和带空格的:

只要 丙小于或等于乙 就
        令 结果 为 结果加丙

也许和语法也有关, 比如:

如果丙小于等于乙, 结果加丙

感觉就好一些. 当然加标点又是另一个问题...

@nobodxbodon
Copy link
Member Author

续上, @thautwarm 用Python实现了文言语法的中文语言. 索引已更新.

@nobodxbodon nobodxbodon changed the title 索引: 在其他论坛关于用中文编写代码的讨论(价值主要在反馈) 索引: 在其他论坛关于用中文编写代码的讨论 Oct 9, 2017
@nobodxbodon
Copy link
Member Author

@program-in-chinese/all 瞩目C#下的中文编程讨论: dotnet/csharplang#993 (comment) 请踊跃发声.

@nobodxbodon
Copy link
Member Author

@program-in-chinese/all 现在issue里开始了对一般中文编程的针对性发言, 并且没有什么实质内容, 如dotnet/csharplang#993 (comment) dotnet/csharplang#993 (comment) 诸位虽然对汉化关键词/类的意见不一定完全一致, 还望分享一下自身体验以作回应.

@farteryhr
Copy link

farteryhr commented Oct 15, 2017

发声在这里发就好,不建议在那里吼,那儿已经没啥讨论环境了。
多做,而且把一步做完整,不管这一步多小。
盯死一个语言的核心语法bnf,掏出antlr做一个完全对应中文版,中文parse ast生成对应语言代码,我觉得都是很好的成果。
关键字完了就是库,这更是要耗时耗力做的,再怎么bb都没用。
觉得可行的方法还是,尽快脑补确立一个标识符多语言标注语法(带英文键盘输入方法提示的)来吧,就先扔到注释里,不管ide、输入怎么做,让有志于翻译而没那么强程序能力的人可以有个标准,去开始翻译。
(甚至觉得,在这个注释里面顺便明确标识出他是常量还是变量还是类还是成员还是成员函数等等,渲染时读取到了就给中文上色粗体怎么的表现,比英文大小写下划线玩来玩去最后还是把自己玩昏高明多了)

@farteryhr
Copy link

farteryhr commented Oct 15, 2017

@nobodxbodon (这连楼层都不好引用xsk)你最新的回我的一帖,提到的那个代码,我觉得一个巨大槽点,本来中文就是为了精简好读,“小于或等于”,要死了……
我觉得,阿拉伯数字、<>≥≤≠这些小学生认识又短的符号(而且就这几个,现在市面拼音输入法都支持哟)(一些语言的in:∈,甚至+-×÷),完全没必要拒绝的……
= == ===,负与减-,→(->)之类英文没有输入法带来的合子符号破问题说不定都能通过这些unicode字符更好解决了(脑洞又越开越大

(虽然我在这本质也是嘴炮(不过至少觉得比在那边有用吧,这里清静))

@thautwarm
Copy link

thautwarm commented Oct 15, 2017 via email

@farteryhr
Copy link

@thautwarm 嘛那句话里关键字是想表达,包括语言关键字、语法、语序、符号等的“决定这编程语言写法的关键部分”,除开库里定义的各种标识符,的意思

@nobodxbodon
Copy link
Member Author

nobodxbodon commented Oct 15, 2017

@farteryhr

发声在这里发就好,不建议在那里吼,那儿已经没啥讨论环境了。

其实开始也犹豫, 但是还是想尽量添点技术性内容进去, 不然可能也不会有后面一些有点价值的讨论. 至少, 也表示一下还是有些实质性的工作. 没有特殊情况估计不会在那个issue继续了.

多做,而且把一步做完整,不管这一步多小。

很同意!

盯死一个语言的核心语法bnf,掏出antlr做一个完全对应中文版,中文parse ast生成对应语言代码,我觉得都是很好的成果。

已新建#36

关键字完了就是库,这更是要耗时耗力做的,再怎么bb都没用。

你的意思是说汉化库依赖于关键词/语言汉化吗? 像JUnit4的接口汉化之后, 原始Java也就可以用.

觉得可行的方法还是,尽快脑补确立一个标识符多语言标注语法

这个思路已新建#32, 不妨在那继续讨论细节.

(这连楼层都不好引用xsk)你最新的回我的一帖

这个链接就是:
screen shot 2017-10-15 at 1 55 07 pm

提到的那个代码,我觉得一个巨大槽点,本来中文就是为了精简好读,“小于或等于”,要死了……

这个感觉主要还是为了演示吧, 毕竟能做到这样的话, 用符号是更容易的事情(吧?)
另一方面说, 感觉符号的一个使用中文输入法难以回避的问题是中文符号和英文符号显示不同 . 如果都支持的话, 随便混用又会有一些视觉上的不一致感:

如果 年龄 >= 3 
...
又如果 3《年龄<20 
...
又如果 年龄》20

@nobodxbodon
Copy link
Member Author

@thautwarm 多谢光临!

你们有看过布鲁兔子在知乎上的文章吗?我认为那个非常有意思,但不知这里各位是什么观点。建议各位去看一下,尤其是打算设计语法的那些人。

布鲁兔子的文章-是指vczh的无空格语法设计吗? 之前在顶楼索引里加了那个链接, 和你的回复. 在下愚钝, 想请教一下把单字作为token的好处. 另外, @TKT2016 在Z语言里也在尝试无空格语法.

个人认为中文编程,若非走极简洁路线(J语言),不太有竞争力。

请指教一二. 猜想你指的"中文编程"是特指新创造中文编程语言. 有点难以想象中文编程如何走极简洁路线, 能举个例子吗? 另外的路线不太有竞争力的原因是...?

关键字替换还是免了。

即使是单纯的关键字替换, 百花齐放也好吧. 从前尝试过一点.

然后多字符的标识符用一个特殊记号括起来,比如[...],...

是吗? 好像没看到这部分. 这样不是和用空格类似吗?

哎呀其实我现在很想造语言,不过身上还有坑。预计大概18年年初时开一个

期待!

感觉不是很难,直接基于某些动态语言做一个就好了,api通吃。

不知设想中有没有什么中文特色?

@nobodxbodon
Copy link
Member Author

不禁转发一下 @htwx发言:

不好意思拼音我也不好,但是是从小学开始就学了,总算没白学,学了10年英文对我来说就白学了。其他方面你还不一定赶上我,57分的英语本人照样上大学,照样毕业,还不是在大学生烂大街的年代。单词基本不认识我照样编程。你可知道你眼中的这些程序员花了多少努力达到现在这个水平么这个我还真知道,自学这些年看遍了到处求爷爷告奶奶的问各种各样的简单到不能再简单的问题,为了1个错误鼓捣好几天解决不了。他们就没想想这是为什么,真的有这么难么?学过了就知道根本不是这样,如果没有语言障碍,99%的错误提示都能解决遇到的问题。可惜就是不认识。你说编程或计算机技术的本质是数学,没错,可更多的是业务是逻辑。一个程序涉及到几个核心算法,设计好了框架,剩下的基本就是搬砖工的水平,我看了C# 罗斯林的 全部代码 TS的全部代码还没发现我不能理解的算法,可能是让我设计我做不出来但是理解他是完全够用的,ts编译器10w行代码有7w以上是搬砖工的水平就可以胜任。如果百度,阿里,腾讯的程序是中文代码写的他们的开发成本瞬间下降1半,人工成本不会超过现在的1半。这里一定有人说什么用中文编程就不能应用尖端技术了,就封闭了就跟不上时代了,就与世界不能接轨了。实际上根本就没有关系,英文难道翻译不成中文么,只要1部分框架师级别的能跟上就行了。其他的都是搬砖的就可以了。时间长了中文编程的生态也就出来了,搬砖工也就可以成为框架师了。

关于业务逻辑的部分非常同意

@nobodxbodon
Copy link
Member Author

v2ex中最近的帖子: 代码里面有中文,大家觉得怎么样? 在回复中看到不少有中文命名经验和体会的~

@4b5ent1
Copy link
Member

4b5ent1 commented Aug 5, 2018

@nobodxbodon 关于v2ex我大概补充一下这个网站的历史背景。

就如前面在gitter里讲的,这个网站最早是一个叫livid人想仿reddit,然后就同样用python(不过没用pylons而是用了tornado)实现了一个。网站的起步时间和知乎几乎平行,也就是真正起来大概是2012年2013年的事情,而知乎在2013年以后有很多技术用户出走,这其中就不排除有人(回)流到了微博/豆瓣/饭否/segmentfault/博客园/简书/csdn 以及v2ex等等。

早期的v2ex是个很专制的体系,所以早期用户的意见都很一致,喜欢mac鄙视微软是主流意见,但现在应该是比较平均化了,当然这个社区的戾气不比2014年的知乎要轻,不过好在程序的事情大部分都是讲道理的,所以打脸的事情时常有。

基于这样的背景分析,我建议在v2ex发帖的时候,回复呢周期可以拖久一点,一次性回复,因为大部分人对于中编的质疑基本上就那几个套路(麻烦,没意义,不需要),单独回复没必要,浪费时间。

@nobodxbodon
Copy link
Member Author

第一次见以汉字命名的 Java 类是对组内项目简繁转换库的反馈. 回复中提到在业务相关部分使用中文命名的实践, 摘录如下:

不支持中文命名,但是在业务性强的系统中,对于实体类和一些常量(仅限实体类、常量)还是推荐使用的,否则很多名词用英语很难表达清楚,关键是换个人来看这代码,看到统一串英文不一定能和中文环境下的名次对上号。
比如我们开发的一个系统中,有大量这样的名词:

  1. 决定判决情况
  2. 判决情况
  3. 历次减刑情况
  4. 刑罚执行检查档案审查情况
    ...
    这些字段和其他系统是直接相关的(我们这个是辅助系统), 而且随着这个系统支持的业务范围不断的扩大,如果全都使用英文(缩写),维护起来简直就是灾难。

@4b5ent1 4b5ent1 added this to the 2018戊戌 milestone Nov 30, 2018
@4b5ent1 4b5ent1 added this to 搞定/archive in e2018 Nov 30, 2018
@4b5ent1 4b5ent1 moved this from 搞定/archive to else/mark/ref in e2018 Nov 30, 2018
@4b5ent1 4b5ent1 moved this from else/mark/ref to mark/sync in e2018 Nov 30, 2018
@nobodxbodon nobodxbodon mentioned this issue Jan 28, 2019
61 tasks
@nobodxbodon
Copy link
Member Author

至今发现的最早中文命名实践之一(不确定之前帖过否):2009年的我们在dotnet开发里中文变量及方法的命名规则

目前,我们在项目中使用中文变量,从3年前的权限管理,
到一年前的购物车管理,发展到了在类库(会员积分奖金规则)中使用。
体会到了中文变量对于项目维护的巨大方便。

@nobodxbodon
Copy link
Member Author

#180 (comment)
看精选评论区, 比较八年前的原帖下评论, 可喜可贺啊! 多谢 @liuxilu 告知.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
推广 not only 中文编程 长期 原则上仅对索引帖适用
Projects
E2030
collection
e2018
  
mark/sync/pin
Development

No branches or pull requests

8 participants