16

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

 4 years ago
source link: https://mp.weixin.qq.com/s/_8zxgxguNXy3hNKrL8XBOg
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

7byQzaV.jpg!web

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

neMbmuU.jpg!web

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

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

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

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

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

AbIBZrn.jpg!web

Huang Lingdong的GitHub页面

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

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

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

这段话的大意是:

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

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

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

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

Ajueyqv.jpg!web

wenyan-lang 文言文編程語言

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

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

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

為是「甲」遍。

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

云云。

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

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

3qM32yV.jpg!web

斐波那契数列第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*)

JZRVZre.jpg!web

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

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

uaAZVjq.jpg!web

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

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

7vuquuf.jpg!web

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

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

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

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

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

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

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

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

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

qMzeUv6.jpg!web

美化书法程序

rMjaAzn.jpg!web

格律诗编辑程序

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

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

mEFRfeN.jpg!web

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

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

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

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

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

文字 | 一成;校对 | Lily

版面 | 尹欢欢

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

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

推荐阅读

eQJN7br.jpg!web

FvUNV32.jpg!web

iUVzi2A.jpg!web

BRfaimj.jpg!web

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

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

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

地点: 上海

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

vAraqeJ.png!web

识别二维码购票

rYNfYrm.jpg!web

2u2Yj2M.gif

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

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

eQnQbaN.gif

uIBBJzF.gif


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK