未來我們該學什麼語言?
在很久很久以前,有一個原始人狩獵歸來,正坐在蘋果樹下歇息,突然一隻蘋果掉了下來,砸在了他的頭上……
他揉了揉後腦勺,然後就撿起蘋果開始吃。吃著吃著,他無意間抬頭向上看了一眼,發現樹上還掛著許多蘋果……他突然想到一個問題:「蘋果為什麼會掉下來?」
這個問題困擾了他許久,每有閑時他都會不由自主地思考這個問題。有一次,他甚至爬到樹上去,把身上所有的東西都驗證了一遍,並發現它們都會掉下去。只有他戴的羽毛帽子,會在空中盤旋好一會,才緩緩落到地上。一定有什麼,地面下一定有什麼東西,吸引著萬事萬物……等等!如果是這樣的話,也許……明天我再去試試看!
可惜上天沒有再給他機會,在第二天的狩獵中,他不幸被老虎重傷,很快就因傷口感染而不治身亡。族長指揮著大家,把他埋在了他經常去的那顆蘋果樹下。他的兒子正坐在樹下哭泣時,一顆蘋果掉了下來,砸在了他的頭上……
文字的意義
許多年過去了,「蘋果為什麼會掉下來?」這個問題可能被提出了無數次,但都沒人能找出答案。古代人的壽命太短了(直到公元1000年,人類的平均壽命才超過30歲),根本不足以把這個問題想清楚。而在文字發明之前,那些已經進行了一半的思考進度無法保存下來,所有人都只能從零開始……
這好比讓你玩一個大型遊戲,但每天只能玩5分鐘,而且不允許存檔。那這個遊戲是永遠也通不了關的,對嗎?
文字的發明,是人類文明崛起的決定性因素。因為我們可以用文字將思考的結果保存下來,並通過學習前人留下的文字,延續他們留下的思考,這使深入思考一個問題並最終得出結論成為可能。
公元1666年,又有一個年輕人在蘋果樹下被蘋果砸中,他再一次思考了「蘋果為什麼會掉下來?」的問題。幸運的是,他已經學過了伽利略留下的物理學,有興趣也有足夠的時間來研究這個問題,最終他成功地發現了萬有引力……我們都知道,他叫牛頓。
文字還從時間和空間上,解除了對信息的傳播的限制。在此之前,一個人只能向同一時間和他身處同一地點的人進行信息傳播。想要大面積廣播信息,只能靠口口相傳。不僅部分原始信息會在傳播的過程中丟失,傳播者還會有意或無意地加入一些主觀創造的部分……恩,神話、傳說就是這麼來的。
笛卡爾說過「我思,故我在」,而我覺得應該是「我寫,故我在」,因為若他不寫,也沒有人為他而寫,那今天沒有人會記得他的存在。文字為我們的存在,提供了證明。
作者的無奈
寫作和演講一樣,是一種溝通的方式,其目的是向讀者傳遞作者的思想。然而與演講不同的是,作者在寫作時無法和讀者進行實時互動,得不到實時的反饋。寫作的整個過程,就像對著一塊魔術玻璃進行表演,不知道誰在看,有沒有人在看,不知道自己演得怎麼樣,哪裡需要做調整,卻不得不繼續演下去……那種感覺真是糟透了。
我們寫作時往往是在記錄主觀上的感受,而不是客觀上的存在。面對同一個客觀存在,由於每個人的認知結構不一樣,將會產生不同的主觀感受。然而作者在進行寫作時,對讀者認知結構的情況一無所知,只能靠假設和猜測。由於這種信息不對稱的必然存在,導致作者難以把握信息冗餘和消除歧義的尺度,更無從判斷讀者在閱讀完某段文字之後的理解情況。
兩彎似蹙非蹙罥煙眉,一雙似泣非泣含露目。態生兩靨之愁,嬌襲一身之病。淚光點點,嬌喘微微。閑靜時如姣花照水,行動處似弱柳扶風。心較比干多一竅,病如西子勝三分。聰明清秀,絕麗無雙,氣質脫俗,淡雅若仙,嫵媚風流。 ——《紅樓夢》第三回
雖說作者文筆已臻入化境,可你讀完上面的文字之後,心中可對林黛玉的相貌有個清晰的概念?一萬個人心中,有一萬個林黛玉,個不相同。不管電視劇導演找到怎樣絕色的女子來演這一角色,都沒辦法符合所有觀眾的審美要求。
事實上,大多數作者沒有足夠的能力完整、清晰、結構化地將自己的思想轉化為文字,他們寫下的其實並不是自己的思想,而是對思想的感知。感知就好像對思想拍攝的一張照片,只能從一個角度上有限地還原某個瞬間。這樣的感知可以從多個角度進行,所以思想是一種立體多維的事物。
思想是多維的,但文字卻是線性的,所以記錄的信息必然是有損的。顯而易見,在將多維度的結構化信息「降維」成線性的文字的過程中,信息量必然有可觀的損耗。俗話說「一圖勝千言」,儘管一張照片記錄的信息已然是有損的,我們也很難把照片里的內容完整準確地用文字描述出來。
思想是不斷進化發展的事物,文字自寫出來的那一刻起就已經過時了。當思想發生變化和升級後,已經通過各種渠道流傳出去的文字卻難以得到更新。博客上的文章還可能編輯,但也很難同步到已經讀過的人那裡。所以我們並不能通過閱讀文字(哪怕僅僅是幾天前寫下的文字)來判斷作者當下的看法和觀點。
用寫作來傳遞思想註定是延後、低效且有損的。然而在未來的腦介面技術成熟並普及之前,寫作仍然是我們在大多數情況下無奈的選擇。
讀者的困境
很多時候,寫好的文字就放在那裡,但是我們因為種種原因沒機會讀到。即便文字擺在我們面前,可是在解讀作者思想的道路上,還擺有一重重難關:
很多人沒有足夠的動力、精力、能力和毅力來進行完整的閱讀;
很多人缺少正確理解文字所必需的基礎知識;
很多人由於結構化思考能力偏弱,字都能讀懂但意思就是串不起來;
很多人由於對作者使用的一些概念持有不同的定義,完全理解成另外一回事;
……
思想先由作者的語言系統「編碼」——寫作,再由讀者的語言系統「解碼」——閱讀。由於這兩個過程都是有損的,且雙方的認知結構必然存在差異,所以作者的思想在最終傳遞到讀者那裡時,早已殘缺不全、面目全非。試想想看,通過一張破損的照片還原實物有多難?
事實上,大多數讀者沒有足夠的能力完整、清晰、結構化地還原文字背後的思想,他們只能選擇性地,將自己對作者的部分思想的理解,以某種方式納入自己的知識體系之中。至於這樣的選擇,這樣的理解,這樣的方式是否符合作者的本意?只有天知道。
要準確理解作者的思想已經很難做到,對其思想進行真實性鑒別和可行性檢驗就更是難上加難。所以大多數人的選擇是,用對作者的信任感來決定其思想的可信度。畢竟前者僅僅需要作出感覺上的判斷,而後者卻需要進行獨立思考、邏輯推理和調查取證。也正因如此,電視廣告里的明星代言和專家背書才得以奏效。
由於眼睛的生理構造限制,我們只能將目光聚焦在一個很小的範圍內。所以在任一時刻,我們的眼睛都只能看到一小段文字,可能只有一句話,甚至半句話。也就是說,想要理解文字背後的意義,我們不得不將之前讀過的文字以某種方式記住。如果作者不精通簡明寫作之道,需要記住的內容會很多,那閱讀將是無比痛苦的過程。
想要有效地閱讀,就必須逐字逐句的進行,理解的速度決定了閱讀的速度。所謂的「掃讀」、「跳讀」都是自欺欺人的做法,正如那些快進看電影的人一樣,他們並不想理解整部電影,只是想欣賞自己喜歡的高潮部分而已。
讀了沒理解,等於沒有讀;理解了沒思考,等於沒有讀;思考了沒行動,等於沒有讀。能通過這個巨大的漏斗模型,最終被讀者實際踐行的思想,可以說是滄海一粟。人與人之間的差距,就是這麼一點點被拉開的。
閱讀成本如此高昂,要求如此苛刻,但其效果卻無法得到保證,這是大多數人最終放棄閱讀的主要原因。在可以預見的未來,知識將會被模塊化,並標註好相互之間的依賴關係。模塊化的知識可以被無損地下載到我們的大腦中,並得到完整的理解。但在此之前,閱讀仍然是我們大多數情況下,獲取知識的最佳選擇。
自然語言的原罪
前文已經說過,我們使用的自然語言是線性的,只能有損地記錄結構化的信息。然而,純線性結構的信息在現實中幾乎是不存在的。我們只能通過給文字配圖來嘗試復原信息的結構,然而圖片的表現力雖然強於文字,卻依然有限。除此之外,圖片無法用自然語言描述,必須藉助信息技術才能進行傳播。
為了彌補輸入輸出時必然發生的信息損失,自然語言天生具備了一定的冗容余錯能力,因此其信息表達的效率和準確性較低。用信息學的術語說來的話,就是存儲密度不夠高。你可以嘗試刪去本段中任何一個字,甚至某把句話的文字順打序亂,卻不影會響你解讀出正確的意思。我們在閱讀一個句子的時侯,語言系會統不自覺地將其重新編排成"自己認為合理"的結構。只有當嘗試失敗時,我們會才發現句子中的錯誤。然而,我們的語言系統認為合理的結構,是就正確的嗎?
事實上,如果我不提醒你的話,你可能都不會發現上面的每個句子中都有些文字的順序是錯亂的。
由於自然語言的輸入輸出雙方的信息不對稱必然存在,而這種不對稱在雙方缺乏溝通的情況下很難被發現並得到解決,所以無法避免歧義、誤讀和誤解。所以我們在和別人溝通的過程中需要反覆確認對方是否正確理解了自己的意思,以及自己是否正確理解了對方的意思。為了避免被誤讀,大部分的法律條文都寫得極其冗長,不適合普通人閱讀,結果誕生了專門解讀法律的職業——律師。
我們使用自然語言進行輸入輸出的能力受眼睛、耳朵、手等身體器官的機能限制,而這些器官卻是幾百萬年前就已進化出來的。現在各種存儲介質的讀寫速度動輒每秒幾百兆位元組,而我們閱讀和寫作的速度幾乎只有每秒幾個位元組,還經常出錯,簡直不堪入目。
未來的語言
你可能想不到的是,計算機程序也是一種文字,它由人用結構化的編程語言書寫,但又可以被機器理解和執行。通過結構化編程語言,我們可以幾乎無損地記錄數據、設計流程和描述邏輯。當現有的語言不能滿足需求時,我們還可以創造新的語言。
與自然語言不同的是,編程語言通過制定嚴格的語法規範和依賴聲明機制,消除了輸入輸出雙方的信息不對稱,從根本上避免了歧義、誤讀和誤解的可能性。程序必須嚴格按照語法來編寫,如果不合語法,程序根本就無法通過編譯或被解釋執行。而機器總會嚴格遵循相同的語法來解釋程序,並以精確的順序執行其中的每一行。程序每一部分的意義始終都是確定的,不會出現混淆。
當然,程序員可以通過使用錯誤或有歧義的函數和變數命名來誤導自己和其他人,但對機器無效。編程作為一門藝術,程序可以寫得優雅也可以寫得骯髒。不過代碼質量已經超出了本文的討論範疇,這裡暫且按下不表。
與人不同的是,只要準備好了程序的運行環境,機器就能夠完全地理解和貫徹執行作者通過編程語言所表達的思想。在編寫程序時,作者必須描述清楚程序對各種基礎類庫(必要時還可以細化到具體某一版本)的依賴關係。設計嚴謹的程序會在運行時對各種依賴條件進行檢查,並在必須的依賴條件不滿足時給出提示。設計完備的程序能夠在不同的平台(Windows、Linux、iOS、Android……)上兼容運行,並對各平台作出針對性的優化和調整。
機器進行輸入輸出和運算的速度和可靠性都遠高於人類器官,且其性能會隨著技術的發展不斷快速提升。這意味著只要我們設計出可用的介面,就可以藉助機器來突破生理上的局限。在可以預見的未來,腦介面技術將會徹底打破人類輸入輸出的瓶頸,人類大腦的潛能將得到最大限度的開發和利用。
未來我們需要學習的,也許只有一門在全球範圍內人機通用的結構化編程語言而已。
後話
自從第一台計算機問世以來才不過數十年,我們的生活就已經被徹底顛覆。互聯網、地圖導航、聊天軟體……這些服務和產品已經順理成章地成為了我們生活中不可或缺的一部分。而在短短十幾年前,我們完全無法理解和想像這些東西的存在。
在這一切的背後,是由無數位程序員編寫的程序,以及更多默默無聞執行程序的機器。通過編碼技術,我們可以將文字、圖片、聲音、視頻乃至一切信息都轉換成數據保存下來,並傳播到世界上任何一個角落。
自然語言已經沿用了數千年,而編程語言還很年輕。事實上,目前世界上最古老的編程語言才不過數十年歷史,而新的編程語言正如雨後春筍一般被設計出來。
就像我們已經習慣了用計算器取代紙筆做數字計算一樣,未來我們很快也會習慣用「下載到大腦」取代閱讀,用「打包發布思想」取代寫作……當全世界的知識都唾手可得,可以瞬間將需要的全部內容下載到大腦中時,我們還需要擔心教育和學習問題嗎?
我們可以拭目以待。
推薦閱讀:
※面向對象的哲學思考
※沒有基礎的人可能在三天內用 C++ 編出一個簡易的軟體嗎?
※怎樣才能讓c#寫的程序不被反編譯?
TAG:编程 |