程式設計的未來

raychase發表於2012-10-16

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

  因特網眼鏡和隱形鏡片

  無人駕駛汽車

  摩爾定律結束

  通用翻譯器

  全息攝影和三維影像

  意識識別

  有意識情感的機器人

  模擬大腦

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

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

  人人都會程式設計

  微博上,有朋友對於HTML5實現的web作業系統評論道“斷網就是廢物一個”,但是他並沒有意識到,很快網路就將如同現在的水、電這樣一樣,是人正常生活不可缺少的基礎設施

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

  再如ifttt這樣的網站,你都可以實現程式設計的分支功能了——如果明天天晴的話,就發給你一條簡訊,去爬山。完成這樣的功能,你根本不需要是程式設計師,你只要會操作電腦,會上網就可以了。

  網際網路的資源,將被得到更好地組織和獲取,以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就是這樣的東西,它是為手機端準備的程式設計軟體,你可以看看這樣的宣傳視訊:

<embed>

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

<embed>

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

  程式設計範型的進化

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

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

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

  以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年以後,程式設計會是什麼樣子,程式設計師又會是什麼樣子,我期待你的答案。

相關文章