用其他语言编码

109

这是我一直想知道的事情,在网上找不到任何提及。当来自日本等国家的商店编写代码时,我能用英语阅读吗?还是诸如C、PHP之类的编程语言有日文翻译版本?

我的意思是,世界上的每一个程序员都懂得足够的英语来使用与我相同的保留字吗?

这段代码会是这样的:

If (i < size){
    switch
        case 1:
            print "hi there"
        default:
            print "no, thank you"
} else {
    print "yes, thank you"
}

我所看到的英文内容是否与其他非英语母语的人看到的内容完全相同,他们会看到"if"、"switch"、"case"、"default"、"print"和"else"这些单词的本地化翻译吗?

编辑-是的,这是认真的。我不知道不同语言环境是否有不同的关键字,或者是否存在不同的语言环境。


4
相关问题:是否存在任何主流编程语言,其关键词不是英语(即使该语言最初是在英语非母语的地方发明的)?答案:是的,存在一些主流编程语言的关键词不是英语。例如,日本的Ruby编程语言的许多关键词都是用日语拼写的。另一个例子是德国的Lisp方言Scheme,其中一些关键词使用了德语单词。 - Jon Schneider
2
这个问题让我想起了一次与一个(外国人)的对话,他认为上帝的主要语言是英语,因此其他人应该学习它,以便他们的祷告能够被理解。(我不是在无礼,尽管这是一个有趣的问题) - wallyqs
2
只有上帝懂一种语言。那是一个现已灭绝的美索不达米亚村庄的晦涩方言。这就是为什么他不回答你的祷告,以及为什么好人遭遇不幸(他只是太困惑了)。 - Anthony
1
哦,现在我看了一些答案...好问题。我一直认为有本地化版本的计算机代码,但现在想想,某些约定可能很难实现(从右到左或竖向方向),而其他约定则可能很难适应(特别是:PHP中的行以分号结尾。这基于以分号结束完整子句的西方惯例。想象一下为标点符号习惯本地化。甚至可能有酷炫的西班牙领先标记)。 - Anthony
使用APL编程,你就不会问自己这个问题了 :) - David Larochette
显示剩余5条评论
26个回答

162

如果我理解得正确,问题实际上是:“全世界的程序员是否都知道足够的英语来使用与我相同的保留字?”

好的……这里不是讨论英语,而是编程语言中的保留字。我的意思是,大约10年前我开始学习编程时,我对英语一无所知,但我仍然能够通过学习编程语言编写简单的程序,即使我不知道它们在英语中的含义。事实上,这帮助我学习了英语。

例如,我知道如何进行“iteración”(迭代,当然是 iteration 的翻译),我需要编写:

 for( i = 0 ; i < 100 ; i++ ) {}
对我来说,“for”、“;”和“++”这些都是简单的外语单词或符号。后来我了解到,“for”意思是“para”,“while”意思是“mientras”,等等。但与此同时,我并不需要知道英语,我需要知道的是“C”。

当然,当我需要学习更多东西时,我就必须学习英语,因为文档是用那种语言编写的。

所以答案是:不,我在我的母语中看不到if、while、for等。我在英语中看到它们,但它们对我来说只有在编程语言中才有特定的含义。

就像在bash中的switch语句:case...esac。对我来说,“esac”表示bash中switch语句的结尾。

我想这就是我们所谓的“抽象”。


10
顺便说一下,“esac”只是“case”倒过来拼写。我不确定你是否故意装作不知道来表达某种观点,但我可以理解这可能会令非英语人士感到困惑。 - pbh101
10
当然,fi是if的一部分,但是在某些情况下,它们唯一的意义就是“通过编写' esac '来结束一个switch语句”……它们并不令人困惑或者没有意义,而是在C、Bash或Pascal中有特定的含义。这就是重点所在。我们学习编程语言。 - OscarRyz
5
请注意,在Excel中,宏是根据本地语言进行翻译的,而在法语中,“if”会变成“si”,这使得工具完全无法使用。 - Bite code
9
非英语母语者通常能够给出最好的答案。我来自苏格兰,学习英语对我来说也很困难。;-) - Davie
9
当我开始编程时,我甚至不知道如何正确发音“goto”。但是后来,当我学到它的含义时,它让我咧嘴一笑。 - Hamish Grubijan

28

在Java语言中,由于JavaBeans约定,一些方法必须使用英语命名(至少部分使用)。

这个约定要求通过一对getX()和setX()方法来建立属性X。在法语加拿大,一些开发人员被迫使用法语编码,这导致了以下荒唐情况:

interface Foo {

  Color getCouleur();

  void setCouleur(Color couleur);
}

9
哦,天哪!官僚主义再次获胜了!:( - AR.
3
是的,在法国的学校里也是教这种方式的。很遗憾学生们从未将课堂上所学到的编程知识应用到现实世界中,他们很快就会自己学着用普通英语来编写代码。 - Bite code
3
至少你不必争论ASCII/扩展字符集。在一些地方(这里),曾经有一个关于标识符命名的大辩论:a)用英语,b)用捷克语但没有重音符号,c)用带重音符号的捷克语(其中大部分无法在没有捷克键盘布局的情况下输入,对其他人的可维护性非常不利)。 - Piskvor left the building
1
@Piskvor,实际上如果你使用芬兰名字,就会面临类似的困境,即是否使用特殊字符(äöå)或用&a o代替它们(如果你使用它们,你可能会遇到字符集问题)。但是,很幸运,我至少7年没有在代码中使用芬兰语了。 :) - Jonik
我在一些程序中使用了葡萄牙语来命名变量和过程。这样做的好处是,我的巴西合作者和我可以清楚地区分用户定义的内容和系统预定义的内容。 - Leonardo Castro
显示剩余2条评论

27

我在查找参考资料方面遇到了麻烦,但我想起了三个故事。

一位 Lisp 程序员为像 "cdr" 和 "car" 这样的无意义函数辩护,他将它们与使用非母语编程进行比较: http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg01171.html

当松本行弘(Matz)开始开发 Ruby 时,他使用英文关键字即使他所有的文档都是用日语编写的! Ruby 没有英文文档几年之久,美国人使用这种语言的人也很少。但现在,它是一门世界级的语言,它出生在日本只是历史上的一个事实。如果这种语言使用平假名作为关键字,那么它获得普及的困难就会更大。

我曾经读过一篇文章——也许有人能找到它,但今天谷歌没有帮助——文中提出,翻译关键字是错误的,因为这些单词并不是真正的英语,而是行话。不仅仅是因为(使用以上示例)parapour 的含义并非完全等同于英语中的for,对于非程序员来说,“for 循环”的短语也是无意义的。即便是美国人也要学习新的含义。因此,将单词的表面含义翻译成另一种语言更像是制造跨语言双关语,而不是真正有帮助。


26

我以前并没有太多考虑用日语编程,但现在我们可以使用问题中的代码示例。

仅使用日语编写语句,变量名称保留英文:

// In Japanese, it makes more sense to put the keywords/modifiers as
// postfix expressions rather than prefix expressions.
(i < size)か {
     (l[i])は {
     1だ:
         「もしもし。」を書く;
     省略時値:
         「いいえ、いいですよ。」を書く;
     }
} ない {
     「はい、ありがとうございます。」を書く;
}

我猜是把点逗号改成分号(;).. =D - José Leal
1
其实我在想,如果你能够用日语编程,你可以使用像→ 定 问 上 下 不这样的特殊词汇,你能想象用日语写Lisp吗? (定 记住 (→ (一个lat) (问 ((空? lat)(引用()) (又 ... - wallyqs
1
如果你要写后缀表达式,不妨用 Forth 方言,是吧? :-) - Ken
这个能编译通过吗??:\ - NoobEditor

15

正如许多人已经指出的那样,对于大多数编程语言,你只需要学习一些关键词,所以它们是否使用英语(或其他语言)并不重要。它只是一个你将某个结构与其关联的符号。例如,在VB中,你有“THEN”,在许多C风格的语言中可能是“{”,这并不会对可读性产生很大影响(至少我是这么看的,因为我是非英语母语者)。

但在命名标识符时,事情有时可能变得复杂,而自然语言的选择也很重要。如果由于语言障碍,变量、函数、类等的名称对你来说没有意义,即使是最简单的代码也会相当具有挑战性。

我记得有人曾经给我提供了一小段Actionscript代码,取自某个博客。名称都是德语,由于我不懂这种语言,因此东西也可以被称为var_123、var_562或func_333(可能甚至更容易记住这些名称或至少有机会拼写正确,而不是复制和粘贴)。由于这是一个简短的、自包含的片段,我使用在线翻译将那些变量和函数的名称转化为我的母语(西班牙语)中的有意义的名称,然后一切都变得清晰了。关键是,代码实际上很简单,但只有当我克服了语言障碍时才能做出不需要太多(不必要的)额外努力就可以理解的意义。

自那以后,我已经开始使用英语来命名标识符了。无论你喜欢与否,它是编程、工程和技术方面的“通用语言”。大多数API都是用英语编写的,大部分文档也是如此(最好的资源可能也是用英语编写的)。作为一个好处,它使你的代码更加一致,与你可能要交互的代码一致,并且我认为它比其他语言(如西班牙语,这本来应该是我的自然选择)更加紧凑和简洁。

当然,如果您无法理解至少一些英语,问题仍旧存在,因此这不是一个完美的解决方案。但是,考虑到来自许多不同国家的开发人员,他们进行沟通(通过代码和其他方式)的共同语言可能是英语。因此,选择英语可能是最好的选择,即使这并不是解决此问题的完美方案。


没错。这个问题的一个小问题是当程序员不知道如何正确编写英文变量名称时。我见过最糟糕的是“String employiNeim” 哈哈(开玩笑啦),但我之前确实看到过非常接近那样的东西。 - OscarRyz
作为非英语母语者,您对该语言的掌握令人惊讶。恭喜,英语对于我们本土人来说也是一种非常奇怪的东西。 - Blank

10

编程语言定义了关键字和标准类名,最好的做法是为用户定义的类型、变量和函数也取英文名称(作为非母语人士,我可以告诉你 ;-)。

所以如果一切顺利,您将能够阅读代码。

然而像Java和Perl这样的语言允许使用完整的Unicode字符集来标识符号,因此如果有人用日本汉字写类名,你可能会遇到问题。

更新:对于Perl,有一个笑话模块Lingua::Romana::Perligata可以让你用拉丁文编写Perl代码。但这只是个玩笑,没有人会认真使用这种东西。

第二次更新:本地化编程语言的想法并不那么荒谬。Excel宏语言是本地化的,但幸运的是它在文件中只存储了一个规范的语言(英语),因此本地化仅是正常操作的一个层面。这种事情只对小型“程序”有意义,对于“真正”的程序来说,维护变得很困难。


7

实际上有一些非英语编程语言(维基百科)

我是挪威人,但除了输出(忽略学校里的一些愚蠢代码),我一直使用英语编写所有代码。实际上,我通常会用英语写所有内容,然后使用gettext(或其他工具)翻译成我的母语。


6

我是英国人,我们经常遇到的一个问题是美式和英式拼写冲突。这经常发生在编程相关术语中,如Initialize()或Initialise(),Analyze()或Analyse()等。这可能(已经)导致了尝试覆盖方法的问题,并且有时很难识别。

由于框架(在我们的情况下是C#)是由美国人设计的,我们发现最好保持一致并使用美式拼写。我们甚至采用了Color。

我们的开发团队中有各种不同国籍的人,大多数非英国人自然倾向于使用美式拼写。


5
将其提升至更高层次,能否替换符号?
在看到像Brainf**kWhitespace这样的语言之后,我想制作一种类似于这样的语言:它与C语言完全相同,只是你使用闭合大括号来打开,使用开放大括号来关闭,交换+和-、*和/、;和:、>和<等符号的含义。
这个概念不过是一个花哨的改变了的C编译器。但是,就像以不同的方式思考关键字一样,如果你以前从未考虑过这些事情,它会挑战你重新思考一些基本假设。例如:
int foo)int i, char c( }
    int six = 2 / 3:
    int two = six + 4:
    if )i > 0( }
        printf)"i is negative"(:
    {
{

1
这是我一生中见过的最可怕的事情之一。 - Arkleseisure

4

我所看到的唯一本地化的语言是Excel和它的宏。如果你尝试使用意大利版的Office来对一列求和,你必须写SOMMA(A1:A10)而不是SUM。这真是太遗憾了。

顺便说一句,仅仅因为好玩,以下是使用意大利关键词编写的代码:

se (i < size){
    commuta
        caso 1:
            stampa "hi there"
        normalmente:
            stampa "no, thank you"
} altrimenti {
    stampa "yes, thank you"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接