天天看點

實體學家眼中的世界:程式設計的未來

最近在看一本書,加來道雄(michio kaku)的《實體學的未來》,第一、第二章是程式員更加關心的,對于下一個100年計算機和人工智能未來的預測。想想計算機發展短暫的曆史,這些發生了的翻天覆地的變化,似乎都在彈指一揮間。誰的大膽預測可以那麼準确?無論如何,書中對其這樣幾個猜想令我記憶深刻:

網際網路眼鏡和隐形鏡片

無人駕駛汽車

摩爾定律結束

通用翻譯器

全息攝影和三維影像

意識識别

有意識情感的機器人

模拟大腦

這是實體學家眼中的世界(另外推薦他的另一本書《平行宇宙》),激動人心;另一方面,我回想起小時候無比癡迷的機器貓,小小四維空間袋,寄托了孩子多少純真的夢想,有多少神奇的道具已經成為現實……

但是程式員要說的看法,尤其在自己熟知的領域,我們不談語言的發展和趨勢,這些留給專家去做吧——不妨把目光放長遠一點,100年後的程式員,他們都在做怎樣的事情?100年後的程式設計,會是怎樣的一種勞動?

人人都會程式設計

類似的,程式設計,也将是未來人們日常生活的必備技能,如同寫字、閱讀一樣。程式設計并不非得指寫那些非程式員看不懂的奇形怪狀的代碼。你把衣服放到洗衣機裡,設定好水量中等,浸泡20分鐘,洗滌20分鐘,漂洗3次共15分鐘,再甩幹3分鐘——這,就是程式設計,你做的僅僅是按幾個按鍵,把這幾項工作組合起來。

網際網路的資源,将被得到更好地組織和擷取,以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表達式給出。如此一來,你可以感受到,整個網際網路就變成了一個超級大型的資料庫。當然,這樣的文法還是不夠簡單,希望能看到類似ifttt的應用出現,目的卻是讓不會程式設計的人也可以輕松從網際網路這個大型資料庫中查詢自己需要的東西。

另外,未來需要普通人掌握的程式設計技能也不盡相同,就如同現在年輕人和老人的閱讀技能大不相同一樣。但是可以确定的是,生活中會充滿程式設計的行為,讓機器替代自己做更多的事。

所見即所得

好吧,在這裡我談這個話題也和我的啟蒙程式設計語言是vb有關。你也許和我一樣,談到所見即所得的時候,想到很多程式設計語言、ide,甚至包括 fckeditor這樣的富文本編輯元件。google已經做了這樣的嘗試,app inventor就是這樣的東西,它是為手機端準備的程式設計軟體,你可以看看這樣的宣傳視訊:

上面這則視訊似乎隻是針對非專業程式員的傻瓜式工具,那麼再來看看這個在網上已經廣為流傳的bret victor的神一般的演講,題為《inventing on principle》,第一次看的時候,你一定會像我一樣驚訝地合不攏嘴:

所見即所得使得程式設計的過程更貼近人最自然的思維,而一張豐富畫面所傳遞的内容遠遠大過枯燥的代碼行語義和數值。

程式設計範型的進化

相較于硬體的摩爾定律,軟體的發展似乎真的是“太慢了”,相較于硬體淘汰的速率,幾十年曆史的程式設計語言卻可以長盛不衰地存活下去。好在軟體的發展也是有驅動力的,軟體的複雜性就是直接驅動力之一。想想現在做一個普通網站的代價,和十五年前比較,我們能省做多少功。

很多時候程式員會覺得,算法還是不容易轉變成代碼,即便是簡單的算法,思路簡單的紙上實作,變成代碼卻比較冗長。我覺得大部分情況下這不是你編碼技巧的問題,而是程式設計語言的問題——換句話說,如果你使用一種合适範型的程式設計語言,興許就可以輕松解決這個問題——即便這樣的語言并不一定好找,并不一定容易設計。

我們都知道從過程式程式設計到面向對象程式設計的進化,可是如今常用的程式設計範型已經遠遠超出這兩者了,例如聲明式程式設計、面向方面程式設計、基于規則的程式設計等等,我們的固有思維模式一次有一次遭到挑戰。

以prolog語言為例,它是由事實和規則組成的,我們先告知程式這些已知的事實和規則,再去詢問程式一個需要推斷的問題,讓它給出推斷的結果。比如:

love(you, dog).  

love(he, dog).  

love(she, cat).  

friend(pa, pb) :- \+(pa=pb), love(pa,animal), love(pb,animal). 

我來解釋一下:

給定了三個事實:你愛狗,他愛狗,她愛貓;

給定一條規則:對于人物a(pa)和人物b(pb),如果人物a和人物b不是同一個人(“\+”表示取反),人物a愛動物animal,并且人物b也愛同一種動物animal,那麼人物a和人物b就是朋友(friend)。

好,現在來詢問程式一個問題:

| ?- friend(you, he). 

你和他是朋友嗎?程式判斷你愛狗,他也愛狗,就給出結論:

yes 

這隻是基于規則的程式設計範型的一個例子,不同範型的語言适用于解決特定的問題。我們在未來能看到更多範型的語言,目的就是讓對特定問題的表述和解決更見簡單和易于了解。

創造性的工作在哪

既然程式設計會成為一件幾乎人人都能夠做的事情,那麼程式員,你的價值在哪?

好,先來看看為什麼越來越多的人可以程式設計呢?因為程式設計的門檻更低了。即便是現在,程式設計的門檻已經比二十年前低得多了:不明白網絡協定?好,已經有現成的類庫可以使用;不懂平台差異?好,你隻需要在無差别的虛拟機上寫程式;不了解記憶體管理?好,讓程式來自動幫你完成這件事情……

是以,如果你還在為了解語言的不良設計、曆史原因等等遺留下來的陷阱,或者為知道某個提高語言表達的文法糖而沾沾自喜的時候,你想過沒有,這樣的優勢很可能太不值錢了。

程式員最有價值的部分不應在“翻譯”上,即不應在将思考的結果翻譯到代碼這一層面上。程式設計的未來一定是讓程式設計工作越發貼近人本質的思考,這樣的“翻譯”工作導緻的歧義、錯誤、陷阱會越來越少,把清晰的思考變成代碼是一件越來越簡單的工作,以至于某天可以讓能夠讀懂人腦的計算機來完成。

另一方面,很多公司的老大們卻都不懂程式員,在他們心目中,“程式員”隻是高成本的勞動力,隻會在一台搞不懂的機器上幹一些更搞不懂的事情。

看到這裡,你是不是也發現,程式員本質上應該和音樂家、畫家類似,往往也讓許多人無法了解,而且藝術的價值,常常也都來源于思考?

音樂家有了更先進的樂器,畫家有了更豐富的畫筆,情感的抒發都可以更加自由。甚至有一天,拿掉樂器和畫筆這些傳統實體實體,給大腦接上兩根線,思考之後的樂譜和畫冊就誕生在電腦裡了。

可是,即便計算機可以幫助人思考,它卻不能全面代替人思考,尤其對于藝術的創作。即便到了100年以後,程式員創造性的工作,還是無從替代的。

最後,放開枷鎖去想象吧,100年以後,程式設計會是什麼樣子,程式員又會是什麼樣子,我期待你的答案。

繼續閱讀