物理學家眼中的世界:編程的未來
最近在看一本書,加來道雄(Michio Kaku)的《物理學的未來》,第一、第二章是程序員更加關心的,對于下一個100年計算機和人工智能未來的預測。想想計算機發(fā)展短暫的歷史,這些發(fā)生了的翻天覆地的變化,似乎都在彈指一揮間。誰的大膽預測可以那么準確?無論如何,書中對其這樣幾個猜想令我記憶深刻:
- 因特網眼鏡和隱形鏡片
- 無人駕駛汽車
- 摩爾定律結束
- 通用翻譯器
- 全息攝影和三維影像
- 意識識別
- 有意識情感的機器人
- 模擬大腦
這是物理學家眼中的世界(另外推薦他的另一本書《平行宇宙》),激動人心;另一方面,我回想起小時候無比癡迷的機器貓,小小四維空間袋,寄托了孩子多少純真的夢想,有多少神奇的道具已經成為現實……
但是程序員要說的看法,尤其在自己熟知的領域,我們不談語言的發(fā)展和趨勢,這些留給專家去做吧——不妨把目光放長遠一點,100年后的程序員,他們都在做怎樣的事情?100年后的編程,會是怎樣的一種勞動?
人人都會編程
微博上,有朋友對于HTML5實現的web操作系統(tǒng)評論道“斷網就是廢物一個”,但是他并沒有意識到,很快網絡就將如同現在的水、電這樣一樣,是人正常生活不可缺少的基礎設施。
類似的,編程,也將是未來人們日常生活的必備技能,如同寫字、閱讀一樣。編程并不非得指寫那些非程序員看不懂的奇形怪狀的代碼。你把衣服放到洗衣機里,設定好水量中等,浸泡20分鐘,洗滌20分鐘,漂洗3次共15分鐘,再甩干3分鐘——這,就是編程,你做的僅僅是按幾個按鍵,把這幾項工作組合起來。
再如ifttt這樣的網站,你都可以實現編程的分支功能了——如果明天天晴的話,就發(fā)給你一條短信,去爬山。完成這樣的功能,你根本不需要是程序員,你只要會操作電腦,會上網就可以了。
互聯(lián)網的資源,將被得到更好地組織和獲取,以YQL(Yahoo! Query Language)為例,你可以體會到這一點:
- select * from html
- where url='http://www.dangdang.com/'
- and xpath='//ul[@id="homepage_promotion_count_ul"]/li/p[@class="name"]/a'
它做了這樣一件事:從當當網的頁面去獲取數據,而數據的路徑通過XPath表達式給出。如此一來,你可以感受到,整個互聯(lián)網就變成了一個超級大型的數據庫。當然,這樣的語法還是不夠簡單,希望能看到類似ifttt的應用出現,目的卻是讓不會編程的人也可以輕松從互聯(lián)網這個大型數據庫中查詢自己需要的東西。
另外,未來需要普通人掌握的編程技能也不盡相同,就如同現在年輕人和老人的閱讀技能大不相同一樣。但是可以確定的是,生活中會充滿編程的行為,讓機器替代自己做更多的事。
所見即所得
好吧,在這里我談這個話題也和我的啟蒙編程語言是VB有關。你也許和我一樣,談到所見即所得的時候,想到很多編程語言、IDE,甚至包括 FCKeditor這樣的富文本編輯組件。Google已經做了這樣的嘗試,App Inventor就是這樣的東西,它是為手機端準備的編程軟件,你可以看看這樣的宣傳視頻:
上面這則視頻似乎只是針對非專業(yè)程序員的傻瓜式工具,那么再來看看這個在網上已經廣為流傳的Bret Victor的神一般的演講,題為《Inventing on Principle》,第一次看的時候,你一定會像我一樣驚訝地合不攏嘴:
所見即所得使得編程的過程更貼近人最自然的思維,而一張豐富畫面所傳遞的內容遠遠大過枯燥的代碼行語義和數值。
編程范型的進化
相較于硬件的摩爾定律,軟件的發(fā)展似乎真的是“太慢了”,相較于硬件淘汰的速率,幾十年歷史的編程語言卻可以長盛不衰地存活下去。好在軟件的發(fā)展也是有驅動力的,軟件的復雜性就是直接驅動力之一。想想現在做一個普通網站的代價,和十五年前比較,我們能省做多少功。
很多時候程序員會覺得,算法還是不容易轉變成代碼,即便是簡單的算法,思路簡單的紙上實現,變成代碼卻比較冗長。我覺得大部分情況下這不是你編碼技巧的問題,而是編程語言的問題——換句話說,如果你使用一種合適范型的編程語言,興許就可以輕松解決這個問題——即便這樣的語言并不一定好找,并不一定容易設計。
我們都知道從過程式編程到面向對象編程的進化,可是如今常用的編程范型已經遠遠超出這兩者了,例如聲明式編程、面向方面編程、基于規(guī)則的編程等等,我們的固有思維模式一次有一次遭到挑戰(zhàn)。
以Prolog語言為例,它是由事實和規(guī)則組成的,我們先告知程序這些已知的事實和規(guī)則,再去詢問程序一個需要推斷的問題,讓它給出推斷的結果。比如:
- love(you, dog).
- love(he, dog).
- love(she, cat).
- friend(PA, PB) :- \+(PA=PB), love(PA,Animal), love(PB,Animal).
我來解釋一下:
- 給定了三個事實:你愛狗,他愛狗,她愛貓;
- 給定一條規(guī)則:對于人物A(PA)和人物B(PB),如果人物A和人物B不是同一個人(“\+”表示取反),人物A愛動物Animal,并且人物B也愛同一種動物Animal,那么人物A和人物B就是朋友(friend)。
好,現在來詢問程序一個問題:
- | ?- friend(you, he).
你和他是朋友嗎?程序判斷你愛狗,他也愛狗,就給出結論:
- yes
這只是基于規(guī)則的編程范型的一個例子,不同范型的語言適用于解決特定的問題。我們在未來能看到更多范型的語言,目的就是讓對特定問題的表述和解決更見簡單和易于理解。
創(chuàng)造性的工作在哪
既然編程會成為一件幾乎人人都能夠做的事情,那么程序員,你的價值在哪?
好,先來看看為什么越來越多的人可以編程呢?因為編程的門檻更低了。即便是現在,編程的門檻已經比二十年前低得多了:不明白網絡協(xié)議?好,已經有現成的類庫可以使用;不懂平臺差異?好,你只需要在無差別的虛擬機上寫程序;不理解內存管理?好,讓程序來自動幫你完成這件事情……
所以,如果你還在為了解語言的不良設計、歷史原因等等遺留下來的陷阱,或者為知道某個提高語言表達的語法糖而沾沾自喜的時候,你想過沒有,這樣的優(yōu)勢很可能太不值錢了。
程序員最有價值的部分不應在“翻譯”上,即不應在將思考的結果翻譯到代碼這一層面上。編程的未來一定是讓編程工作越發(fā)貼近人本質的思考,這樣的“翻譯”工作導致的歧義、錯誤、陷阱會越來越少,把清晰的思考變成代碼是一件越來越簡單的工作,以至于某天可以讓能夠讀懂人腦的計算機來完成。
另一方面,很多公司的老大們卻都不懂程序員,在他們心目中,“程序員”只是高成本的勞動力,只會在一臺搞不懂的機器上干一些更搞不懂的事情。
看到這里,你是不是也發(fā)現,程序員本質上應該和音樂家、畫家類似,往往也讓許多人無法理解,而且藝術的價值,常常也都來源于思考?
音樂家有了更先進的樂器,畫家有了更豐富的畫筆,情感的抒發(fā)都可以更加自由。甚至有一天,拿掉樂器和畫筆這些傳統(tǒng)物理實體,給大腦接上兩根線,思考之后的樂譜和畫冊就誕生在電腦里了。
可是,即便計算機可以幫助人思考,它卻不能全面代替人思考,尤其對于藝術的創(chuàng)作。即便到了100年以后,程序員創(chuàng)造性的工作,還是無從替代的。
最后,放開枷鎖去想象吧,100年以后,編程會是什么樣子,程序員又會是什么樣子,我期待你的答案。