技术论坛

 【万泉河】就是要用中文编程

返回主题列表
作者 主题
万泉河
至圣

经验值: 28634
发帖数: 10885
精华帖: 131
楼主    2020-11-16 20:48:03
主题:【万泉河】就是要用中文编程

【万泉河】就是要用中文编程

 

数年前,我发表过一篇文章,

《【万泉河】每一个合格的工控工程师都应该反感中文》



 

尽管我在文章开头,郑重其事地提出了警告,这是一个客观问题,请各位读者不要带着民族情感来看待这个问题。然而,仍然有许多读者解不开其中的心结,对我的观点乃至用词不当大家批判。

 

而对中文的缺陷本身,大多是在认可的基础上,视而不见或者掩耳盗铃装作不存在。

 

所以,我们暂且绕过那些纷争,看编程过程中对待中文(字符)的处理。大家其实还是有共识的。所有人的主张,总结为两种:

 

1,在编程设计中,尽可能不用中文。

2,在编程设计中,尽量使用中文。

 

表面看起来这好像是针锋相对的两种观点。但其实两种观点背后,隐藏的是不同的前提条件。

 

前者说的是,在不知水深浅,不知坑有多大的情况下,为避免掉到坑里去,所以会尽量避免使用中文。

 

而后者所表达的是,在已探明安全的情况下,只要有可能,能用中文的地方,尽量使用中文,而尽量少的使用自己用着都不保准的二把刀的英文,或者英文加汉语拼音的组合。

 

所以,在综合考虑了语境的前提条件之后,其实在有可能使用中文编程的情况下,凡是符合语法要求的场合,建议大家还是尽量使用中文。

 

在编程领域,存在一个隐性的鄙视链,即英文基础不好的人,不适合做程序员。写程序用的英文不够正宗,不是好的程序员。不仅仅是从上到下的鄙视,大部分英文不够好的同行,潜意识里自己也存在对自己的鄙视。

 

而其实,我分析,在PLC编程领域,这种认识完全没有必要。对于IT行业,那些大厂来说,一个软件工程,往往几百人上千人的团队在协作,而且团队往往是跨国的,各个种族各种语言的人都有,工作中,需要一种标准的工作语言作为媒介,英语当然是唯一的选择了。

 

而在工控领域, PLC编程中,团队协作的机会非常少。绝大部分的设备控制程序,整个设备的生存周期里,从开发到维护到升级甚至到最后的设备报废,经手的工程师只有一个。这时候,再去人云亦云地探讨传承,跨国团队协作,相当多余。自己的程序自己看,根本没必要顾虑别人嘲笑你不用英文是英文不够好。

 

我之所以敢有这一论点的论据是,见过若干德国人,法国人,意大利人写的PLC程序,他们的程序中,大量使用的是他们自己国家的语言。合作过程中,令我们这些连英语都说不利索的东亚人痛苦不已。

 

按说,那些欧洲的工程师,他们的英语都好得很,基本上相当于上海人广东人可以说普通话般流利。但为啥他们不用英语?甚至设备都要出口到中国,维护和配合人员需要有能力接手工作,哪怕没有中文,英文是至少的。

 

但是,然而,那些老外的PLC程序,不仅仅注释是德语法语,连变量名函数名都是他们自己的语言。

 

凭啥他们能地使用自己的母语做PLC编程,而到我们,却要百般委屈地用自己不熟悉的英文做程序?

 

其中唯一可解释的原因是长期以来, PLC编程环境不支持UNICODE,不支持中文字符集,西欧各种字符则不存在障碍,所以对他们就无所谓了。

 

而当日历翻过2020,全世界的应用软件都把中文列入标准语言,世界上没有一个硬件软件公司,敢忽视中国人的应用习惯的时候,作为开发者的我们,看来是有必要改变一下思路,改变一下工作习惯了。

 

我自己,则近几年开始小心翼翼地探索全中文编程。

 

为什么要小心翼翼?以前的文章里说过,中文到处都是坑啊!一不小心就会把自己埋到坑里出不来。你做一个工程项目,几千个变量,如果一不小心是因为使用的字符出了问题,导致功能不能实现,等发现的时候,需要再回过头来逐个修改,那就相当恶心了。

 

总的来说,西门子的软件系统,到PORTAL V16之后,各方面还不错,未发现不兼容的问题。极少数地方,有一些不够完美,但总体来说,已经足够满足我们的需求了。

 

让我们先愉快地观摩一下使用中文变量名编程的快感吧! 完后再详细讨论其中的优缺点:

 

【此处有图片,图片复制不易,请从文末链接跳转原文浏览】

 

 

 

 

上面的截图,有函数内的逻辑,也有函数的被调用,还有所有的文件名,都是尽可能多的使用了中文,也既有LAD,也有SCL,相当成功。

 

其中的关键问题:

1,关于语法关键字,即运算符+-*/,以及if then等,原本是英文的,当然现在还是英文,但由于程序中大量使用了中文,这些英文语法词汇反而起到了分割的作用,更明晰了。

以往有人的理解,所谓中文编程,就是所有语法都要用中文, IF得叫做如果, then 叫做然后。以为那样实现了全中文才可以实现民族振兴。而其实那样反而降低了程序的可读性。变得不知所云。

 

2,用中文写程序,最大的障碍其实是输入不如英文来的便捷。用各种中文输入法,好不容易绕过了各种同音字同音词,还有一不小心选错了字,导致变量使用错误,好的编程器,框架本身会自动弹出备选的变量名,就大大简化了操作过程。


但是按照默认的排序规则,下拉选择框中,符号和英文的排在最前面,到中文变量,就在最后面了。


而其中,函数块的形参,系统缺省给加个井号#,排序更靠前一点,所以对于全局变量的中文名字的变量,会排在最后面。选择的话,就比较麻烦,鼠标需要每次都拖很久。


所以,我采取的方法是,起中文变量名字的时候,在前面添加个符号,这样等选择的时候,中文变量反而排在比较靠前的位置了。

【此处有图片,图片复制不易,请从文末链接跳转原文浏览】



而选择什么字符作为前缀,又是个比较奥妙的问题了。我曾经选择#,这样在需要中文变量的时候,只需要连续输入2个#,过滤筛选后的可选项就全部都是中文变量了。


但后来发现也有一些不方便,具体细节,有待朋友们自行发现了。所以,后来我还是规规矩矩选择了最俗套的下划线,但说实话,真不如连按两下##方便。


3,标点符号输入的问题

你既然选择了中文模式编程,写程序,写注释,都使用中文,那么会在写程序的过程中全程打开中文输入法。但却出现了标点符号的问题。通常中文输入中,标点符号都是全角的字符更美观。然而程序中的语法,是不认可全角符号的。


最容易出错误的是逗号和分号。因为外观上“,,;;”区别不大,而对于SCL语言来说,分号用的又特别多,每行语句的结尾都需要一个半角分号; 导致整个写程序过程中无穷次的明明语法正确,却提示错误,然后发现是符号写错了。所以频繁切换中英文输入,并把输入错误的字符删掉更改。


太头疼了。而且,至今没有找到好的方法。


文章的最后,一个题外话。

如果你在PORTAL 中需要建立一个二维数组,按照右下角的提示,是永远语法错误。不管是全角还是半角,都不行。


后来把软件切换为英文,才知道了答案。翻译软件给自动把逗号翻译成了全角的分号!


原文链接:

https://mp.weixin.qq.com/s/89SlhdVR1top1V-a9DncQA


微信公众号:PLC标准化编程,ZHO6371995
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。