程序員,爲將來準備好了嗎?

也許一直在一線的程序員們對這個標題呲之以鼻,特別是全棧工程師們。這篇文章主要是拋磚引玉,預測一下之後的技術方向。若是隻想看將來的部分,可從中間開始看。前端

 

計算機產生之後,這個行業的發展突飛猛進,不停地產生新的技術來解決新的問題。這裏不把計算機語言的更新換代看做技術的變化。計算機語言應該算作是規範,除了解決新問題外,有些語言的產生和流行也是有歷史緣由的。程序員

從計算機剛剛產生時,解決的是計算問題。其將不少人花費好幾個月的計算在幾天以內完成。這一代的工程師們更多的在解決硬件問題。程序員(或者叫作軟件工程師)是將問題翻譯成計算機語言(其實程序員作的一直是這個),也就是卡片紙。程序員在當時的計算機系統中,應該不算一個核心角色。由於大部分問題和挑戰在硬件系統、算法上。算法

 

 

隨着計算機成本的下降,世界大戰後戰爭需求減小,開始大力發展經濟。硬件解決方案的成本問題開始凸顯,因而開始產生了通用計算機。通用計算機逐漸統一了硬件標準,把更多的靈活性放到了軟件上。基本模式就是:巨無霸的硬件廠商們負責提供計算資源,程序員們負責解決問題。這時候,程序員的春天來了。在此同時,軟件開發的理論也在不停地發展。隨着各類語言的層出不窮,基本上你們承認了指令、數據,程序基本流程、庫函數等各類計算機的概念。數據庫

 

再日後,隨着計算機的應用的範圍愈來愈大,挑戰也愈來愈多了。因爲系統複雜性的增長,不少系統已經不是幾位,甚至是數十位程序員就能完成的了。(當今的操做系統、搜索引擎都是數千甚至數萬人幾十年辛苦工做的結晶)。新的挑戰也來了——軟件工程,如何更高效、可預期地開發、維護複雜系統。這裏的挑戰包括:如何將傳統的項目管理經驗放到軟件項目管理中來;如何讓程序員們採用各類標準化的編程風格;如何構建合適的團隊結構等。這時候,程序員的重要性就凸顯出來了,產業鏈中的地位也變高了。縱觀歷史,數萬人之前集中在一塊兒都是進行體力勞動或者戰爭。人類歷來沒有這麼大規模的將智力集中在一塊兒解決問題。編程

  

同時,解決的問題規模和類型也進一步增長。其中,人機交互是一個熱門且有挑戰的方向。輸入上,除了從打字機來的鍵盤外,又發明了鼠標,顯示,揚聲器等各類人機交互的設備。程序員們除了要實現底層的驅動代碼,在人機交互層面也要實現方便易用的交互體驗。這時候除了算法和設計等挑戰,還有人體工學、文化上的挑戰。好比,中國人花了不少年,也沒製造出普遍應用的中文鍵盤和流行的輸入方式,最後仍是英文鍵盤+拼音成了最主流的輸入方式。這是漢字自己的特色形成的,而廣大程序員花了大量的人力物力才認識到了這些文化上的規律。另外,網絡也是另外一個熱門。程序員們在底層將計算機鏈接在了一塊兒,並依靠強大的網絡能力實現了人們的遠程溝通。windows

  

到了近幾年,又出現了大數據、物聯網等熱門的方向。程序員們從底層實現大數據的批處理、傳輸、存儲,解決了性能、可靠性等各類問題。因爲大數據的精確性和完備性一般達不到100%,因此大數據也讓不少程序員開始去解決不肯定的問題。後端

 

別人家的程序員們一直在解決不一樣領域、類型的問題。程序員的角色開始了分化(同時也有不少角色從程序員中分化出來了),從開發、測試,到架構設計、體驗優化、前端開發、後端開發、驅動開發、數據庫開發、IT等等數不勝數。縱觀不太長的程序員職業歷史,這些角色也在不停的產生和消失中。這表明着一代一代的程序員要麼不停的學習,要麼從這個行業中離開(也沒什麼很差的,好多富翁都是程序員變的)。從歷史來看,程序員們解決的問題,使用的組件和思惟模式都在不停地變化。但也有一些不變的東西,好比程序基本流程、設計模式、軟件工程。因此不少程序員在不停的學習新東西,從而可以解決新問題。設計模式

 

那麼,如今正在、將來會發生什麼變化呢?這裏只想討論一個:人機交互的革命,包括人機交互方式,和人機交互層次兩方面的革命。(說人話!)好吧,就是Kinect, HoloLensCortana帶來的新狀況。這類新產品集中在一塊兒,會對現有的人機交互產生顛覆性的革命。一句話歸納:將來人們應該花更少的時間來學習如何使用科技,程序員們要花更多時間讓科技來適應人,而不是人去適應科技。好比,單輪摩托車不須要學習怎麼在一個輪子上保持平衡,四軸飛行器不須要學習怎麼轉彎、穩定,這都是很好的例子。安全

 

  1. 人機交互方式。人是生活在三維空間裏的,程序員們也在不停地在各類輸入輸出方式模擬三維空間。首先,顯示屏是一個二維的輸出,由此鼠標和各類觸摸方式也設計成了二維的。這裏的二維性除了它們是平面輸入輸出外,它還真的只是個物理的平面……顯示器放在哪裏就在哪裏,觸摸要在顯示器上完成,鼠標也須要在一個平面上完成移動。鍵盤呢?能夠說其維度都沒到一維。

什麼是將來的輸入設備呢?它包括全息輸入輸出設備和解放雙手的輸入方式。網絡

  • 全息輸入設備。Kinect這樣的體感、手勢輸入設備屬於全息輸入設備。Kinect很酷,但不得不說這只是全息輸入設備的雛形。這不只是由於其不溫不火的狀態,也是其自己還有很大的提高空間。一方面,設備自己精度不夠、使用的範圍不是360度無死角;另外一方面後面沒有強大的人工智能來支持(人工智能放到交互層次部分講,這裏只講全息輸入設備)。將來的輸入設備應該是覆蓋整個空間,精確檢測到人的微動做和微表情,甚至可以檢測到人的健康狀態(安全和隱私是須要考慮的方面)。從單個技術上來講,應該沒有突破不了的難題了,但集成起來製造出完美的設備仍然須要巨大的投入。

  • 全息輸出設備。全息顯示技術在不少科幻電影裏都演示過了。HoloLens這樣的加強現實設備和各類虛擬現實設備都屬於全息顯示設備。這些設備還處在很是初級的階段,但已經帶來了很大的震撼。在物理技術沒有突破以前,這種可穿戴的設備是全息技術的主要載體。除此以外,還會出現各類味覺、觸覺的設備,這些所有加起來,覆蓋了人的全部感受器官,就能夠稱做全息輸出設備了。

  • Cortana一類的語音助手。其最革命性的一點是進一步解放了雙手(聽起來怎麼這麼耳熟?)。這和人類直立行走的解放雙手固然不能相提並論,但其革命性也是可圈可點的。仍是那句話,這類語音助手還在雛形階段,它們的主要挑戰除了語音識別外,主要是在後文要講的交互層次上。Cortana不像鼠標鍵盤,一方面須要學習如何使用,一方面還須要到固定的位置或者某個固定的姿式才能使用。如今Cortana雖然要將手機拿起來才能使用,但經過物聯網的進一步發展,是能夠進一步發展的。

對程序員的挑戰就來了:

  • 製造、集成出這些設備,甚至發明出新的設備。這些設備須要提供完美的體驗,和人的運動、感官無縫結合,且讓人感到天然。
  • 在較高層次,如何採集模糊、大量的輸入,並轉變成計算機可以處理的肯定命令。和傳統的輸入方式相比,除了空間變成了三維,信息量也有數量級的增長。
  • 怎樣提升輸入的效率、下降學習成本?程序員須要考慮的是如何顛覆性的提升輸入效率。這裏不只是鼠標和屏幕的座標從二維變成了三維的。想一想鋼鐵俠是怎麼輸入的?
  • 如何讓設備輸出最天然的體驗?特別是全息顯示設備,要解決頭暈等問題須要大量的調試和研究的。
  • 最重要的是:如何用這些設備構建全新的體驗模式。好比,不一樣種類的應用應該放在什麼位置,什麼呈現方式?什麼樣的動做操做纔是最有效率、最天然的?這些須要一代一代的產品不斷的迭代,才能加深對新體驗的認識,發揮新一代全息設備的能力。

  1. 人機交互層次。當前的人機交互方式上,雖然不少產品號稱體驗很是好,仍然須要人去適應設備。不只是輸入輸出的方式,仍是思惟的方式,當前的人機交互的體驗都有很大的提升空間。

例如,想出去旅遊時,要先研究到底去哪裏,要麼上網,要麼聽人說,或者去旅行社直接預約。去旅行社固然最省事,但聽不到第一手的體驗,成本也會比較高。若是要本身研究,選地方,肯定日期,買機票、酒店,找攻略,過程當中要用到不少次搜索引擎,各類預訂網站,發郵件等。從開始想到基本肯定至少須要好幾天,中間也得好幾個小時使用各類工具。而富豪們呢?也許只花5分鐘就完成了整個過程:告訴助手:想出去玩。助手可能就問問想去什麼樣的地方(也許不是某個特定的地方)?玩幾天?大概何時去?而後基本肯定後再彙報一下安排就能夠了。這兩個過程之間的核心區別就在於交互的層次。普通人是依靠計算機進行任務層次的交互,而富豪是意圖層次的交互。這就是交互層次的不一樣對效率的影響。

 

Cortana這樣的語音助手除了解放了雙手,它也是一個很是天然的輸入方式。這讓程序員和科學家們開始更多的研究人們語言後面的意圖,從而提升計算機和人的交互層次。

Project OxfordAzure Machine Learning這樣的開放的人工智能組件真正把多年實驗室裏的玩具帶給了全世界。這就像當年Siri的發佈同樣,雖然它不是最好的,但沒有它,就不會有google nowCortana的迅速推出。好吧,又來一次:雖然Project Oxford只是個雛形,可是Project Oxford的推出給業界定義了人工智能組件更高層的接口標準,下降了人工智能的學習、應用門檻。特別是其中的語言模型。除了人工智能組件的開放,能夠預見由各大公司基於大數據的各類數據模型也會很快共享。基於它們,人工智能的應用很快就會遍地開花,全部程序員都能創造出更智能的應用,從而每一個人均可以有本身的我的助手。若是不能腦補我的助手的價值,請觀看電影《她》(《Her》),看看人工智能是怎樣幫忙處理電話和郵件的。

另外一方面,在這一輪人工智能的熱潮下,硬件公司們也開始製造採用人工智能算法的處理器,這也表明着新一代的編程語言和理念的開始流行了。

交互層次方面對程序員就有更大的挑戰了:

  • 最大的挑戰就是學習和適應新的編程理念。之前的程序都是if..else + while這樣的肯定性的結構化程序,程序員要開始學習如何寫元程序。寫出的程序是能夠本身適應個體用戶需求的,而不是寫一段可以適應全部用戶的程序。程序員的代碼將是方向性的,統籌性的,而再也不是細節的堆疊。

  • 大開腦洞,如何結合全息交互和物聯網等技術提升人機交互層次。幫助人們作事情10步並5步,5步並1步。好比,什麼狀況下擡手錶示要喝水,擡頭表示想開燈,甚至無需特定動做;真正幫助人們管理時間,協調日程,而不只僅是一個日程表。

 

總而言之,這裏描述的將來可能須要10年、20年或更長。也許咱們這代程序員已經退出江湖了。熱點將再也不是發明各類語言、發現各類工程管理方式和軟件設計模式了,而是科技如何進一步的以人爲本,促進生產力發展。對程序員的挑戰除了要學習和探索新的輸入輸出方式,還要學會人工智能這樣的徹底不一樣的編程理念。

相關文章
相關標籤/搜索