近十年以來,“學(xué)習(xí)編程” 已經(jīng)成為許多初創(chuàng)公司創(chuàng)始人以及科技大牛們的格言。喬布斯(從沒有寫過代碼)說過:“人人都應(yīng)該學(xué)習(xí)編程。” 假如你在 Google 上輸入 “everybody should learn”,第一個彈出來的詞會是 “to code”(寫代碼)?;艚鹨苍?jīng)說過,會簡單的計算機程序編制是 21 世紀(jì)必備的技能。
大家可能覺得我有點瘋了,但是我認(rèn)為,喬布斯、霍金以及 Google 都錯了。
當(dāng)然有一點要講明:學(xué)習(xí)編程是一件不錯的事?,F(xiàn)如今有很多有趣的編程工作,即使你不想成為這方面的行家,多少學(xué)點也可以使生活更輕松。早在 Tech in Asia 任職時,我學(xué)了一點 Python,寫過一篇代碼,能自動推送部分 Newsletter。這樣,既大量節(jié)省了時間,又使我成就感倍增。我認(rèn)為這種挑戰(zhàn)對大腦思維鍛煉很有用。
那為何那些認(rèn)為人人都應(yīng)該會編程的人錯了呢?他們錯就錯在這個再三出現(xiàn)的論斷上:隨著電腦的普及,編程工作也會越來越普通。電腦一直會有,只是致力于用特殊的語言跟它對話的程序員并不多。
久而久之,人們也會希望自己可以直接跟計算機交流,而不用通過一些特殊的代碼。
如何可能?
先來說說什么是計算機編程。實質(zhì)上,這就跟講一門外語很像。首先,人們在自己的語境下構(gòu)想出希望計算機干什么,然后通過編程把這個想法翻譯成一種計算機可以懂的語言。所以說,計算機編程實質(zhì)上就等于翻譯。
但是種種跡象表明,計算機編程實際上比翻譯要簡單得多。因為人們只需要指示計算機做這個,再做那個而已,并不需要它能欣賞一首詩的文化背景,也不需要擔(dān)心用了 C++ 后,散文的基調(diào)就跑了。而英語不一樣,用不同的單詞,就可能會產(chǎn)生不一樣的情境。所以說,對于編程來說,人們只需做一件事,那就是讓計算機明白它要做什么就行了。
這其實并沒有看上去那么簡單,因為計算機本身不會說話,他們也不能對人類的種種行為感同身受。盡管如此,機器翻譯人類語言所面臨的障礙在計算機語言上并不存在。雖然達(dá)到完美的機器翻譯仍然任重而道遠(yuǎn),但是實現(xiàn)遠(yuǎn)高于平均水平的機器翻譯還是很容易的。我認(rèn)為這個同樣適用于編程。
如何發(fā)生?
這已經(jīng)發(fā)生了。DARPA 有一個叫 MUSE 的項目,以期通過分析處理網(wǎng)頁上現(xiàn)存的各種各樣的代碼來開發(fā)一種人類可控的自動編程軟件。此原理跟機器語言翻譯差不多:網(wǎng)頁上有各種各樣的代碼,也有很多來進(jìn)一步描述代碼的文本。理想情況下,當(dāng)人類給出諸如 “搜索這個領(lǐng)域的所有網(wǎng)頁,并把從各個網(wǎng)頁上搜索到的數(shù)據(jù)匯總到一個表格中的同一列”,或者 “編個程序,每天下午 3 點自動刪除我的臨時文件” 等基于語言的指令時,計算機能根據(jù)代碼以及非代碼語言推算出人類的真正需求。
顯然,這說起來容易,做起來難。首先,這是個耗時耗力的大工程,即算有朝一日實現(xiàn)了,也明顯替代不了所有的程序員。即便像 Frankenstein-style 代碼,雖然功能性很強,卻仍然不是最清晰、最有效的代碼。所以此類系統(tǒng)即便能淘汰眾多編程工作,也只能像無人駕駛一樣(另一個 DARPA 項目),僅僅只是承擔(dān)更多的駕駛工作,而非淘汰駕駛員本身。
DARPA 的 MUSE 項目并不是唯一。IBM 的 Watson 也一樣。它能更熟練地破譯人類語言從而達(dá)到理想的效果(尤其當(dāng)那個結(jié)果是要徹底打敗 Jeopardy 大賽冠軍 Ken Jennings)。還有奧巴馬總統(tǒng)發(fā)布的 Brain Initiative 計劃,旨在訓(xùn)練計算機擁有更多的人類思維。毫無疑問,人類已經(jīng)向自動程序時代邁進(jìn)。
此類效果將進(jìn)一步加劇,因為隨著程序員越來越意識到由人類到機器的翻譯比簡單的漢譯英要難很多,他們會設(shè)計出相當(dāng)多的自動化程序來減輕自身的工作量。隨著未來軟件功能的不斷優(yōu)化,程序員們的飯碗終將不保。真糟糕!
別口誅筆伐
以免大家因為我的評論而抓狂,我先發(fā)表以下免責(zé)聲明:
僅僅實現(xiàn)最基礎(chǔ)的自動編程都還任重而道遠(yuǎn)(可能至少要 10年,甚至更長)。我想表達(dá)的是,當(dāng)今雖然編程可能不適用于幼兒園小朋友,但是并不是說大學(xué)生不可以去學(xué)。
學(xué)習(xí)代碼還是有很多好處的,盡管機器也能做這些工作。這就好比機算機器翻譯漸趨完美,學(xué)習(xí)一門外語仍然是件不錯的事。所以如果你對電腦編程有興趣的話,那就義無反顧地去學(xué)吧。
現(xiàn)如今,編程由于具備創(chuàng)業(yè)傾潛質(zhì)因而是根除貧困最好的途徑之一。網(wǎng)上的學(xué)習(xí)資料成千上萬,但是僅僅通過電腦(世界上很多圖書館都免費提供),而不需要其他東西就可以編一個程序,或者開發(fā)一款 App,使其在現(xiàn)實世界中產(chǎn)生商業(yè)價值。
但是總的來說,編程并不是鐵飯碗,也不是長期的飯票。作為一名作家和翻譯家,我知道機器人終將取代我的工作。但是,程序員也千萬別沾沾自喜,因為你們同樣會被取代,而且有可能會比我先丟掉飯碗。