用這個(gè)奇葩的語言來面試,絕對會(huì)斃掉90%的人......
先給大家看一幅圖
這是什么鬼?這些層層疊疊、奇奇怪怪的文件夾是干嘛的?
我如果告訴你它實(shí)際上是一個(gè)程序,你相信嗎?
它還真是一段程序, 相當(dāng)于Python代碼:
- print('h')
這段代碼使用一種叫做Folder的編程語言寫成,也就是說,完全用“文件夾”實(shí)現(xiàn)代碼!
這些文件夾只要保證一定的次序,每個(gè)文件夾中有一定數(shù)量的子文件夾,它就是程序了! 根本不關(guān)心文件夾下有什么內(nèi)容。
文件夾的名稱根本不重要,所以我們可以把上面的轉(zhuǎn)化成這樣一幅圖:
還是沒有感覺?我用文件夾語言的語法來拆解一下。
這個(gè)文件夾表示一個(gè)程序的開始,我們暫時(shí)把它稱為root
但是這個(gè)程序要做什么事情?
我們得看看root的第一個(gè)子目錄下有多少個(gè)目錄
根據(jù)print語法的規(guī)定,它后面要跟一個(gè)表達(dá)式,在root的第二個(gè)子目錄中描述:
expr的第一個(gè)子目錄是這樣的:
那這個(gè)“字面量”的類型到底是字符,數(shù)字,還是字符串呢?
根據(jù)文件夾編程語言的語法,需要看expr的第二個(gè)子目錄:
那這個(gè)字符的值具體是什么呢?需要看expr的第三個(gè)子目錄
最后再簡化一下:
稍微學(xué)過一點(diǎn)兒編譯原理知識(shí)的同學(xué),估計(jì)早就明白了,這不就是一顆抽象語法樹(AST)嗎?
有了AST,我就可以寫個(gè)程序,解釋執(zhí)行它了。
針對這個(gè)AST,它就是 print('h')。
真相大白,這個(gè)所謂的文件夾編程語言就是把代碼編碼到了文件夾當(dāng)中!
用文件夾之間的次序關(guān)系,和文件夾中的子文件夾的數(shù)量來表示信息。
當(dāng)然, 這是一種非常繁瑣的編程語言,如果要寫個(gè)Hello World是這個(gè)樣子的:
這個(gè)Hello World 需要208個(gè)文件夾!
你要是用這種方式編程,肯定會(huì)發(fā)瘋的。
如果用Folder來做白板編程面試,估計(jì)一個(gè)Hello World就能斃掉90%的人吧圖片
不過“文件夾編程語言”的作者Daniel Temkin“炫耀”說,雖然文件夾很多,但是卻有一個(gè)好處:不占用空間!
當(dāng)然這是不可能的,文件夾的元數(shù)據(jù)肯定是要占據(jù)硬盤空間的。
這樣的編程語言有實(shí)際的用處嗎?
恐怕是沒有吧!
但是,它應(yīng)了Linus Tovarlds那句話:Just for Fun 。
自己找點(diǎn)兒樂子,然后從中學(xué)習(xí)一點(diǎn)編譯的知識(shí),這就夠了。
Reddit有個(gè)網(wǎng)友評(píng)論說,他是一個(gè)學(xué)校高性能計(jì)算機(jī)中心的管理員, 學(xué)生想存儲(chǔ)數(shù)據(jù)的話可以使用免費(fèi)空間, 超過配額就需要付費(fèi)。
其中有個(gè)學(xué)生想了一個(gè)天才的想法,他把要存儲(chǔ)的數(shù)據(jù),編碼成了數(shù)十億個(gè)空文件,這樣一分錢都沒有花!因?yàn)閙etadata并不計(jì)費(fèi)。
但是這個(gè)計(jì)算中新的metadata服務(wù)器就掛掉了,任何人都沒法用高性能計(jì)算機(jī)了......
這個(gè)故事和Folder編程語言有異曲同工之妙。
文件夾編程語言再次提醒我們,我們看到的Python, Java源代碼不過是一種編碼形式,你完全可以用其他編碼形式來存儲(chǔ)信息,例如文件夾,空文件。
所以,發(fā)揮你的想象力,盡情地去找樂子吧 。
Folder語言的具體語法可以到這里查看:
https://esolangs.org/wiki/Folders
代碼在GitHub:
https://github.com/rottytooth/Folders
Python版本不到500行。







































