在業餘時間通過練手專案保持學習,這對於很多新手來說可能不太容易。我(英文原文作者)的工作要求我從剛開始自學VR開發的時候起就必須認真對待這件事 – 作為微軟的一名技術佈道者(technical evangelist),我需要在形形色色的小專案上花費大量的時間去思考、實踐和總結,進而向更多的人傳播VR和AR的開發基礎知識。在本文中,我將和各位分享一些相關的經驗心得,希望能幫助大家更有效的通過業餘練手專案來提升自己。
建議各位首先通過這六個問題評估一下怎樣的學習方式及實踐專案更加適合自己,然後我們一起來看看如何將練手專案的價值發揮到最大。
以小為始
通過小專案起步,一次學習一點新東西,讓自己逐漸適應新的領域,並隨著知識的積累而向這些起步專案當中不斷增加新的功能點。
我自己曾經在專案規模這個問題上走過彎路,譬如在剛剛開始學習web開發的時候就一心想要做一些Facebook那種級別的東西,真正開始實踐時才發現,若不將這樣的目標一再壓縮或拆解,自己根本沒可能上手。
多年之後,我的首個VR練手專案則簡單實際了很多 – 無非是使用Unity製作了一個小app,整個場景裡面只有一個球體,當你點選時,球體的顏色會發生變化(譯註:和我們之前的“Unity與Cardboard app基礎實踐”類似吧,甚至更加簡單一些)。接下來,我做了一個很基礎的迷宮遊戲,然後是一個非常簡單的WebVR站點。有些時候,我甚至只是製作一些有意思的環境場景而已,其中不包含任何互動元素,目的就是讓自己能夠更加熟練的使用Unity編輯器的各種功能。
明確目標
要有的放矢的進行實踐,在每個專案開始之前想清楚自己打算從中學到哪些東西,讓學習過程更加可控、可管理。當然,“學習”這件事本身就是對於未知領域的探索歷程,期間目標很有可能發生變化和調整,這完全沒問題。
如今,我在每個專案開始之前都能將目標儘可能的梳理清晰,不過回頭看看,在自學VR開發的初期階段,我的很多練手專案還是缺乏一些最基本的方向性。說起來,這倒不完全是壞事,特別是在剛剛起步的時候,每次花些時間做些什麼總會讓你學到一些新東西,點終究會連線成線。隨著對各種裝置、開發工具和技能的深入瞭解,我才逐漸掌握了一些制定目標的策略。
我習慣於將練手專案按照目標進行分類,然後選擇不同的實現方式 – 如果我需要了解一款新的裝置平臺及相應的SKD,那麼我會選擇在Unity當中進行學習和實踐,因為這是我最熟悉的編輯器,無需花費額外的時間和精力進行學習。而如果我要了解一款新的編輯器,那麼我會以Cardboard或Oculus Rift DK 2為目標平臺進行實踐,因為這些是我最為熟悉的裝置。
很多時候,我的專案目標就是練習使用某種技術來完成一個特定的目標,譬如:
- 使用Unity製作可互動的Cardboard app
- 在Unreal引擎中實現Leap Motion手勢互動
- 在Unity中創造一個空間環境,學習粒子系統、材質及光影的基礎知識
- 使WebVR站點在DK 2中執行起來
- 通過A-Frame呈現360°照片
成長進化
讓初期的小專案隨著自己的知識積累與技能提升保持成長和進化。
我手頭的很多專案,在發展到一定程度之後,相比於最初計劃當中的樣子已經有了很大的不同。我曾在一次黑客鬆(hackathon)活動中製作了一款簡單的Tron主題射擊遊戲,然而隨著我持續的嘗試新想法並進行調整,它逐漸變成了某種高科技機器人風格的外太空遊戲,玩法也有了很大的不同。
有些時候,專案的實際規模會比你所預估的小很多,這就意味著你可以花更多時間去學習和嘗試一些計劃外的東西。例如我在第一次嘗試A-Frame的時候,原本的計劃只是在網頁中實現360°照片的嵌入,然而實際做起來卻發現這個目標太過簡單,於是繼續深入學習,這一點那一點的增加著內容和功能,最終完成了很多計劃外的實踐練習。
保持記錄
我個人始終相信每一名開發者都應該開設自己的部落格,一方面可以分享知識,另一方面更是可以幫助自己記錄所學、所想、所做。我在自己的KittenVR專案當中,始終會確保將學習和實踐過程中的每一個關鍵環節都記錄下來。最終,這些記錄成為了重要的參考文件,每當在其他專案中遇到相似的問題,我都可以很快的找到解決方案。
進行文字記錄的過程本身也是一種複習,你可以通過這種方式將自己制定的目標、查閱的資料、編寫的程式碼、實現的產出和發現的問題等等梳理整合到一處,形成一個完整的學習案例。
同步程式碼
我很喜歡用GitHub來追蹤專案程式,我的多數檔案也都放在了上面。你可以在GitHub上清晰的瞭解自己的開發動態,當然最基本的檔案儲存和備份功能更是值得信賴。