程序的設(shè)計美學-程序設(shè)計,代碼設(shè)計,設(shè)計模式

對于把編程當作興趣的人來說,編程越久越會覺得『編程是一種藝術(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è)計美學的項目。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,685評論 1 32
  • 一、基礎(chǔ)知識:1、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機...
    殺小賊閱讀 2,575評論 0 4
  • 真實的活出自己多暢快,干嘛非得自己騙自己,自欺其人,可憐又可悲??杀氖?別人都曉得了你在自欺,你卻以為瞞天過海。...
    艷_3c8e閱讀 322評論 1 3
  • 響應弘丹老師在「第19期21天愛上寫作訓練營課程」里的號召,寫下我的2019年三大目標,希望能在2019年12月3...
    武靈遙閱讀 391評論 0 4
  • 【日精進打卡第我175天】 【知~學習】 《六項精進》2遍 共346遍 《大學》2遍 共346遍 【經(jīng)典名句分享】...
    陳威杰閱讀 167評論 0 0

友情鏈接更多精彩內(nèi)容