來談?wù)?,如何用程序員思維服務(wù)設(shè)計(jì)
在產(chǎn)品設(shè)計(jì)業(yè)務(wù)推進(jìn)的過程中,設(shè)計(jì)人員需要兼顧多方需求,并嘗試用更有效、更便捷的思維來服務(wù)于產(chǎn)品設(shè)計(jì),從而達(dá)成更完善的用戶體驗(yàn)。那么,“程序員思維”作為思維方式的一種,是不是也是產(chǎn)品設(shè)計(jì)中可以采用的角度之一呢?不如來看看作者的解答吧!
我們?cè)谄綍r(shí)的產(chǎn)品實(shí)現(xiàn)過程中會(huì)經(jīng)常與產(chǎn)品吵架,與開發(fā)撕逼。這是因?yàn)槲覀冞@些產(chǎn)品實(shí)現(xiàn)的參與者因?yàn)榉止げ煌加泻軓?qiáng)的邊界感,這種邊界感同樣也體現(xiàn)在思維模式上。
產(chǎn)品經(jīng)理看待問題是以產(chǎn)品思維來思考;設(shè)計(jì)師做設(shè)計(jì)時(shí)也是以設(shè)計(jì)思維來思考;程序員更多是以代碼實(shí)現(xiàn)的程序員思維來思考。
不同的思考方式,難免會(huì)出現(xiàn)不同的理解,同時(shí)也會(huì)出現(xiàn)描述問題時(shí)完全不懂對(duì)方在說什么。
作為設(shè)計(jì)師,除了本職工作必須具備的設(shè)計(jì)思維外,更多的是要求我們需要有產(chǎn)品思維,將產(chǎn)品思維運(yùn)用到日常的產(chǎn)品設(shè)計(jì)工作中,卻很少見到設(shè)計(jì)師去了解或掌握開發(fā)思維。
當(dāng)然從開發(fā)實(shí)現(xiàn)角度來做設(shè)計(jì)儼然不現(xiàn)實(shí),但是否可以運(yùn)用程序員思維來服務(wù)設(shè)計(jì)呢,個(gè)人覺得是可以的。將程序員的思維方式應(yīng)用到產(chǎn)品的設(shè)計(jì)實(shí)現(xiàn)中,是能夠提升產(chǎn)品體驗(yàn)和提高團(tuán)隊(duì)協(xié)作效率的。
一、什么是程序員思維
什么是程序員思維?沒有標(biāo)準(zhǔn)答案。
馬克思·韋伯在《新教倫理與資本主義精神》中提出過一個(gè)概念——工具理性。所謂“工具理性”,就是通過實(shí)踐的途徑確認(rèn)工具(手段)的有用性,從而追求事物的最大功效,為人的某種功利的實(shí)現(xiàn)服務(wù)。
工具理性是通過精確計(jì)算功利的方法最有效達(dá)到目的的理性,是一種以工具崇拜和技術(shù)主義為生存目標(biāo)的價(jià)值觀,所以“工具理性”又叫“功效理性”或者說“效率理性”。
相似的,編程也是根據(jù)客戶的需求,利用自己的專業(yè)技能將其編譯成計(jì)算機(jī)語言,生產(chǎn)出一個(gè)軟件產(chǎn)品,來幫助解決現(xiàn)實(shí)生活中的問題,從而實(shí)現(xiàn)產(chǎn)品的商業(yè)價(jià)值。因此,可以將程序員思維定義為是在理性思維的框架下,利用相應(yīng)工具,來解決相應(yīng)實(shí)際問題。
二、程序員一般都具備哪些思維
1. 底層思維能力:邏輯思維
處于不同階段的程序員所具備的思維能力會(huì)有所不同。但作為以邏輯思維縝密自居的程序員們,邏輯思維算得上是他們最底層的一種思維能力。
其實(shí)任何人都應(yīng)該具備一定的邏輯思維能力,這樣在面對(duì)“杠精”的時(shí)候,能發(fā)現(xiàn)對(duì)方的邏輯謬誤;在思考問題的時(shí)候,能盡量做到邏輯完整;在表達(dá)的時(shí)候,能盡量做到邏輯清晰。
那什么是邏輯,邏輯的起源經(jīng)歷了從自然哲學(xué)到形而上學(xué)的發(fā)展,我們也無需深究其發(fā)展過程。借用大師的總結(jié),邏輯是指思維的規(guī)律和規(guī)則。或者更簡(jiǎn)單的理解,邏輯就是關(guān)系。
邏輯思維基本包含三個(gè)方面的要素:概念、判斷和推理,邏輯思維的要義,就在于正確運(yùn)用概念、判斷、推理的思維形式。
概念是思維的基本單位;通過概念對(duì)事物是否具有某種屬性進(jìn)行肯定或否定的回答,這就是判斷;由一個(gè)或幾個(gè)判斷推出另一判斷的思維形式,就是推理。
實(shí)際上閱讀一本書的邏輯也是包含這三個(gè)要素,如果你看過《如何閱讀一本書》,里面提到的分析閱讀,說的就是如何通過提煉一本書的關(guān)鍵字詞(概念),關(guān)鍵句子(判斷),以及關(guān)鍵論述(推理)來分析一本書的主旨。
2. 必備思維能力:抽象思維和結(jié)構(gòu)化思維
程序員每天面對(duì)的工作并不只是簡(jiǎn)單的敲代碼,而是需要對(duì)拿到的需求及問題進(jìn)行分析、歸納、綜合、判斷、推理。從而抽象出各種概念,挖掘概念和概念之間的關(guān)系,對(duì)問題進(jìn)行有序建模,然后通過編程語言實(shí)現(xiàn)業(yè)務(wù)功能。這里面就需要應(yīng)用到抽象思維和結(jié)構(gòu)化思維。
1)抽象思維
抽象是有層次性的,抽象層次越高,內(nèi)涵越小,外延越大,擴(kuò)展性越好;反之,抽象層次越低,內(nèi)涵越大,外延越小,擴(kuò)展性越差,但語義表達(dá)能力越強(qiáng)。
我們可以根據(jù)畢加索的畫《公牛圖》來理解一下抽象思維:
抽象的三個(gè)特點(diǎn):
第一,抽象是忽略細(xì)節(jié)的。抽象類是最抽象的,忽略的細(xì)節(jié)也最多,就像抽象牛,只是幾根線條而已。在代碼中,這種抽象可以是Abstract Class,也可以是Interface。
第二,抽象代表了共同性質(zhì)。類(Class)代表了一組實(shí)例(Instance)的共同性質(zhì),抽象類(Abstract Class)代表了一組類的共同性質(zhì)。對(duì)于我們上面的案例來說,這些共同性質(zhì)就是抽象牛的那幾根線條。
第三,抽象具有層次性。抽象層次越高,內(nèi)涵越小,外延越大,也就是說它的涵義越小,泛化能力越強(qiáng)。比如,牛就要比水牛更抽象,因?yàn)樗梢员磉_(dá)所有的牛,水牛只是牛的一個(gè)種類(Class)。
2)結(jié)構(gòu)化思維
結(jié)構(gòu)化思維,是一種以邏輯(事物內(nèi)在規(guī)律)為基礎(chǔ),從無序到有序,將搜集到的信息、數(shù)據(jù)、知識(shí)等素材按一定的邏輯進(jìn)行分析、整理,呈現(xiàn)出有序的結(jié)構(gòu),繼而化繁為簡(jiǎn)的思考過程。其目的是減少?gòu)?fù)雜度和認(rèn)知成本。
舉個(gè)簡(jiǎn)單的例子說明結(jié)構(gòu)化思維,嘗試用10秒鐘記住下面20個(gè)數(shù)字:
估計(jì)大多數(shù)人都很難在限定時(shí)間內(nèi)記住。
但換一種方式,同樣讓你10秒鐘記住下面的這20個(gè)數(shù)字:
是不是so easy,甚至完全不用10秒,掃一眼就可以記住了。
事實(shí)上,這是兩組相同的數(shù)字,只是排列方式不同,第一組是無序的,第二組是有序的(有結(jié)構(gòu)),也更有規(guī)律。
我們之所以能夠輕松記憶第二組數(shù)字,是因?yàn)槠溆薪Y(jié)構(gòu)、有規(guī)律,從而降低了復(fù)雜度和記憶負(fù)擔(dān)。面對(duì)無序的20個(gè)數(shù)字,我們需要記住20個(gè)記憶項(xiàng)目,套用設(shè)計(jì)心理學(xué)中的7+—2法則【米勒定律】,人類短暫記憶無法容納7個(gè)以上的記憶項(xiàng)目,因此我們很難記住這一組數(shù)字。
而正序排列的20個(gè)數(shù)字,我們實(shí)際上只要記憶兩個(gè)項(xiàng)目:一個(gè)是有0到9的20個(gè)數(shù)字,另一個(gè)是他們是正序排列的。
說到結(jié)構(gòu)化思維,其實(shí)運(yùn)用最多的要屬結(jié)構(gòu)化思維的圣經(jīng)——芭芭拉·明托的《金字塔原理》。至于為什么是金字塔結(jié)構(gòu),大家可以自行去了解。
三、程序員思維與設(shè)計(jì)思維的不同
設(shè)計(jì)思維,本質(zhì)上是一種以人為本的問題解決方法。這里所說的設(shè)計(jì)是廣義的設(shè)計(jì),是以探索人的需求為出發(fā)點(diǎn),創(chuàng)造出符合其需求的解決方案。與傳統(tǒng)解決問題的方法不同的是,設(shè)計(jì)思維是面向過程的解決方案,而且是一個(gè)沒有標(biāo)準(zhǔn)答案的探索過程。
面對(duì)問題我們需要深入理解問題,這是一個(gè)發(fā)散的思考,從多方面了解問題發(fā)生的原因,然后歸納出問題的關(guān)鍵點(diǎn)。解決問題時(shí)也需要探索各種解決問題的可能性,具有創(chuàng)造性的給出合理的解決方案,并從中收斂選擇最佳解決方案。其實(shí)通過“雙鉆模型”就能很好的理解這一過程。
以人為本:認(rèn)識(shí)到一切問題歸根結(jié)底都是人的問題,從不同視角出發(fā),對(duì)具體的人進(jìn)行共情,而不是對(duì)抽象的事進(jìn)行處理。
信息澄清:以人為中心重新組織和定義問題。在信息澄清通常可以用一句話來描述問題:誰?(用戶User)有什么需要?(需求Need)我發(fā)現(xiàn)了什么?(洞察Insight),簡(jiǎn)稱POV法。讓大家對(duì)問題形成統(tǒng)一的認(rèn)識(shí),因?yàn)樵谟懻搯栴}時(shí),不同人理解與表達(dá)能力會(huì)有區(qū)別,造成的誤會(huì)可以在過程中逐漸排除。
可視化:可以表現(xiàn)更多信息間的關(guān)系,更易被記憶和傳遞,讓信息共享效率更高。
反復(fù)迭代:認(rèn)識(shí)到設(shè)計(jì)過程中的不確定性與靈活性,反復(fù)迭代是一種非線性目標(biāo)向線性流程妥協(xié)的變通做法。在實(shí)際應(yīng)用上,我們需要不斷的明確收獲然后繼續(xù)推進(jìn)下去。
簡(jiǎn)單了解設(shè)計(jì)思維后,我們可以簡(jiǎn)單總結(jié)程序員思維與設(shè)計(jì)思維的不同之處:
① 程序員思維在解決問題時(shí)多為趨于嚴(yán)謹(jǐn)?shù)木€性推理,而設(shè)計(jì)思維則更趨向于創(chuàng)造性,多線并行的發(fā)散性思維解決方案。
② 某些共性問題的解決方案上,程序員需要提煉更抽象的特征從而能夠做到結(jié)構(gòu)更加清晰;而設(shè)計(jì)需要從不同視角考慮,對(duì)具體問題面向?qū)ο筮M(jìn)行共情,從而提出不同符合用戶心理的解決方案。
③ 最表象的不同點(diǎn)就在于,程序員完成需求代碼化,優(yōu)先考慮是否可以代碼實(shí)現(xiàn),過程中會(huì)有哪些限制條件;設(shè)計(jì)則更多考慮可用性和可視化,以一種更合理的狀態(tài)傳遞相關(guān)的信息。設(shè)計(jì)師不只是基本需求的實(shí)現(xiàn),同時(shí)要讓用戶有一種更優(yōu)的體驗(yàn),能夠產(chǎn)生心理上的滿足感和愉悅感。
其實(shí)程序員思維和設(shè)計(jì)思維還是有共通點(diǎn)的,比如結(jié)構(gòu)化思維的應(yīng)用上,設(shè)計(jì)師需要以某種邏輯關(guān)系形成結(jié)構(gòu)清晰的界面呈現(xiàn)給用戶,大大增強(qiáng)頁(yè)面的可讀性和可理解性。同樣的滿足金字塔原理的代碼,其可讀性和可理解性也會(huì)極大的被增強(qiáng)。
代碼也是一種表達(dá),很多人以為代碼是寫給機(jī)器執(zhí)行的,實(shí)際上,代碼是寫給人讀的,只是偶爾會(huì)被機(jī)器執(zhí)行。
四、程序員思維如何應(yīng)用到設(shè)計(jì)中?
1. 底層邏輯
底層邏輯的應(yīng)用其實(shí)是貫穿整個(gè)產(chǎn)品生命周期的,不論是需求階段還是界面設(shè)計(jì)階段亦或是開發(fā)實(shí)現(xiàn)和產(chǎn)品測(cè)試,都是基于底層業(yè)務(wù)邏輯去實(shí)現(xiàn)產(chǎn)品的。
產(chǎn)品在交互設(shè)計(jì)上除了要符合業(yè)務(wù)邏輯,還需要符合開發(fā)實(shí)現(xiàn)邏輯。
比如頁(yè)面在進(jìn)行數(shù)據(jù)交互時(shí),接口的調(diào)用是同步還是異步,這也將影響到界面的交互形式。在開始設(shè)計(jì)前,我們就需要弄明白數(shù)據(jù)交互接口的調(diào)用方式,什么是同步什么是異步?
這里我們先舉個(gè)栗子。
比如在正常工作中,我們需要和業(yè)務(wù)溝通需求。
如果在會(huì)議室進(jìn)行面對(duì)面溝通,當(dāng)你拋出對(duì)需求的疑問后,需要業(yè)務(wù)當(dāng)面給予你解答才算溝通結(jié)束。
這種就是同步。
如果在辦公室用郵件的方式溝通,當(dāng)你發(fā)出對(duì)需求的疑問后,不需要在郵箱界面等他回復(fù),你可以關(guān)閉郵箱窗口去做其他的工作內(nèi)容,不管多久,等他回復(fù)你郵件后,你都會(huì)即時(shí)收到郵箱消息提醒。
這種就是異步。
所以,和溝通一樣,接口調(diào)用的方式分為同步調(diào)用和異步調(diào)用。
同步調(diào)用是最常見的接口調(diào)用形式,在同步調(diào)用模式下,接口的調(diào)用方在一定時(shí)間范圍內(nèi)一直等待,直到被調(diào)用方返回執(zhí)行結(jié)果。比如頁(yè)面的加載,你需要停留在此頁(yè)面等待加載完成才能繼續(xù)后面的步驟。
異步調(diào)用是接口調(diào)用方給被調(diào)用方發(fā)出指令,但不會(huì)愣在那等待結(jié)果,調(diào)用方會(huì)給被調(diào)用方提供一個(gè)回調(diào)接口,處理完成后,再調(diào)用回調(diào)接口返回結(jié)果。比如應(yīng)用的更新升級(jí)下載,開始下載后我們可以將其置于后臺(tái)下載,無需等待下載結(jié)果,同時(shí)可以去完成其他任務(wù)。
我們無需去考慮通信的底層協(xié)議是什么,只單純的考慮場(chǎng)景,電話溝通和頁(yè)面加載就是同步,郵件溝通和升級(jí)下載就是異步。
所以在實(shí)際交互設(shè)計(jì)過程中,我們需要找開發(fā)確認(rèn)接口調(diào)用方式的底層邏輯,對(duì)于無需或者不能即時(shí)響應(yīng)的工作考慮采用異步調(diào)用的交互設(shè)計(jì)方式。
2. 抽象思維
抽象思維看似與設(shè)計(jì)思維相沖突,一個(gè)是需要抽離高層次共性,考慮代碼的可擴(kuò)展性;一個(gè)是需要深入場(chǎng)景,精準(zhǔn)的傳遞信息。實(shí)際上在設(shè)計(jì)中也有經(jīng)常使用抽象思維,例如為了提高生產(chǎn)效率,我們會(huì)設(shè)計(jì)對(duì)應(yīng)的組件庫(kù),提取常用的基礎(chǔ)控件,普遍應(yīng)用于各種產(chǎn)品。
我認(rèn)為大多數(shù)情況下,我們是將抽象思維逆向使用的。
相同的組件,因?yàn)槠涔δ苁枪潭ǖ?,在大多?shù)情況下都可以復(fù)用,但在一些特殊的場(chǎng)景,我們可以發(fā)散思維,設(shè)計(jì)出更多符合場(chǎng)景的組件樣式,從而傳達(dá)更具象的內(nèi)容。
比如簡(jiǎn)單的加載,比較大眾的設(shè)計(jì)樣式就是轉(zhuǎn)菊花,這種加載可以應(yīng)用到任何加載場(chǎng)景,常見得會(huì)讓用戶感覺很low,沒有任何辨識(shí)度。
在實(shí)際設(shè)計(jì)中,我們是可以結(jié)合產(chǎn)品特性或品牌形象將其實(shí)例化或者內(nèi)涵化,例如,B站加載樣式,融合了品牌LOGO,將品牌基因也融入到簡(jiǎn)單的加載設(shè)計(jì)之中,加強(qiáng)用戶對(duì)于產(chǎn)品的印象及幫助品牌傳播。
這種以抽象出來的類為出發(fā)點(diǎn),逆向運(yùn)用抽象思維,再結(jié)合自身的設(shè)計(jì)思維去發(fā)散,最后收斂得出一個(gè)有效的問題解決方案,也能很好的服務(wù)于我們的設(shè)計(jì)。
3.?結(jié)構(gòu)化思維
人類很早以前就認(rèn)識(shí)到,大腦會(huì)自動(dòng)將發(fā)現(xiàn)的所有事物以某種秩序組織起來。基本上,大腦會(huì)認(rèn)為同時(shí)發(fā)生的任何事物之間都存在某種聯(lián)系,并且會(huì)將這些事物以某種邏輯模式組織起來。
比如,通過對(duì)下圖的觀察,你可以看到什么?
任何人,看到上面的8個(gè)方塊,都會(huì)認(rèn)為共有兩組方塊,每組4個(gè)。這是因?yàn)槿祟惔竽X天性所致,大腦會(huì)認(rèn)為同時(shí)發(fā)生的任何事物之間都存在某種聯(lián)系,并且會(huì)將事物按某種邏輯模式組織起來。這種“聯(lián)系”指的是某種類似的共同點(diǎn)或所處的位置比較接近。
這種將事物組成邏輯單元無疑具有很大的作用。我們更容易記住那些具有邏輯關(guān)系的東西,而遺忘那些散點(diǎn)的東西。
其實(shí)以上的結(jié)構(gòu)化思維方式也就是設(shè)計(jì)中的格式塔原理。
為了更好的理解結(jié)構(gòu)化思維的應(yīng)用,我們可以以做簡(jiǎn)歷設(shè)計(jì)為例,簡(jiǎn)歷制作其實(shí)就是把個(gè)人相關(guān)的信息整理成結(jié)構(gòu)化信息的過程。
每個(gè)人的簡(jiǎn)歷上大致會(huì)包含姓名、性別、民族、籍貫、出生年月、聯(lián)系方式、電子郵箱、工作單位、工作時(shí)間、職位、工作職責(zé)、離職原因、畢業(yè)院校、學(xué)習(xí)時(shí)間、所學(xué)專業(yè)、獲得證書等信息。
這么多信息,如果不加整理的一一羅列,會(huì)顯得非常繁雜,可讀性非常差。
我們可以將這些信息按一定的邏輯關(guān)系整理分組,讀起來就會(huì)輕松很多。將信息進(jìn)行結(jié)構(gòu)化梳理后,會(huì)更清晰、更有條理。信息的傳遞效率也會(huì)大大提高。
最后,無論是產(chǎn)品思維、設(shè)計(jì)思維,還是程序員思維,不應(yīng)該成為職業(yè)的邊界限制,亦或是不同職位間爭(zhēng)議的起點(diǎn)。我們可以相互學(xué)習(xí)與了解不同的思維方式,共同更好地服務(wù)于產(chǎn)品。
作者:WOWdesign,研究設(shè)計(jì)價(jià)值最大化,涉及用戶體驗(yàn)、品牌體驗(yàn)、空間體驗(yàn)。
本文由 @WOWdesign 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于 CC0 協(xié)議。
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。
“代碼也是一種表達(dá),很多人以為代碼是寫給機(jī)器執(zhí)行的,實(shí)際上,代碼是寫給人讀的,只是偶爾會(huì)被機(jī)器執(zhí)行”,這個(gè)觀點(diǎn)很贊,從匯編到高級(jí)語言,本質(zhì)上就是要讓人用起來更簡(jiǎn)單,可讀性更高。
很棒的文章
感謝分享
公牛圖這個(gè)分類有個(gè)錯(cuò)誤,奶牛全部都是母牛
根據(jù)牛的品種來分,這樣是沒有錯(cuò)的,奶牛也有公奶牛。[捂臉]
不好意思,我以為這里的奶牛指的是產(chǎn)奶的牛,沒有意識(shí)到這里指的是牛的一種品種。