2012年8月23日 星期四

[翻譯]五個提高程式設計師生產力的提示

久違的翻譯啊....


1.擁抱即時原則
如果有什麼事在五分鐘內可以完成,就立刻完成它。

這聽來像個偷懶的選擇,但推遲事情實際上需要許多額外的工作。它得寫下這個任務,然後追蹤並且跟其他的事項排定優先權。你可能會在實際上做完之前想起它很多次,而且你還必須搞清楚當你寫下它的時候是什麼意思,並且想辦法回到當下的思考狀態。

對於小任務來說這並不值得。

取而代之的,直接完成它。在你已經想到這個問題時就當下修掉,這比較快、簡單而且省掉你跟一堆越來越長的代辦事項清單搏鬥的苦惱。


2.解決病因而不是症狀
不要只是解決問題。解決讓問題發生的流程,這樣同樣的問題就不會再度發生。別只把bug當作討厭鬼,要把它當作是加強流程與增進程式碼品質的機會。

當美術告訴你碰到了一個"編譯單元錯誤"的訊息時,不要只是丟一個對話框告訴他"這是因為你有兩個node是同一個名字,這樣不合法"。最起碼要把錯誤訊息改成"編譯單元錯誤:bed。兩個node有同樣的名稱:pillow。其中一個需改名以確保名稱唯一"。要做得更好的話,在exporter或tool裡作修改,讓美術無法建立有兩個同樣名稱的node。

如果你發現當下這個錯誤可能在assert中攔截的話,就加入這個assert,這樣下次錯誤再度發生時就可以找到了。

如果有人問"我要如何設定動畫壓縮?",不要只是跟他說而已,要同時寫下簡短的文字說明其原哩,並且加到文件中。

這樣子,你不會只是補破網,而是積極的改善事情。這不只是取悅那些發生問題後來找你的人,同時也是讓你的工作感覺更有意義。


3.當電腦運轉的時候,試著不要中斷注意力
程式工作充滿了許多奇怪的短暫停頓:程式碼在編譯、console重開機、關卡讀取中、client端連結中等等。

理想狀態中這些停頓都將不存在,盡你所能的去消滅掉他們,讓code build快一點、即時重新讀取資料與script、做個工具可以快速設定一大堆PS3來做網路測試等等。

但是即使做了再好的努力,依然有些時間空檔會留下來,問題在於我們如何利用它。誘惑在於我們會去短暫地從編寫程式中休息,轉而去檢查一下mail、回應一下Skype、讀兩段有興趣的文章、更新twitter狀態等。

對我來說,這些不斷的心理狀態切換是生產力的阻力,它們使得保持在心流狀態(flow)變成是不可能的事。

這些簡短的瀏覽並不會真正讓你放鬆,當你一邊瞄個兩眼看另一個螢幕的進度條一邊讀個兩篇網頁並不會真的讓你的心神平靜下來。正好相反,這會比你一直保持在”禪”狀態中更加有壓力。找個時間真正休息下來會比上百個短暫的休息來的更好。

為了同時保持生產力與心理上的平靜,我做了個有意識的努力使得"電腦工作時"我依然能專注在目前的問題上。我有個另外的不受IDE實行時中斷的文字編輯器,讓我可以作些相關的工作,像是:

  • 加上文件說明

  • 重構與程式碼review

  • 計畫下一個要實做的步驟

  • 寫測試系統用的script
這依然是個對抗上網誘惑的無止境戰鬥,但我發現當我管好自己保持專心時,我會同時更有效率也更加放鬆。


4.比你認為需要的更加多使用版本控制系統
版本控制不是只用在程式碼。現代的分散式版本控制系統像是Mercurial與Git,要建立一個原始資料庫然後push到server以便備份或共享實在是簡單的要死。

你有文字編輯器/IDE的組態檔和設定檔吧?把它們放到版本控制中,這樣就可以很容易的在不同機器中使用同一個設定。這些檔案需要被安裝到特定的位置的話,把處理安裝程序的script連同它們都放到版本控制中吧。

你是否有使用第三方的程式庫像是zlib、LuaJIT或stb_vorbis?把他們放到版本控制中。這樣一來如果你有對他們作任何的更動(修bug、修掉warning、平台修改或是自己作效能提昇)就可以很明確的知道你改了些什麼。如果有新版本的程式庫釋出,你可以用版本控制系統來比對哪些部份有修改,並且將它合併到你的版本中。

API有提供範例程式嗎?在你開始把玩它之前先放到版本控制中。這樣一來你可以隨時把範例檔恢復到原始的狀態中而不必再次安裝API。而一旦你發現了API的bug時想要重現在一個簡單的範例檔時,可以使用版本控制工具來產生一個給該sample的patch檔附在給API製造商的bug report上。這會讓雙方都會很開心的。





5.監控你的編譯


設定好一個build server好持續的build出在所有平台的所有組態(debug, development, release) 的所有執行檔(引擎、工具、exporter等),這樣你就可以儘快知道哪邊有問題了。當場就修好問題比起兩個月後才作好多了。

Build server不必要弄得很複雜,重要的是要有而不是弄得很花俏。如果你沒有時間作進階的處理,寫個script去compile所有的東西然後回報也行。你可以有時間再去加強它。

對資料內容也這樣做。寫個script讀取所有的關卡並產生所有的單位,

使用對你而言最好的回報工具。我們內部是用Skype作為即時通訊系統,所以對我們來說即實用Skype回報build壞了是很合理的。如果用e-mail或是IRC對你來說比較好,就改用它們吧。

2012年7月3日 星期二

Gamebryo 4.0

Gamebryo 4.0多了一些DEMO影片....我得說實在不吸引人。

"Gamebryo 4.0是一个基于Gamebryo 2.6核心运行中的引擎, 支持高级渲染功能。"

那我繼續用2.6就好了啊......

http://gamebryo.com.cn/tech_videos.html

2012年6月19日 星期二

新macbook pro入手!

不過是13吋的啦~還沒錢去衝Retina,希望新電腦可以幫我賺到可以直衝mac pro的錢嘍~

2012年5月31日 星期四

Cocos2D-x有HTML5版本了


http://www.cocos2d-x.org/news/56

還是要用JS來寫啦,API跟概念當然就是跟原來的cocos2D相近。

只是說我在想這樣子要跨平台時到底要做多少事呢?可能要試試看才知道,
畢竟以前用cocos2D-x在iOS<->Android時基本上可以都用C++來寫,這下
不同程式語言要怎麼做才方便就真的要想看看了。

教學範例:
http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Getting_Started_with_Cocos2d-html5

2012年5月24日 星期四

亂預測一下

前陣子有在考慮學一下網頁開發,追一下HTML5的流行,不可避免的就會碰到後台要
學哪個framework比較好的問題。同事給我的回答是ROR比Node.js來得好用,且Node目
前還是進步中,但是Node前後端統一語言所以很多人有興趣云云。他沒有給我明確的
答案,我自己當時看來覺得是去學ROR應該比較OK。

不過今天想想......人都是懶惰的,我相信基於這個原因不必再另外學新語言的Node.js應
該會有比較好的未來可能吧!

隨便想想,做個紀錄。

2012年5月23日 星期三

Diablo 3 目前為止對遊戲設計的一些想法

打寶比較重要,所以條列一下比較快,就不做長篇大論的寫法了。

改變的部分
+簡化
少掉不必要的操作。D2會有血瓶占空間、辨認物品跟城鎮捲軸、放錢進儲物箱以
免死時噴掉。現在讓整個遊戲變得明快而不用一再中斷作瑣事。
把戰鬥跟整補的時間明確劃開,D2常會撿到東西後急著要看屬性就停下來辨認或
是回程買捲軸。
白色裝備現在不值錢,可以省掉撿了後發現有更值錢的東西要常整理背包的麻煩,
不過我會覺得這部分很難說,因為這樣幹嘛要設計白色裝備,只有一開始遊戲有人
要用,後面關卡又沒人要......

+親切不怕練錯,讓玩者勇於嘗試
儲物箱共通、寶石可拔、技能可一選再選不像技能樹、沒有基本屬性點數可
分配。赫拉迪姆方塊跟符文拿掉,改為可預測性的寶石商。
不像以前要同一角色練第二次才會知道技能跟屬性要怎麼選比較好,D2很多
人會到噩夢模式才發現以前愛用的技能不好用了,然後又無法直接改,只能
重練。
多了儲存點功能,撿屍不用跑太久(畫面跟復活後可移動這點跟WOW很像)

+自訂
以前是因為想要什麼樣的打法來決定要用哪個職業,遠程選法師,近戰選野
蠻人等。現在是用技能來自訂自己喜歡的打法,雖然不能到整個翻盤,但喜
歡的話還是可以當近戰法師之類的調整。更多的是在於不用再怕練錯,更方
便去做一些細部的嘗試,像是用瞬移來躲攻擊或是用吸收攻擊的方式硬吃下
來等等。

沒有自訂智力體能等屬性,但是這可能是方便他們調整遊戲難度。例如每關
Boss的難度就不會因為玩者只調高防禦而打不痛之類的。另外也是方便製作各職業
專用的裝備(加強其主要屬性)。同時也拿掉了裝備會被屬性值限制不能拿,玩者不
必去投資自身不感興趣的屬性。

新加的部分
+鐵匠
有點像日本禁掉的轉蛋湊好物方式,提供玩者一玩再玩的動力。但是這些製
作物應該可以在拍賣場上買到,應該會降低大家投資在這裡的興致。

+跟隨者
不會死掉後花很多錢復活、有一定強度所以會運用他,不像D2。因為不再是
免洗角色,有對話以加強故事背景。甚至同樣的跟隨者在碰到當初相遇的劇情
時會出現不同的對話。

大方向
+遊樂器的出發點,節奏明快
按鍵變少、避免無法挽回的錯誤、減少非遊戲的操作(整理與長時間調整是PC
玩者的習慣)、儲存點功能。強迫玩者多以即時操作的能力來獲勝,而不是以
分析背誦後切換技能的能力來獲勝。
但其實整體來說遊戲的自由度是降低了沒錯,應該是因應遊戲器玩家的習性。

+跟WOW學習
爐石、藥水CD、復活畫面與機制、拍賣場、多了很多對話跟背景故事。

+現金拍賣
鐵匠可做出好物,讓賣家除了刷寶外也有別的產生道具手段
伺服器只開三區,人多才有熱度

技術面
+節省資源
利用camera固定視角的好處,在一些岩石或細緻物品的邊緣是採用鏤
空貼圖來處理(1-bit alpha),可以有效節省面數。場景背面應該是完全
不做,反正看不到。
光源部分目前看起來並不明顯,甚至似乎場景看來像是只有在前面疊一
層亮圖,是否有用到deferred shading也看不太出來,但據說有用到SSAO?
也許是我沒有效能全開吧~但是將高低配備的畫面調整到不至於天差地遠
其實也是很札實的技術,只是一般狀況下大家不會為此讚嘆,大概只有遊
戲程式會在那邊眼睛裡都是星星吧....

+網路
雖然可以單人遊戲,但是朋友間可以即時對話,也可以直接加入遊戲一起
打,loading應該很重。