用文言文编程是怎样一种存在:問天地好在?書之!

有个笑话也许你已经听过: 某程序员对书法十分感兴趣,退休后决定在这方面有所建树。 于是花重金购买了上等的文房四宝。 一日,饭后突生雅兴,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风范,又具颜真卿气势,定神片刻,泼墨挥毫,郑重地写下: hello world。

艺术家朱敬一作品,展现了中国传统文化和编程的碰撞

“Hello, World!”作为C语言的第一个演示程序而闻名于世,现在市面上的主流编程语言几乎都是英文,比如C语言、C#、C++、html、JavaScript、java、php和Delphi等等,那你有没有想过,为什么编程语言很少有中文的身影呢?

用文言文敲代码,有年轻人做到了

对于英美国家的程序员来说,他们是用母语和计算机交流,那如果编程语言是中文呢?是不是意味着我们也可以更直观、明了地读程序、写程序了呢?

现在,在GitHub上一位卡内基•梅隆大学的22岁本科生Huang Lingdong就因不寻常的尝试火遍网络。

Huang Lingdong的GitHub页面

在GitHub主页关于“wenyan-lang 文言文編程語言”的项目介绍中,他写到:

夫唐、虞之世,結繩而足治,屈指而足算。 是時豈料百代之後,計算機械之巧,精於公輸之木鳶,善於武侯之流馬;程式語言之多,繁若《天官》之星宿,奇勝《山經》之走獸。鼠、蟹、鑽、魚,或以速稱。蛇、象、駱、犀,各爭文采。方知鬼之所以夜哭,天之所以雨粟。然以文言編程者,似所未有。此誠非文脈之所以傳,文心之所以保。嗟予小子,遂有斯志。然則數寸之烏絲猶覆於頭,萬卷之素書未破於手;一身長羈於遠邦,兩耳久矌于雅言。然夫文章者吾之所宿好,程式者偶承時人之謬譽。故希孟不慚年少,莊生不望無涯。乃作斯言。誠未能嘔瀝長吉之心血,亦庶幾免於義山之流沫。既成之後,復學干將鑄劍而自飼,越王嚐糞而當先。自謂偶追《十書》之筆意,但恨少八家之淋漓。此子山所謂士衡抚掌而甘心,平子見陋而固宜。然則雖實覆甕之質,尚存斧正之望;雖乏呂相之金,易字之渴蓋同。此亦開源之大義,吾輩之所以勉勵也。一笑。

怎么样,是否瞬间把你拉回到高中文言文学习的恐惧中了呢?

这段话的大意是:

在远古时代,记录的方式是打绳结、计算的方式是数手指头。谁能想到,几百代人之后计算机的精巧。计算机比鲁班的木鸢、诸葛亮的木牛流马都更好。编程语言也多如繁星,比《山海经》中记录的飞禽走兽还要奇特。我这才理解到,仓颉造字为什么会有如此大的影响力。

但从未有人使用文言文进行编程。虽然我年纪还轻,读书也没有破万卷,但仍然有这个想法。我距离故乡遥远,也很少听到文言文,但文言文一直是我的爱好,我在编程方面也经常受到人们的赞誉。正如王希孟不因年轻无知而惭愧,庄子不因学海无涯而退缩一样,我写下了这段话。

我确实比不上李贺的呕心沥血、李商隐的勤奋好学,在完成之后,我将继续向干将铸剑和越王卧薪尝胆的精神学习,不断继续进步。我想效仿《十书》的笔法,但遗憾没有唐宋八大家那样的文笔。我的工作,陆机听了拍掌而矣,也心甘情愿;张衡见了将轻视它,本是理所当然的。

尽管这项目只有微小的价值,但是仍然希望得到大家的指正。我虽然不像吕不韦能做到一字千金,但是我对修改意见的渴望是相同的。这正是开源的精神,希望同辈之间能够互相勉励。愿能博君一笑。

wenyan-lang 文言文編程語言

从“問天地好在”到曼德勃罗特集

在引言后面,Huang Lingdong拿“Hello, World!”进行了举例:

吾有一數。曰三。名之曰「甲」。

為是「甲」遍。

吾有一言。曰「「問天地好在。」。書之。

云云。

换句话说就是,我们先定义一个数「3」,并命名为「甲」,现在循环「甲」次,每次在屏幕上打印出「問天地好在。」是不是理解了呢?

可别以为作者只是简单地把“ABC”替换成“甲乙丙”。主页还提供了若干编译案例,其中就包含著名的斐波那契数列和曼德博集合。

斐波那契数列第28项的求解

你是否能看懂它的意思呢:有一个算法叫斐波那契数列f,首先我们定义一个数A,A=0时F=0,A=1时F=1,B=A-1,C=A-2,D=f(B),E=f(C),F=D+E,则我们循环计算28次时,得到的数字是什么?编译器已经给出了答案:三十一萬七千八百一十一。而在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)

海螺中的斐波那契数列之美

下面我们来看一个更复杂的例子:曼德勃罗特集。曼德勃罗特集是指: Z n+1=(Z n)^2+C ,让该算式所有无限迭代后的结果能保持有限数值的复数C的集合。 它的规则不复杂,但你将所有复数C的实部和虚部分别映射到X轴和Y轴时,得到的却是意想不到的图像,这幅瑰丽的画卷也被称为“上帝的指纹”。

当你放大曼德勃罗特集时,你会又发现无限个小的曼德勃罗特集

同样的,我们的Huang同学一样用文言文把它写出来了:

左侧是输出的结果,是否看到了上图中曼德勃罗特集的影子?

乍一看,是不是有《本草纲目》的既视感?欢迎有兴趣的同学进行破译,发到我们的评论区中。提醒一下,上述“文言文码”的核心算法在这一段哦:

乘「實實」以「實實」。 乘「虛虛」以「虛虛」。 名之曰「甲」。 曰「乙」。

加「甲」以「乙」。 名之曰「丙」。

若「丙」大於四者乃止也。

乘「虛虛」以「實實」。 乘其以二。加其以「虛」。昔之「虛虛」者。今其是矣。

減「甲」以「乙」。 加其以「實」。昔之「實實」者。今其是矣。

开挂的人生背后,创造力从哪里来?

在Huang同学的GitHub主页上,“文言文編程語言”项目只是最近的一个,还有其他25个项目,最早可以追溯至2015年,包括“格律诗编辑程序”、“美化书法程序”、“改变绘画风格程序”等有意思的代码,有兴趣的同学可以去他的主页了解一下。

美化书法程序

格律诗编辑程序

也许有专业人士会说,就代码本身而言,也就是一个本科生应有的水平。但如果你细看他的项目,就不难发现背后的文言文功底和展现出的创造力。诚如一位知乎大神所言:“看代码的时候我心情平静,但是那段序,我是跪着看完的。”

今年早些时候,造就专访了苹果公司首任教育掌门人约翰·库奇。 在回答“如何建立良好的教育环境”一问时,库奇答道: 这是一项大工程,就像你想要移动两万磅的棉花糖一样,如果你去推它,它就会收缩。 1912年,由约翰·D·洛克菲勒资助的教育委员会,提出了流水线式生产毕业生的想法。 他认为创造力并不重要,他们希望每个人都能用一种非常完美的方式做事, 而这与我们现在的观点恰恰相反

点击图片观看视频: 造就专访苹果公司首任教育掌门人约翰•库奇

不幸的是,现在教育体系的根源依然遵从这个理念。我想最好的方法,是用数据说话,我的同事们做过一个创造力测试,发现98%的5岁小孩都拥有创造力,而只有2%的成年人拥有创造力。

那么,从五岁的小孩到长大成人到底经历了什么? 是教育。 这是一代和技术一起成长的学生,我们倾向于把技术当作工具,而他们则把技术看成是自己的生活环境,他们希望与环境互动,主动去创造环境,而不只是去适应环境,他们想要相互合作和协作,他们想要接受挑战。

从这样的角度再看Huang同学的项目,你会发现我们不应止步于关注代码本身,而是要思考是什么激发了这些意想不到的组合。

阁下可知文言编程之精妙?来评论区,書之!

文字 | 一成;校对 | Lily

版面 | 尹欢欢

互动话题:如何才能拥有创造力?

每周评论区,被zan最多的评论者, 将获得造就送出的书籍一本。

推荐阅读

2020年1月12日,造就开年Talk将邀请大脑研究、宇宙探索、宏观经济、超新材料、大数据等众多领域的前沿讲者,从专业的角度为你讲述他们眼中的未来是什么样子。

主题: Hack the Future 2020造就开年演讲

时间: 2020年1月12日13:30-17:30

地点: 上海

票价: 599元( 造就金星会员可免费兑换一张)

识别二维码购票

点击阅读原文 ,看 「造就」更多演讲

有创造力的人,都是点了“在看”再走的