閔亮
(西安交通大學 城市學院, 西安 710018)
過去數(shù)十年中,盡管在軟件開發(fā)的心理學、神經(jīng)系統(tǒng)科學以及社會學方面,編程環(huán)境取得了不少進展,但始終未能解決程序員的問題。在代碼中導(dǎo)航的時候,開發(fā)者們?nèi)匀粫忻允Х较虻捏w會[1],而且開發(fā)者在理解代碼的時候仍然會出現(xiàn)問題[2]。這些基本問題也阻礙了其他比較重要的軟件工程活動。舉個例子,在代碼審查時,因為審查時沒有足夠的能力去導(dǎo)航并理解代碼,開發(fā)者大多會匯總問題上報,比如違反約定等,而不是去討論設(shè)計缺陷或者瑕疵。
對于開發(fā)者所體驗的幾個問題之下所隱藏的認知問題,研究員們進行了探究. 其中一個問題就是空間記憶—這是一種海馬旁回中的記憶系統(tǒng),能支持保留空間認知的能力。有些人觀察到,在其所依賴的線索- 諸如滾動條以及文檔標簽[3],被當作其導(dǎo)航的一個結(jié)果而被擾亂,開發(fā)者會遺失相關(guān)代碼的軌跡。通常所參與的人本能的空間記憶處理工作失敗,會導(dǎo)致類似的方向迷失。
啟示是促使本能認知機制改變的設(shè)施。研究者們曾經(jīng)試圖采納人類的關(guān)注、認知和記憶才能來改進界面。例如,一次學習減少了網(wǎng)絡(luò)書簽的存儲和檢索時間,也通過定位在一個3D空間的各種堆積的頁面的屏幕截圖,來減少檢索失敗次數(shù)[4]。
類似的是,研究者們曾經(jīng)為編程環(huán)境中的空間記憶融入了啟示。編碼畫布將代碼文件定位在一個較大的可滾動、可縮放的平面上,在這里能夠保存較穩(wěn)定的代碼空間位置。代碼氣泡允許一個開發(fā)者在一個可無限滾動的屏幕上定位相關(guān)的代碼片段,這也改善了片段的導(dǎo)航及內(nèi)涵。
空間記憶就是這么一種促使編程環(huán)境進行改善的啟示,其它有很多的啟示都可以被改變。虛擬現(xiàn)實(VR)比現(xiàn)有的開發(fā)者環(huán)境能更充分地利用這些啟示,來使新創(chuàng)意機會成為可能,并且潛在地提高生產(chǎn)率,降低學習曲線并增加用戶滿意度。
本文描述了虛擬現(xiàn)實如何在空間認知、操作和運動以及編程環(huán)境中尚未得以充分利用的反饋中,提供啟示。而后我們描述了我們所造出來的兩種虛擬現(xiàn)實系統(tǒng)的原型,以及虛擬現(xiàn)實如何能應(yīng)用于軟件工程中。最后,我們對未來的工作、開放性的問題研究、以及在軟件工程中用現(xiàn)有技術(shù)使用VR的挑戰(zhàn),提供了一些簡要的討論。
虛擬現(xiàn)實在空間認知、操控及運動還有反饋中提供啟示。
1) 空間認知:空間記憶是靠位置細胞、專門的神經(jīng)元來支撐的—像人一樣,通過對一個物理空間以及環(huán)境中其他的上下文線索的導(dǎo)航,進行開火。頭盔式虛擬現(xiàn)實顯示器允許用戶通過移動身體或者扭動脖子來更新視野,在此過程中向位置細胞開火。此外,這些顯示器對每個眼睛都經(jīng)行了輕度的不同形象的渲染(立體渲染),它能夠使人的眼睛更容易去感知顯示器上的形象縱深。這些顯示器能夠創(chuàng)造出一種存在感,或者“它在那里”的感覺。我們期望用戶的空間記憶能夠比平面顯示更多地參與到虛擬現(xiàn)實中,特別是在觀看可視化3D的時候。
虛擬現(xiàn)實能夠直接模擬由物理導(dǎo)航所提供的啟示?;谟涗浽诖竽X皮層表面的腦皮層電圖學(eCoG),位置細胞能被觀察到,在一個虛擬鎮(zhèn)子中導(dǎo)航并且隨后他們再次回憶穿過鎮(zhèn)子的路徑時,在同一序列中像人一樣開火。
2) 操控及運動:由一個物理對象的操控所產(chǎn)生的啟示,能夠?qū)е轮X和記憶力的改善。 例如,由一本書翻頁產(chǎn)生的啟示,在面對電腦顯示器閱讀相同的文本段落時,會導(dǎo)致理解和回憶的增加。此外,對無意瀏覽以及重新定位資料的能力也有所提高。通過諸如步行這樣的努力,一個物理空間中的運動會有重要的認知因果關(guān)系。 其他的啟示能由運動加以輔助。例如,通過空間中的自行移動可以加強感知深度。
研究者們曾經(jīng)對將現(xiàn)有的編程環(huán)境與自然交互集成起來進行過探究。通過輸入設(shè)備—如跳躍運動—是有可能跟虛擬目標進行物理互動的。物理運動在虛擬空間中也是可行的。 身體護具允許在一個虛擬空間中的自由運動,諸如步行、跑步、跳躍以及屈膝蹲伏。
3) 反饋:當評估系統(tǒng)的狀態(tài)比較困難時,Norman所描述的灣區(qū)估值就出現(xiàn)了。虛擬現(xiàn)實會允許軟件工程師呆在一個環(huán)境中- 這個環(huán)境通過剔除在程序員行動及看見其行動結(jié)果之間的時延,來試圖清除這一灣區(qū)。這種快速反饋之前已經(jīng)在二維的顯示中實施過,但虛擬現(xiàn)實將這一能力擴展到了三維的顯示環(huán)境中。
我們?yōu)楝F(xiàn)場編碼以及代碼審查建立起了虛擬現(xiàn)實原型- 它們具體地顯示出了使用虛擬現(xiàn)實的啟示的益處。我們證明了這一節(jié)中所述的益處,同樣也能擴展到其他軟件工程活動之中。
所有的系統(tǒng)都采用了頭盔式的顯示裝置(Oculus Rift - Development Kit 2)以及一個用于姿態(tài)認知的跳躍運動控制器[5]。
RiftSketch是一種為虛擬現(xiàn)實所建立起來的現(xiàn)場編碼環(huán)境,它能允許用戶用Three.js library函數(shù)庫來描述一個3D場景[6]。
RiftSketch給了用戶一個簡單的文本編輯器(參見圖2),在另外的一個虛擬現(xiàn)實世界中,漂浮在他們眼前。當用戶鍵入編碼到編輯器中,環(huán)繞在他們周圍的世界會立即更新,顯示出由其代碼所標明的3D場景。 RiftSketch也能令用戶通過每一幀中執(zhí)行過的回調(diào)函數(shù)來模擬其場景。用戶能夠在這一代碼環(huán)路塊中操控3D場景的狀態(tài),以便在其場景中為對象增加行為動作。這種模擬通過一種方式,令用戶得以真實地感覺如同在場景中,而不是通過一個2D屏幕截圖所捕獲的場景。
為了有助于鍵盤的互動,我們允許通過使用固定在虛擬眼鏡上的一個網(wǎng)絡(luò)相機以及系統(tǒng)中所反映出來的對象,使現(xiàn)實部分得以發(fā)光,如圖1所示。
圖1 RiftSketch屏幕截圖
那棵樹是用戶已經(jīng)鍵入到漂浮的編輯器中的遞歸算法所生成的。飛翔的虛擬小鳥代表著從Twitter的應(yīng)用程序接口拖拽過來的twitter信息,它們也是由客戶所鍵入的代碼所生成的1) 反饋:RiftSketch在所寫代碼及其在虛擬環(huán)境中的效果之間,提供了一個緊密的反饋回路,使得用各種解決方案、算法以及計算的實驗得以快速進行。RiftSketch也是一種頗有前景的學習工具,因為用戶可以立即看到其編程錯誤,并無需一個中間的編譯步驟就可自行修改- 而這一編譯步驟可能看上去像是另一種阻礙。當代碼描述了一個VR場景時,這些益處在RiftSketch中都特別明顯。因作者之前已經(jīng)有過體驗,看著完全虛擬的世界在自己輸入編碼時在周圍變化,真的是一種絕對強有力的迷人體驗。
2) 手勢操控代碼:另外,RiftSketch為用戶提供了快捷方式以及輸入方法,在其寫代碼時迅速編輯代碼中的數(shù)字。 鍵盤快捷方式允許用戶以01,10或者100的因子來增減代碼中的數(shù)字。集成了跳躍運動控制器,能夠為用戶提供一種能力,通過采用上下的手部動作來操控數(shù)字。這使得用戶能持續(xù)用自己的手來修正一個數(shù)字,并且立即看到它是如何影響到場景的,使得它比一次鍵入一個數(shù)字的手動方式能更快地進行反饋。
3) 用法舉例: 考慮到如下的情景:空間任務(wù)A剛剛對彗星表面進行了探測。10年的飛行之后,探測器盡管落地不易,還是降落在了一處不能接收太陽光的位置上。自動遙感探測程序是不能找到一條可行的飛行路徑的。作為一個程序員,您被賦予了任務(wù)來升級著陸器的軟件,來將其自身定位在一個堅實的地表上,而在其電池耗盡以及探測器偏離彗星表面之前,你還剩下24小時。還好有伴隨衛(wèi)星搜集到了著陸點周圍的表面詳細信息,還有遙感探測數(shù)據(jù),準確地顯示出著陸器將被怎樣定位以及定位在哪里。
您用數(shù)據(jù)更新了模擬程序,并且用RiftSketch來調(diào)查這一情況。在評估的著陸器的選項后,您重復(fù)了可能的解決方案,首先用手勢來操控一個可能的路徑以及推力設(shè)置,并且用鍵盤來定義代碼。隨著每一個解決方案,你都在RiftSketch中觀察著陸器的動作。你繞著著陸器走,來檢查每一次機動演習后它的位置,并進一步確認其降落足是緊緊建立在風化層上的,并且縮小比例,從軌道角度來核實其新的位置能否在這個一側(cè)高凸的彗星上,對軌道飛行器維持一個視野。
最后,在RiftSketch進行數(shù)十遍的模擬后,您將程序上報審核。
IMMERSION展現(xiàn)出了如同代碼片段類似于代碼氣泡的方法,并且,像BumpTop一樣堆積在地板上,顯示出片段的群體來。這些堆積能夠擴展成為一個更具細節(jié)的環(huán)形來回顧以及做細節(jié)的可視化處理[7]。
1) 空間推理:審查者開始是在屏幕中央來觀看激活的片段的(參見圖3),而其他有關(guān)的片段都成堆地分布在地板上。審查者采用空間辨識,通過堆積有多遠以及堆積的尺寸等,來判斷堆積物的相關(guān)性。審查者能夠掃描堆積物的標簽,以及每一處堆積中的片段數(shù)量,來快速辨別每一處堆積是否是真正相關(guān)的。
IMMERSION根據(jù)系統(tǒng)的包裝以及顏色代碼,將地板分區(qū)—分區(qū)是用來顯示有多少包裝在審查的時候已經(jīng)被代碼改過了。在包裝中穿梭時,我們期望審查者因空間推理的更多使用而能擁有更好的構(gòu)思模型,而后能理在審查過程中更好地理解代碼。類似的情況是,我們期望空間推理的增加,能使審查者在審查之后,更容易地調(diào)出審查細節(jié)來。這會使審查者將來在審查同等的編碼庫的時候,能提供更多有用的反饋。
2) 手勢交互:審查者可以做一個抓取動作來選擇一個堆積包,而后可以將手上拉,把堆積變幻成一個環(huán)形片段,來進行更詳細的檢查。審查者如今可以讀取環(huán)形中最為重要的片段,而且可以水平抹動指尖來讓環(huán)形旋轉(zhuǎn),讀取更多其他片段。審查者可以將最為重要的頭尾部的環(huán)形片段提出來放在屏幕中央,使之成為激活的片段。如果審查者希望回到之前的方式,他們可以像清理桌面一樣動動手就完成了。
開始我們注重的,是可以通過鍵盤輸入,來增加對探索—評論的支持,但我們發(fā)現(xiàn)了另外的方式來標志并用旗子標示代碼。
3) 用法舉例:考慮之前的彗星情景,程序員為著陸器執(zhí)行了已重新定位的飛行路徑。
某個審查者帶上虛擬現(xiàn)實眼鏡并且進入IMMERSION,確保這一解決方法能夠有效運行。它注意到一個邊界案例,它可能會引發(fā)一次碰撞,并建議輕輕地將軌道伴隨衛(wèi)星碰向探測器中,來避免更大的沖撞。原來的程序員在RIFTSKETCH中執(zhí)行了此建議,確保這一刺激動作生效,并在向?qū)彶檎哌f交修正結(jié)果時慶祝一番。然而審查者發(fā)現(xiàn)一部分的代碼在IMMERSION中點亮了。當她走向這一部分時,她發(fā)現(xiàn)這是碰撞檢測部分對系統(tǒng)發(fā)出的警告-系統(tǒng)是不允許這一代嗎在模擬器之外執(zhí)行的。她意識到,通過在撞擊摧毀系統(tǒng)之前關(guān)閉引擎,她可以允許這一代碼的執(zhí)行。他們上傳代碼并且著陸器按照期望的那樣自行重新定位,如圖2所示。
圖2 IMMERSION的屏幕截圖
審查者在審核代碼,來重新定位著陸器在彗星的降落位置。審查者看到激活的方法,以及地板上成堆的相關(guān)片段,并且已經(jīng)將一堆片段擴展成為左側(cè)的片段環(huán)形,來讀取這些片段的細節(jié)。在上左側(cè),顯示了一個彗星模型以及著陸器所期望的飛行路徑。審查者能在地板上的代碼包之間逡巡,這些個代碼包根據(jù)此次審查所修改的數(shù)量,都標注顏色代碼。GitHub的細節(jié)在上右方有顯示。
虛擬現(xiàn)實(VR)為軟件工程師打開了一扇門,可以創(chuàng)造出提升效率并使之前不可能體驗成為可能的各種系統(tǒng)?,F(xiàn)有的應(yīng)用,包括美國航空航天局NASA- 他們正在用VR控制一個機械臂,結(jié)果是效率的顯著。 教育體驗項目Titans of Space[8]允許學生們用一種方式體驗我們的太陽系,這種方式使他們感覺到自己真正就挨在太陽身邊。
未來的研究,需要在如何為創(chuàng)造這些VR系統(tǒng)的軟件工程師們,創(chuàng)造出更多的工具來上進行。有什么問題是VR軟件工程師們需要面對,可缺乏工具加以解決的?
多個分布在世界各地的程序員,能夠在一個VR現(xiàn)場變成空間中加入彼此,來解決如何從引發(fā)案例中解決彗星著陸問題。他們應(yīng)該能提供額外的洞見,并且能更快地找到解決辦法。
而后另外會有一組程序員,在一個VR程序?qū)彶榄h(huán)境中加入彼此,他們能夠看到每個人在系統(tǒng)中他們自己那部分里,對那些堆積的信息所做的注釋的基礎(chǔ)上,都在思考什么。
(對虛擬現(xiàn)實的)投入程度。拓展現(xiàn)實的裝置,如谷歌眼鏡,其目標是幫助用戶在實體物理世界中,通過增加信息覆蓋來完成任務(wù)。拓展現(xiàn)實類產(chǎn)品在尋求在物理現(xiàn)實世界中幫助用戶,而與此同時虛擬現(xiàn)實則謀求對物理現(xiàn)實世界的完全提單。是將用戶沉浸在一個完全虛擬環(huán)境中有用呢,還是強化其物理現(xiàn)實世界更有用?
輸入形式。游戲機臺控制器對于導(dǎo)航以及有限動作支持都能運轉(zhuǎn)良好,但在鍵盤的文本輸入上沒法相提并論。但是,這些個設(shè)備都要求用戶同時在物理現(xiàn)實和虛擬世界中進行交互。手勢識別用物理現(xiàn)實世界來取消交互作用,但會導(dǎo)致身體勞損。聲音識別能夠減少這種勞損但可能在互相分享的工作空間中引來尷尬。什么才是用戶向虛擬現(xiàn)實VR系統(tǒng)提供輸入的最好方式? 這是值得我們深思研究的問題。
1)從物理現(xiàn)實中脫離:戴上VR耳機意味著與物理現(xiàn)實世界的其余部分隔離,包括協(xié)作者。同伴們可能缺乏機會提問,并且現(xiàn)實的交流被抑制了。此外,VR耳機佩戴者們可能在處于VR環(huán)境中時,與物理現(xiàn)實世界的交流出現(xiàn)問題。耳機上固定的網(wǎng)絡(luò)攝像頭,可以與物理現(xiàn)實世界保持一些互動,但是視野卻受到了限制,如圖3所示。
2) 3D 映射:有些問題沒有內(nèi)在的3D表述,這種表述使VR的顯示成為一種挑戰(zhàn)。如同在IMMERSION所見,2D代碼能在虛擬現(xiàn)實VR中顯示出來,可代碼本身并沒有第三個維度,因而丟失了3D的表達性。這或應(yīng)成為有些人所建議的,能很好地適合于3D隱喻編程的一個區(qū)域。
3) 技術(shù)限制:Oculus Rift Development Kit 2的1080p的分辨率,使文本閱讀的通過率還算良好,但它需要為多時段會議進行提升。每個用戶也都需要略有不同的配置, 這些個配置可以要求適度的建立時間。
二維的開發(fā)環(huán)境仍然沒法充分利用好這些啟示,諸如空間識別、操控以及反饋等等。本文描述了一種愿景,即軟件工程師如何能通過使用新類型的工具而利用好VR — 這些個工具能夠很好地利用這些啟示。
描述了現(xiàn)場編碼以及代碼審查都是如何從VR工具中受益的,但可以預(yù)想到其他的軟件工程活動也可以一樣從VR中受益。