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