程序員,對(duì)未來(lái)準(zhǔn)備好了嗎?
也許一直在一線(xiàn)的程序員們對(duì)這個(gè)標(biāo)題呲之以鼻,特別是全棧工程師們。這篇文章主要是拋磚引玉,預(yù)測(cè)一下以后的技術(shù)方向。另外,文中可能也有表述不對(duì)的地方,歡迎指正。如果只想看未來(lái)的部分,可從中間開(kāi)始看。
計(jì)算機(jī)產(chǎn)生以后,這個(gè)行業(yè)的發(fā)展日新月異,不停地產(chǎn)生新的技術(shù)來(lái)解決新的問(wèn)題。這里不把計(jì)算機(jī)語(yǔ)言的更新?lián)Q代看作技術(shù)的變化。計(jì)算機(jī)語(yǔ)言應(yīng)該算做是規(guī)范,除了解決新問(wèn)題外,有些語(yǔ)言的產(chǎn)生和流行也是有歷史原因的。
從計(jì)算機(jī)剛剛產(chǎn)生時(shí),解決的是計(jì)算問(wèn)題。其將很多人花費(fèi)好幾個(gè)月的計(jì)算在幾天之內(nèi)完成。這一代的工程師們更多的在解決硬件問(wèn)題。程序員(或者叫做軟件工程師)是將問(wèn)題翻譯成計(jì)算機(jī)語(yǔ)言(其實(shí)程序員做的一直是這個(gè)),也就是卡片紙。程序員在當(dāng)時(shí)的計(jì)算機(jī)系統(tǒng)中,應(yīng)該不算一個(gè)核心角色。因?yàn)榇蟛糠謫?wèn)題和挑戰(zhàn)在硬件系統(tǒng)、算法上。
隨著計(jì)算機(jī)成本的降低,世界大戰(zhàn)后戰(zhàn)爭(zhēng)需求減少,開(kāi)始大力發(fā)展經(jīng)濟(jì)。硬件解決方案的成本問(wèn)題開(kāi)始凸顯,于是開(kāi)始產(chǎn)生了通用計(jì)算機(jī)。通用計(jì)算機(jī)逐漸統(tǒng)一了硬件標(biāo)準(zhǔn),把更多的靈活性放到了軟件上。基本模式就是:巨無(wú)霸的硬件廠(chǎng)商們負(fù)責(zé)提供計(jì)算資源,程序員們負(fù)責(zé)解決問(wèn)題。這時(shí)候,程序員的春天來(lái)了。在此同時(shí),軟件開(kāi)發(fā)的理論也在不停地發(fā)展。隨著各種語(yǔ)言的層出不窮,基本上大家認(rèn)可了指令、數(shù)據(jù),程序基本流程、庫(kù)函數(shù)等各種計(jì)算機(jī)的概念。
再往后,隨著計(jì)算機(jī)的應(yīng)用的范圍越來(lái)越大,挑戰(zhàn)也越來(lái)越多了。由于系統(tǒng)復(fù)雜性的增加,很多系統(tǒng)已經(jīng)不是幾位,甚至是數(shù)十位程序員就能完成的了。(當(dāng)今的操作系統(tǒng)、搜索引擎都是數(shù)千甚至數(shù)萬(wàn)人幾十年辛苦工作的結(jié)晶)。新的挑戰(zhàn)也來(lái)了——軟件工程,如何更高效、可預(yù)期地開(kāi)發(fā)、維護(hù)復(fù)雜系統(tǒng)。這里的挑戰(zhàn)包括:如何將傳統(tǒng)的項(xiàng)目管理經(jīng)驗(yàn)放到軟件項(xiàng)目管理中來(lái);如何讓程序員們采用各種標(biāo)準(zhǔn)化的編程風(fēng)格;如何構(gòu)建合適的團(tuán)隊(duì)結(jié)構(gòu)等。這時(shí)候,程序員的重要性就凸顯出來(lái)了,產(chǎn)業(yè)鏈中的地位也變高了。縱觀歷史,數(shù)萬(wàn)人以前集中在一起都是進(jìn)行體力勞動(dòng)或者戰(zhàn)爭(zhēng)。人類(lèi)從來(lái)沒(méi)有這么大規(guī)模的將智力集中在一起解決問(wèn)題。
同時(shí),解決的問(wèn)題規(guī)模和類(lèi)型也進(jìn)一步增加。其中,人機(jī)交互是一個(gè)熱門(mén)且有挑戰(zhàn)的方向。輸入上,除了從打字機(jī)來(lái)的鍵盤(pán)外,又發(fā)明了鼠標(biāo),顯示,揚(yáng)聲器等各種人機(jī)交互的設(shè)備。程序員們除了要實(shí)現(xiàn)底層的驅(qū)動(dòng)代碼,在人機(jī)交互層面也要實(shí)現(xiàn)方便易用的交互體驗(yàn)。這時(shí)候除了算法和設(shè)計(jì)等挑戰(zhàn),還有人體工學(xué)、文化上的挑戰(zhàn)。比如,中國(guó)人花了很多年,也沒(méi)制造出廣泛應(yīng)用的中文鍵盤(pán)和流行的輸入方式,***還是英文鍵盤(pán)+拼音成了最主流的輸入方式。這是漢字本身的特點(diǎn)造成的,而廣大程序員花了大量的人力物力才認(rèn)識(shí)到了這些文化上的規(guī)律。另外,網(wǎng)絡(luò)也是另一個(gè)熱門(mén)。程序員們?cè)诘讓訉⒂?jì)算機(jī)連接在了一起,并依靠強(qiáng)大的網(wǎng)絡(luò)能力實(shí)現(xiàn)了人們的遠(yuǎn)程溝通。
到了近幾年,又出現(xiàn)了大數(shù)據(jù)、物聯(lián)網(wǎng)等熱門(mén)的方向。程序員們從底層實(shí)現(xiàn)大數(shù)據(jù)的批處理、傳輸、存儲(chǔ),解決了性能、可靠性等各種問(wèn)題。由于大數(shù)據(jù)的精確性和完備性通常達(dá)不到100%,所以大數(shù)據(jù)也讓很多程序員開(kāi)始去解決不確定的問(wèn)題。
別人家的程序員們一直在解決不同領(lǐng)域、類(lèi)型的問(wèn)題。程序員的角色開(kāi)始了分化(同時(shí)也有很多角色從程序員中分化出來(lái)了),從開(kāi)發(fā)、測(cè)試,到架構(gòu)設(shè)計(jì)、體驗(yàn)優(yōu)化、前端開(kāi)發(fā)、后端開(kāi)發(fā)、驅(qū)動(dòng)開(kāi)發(fā)、數(shù)據(jù)庫(kù)開(kāi)發(fā)、IT等等數(shù)不勝數(shù)。縱觀不太長(zhǎng)的程序員職業(yè)歷史,這些角色也在不停的產(chǎn)生和消失中。這代表著一代一代的程序員要么不停的學(xué)習(xí),要么從這個(gè)行業(yè)中離開(kāi)(也沒(méi)什么不好的,好多富翁都是程序員變的)。從歷史來(lái)看,程序員們解決的問(wèn)題,使用的組件和思維模式都在不停地變化。但也有一些不變的東西,比如程序基本流程、設(shè)計(jì)模式、軟件工程。所以很多程序員在不停的學(xué)習(xí)新東西,從而能夠解決新問(wèn)題。
那么,現(xiàn)在正在、未來(lái)會(huì)發(fā)生什么變化呢?這里只想討論一個(gè):人機(jī)交互的革命,包括人機(jī)交互方式,和人機(jī)交互層次兩方面的革命。(說(shuō)人話(huà)!)好吧,就是Kinect, HoloLens、Cortana帶來(lái)的新情況。這類(lèi)新產(chǎn)品集中在一起,會(huì)對(duì)現(xiàn)有的人機(jī)交互產(chǎn)生顛覆性的革命。一句話(huà)概括:未來(lái)人們應(yīng)該花更少的時(shí)間來(lái)學(xué)習(xí)如何使用科技,程序員們要花更多時(shí)間讓科技來(lái)適應(yīng)人,而不是人去適應(yīng)科技。比如,單輪摩托車(chē)不需要學(xué)習(xí)怎么在一個(gè)輪子上保持平衡,四軸飛行器不需要學(xué)習(xí)怎么轉(zhuǎn)彎、穩(wěn)定,這都是很好的例子。
一:人機(jī)交互方式。人是生活在三維空間里的,程序員們也在不停地在各種輸入輸出方式模擬三維空間。首先,顯示屏是一個(gè)二維的輸出,由此鼠標(biāo)和各種觸摸方式也設(shè)計(jì)成了二維的。這里的二維性除了它們是平面輸入輸出外,它還真的只是個(gè)物理的平面……顯示器放在哪里就在哪里,觸摸要在顯示器上完成,鼠標(biāo)也需要在一個(gè)平面上完成移動(dòng)。鍵盤(pán)呢?可以說(shuō)其維度都沒(méi)到一維。
什么是未來(lái)的輸入設(shè)備呢?它包括全息輸入輸出設(shè)備和解放雙手的輸入方式。
- 全息輸入設(shè)備。Kinect這樣的體感、手勢(shì)輸入設(shè)備屬于全息輸入設(shè)備。Kinect很酷,但不得不說(shuō)這只是全息輸入設(shè)備的雛形。這不僅是因?yàn)槠洳粶夭换鸬臓顟B(tài),也是其本身還有很大的提升空間。一方面,設(shè)備本身精度不夠、使用的范圍不是360度無(wú)死角;另一方面后面沒(méi)有強(qiáng)大的人工智能來(lái)支持(人工智能放到交互層次部分講,這里只講全息輸入設(shè)備)。未來(lái)的輸入設(shè)備應(yīng)該是覆蓋整個(gè)空間,精確檢測(cè)到人的微動(dòng)作和微表情,甚至能夠檢測(cè)到人的健康狀態(tài)(安全和隱私是需要考慮的方面)。從單個(gè)技術(shù)上來(lái)說(shuō),應(yīng)該沒(méi)有突破不了的難題了,但集成起來(lái)制造出***的設(shè)備仍然需要巨大的投入。
- 全息輸出設(shè)備。全息顯示技術(shù)在很多科幻電影里都演示過(guò)了。HoloLens這樣的增強(qiáng)現(xiàn)實(shí)設(shè)備和各種虛擬現(xiàn)實(shí)設(shè)備都屬于全息顯示設(shè)備。這些設(shè)備還處在非常初級(jí)的階段,但已經(jīng)帶來(lái)了很大的震撼。在物理技術(shù)沒(méi)有突破之前,這種可穿戴的設(shè)備是全息技術(shù)的主要載體。除此之外,還會(huì)出現(xiàn)各種味覺(jué)、觸覺(jué)的設(shè)備,這些全部加起來(lái),覆蓋了人的所有感覺(jué)器官,就可以稱(chēng)作全息輸出設(shè)備了。
- Cortana一類(lèi)的語(yǔ)音助手。其最革命性的一點(diǎn)是進(jìn)一步解放了雙手(聽(tīng)起來(lái)怎么這么耳熟?)。這和人類(lèi)直立行走的解放雙手當(dāng)然不能相提并論,但其革命性也是可圈可點(diǎn)的。還是那句話(huà),這類(lèi)語(yǔ)音助手還在雛形階段,它們的主要挑戰(zhàn)除了語(yǔ)音識(shí)別外,主要是在后文要講的交互層次上。Cortana不像鼠標(biāo)鍵盤(pán),一方面需要學(xué)習(xí)如何使用,一方面還需要到固定的位置或者某個(gè)固定的姿勢(shì)才能使用。現(xiàn)在Cortana雖然要將手機(jī)拿起來(lái)才能使用,但通過(guò)物聯(lián)網(wǎng)的進(jìn)一步發(fā)展,是可以進(jìn)一步發(fā)展的。
對(duì)程序員的挑戰(zhàn)就來(lái)了:
- 制造、集成出這些設(shè)備,甚至發(fā)明出新的設(shè)備。這些設(shè)備需要提供***的體驗(yàn),和人的運(yùn)動(dòng)、感官無(wú)縫結(jié)合,且讓人感到自然。
- 在較高層次,如何采集模糊、大量的輸入,并轉(zhuǎn)變成計(jì)算機(jī)能夠處理的確定命令。和傳統(tǒng)的輸入方式相比,除了空間變成了三維,信息量也有數(shù)量級(jí)的增加。
- 怎樣提高輸入的效率、降低學(xué)習(xí)成本?程序員需要考慮的是如何顛覆性的提高輸入效率。這里不僅是鼠標(biāo)和屏幕的坐標(biāo)從二維變成了三維的。想想鋼鐵俠是怎么輸入的?
- 如何讓設(shè)備輸出最自然的體驗(yàn)?特別是全息顯示設(shè)備,要解決頭暈等問(wèn)題需要大量的調(diào)試和研究的。
- 最重要的是:如何用這些設(shè)備構(gòu)建全新的體驗(yàn)?zāi)J健1热纾煌N類(lèi)的應(yīng)用應(yīng)該放在什么位置,什么呈現(xiàn)方式?什么樣的動(dòng)作操作才是最有效率、最自然的?這些需要一代一代的產(chǎn)品不斷的迭代,才能加深對(duì)新體驗(yàn)的認(rèn)識(shí),發(fā)揮新一代全息設(shè)備的能力。
二:人機(jī)交互層次。當(dāng)前的人機(jī)交互方式上,雖然很多產(chǎn)品號(hào)稱(chēng)體驗(yàn)非常好,仍然需要人去適應(yīng)設(shè)備。不僅是輸入輸出的方式,還是思維的方式,當(dāng)前的人機(jī)交互的體驗(yàn)都有很大的提高空間。
例如,想出去旅游時(shí),要先研究到底去哪里,要么上網(wǎng),要么聽(tīng)人說(shuō),或者去旅行社直接預(yù)定。去旅行社當(dāng)然最省事,但聽(tīng)不到***手的體驗(yàn),成本也會(huì)比較高。如果要自己研究,選地方,確定日期,買(mǎi)機(jī)票、酒店,找攻略,過(guò)程中要用到很多次搜索引擎,各種預(yù)訂網(wǎng)站,發(fā)郵件等。從開(kāi)始想到基本確定至少需要好幾天,中間也得好幾個(gè)小時(shí)使用各種工具。而富豪們呢?也許只花5分鐘就完成了整個(gè)過(guò)程:告訴助手:想出去玩。助手可能就問(wèn)問(wèn)想去什么樣的地方(也許不是某個(gè)特定的地方)?玩幾天?大概什么時(shí)候去?然后基本確定后再匯報(bào)一下安排就可以了。這兩個(gè)過(guò)程之間的核心區(qū)別就在于交互的層次。普通人是依靠計(jì)算機(jī)進(jìn)行任務(wù)層次的交互,而富豪是意圖層次的交互。這就是交互層次的不同對(duì)效率的影響。
Cortana這樣的語(yǔ)音助手除了解放了雙手,它也是一個(gè)非常自然的輸入方式。這讓程序員和科學(xué)家們開(kāi)始更多的研究人們語(yǔ)言后面的意圖,從而提高計(jì)算機(jī)和人的交互層次。
Project Oxford和Azure Machine Learning這樣的開(kāi)放的人工智能組件真正把多年實(shí)驗(yàn)室里的玩具帶給了全世界。這就像當(dāng)年Siri的發(fā)布一樣,雖然它不是***的,但沒(méi)有它,就不會(huì)有g(shù)oogle now和Cortana的迅速推出。好吧,又來(lái)一次:雖然Project Oxford只是個(gè)雛形,但是Project Oxford的推出給業(yè)界定義了人工智能組件更高層的接口標(biāo)準(zhǔn),降低了人工智能的學(xué)習(xí)、應(yīng)用門(mén)檻。特別是其中的語(yǔ)言模型。除了人工智能組件的開(kāi)放,可以預(yù)見(jiàn)由各大公司基于大數(shù)據(jù)的各種數(shù)據(jù)模型也會(huì)很快共享。基于它們,人工智能的應(yīng)用很快就會(huì)遍地開(kāi)花,所有程序員都能創(chuàng)造出更智能的應(yīng)用,從而每個(gè)人都可以有自己的個(gè)人助手。如果不能腦補(bǔ)個(gè)人助手的價(jià)值,請(qǐng)觀看電影《她》(《Her》),看看人工智能是怎樣幫忙處理電話(huà)和郵件的。
另一方面,在這一輪人工智能的熱潮下,硬件公司們也開(kāi)始制造采用人工智能算法的處理器,這也代表著新一代的編程語(yǔ)言和理念的開(kāi)始流行了。
交互層次方面對(duì)程序員就有更大的挑戰(zhàn)了:
- ***的挑戰(zhàn)就是學(xué)習(xí)和適應(yīng)新的編程理念。以前的程序都是if..else + while這樣的確定性的結(jié)構(gòu)化程序,程序員要開(kāi)始學(xué)習(xí)如何寫(xiě)元程序。寫(xiě)出的程序是可以自己適應(yīng)個(gè)體用戶(hù)需求的,而不是寫(xiě)一段能夠適應(yīng)所有用戶(hù)的程序。程序員的代碼將是方向性的,統(tǒng)籌性的,而不再是細(xì)節(jié)的堆疊。
- 大開(kāi)腦洞,如何結(jié)合全息交互和物聯(lián)網(wǎng)等技術(shù)提高人機(jī)交互層次。幫助人們做事情10步并5步,5步并1步。比如,什么情況下抬手表示要喝水,抬頭表示想開(kāi)燈,甚至無(wú)需特定動(dòng)作;真正幫助人們管理時(shí)間,協(xié)調(diào)日程,而不僅僅是一個(gè)日程表。
總而言之,這里描述的未來(lái)可能需要10年、20年或更長(zhǎng)。也許我們這代程序員已經(jīng)退出江湖了。熱點(diǎn)將不再是發(fā)明各種語(yǔ)言、發(fā)現(xiàn)各種工程管理方式和軟件設(shè)計(jì)模式了,而是科技如何進(jìn)一步的以人為本,促進(jìn)生產(chǎn)力發(fā)展。對(duì)程序員的挑戰(zhàn)除了要學(xué)習(xí)和探索新的輸入輸出方式,還要學(xué)會(huì)人工智能這樣的完全不同的編程理念。
【編輯推薦】






