對于把編程當作興趣的人來說,編程越久越會覺得『編程是一種藝術(shù)創(chuàng)作』。很多人認為程序員一定愛編程,但真相并非如此,從我周圍的統(tǒng)計數(shù)據(jù)來看,真正愛編程的程序員不足10%,大部分人都是把編程當做營生的手段。
從付出回報比來看,編程是近幾年收益最高的職業(yè)。即使是零基礎(chǔ),到培訓班魔鬼訓練三個月后也能找一份薪資待遇不錯的工作。為了追求更好的生活,很多不適合當程序員的人也干起了寫代碼的活。在當前大環(huán)境下,大部分程序毫無設(shè)計可言,在市場推崇的『敏捷』開發(fā)模式下難見好的設(shè)計,只是培養(yǎng)了無數(shù)CRUD Boy與SQL Boy。
設(shè)計的好的程序像一件藝術(shù)品,對使用它的人來說思想上能得到升華。每次遇見時,都會嘴上贊不絕口,心里意猶未盡。同樣一件藝術(shù)品,一千個人看就有一千個哈姆雷特,程序也是這樣,你覺得完美無暇,其他人可能并不認同。但是別放棄,總有規(guī)律可尋。
在看完『設(shè)計心理學』之后覺得收獲很多,結(jié)合程序設(shè)計談?wù)勛约旱睦斫狻?/p>
Affordance
示能:指一個物理現(xiàn)象與人之間的關(guān)系,也就是物品的特性與決定物品預設(shè)用途的主體之間的關(guān)系。簡單概述為,有形的物品如何傳達出人們與它們互動的重要信息。
用直白的話說就是事物通過自己的外在形態(tài),向人們展示自己具有的功能。比如,你看到一張桌子,你就知道它可以放東西;看到一只鉛筆,就知道它可以寫字;看到一頂帽子,就知道它可以佩戴;
你會通過自己過去所擁有的生活經(jīng)驗去預設(shè)你與某個事物之間的關(guān)系,就像你會不自覺的給周圍的人打標簽。你的一個朋友是牙醫(yī),之后任何和牙齒有關(guān)的事情你都會想到這個朋友。你的一個朋友是律師,之后你有法律相關(guān)的問題肯定會想到這個朋友。這就很奇怪,為什么人會不自覺的給周圍的朋友打標簽,并且為標簽賦能?其實不是我們主動為他人打標簽,而是每個人都有Affordance。
你的Affordance是什么?這個問題值得每個人去思考。每一段程序也都有自己的Affordance,程序擁有什么樣的Affordance由程序員決定。比如PHP的Affordance就是快速開發(fā),性能糟糕,世界上最好的語言(貶義)……
Signifiers
意符:以前產(chǎn)品都比較簡單,比如勺子、鏡子,他們的功能一目了然,但是隨著科技的發(fā)展,產(chǎn)品也越來越復雜,很多時候單純靠外觀根本分辨不出這些東西到底具備什么功能,如何使用。比如企鵝,很可能會被認為是QQ(聊天軟件)。這個時候,就需要借助設(shè)計的智慧將產(chǎn)品本身具有的功能通過一些方式展現(xiàn)的更加明顯,讓人一眼就可以知道,它能用來做什么,怎么用。
比如,看到門上的把手就知道門后有房間,順時針轉(zhuǎn)動就是開門;看到墻上的開關(guān)就知道能控制電源,接通或者斷開。意符不只包含物品自身所表達的含義,而是通過場景化的方式讓人產(chǎn)生聯(lián)想,從知道物品有什么用,到怎么用。比如你有個朋友是牙醫(yī),你總是看到他肩上有厚厚的頭屑,你會懷疑他是個不講衛(wèi)生的牙醫(yī),以后看牙肯定不會將他作為第一選擇。再比如你發(fā)現(xiàn)你的律師朋友喜歡背后說人壞話,也會讓你對他的專業(yè)性產(chǎn)生質(zhì)疑,你有一套理論支撐自己快速的完成從A到B的演算,這就是Signifiers。
你的Affordance是什么?比如我是程序員,很多人會為我打上木訥的標簽。但是看了我的文章之后,覺得我愛瞎扯,程序一定也寫的差。那么我的Signifiers就是程序?qū)懙牟畹某绦騿T。意符,就是讓人看到后產(chǎn)生聯(lián)想,從而得出正確的結(jié)論。比如大家都知道Node.js速度很快,但是試了下回調(diào)和同步編程后覺得很不適應,于是得出Node.js不適合寫后端項目的結(jié)論。
Mapping
映射:映射源于數(shù)學概念,它指在使用產(chǎn)品時人們對產(chǎn)品進行操作、控制等行為與其進行這些行為之后產(chǎn)生的結(jié)果之間的關(guān)系,這種關(guān)系叫做映射。
比如,你想使用遙控器轉(zhuǎn)換電視節(jié)目,按向下的按鈕,電視頻道進入下一個節(jié)目,這個向下的按鈕就是電視頻道跳轉(zhuǎn)下一個的映射。這種映射已經(jīng)記錄在人們的大腦中,這種映射還能正反轉(zhuǎn)換,比如你想看下一頻道,肯定會去按向下的按鈕,這是正向映射。你不小心多按了一次向下的按鈕,你心里很清楚頻道會切換兩次,這就是反向映射。
映射在編程中用到的極為廣泛,比如hashTable,編碼解碼,內(nèi)存映射等等。
Feedback
反饋:指在進行一次溝通行為之后的結(jié)果,結(jié)果必須是即時的并且能提供有用的信息,還要以一種不顯著的方式展示出來。
最常見的就是按鈕,例如電視的開關(guān)按鈕,在按壓之后會有彈起和很小的機械聲,彈起的反饋能讓你的觸覺接收到,聲音能讓你的聽覺接收到,在接收到信息之后就知道這次按壓的溝通行為成功了。再比如空調(diào),按一下遙控空調(diào)會發(fā)出『滴』聲,你聽到聲音后就知道這次溝通成功了。反饋要以一種不顯著的方式展示出來,如果按一下空調(diào)遙控板,空調(diào)『滴』了一分鐘,這就是太顯著的反饋,會適得其反。
反饋在UI設(shè)計上用的非常多,這里不展開講。我們說說TCP三次握手的問題,為什么要三次握手(那么多)?為什么要三次握手(那么少)?這個問題要分成兩部分來回答。
A和B的微信聊天記錄:
A:做我女朋友吧?
B:好的
到這里A和B溝通了兩次,但是B并不知道A收到他的消息沒有,心臟都要跳出來了。所以A這個時候應該馬上回一句話(反饋),表示自己收到了。所以3次聊天才是兩個人確定關(guān)系的最少次數(shù)。當然你可以聊幾萬句使得關(guān)系更穩(wěn)固,對談戀愛的人說很重要,但對程序來說沒那個必要。做任何事情,及時且不打擾的反饋都很重要。
Conceptual Mod
概念模型:通過抽象得到高度簡化的流程,用來展示事物如何工作。比如電腦中的文件夾、文件,就是在幫助人們建立一些概念模型。其實電腦根本不是按照文件夾這種方式存儲文件。
通過概念模型可以使用戶能夠預測自己行為的結(jié)果,比如你將A文件拖動到B文件夾下,即使不打開B文件夾你也能預測到A文件肯定在B文件夾中。好的概念模型就是產(chǎn)品的呈現(xiàn)模型接近用戶心理模型,這一點iPhone和微信都做的很好。比如在iPhone上刪除軟件,長按軟件圖標之后圖標會一直抖動(一些無法刪除的軟件不會抖動),然后點擊刪除軟件就被刪了,非常符合預期。而Windows和Android只是刪了個圖標,真正的軟件并沒有刪除,并不符合人們腦中的概念模型,這就是糟糕的設(shè)計。
編程本身就是一種概念模型,計算機并不能執(zhí)行我們寫的代碼。代碼需要通過編譯器編譯成二進制機器碼后計算機才能執(zhí)行。利用概念模型,人們可以將編程語言設(shè)計的更符合人類的思維模型。
寫了很多,希望大家能將這些設(shè)計方式用于日常生活與工作中。如果想看源代碼,我推薦PHP的Symfony,一個非常符合設(shè)計美學的項目。