程式設計師的未來

2015-09-24    分類:程式設計師人生、首頁精華11人評論發表於2015-09-24

程式設計師是註定滅絕的一個物種。

在一個來自於CGP Grey很精彩的視訊中,他提出說,在不久的將來,大多數工作將會由機器替代。許多行業,從卡車司機到醫生,在不久的將來將會消失或發生巨大的變化,創造出一種全新的社會體制。但是,這樣一來似乎有點說不通——既然未來的計算機程式將會大放光彩,那麼勢必需要更多的程式設計師。畢竟,建立自動汽車、自動化的醫療診斷系統、小販機器人等等,都需要程式設計師的參與,不是嗎?

大錯特錯。

程式設計是什麼?

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

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

每個人都在程式設計

中間人最終會被淘汰。

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

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

這是什麼意思?

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,我們就可以建立能理解用自然語言寫的約束的系統,並實施可解決這些帶有約束的問題的程式。

享受這段美好時光吧

我相信不是所有的程式設計工作都會被機器人取代,至少不會很快。比如說,那些需要高度優化的程式碼或使用高階演算法的程式設計任務。其他的還有領域過於複雜的情況。不過,我也相信,大量的程式設計師將會在未來幾年被取代。我的預測是,這將急劇減少對程式設計師的需求,抵消對軟體創造的不斷增加的需求,並最終結束程式設計師的高薪時代。

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

相關文章