程序猿——註定滅絕

來自CGP Grey很精彩的視頻中,他提出說,在不久的將來,都將由計算機程序參與,所有東西都變成強智能化,所謂強智能簡單普及一下,機器的智商可與一樣。程序猿是不是大放異彩了,那就錯了。怎麼當回事,看下問分析:

編程是什麼?

編程是將理念(業務、法律、遊戲、數學問題等)翻譯成機器可以執行,其他人可以讀取的代碼的學科。歸根結底,程序員不過是中間人而已,一個既能明白問題又能理解機器的中間人,因此,可將兩者進行轉換。僅僅如此而已。

偉大的程序員既透徹了解他們編程的平台,又深刻理解問題域。創新迸發在域和技術甜美的交集中。這就是為什麼(除其他事項外)如果讓程序員(GitHub、Visual Studio、AWS等)去做大型產品和政府產品(Healthcare.gov,FBI』s Sentinel,等等)時,軟體往往會變得糟糕又昂貴。

Advertisements

每個人都在編程

中間人最終會被淘汰。

編程在過去幾十年間已經發展到了相當高的程度。高級編程語言和可用的在線信息將進入編程的門檻幾乎降至為零。Scratch,一款來自於MIT有著數百萬用戶和上千萬項目的兒童友好型的編程平台,已經可以媲美GitHub。現在,一個普通的程序員相較於20年前他的同行,需要理解的計算機體系結構和演算法要少很多。

然而,這場革命近期似乎停滯不前了。我們最重要的工具——編程語言最近並沒有發生太大的改變。大多數新的和流行的語言(如GO和Rust),只是逐漸改進了現有的範式,缺乏革命性的功能。目前最流行的編程語言是Java(1995年),C(1973)和C ++(1983年),年紀都已經不小。這個行業卻反而開始專註於開發支持工具和方法,來提高生產效率。我們已經太久沒有創新了,所以,我強烈推薦大家看看Bret Victor的演講《The Future of Programming》。

Advertisements

這是什麼意思?

S曲線

科技的發展是這樣的:SSSSSSSSSSSSSS

如果要描述地更清楚點的話,它是這樣的:

例如,IBM的第一個文字處理器程序(FORMAT)使用繁瑣的穿孔卡片作為輸入。在同一時間,最先進的打字機附帶可替換字體、自動字元重複以及列印數學公式的能力。然而,卻沒有人使用打字機。本來位於打字機下方的文字處理器的曲線很快趕上並超越了打字機,打字機變成了過去時。

我相信,我們正處在一個類似的語言技術曲線上,正在等待一個新的時代的到來。

不需要程序員的編程語言

為了從系統中徹底淘汰程序員(中間人),我們需要讓編程平台自身去「理解」問題,而不再需要編寫代碼。

這個想法並不是我首創的。 1963年,Ivan Sutherland在《Sketchpad》中就描述了這樣一個系統,它可以解決給定的若干已定義約束的問題。Prolog(1972年),一種聲明性編程語言就是為了解決給定的一系列邏輯規則問題而創建的。它雖然依然是一種需要程序員的編程語言,並且並沒有被廣泛使用,但是它沒有完全消失。比如,它以及其他語言一起成就了IBM著名的超級計算機沃森(Watson)。

對於不需要程序員的編程語言,最偉大的例子是自然語言,如英語。從二進位代碼到彙編,從C到Python,編程語言趨向于越來越類似自然語言。並且作為現在一種推崇的方式,越來越多的程序員正在試圖讓他們的代碼儘可能地接近於白話英文,以便於其他程序員和未來自己的理解。那麼這個融合的限制是什麼?

NLP

現在的自然語言處理(natural language processing,NLP)系統能夠理解文本中的單詞角色以及它們之間的相互關係。下面是來自斯坦福大學CoreNLP輸出的一個例子:

我們可以發現,僅通過分析文本,該程序就能夠識別同一個人的聯合引用,並識別單詞的角色。

下面說一個更有趣的,例如,此簡單的業務規則:

注意CoreNLP是如何識別條件(if – buy)和對象(buy – iPhones)的。那麼現在將這些翻譯成計算機程序還有什麼難的嗎?

有越來越多的新聞文章是由機器人寫的。最近如Apple、Google、Microsoft和亞馬遜等公司已經相繼開發出基於語音識別和自然語言處理的客戶產品。這進一步加快了這一領域的研究。

如果你想親自體驗自然語言處理,那麼我強烈建議Python的NLTK。

遺傳編程

另一個有趣的研究領域是遺傳演算法。使用類似於自然選擇的進程,遺傳演算法通過生產最佳的解決方案來解決問題。從設計噴氣發動機到玩超級瑪麗都是它的應用範圍。

但是,遺傳演算法肯定不能生成程序代碼,是吧?再好好想想。

一個名叫Kory Becker的開發人員,編寫了一個可以生成Brainfuck代碼來解決簡單問題的程序。當然,這款軟體的實用性非常有限,但這僅僅是個開始。正如他所說,更複雜的問題需要更多的計算能力,來找出最適合的解決方案。

例如,下面的代碼,完全是由程序寫的,可列印hello。

+-+-+>-<[++++>+++++<+<>++]>[-[---.--[[-.++++[+++..].+]],]<-+<+,.+>[[.,],+<.+-<,--+.]],+][[[.+.,,+].-

該欄位稱為遺傳編程,並且也不是什麼新生事物:

對遺傳和進化的研究需要結合查找的基因和生存價值標準。(Alan Turing,《Intelligent Machinery》,1948年)

結合NLP和GP,我們就可以建立能理解用自然語言寫的約束的系統,並實施可解決這些帶有約束的問題的程序。

享受這段美好時光吧

享受這段美好時光吧,至少我們比貨車司機和醫生要幸運得多,並且有機會參與到這場革命中。

或許我們消失了,但至少比至少我們比貨車司機和醫生要幸運得多,並且有機會參與到這場革命中。

文/丁向明

做一個有博客的web前端自媒體人,專註web前端開發,關注用戶體驗,加我qq/微信交流:6135833

http://dingxiangming.com

Advertisements

你可能會喜歡