2013年1月12日 星期六

說說。非關程式,一些開發心得。

這篇文章稍微來一點感性。

轉眼間碩班就要準備畢業了,今天和指導教授討論論文的事情,在寒假開始的時候整個就必須要火力全開衝畢業呀。

而必須要想盡辦法把自己所學都記錄起來。一來是分享,分享才能變強;二來是讓這個世界看到自己的進步與能力,可以的話希望畢業之後能夠順利找到研發替代役,自己所學是在終端行動裝置上開發應用程式,變化速度之快,這幾年深深體會,是真的很害怕中途中斷呀!


好了,感性結束。

說到一些開發的心得,我想網路上有非常多,包括了反破解獲利...等等,我想也許我應該也要把我的心得想辦法挖出來重新整理過一遍,做為未來對自己的提醒、以及分享給大家自己的拙見。

我想在開始之前,我們來將使用體驗模組化稱為一種「功能」,等會敘述的功能皆為使用體驗上我們要注意、或是已經常見、或是個人的見解。

而自己也有些App上架(一定要宣傳一下的啦),其中我將上面已經有實作的,覺得是不錯的體驗,而在網路上也滿常見的做列點:

  1. 離開程式時確定的dialog:
    在離開時產生一個提示是否離開的對話視窗。因為在android的裝置中,越來越少有實體的return按鈕,當手機設計不良,使用者很容易不小心按到return按鍵。注意return和home鍵實質上意義是不同的,當然我們也能夠設計成為兩個有一樣的效果,但是像這個App,曾經就發生過,小書在lab玩到一半老師走進來討論事情,結果心虛按下home鍵之後就會造成重新啟動的慘劇。重點是我沒儲存啊!!!!

  2. 做即時的儲存:
    有很多方法可以做即時的儲存,目的除了常見的偏好設定之外,也有像是偏好之外的「設定」,像是app中上次離開的頁面、或是地圖app中離開前的位置等等,這些隱藏在偏好設定中的設定,可以花點心思設計,不失為提供一個不錯的體驗。

  3. 對硬體調用時先做檢查:
    舉例像是GPS、網路、SD卡等等,我們在app功能調用時先做一個檢查,可以防止當使用者關閉了權限、或是沒有安裝SD卡等情況時造成app的異常崩潰;更重要的是防止app在這些錯誤的使用流程之下,造成app的ANR或是產生非預期的使用流程。防呆是很重要的,我們必須要減少更多使用者可能會發生的錯誤,所以必須要多花一步進行檢查。

  4. 對網路服務、android系統的服務進行防呆:
    這兩件事情分類成一項的原因是因為他們都是軟體的部分。對於網路服務,像是dropBox的服務,如果中途下載上傳失敗,我們應該採取什麼動作較好?是Toast?Notification?還是Dialog?我想這是一個可以根據case不同而有的動作,目的在於讓使用者能夠發現,並且採取正確的使用流程;對於android系統中提供的服務,像是螢幕的旋轉、按鈕的反應、UI的回饋等等,我們有幾個原則:

    1. 明確的。有明確的回饋,讓使用者知道目前所做的動作為何。
    2. 熟悉的。回饋是熟悉的,目前自己還沒有辦法大到能夠教育使用者的影響力之前,我們必須要先試著以熟悉的回饋讓使用者能夠快速而且直覺的上手。當然也能夠反其道而行,增加產品忠誠度,相信很多手機硬體開發商在UI的sense上都對這很有著墨,也會造成我們在App開發時美工的困難,這就變成了我們要想辦法克服的地方了。
    3. 不影響使用流程。我認為,除非我們的目的在於讓使用者創造/作,否則一切盡量是在控制範圍內的,避免設計太多條使用流程、也避免讓使用者跳出使用流程之外。像是螢幕的旋轉就是一個例子,default的狀態下螢幕旋轉會造成activity整個destroy再重啟,如果我們不想要鎖定螢幕轉向,那麼就必須要考慮到這點並且解決。

      順道一提,關於螢幕轉向,像是有些pad的設計上,插上鍵盤會自動變成橫向,或是可能會自動鎖定為橫向,這點在處理螢幕轉向時會是一個還滿有趣的挑戰。

  5. 不同裝置螢幕尺寸的處理:
    這真的是一個難解的問題啊,我們對於尺寸能夠分成橫向與直向的畫面:在直向的部分處理,除了不同的解析度設計不同的layout之外,也能夠利用在設計畫面的階段,讓畫面以垂直的視覺動線為原則來處理;在橫向的處理上,會必須要考慮到螢幕大像素高的手機,螢幕可能會造成元件顯示過小,螢幕小像素高的手機可能會造成尺寸比例過大,在icon的繪製上就必須要產生適當的大小,以及在layout的設計上要考慮到剛尺寸比例變化時上述可能會有的問題。所幸這些我們可以透過模擬器或是layout時預覽顯示的比例來處理,自己的美工能力還在學習中,如果有更多方法也還希望不吝提供。這裡有個很有趣的例子,在處理橫向與直向的畫面上我覺得表現得很棒,是一個可以參考的做法。
以上,接著我必須要列出一些點,是自己以前有碰過的,未來可能會遇到的,必須要提醒自己的,關於技術上或是使用體驗上可能會發生的問題,也分享給各位:
  1. 手在螢幕上的安排:
    一直覺得這是非常有趣的議題,假如我們開發以右撇子為主,就自己的觀察,在年輕的使用者會習慣以單手拿著手機(注意不是Pad),用大拇指進行各種手勢操作,所以如果我們在這個畫面希望導引使用者按下某個按鈕,它就應該被擺在右下角或是右上角的位置;而如果是較為年長的使用者,會習慣用一手拿著手機,另一手操作,如果是右手拿著手機,右下角可能會被擋住,所以在我們希望導引的按鈕安排上,右上角會是一個不錯的選項。這樣的設計在iphone的app上還滿常見的,我想..這應該沒有申請專利吧....
    先不管專利問題,我們還可以發現像是android的action bar,在menu按鈕便是作在右上角,我們可以試想menu按鈕與activity layout上的按鈕有什麼區別,便能夠適當的安排功能與使用者的親密關係該如何配置。

  2. Service被異常關閉的回饋:
    Service指的是在android的背景服務機制。會有使用者安裝一鍵清除程序的軟體,造成service會被刪除,網路上也有很多關於保持service不被刪除或是相關的處理方法,不過關於當service被刪除或是有某些異常時,我們也許會需要給予使用者適當的回饋,像是上面提到的網路服務便常常利用service來執行:上傳與下載失敗時,也可能不見得是因為程序清除的軟體造成,也有可能會是中途使用者將網路關閉、或是進入了電梯之中。這些都是不可預期的錯誤,我們除了UI的回饋之外,也必須要在背景的執行程序中考慮到回饋的部分。

  3. 使用者與市場:
    我們指的不是市場的獲利模式,而是對於我們的專案所鎖定的使用者,真正的需求以及可能會有反應必須要了解,也必須要考慮到在使用這個app的時候,該使用者可能會想到以及需要的服務。幸運的是在上研究所時便一直被提醒的,因為自己做的是科技輔具的開發,了解使用者,了解市場的重要性在很久以前便發現了,重點還是在實作。實作了解市場反而會花費更多的時間,除了自身的生活經驗之外,透過體驗與深刻觀察是很重要的。而且,關於對於市場的了解,個人認為這很難利用專業分工來完美的實現,如果設計者無法深刻的觀察與體會,往往設計的產品功能會少掉一些貼心的idea,或是缺乏好的使用流程造成讓同類型產品被進攻的機會。

  4. 擴充、整合、維護:
    我認為能夠快速寫出一個程式的人是很厲害的,但是如果能夠長久的維護一個程式並且能夠持續保持程式在市場上功能的更新更厲害,所幸在進入研究所以前便開始碰觸到OOP的領域,不斷增強這方面的能力能夠幫助自己在模組化功能的轉移以及程序的維護上有很高的機動性。除此之外,我們還必須要考慮在擴充app的功能上的策略,其中包括了時間點以及適切性:像是之前天橋科技的家銘學長在一場演講時提過,MoneyCare在ios的宣傳策略上便結合了功能的發展與appStroe的推廣策略。在開發主功能與主要的相關功能上市之後,能夠建立時間表讓其他附加功能的開發在時間的管理之下保持更新,這樣便能夠結合了宣傳策略與維護的步驟,達到最佳的獲利與使用體驗。


    我想這屬於專案管理的領域,偏偏如果是獨立開發者或是小公司的話,這也是我們必須要努力學習的。題外話,我們也預祝天橋科技的MoneyCare在android上能夠大賣。
  5. 美工:
    指導教授一直想要慫恿我們交設計學院的女朋友,偏偏阿宅如我,維持二次元的遠距離戀愛還是目前比較愜意的感情生活。美工部分在android開發上不如ios,雖然現在已經有許多不錯的icon和drawable藏在sdk的資料夾中,但是美工重點還是在整體畫面的協調與精美的感受,除了仰賴專業分工之外,也許我們能夠在除了工作之外提升生活之中的美學素養會是一個較為能夠解決問題的方法,目前的策略是:icon還是以android default的元件為主,而盡力以自己的認知透過排版與使用上習慣的體驗來進行設計;我認為專業的美工人員未必會比RD還要更懂得畫面的協調,因為我們也許碰的app比較多,也許也會比美工來得更懂得使用者,所以如果有幸合作開發中,美工部分是必須是要有平等而且密集的討論與修改的。當然,如果在專業分工下,能夠有專門的系統分析架構人員來主持,也許會有更好更快的工作效率。

以上,想到再更新。














沒有留言:

張貼留言

你好,我是小書,如果文章內容有錯誤,或是看到有建議以及任何感想時,歡迎提出分享,我們一起學習一起努力。

追蹤者