用文言文編程是怎樣一種存在:問天地好在?書之!_風聞
造就-造就官方账号-发现创造力2019-12-26 19:30
有個笑話也許你已經聽過:某程序員對書法十分感興趣,退休後決定在這方面有所建樹。於是花重金購買了上等的文房四寶。一日,飯後突生雅興,一番磨墨擬紙,並點上了上好的檀香,頗有王羲之風範,又具顏真卿氣勢,定神片刻,潑墨揮毫,鄭重地寫下: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*)
海螺中的斐波那契數列之美
下面我們來看一個更復雜的例子:曼德勃羅特集。曼德勃羅特集是指:Zn+1=(Zn)^2+C,讓該算式所有無限迭代後的結果能保持有限數值的複數C的集合。它的規則不復雜,但你將所有複數C的實部和虛部分別映射到X軸和Y軸時,得到的卻是意想不到的圖像,這幅瑰麗的畫卷也被稱為“上帝的指紋”。
當你放大曼德勃羅特集時,你會又發現無限個小的曼德勃羅特集
同樣的,我們的Huang同學一樣用文言文把它寫出來了:
左側是輸出的結果,是否看到了上圖中曼德勃羅特集的影子?
乍一看,是不是有《本草綱目》的既視感?歡迎有興趣的同學進行破譯,發到我們的評論區中。提醒一下,上述“文言文碼”的核心算法在這一段哦:
乘「實實」以「實實」。乘「虛虛」以「虛虛」。名之曰「甲」。曰「乙」。
加「甲」以「乙」。名之曰「丙」。
若「丙」大於四者乃止也。
乘「虛虛」以「實實」。乘其以二。加其以「虛」。昔之「虛虛」者。今其是矣。
減「甲」以「乙」。加其以「實」。昔之「實實」者。今其是矣。
開掛的人生背後,創造力從哪裏來?
在Huang同學的GitHub主頁上,“文言文編程語言”項目只是最近的一個,還有其他25個項目,最早可以追溯至2015年,包括“格律詩編輯程序”、“美化書法程序”、“改變繪畫風格程序”等有意思的代碼,有興趣的同學可以去他的主頁瞭解一下。
美化書法程序
格律詩編輯程序
也許有專業人士會説,就代碼本身而言,也就是一個本科生應有的水平。但如果你細看他的項目,就不難發現背後的文言文功底和展現出的創造力。誠如一位知乎大神所言:“看代碼的時候我心情平靜,但是那段序,我是跪着看完的。”
今年早些時候,造就專訪了蘋果公司首任教育掌門人約翰·庫奇。在回答“如何建立良好的教育環境”一問時,庫奇答道:這是一項大工程,就像你想要移動兩萬磅的棉花糖一樣,如果你去推它,它就會收縮。1912年,由約翰·D·洛克菲勒資助的教育委員會,提出了流水線式生產畢業生的想法。他認為創造力並不重要,他們希望每個人都能用一種非常完美的方式做事,而這與我們現在的觀點恰恰相反。
點擊圖片觀看視頻:造就專訪蘋果公司首任教育掌門人約翰•庫奇
不幸的是,現在教育體系的根源依然遵從這個理念。我想最好的方法,是用數據説話,我的同事們做過一個創造力測試,發現98%的5歲小孩都擁有創造力,而只有2%的成年人擁有創造力。
**那麼,從五歲的小孩到長大成人到底經歷了什麼?是教育。**這是一代和技術一起成長的學生,我們傾向於把技術當作工具,而他們則把技術看成是自己的生活環境,他們希望與環境互動,主動去創造環境,而不只是去適應環境,他們想要相互合作和協作,他們想要接受挑戰。
從這樣的角度再看Huang同學的項目,你會發現我們不應止步於關注代碼本身,而是要思考是什麼激發了這些意想不到的組合。
閣下可知文言編程之精妙?來評論區,書之!