一年前,在被面試過程中,有很多面試官以各種方式問我“你會哪些計算機技能?”此時我總會幾乎不停頓地說出幾十個名詞(此處省略100字)。面試官有點吃驚,然后他會在其中挑幾個他最擅長的技能,然后把我的自信心徹底打敗。
不過好像是真的,越牛的人,簡歷越短。
我也許是眾多程序員的一個縮影,每個同學都希望自己掌握更多的知識,寫更多的程序,有更多的技能樹,賺更多的錢。總之,多就是好的,少就是不好的。一旦看到別人在做什么,那自己也做一把吧,反正“技不壓身”。
於是,你維護了好幾個工程,同時學習着N門技術,自己寫的類庫里幾乎沒有private類型(公開給別人越多,功能越強,是不是?)總是標榜着自己的某產品或軟件又多了幾項功能,界面做得越來越復雜,滾動條越來越細。投入了大量的時間,使用者不懂怎么用,同事看不懂你的文檔,過了一段時間,連自己都不知道原來寫的是什么了。
你喜歡復雜還是簡單呢?
從類庫的角度來說。有些人標榜他設計的Web服務類庫功能強大,可是當你在使用他設計的類庫時,一下子彈出來幾十個莫名其妙的函數和公共變量,有StartService, AddService, BindingService, XXXService一大堆,最可怕的是表現服務是否啟動的IsStart變量還可以被外部修改!在學習微軟官方類庫時,我們幾乎不需要看文檔,就能猜出個大概。一個Web服務,Start()就是打開,Close()就是結束。簡單地就像削好了一個蘋果讓你吃,你只負責張嘴就行了。如果希望最簡單地實現功能,那么最明顯的那幾個函數應該就能用了;如果想要更多功能,那再逐級深入不行么?
從界面設計的角度來說,十年前的軟件和現在的軟件,從UI上看最大的區別是什么?十年前的軟件,幾乎每個角落里都會塞幾個菜單和按鈕,而當前的軟件非常簡潔,一個頁面只關注一個內容,更符合人的思維方式。現在扁平化大行其道,簡單就是好的。確實是這樣,每多一個選項,用戶的學習成本就增加一倍。
我對復雜界面的喜愛是有淵源的,那就是之前在科幻片里看到的超酷的UI界面。這些界面的共同特點就是看着非常復雜,一個屏幕幾乎就會顯示全部的信息,各種動畫,幾乎所有的元素都在運動,讓人目不暇接,只能留下“我看不懂一定是我太笨”的想法。(可以參考COD現代戰爭系列每次的過場動畫效果)。同時,看了視頻剪輯軟件After Effects,或者是建模工具3ds max的高冷的灰色調調和控件風格后,我就喜歡!
在學習WPF之后,我滿腦子都是那種所謂的“絢麗UI”,一定要將控件塞滿整個屏幕!下面看我演示的觀眾在一陣唏噓聲之后問到,這個東西到底怎么用啊?下面就是一個典型的例子:
Holy shit!
我犯了一個需求錯誤,這種超復雜界面的需求場景有兩個特征:一是使用者專門針對該軟件進行過訓練,會非常熟悉這套界面的功能;二要讓觀察者盡可能減少或者干脆取消掉對界面的一切操作,在最短的時間內獲得自己想要的所有信息。 在這種情況復雜設計是合適的。想想戰斗機飛行員的駕駛艙的那些儀表和操作按鈕,非常直觀且直接,一個操作對應一個按鈕,緊張的戰斗時刻,哪有時間操作那些導航菜單!一個實體按鍵對人的心理帶來的踏實感,幾乎是任何界面設計都比不上的。
但我們的軟件,真的是那樣的使用場景么?用戶是每天幾乎只使用你這套軟件且那么注重實效性么?甚至退一步說,以我們的水平,設計出來的這些界面,真的滿足了上面說的兩個特征了么?
沒有,不僅沒有,而且極大的增加了操作復雜性,讓絕大多數人都望而卻步,只為了自己方便而把所有東西堆在一起是不負責任的。因為所有人都越來越懶,越來越忙了。軟件用戶體驗差一些,就被直接拋棄。“總之,別讓我看太多的文字,我會直接跳過去。圖片?只有好看的我才看”。這就是現狀,那些曾經每天看着報紙上密密麻麻的新聞和大部頭書籍的人越來越少了。你要充分接納用戶的懶和忙,否則用戶就不可能接受你的產品。(所以我估計這篇文章這種大段的文字也沒什么人看)
怎么辦呢?
首先要認准一個事實,復雜事物是由簡單的事情組合而成的,以我們絕大多數人的智商,是搞不出足夠復雜的東西的。更多情況是我們把簡單的搞的更復雜了! 任何工具使用太復雜,一定是設計者的問題。
從認知來說,一定要符合用戶的習慣和預期:一個橋,就應該是起運輸和轉換作用的,連接了兩頭;一個任務管理模塊,只關心管理,至於任務怎么做,它不需要關心;一個界面就應該有一個重點,對於移動端更是如此; 至於配色的簡潔,排版的簡潔,那就是高級層次的問題了。清晰簡潔的設計滿足某種規范和模式,讓人觸類旁通。一個好的設計,不論是代碼還是界面,不論是開發者還是使用者,都會有一種如沐清風的感覺,世界本來就是簡單的,大道至簡。
從更大的層面說,作為程序員,一定要有最核心的內功,我越來越意識到,一是算法,修身;二是設計模式;齊家,三是架構,治國,平天下的事情就先不討論了。以無招勝有招,到后來那些紛繁的問題看起來其實只是同一個問題。“能搞定字符串,就能解決絕大多數算法的問題”。滿足於自己又學會了某個類庫的使用,在簡歷上說自己會某種聚類算法或ORM框架,這就像給馬拉松選手吹噓自己跑了三公里一樣可笑。
共勉。