我们在平时的产品实现过程中会常常与产品吵架,与开拓撕逼。这是由于我们这些产品实现的参与者由于分工不同都有很强的边界感,这种边界感同样也表示在思维模式上。
产品经理看待问题因此产品思维来思考;设计师做设计时也因此设计思维来思考;程序员更多因此代码实现的程序员思维来思考。
不同的思考办法,难免会涌现不同的理解,同时也会涌现描述问题时完备不懂对方在说什么。

作为设计师,除了本职事情必须具备的设计思维外,更多的是哀求我们须要有产品思维,将产品思维利用到日常的产品设计事情中,却很少见到设计师去理解或节制开拓思维。
当然从开拓实现角度来做设计俨然不现实,但是否可以利用程序员思维来做事设计呢,个人以为是可以的。将程序员的思维办法运用到产品的设计实现中,是能够提升产品体验和提高团队协作效率的。
一、什么是程序员思维
什么是程序员思维?没有标准答案。
马克思·韦伯在《新教伦理与成本主义精神》中提出过一个观点——工具理性。所谓“工具理性”,便是通过实践的路子确认工具(手段)的有用性,从而追求事物的最大功效,为人的某种功利的实现做事。
工具理性是通过精确打算功利的方法最有效达到目的的理性,是一种以工具崇拜和技能主义为生存目标的代价不雅观,以是“工具理性”又叫“功效理性”或者说“效率理性”。
相似的,编程也是根据客户的需求,利用自己的专业技能将其编译成打算机措辞,生产出一个软件产品,来帮助办理现实生活中的问题,从而实现产品的商业代价。因此,可以将程序员思维定义为是在理性思维的框架下,利用相应工具,来办理相应实际问题。
二、程序员一样平常都具备哪些思维1. 底层思维能力:逻辑思维
处于不同阶段的程序员所具备的思维能力会有所不同。但作为以逻辑思维严密自居的程序员们,逻辑思维算得上是他们最底层的一种思维能力。
实在任何人都该当具备一定的逻辑思维能力,这样在面对“杠精”的时候,能创造对方的逻辑谬误;在思考问题的时候,能只管即便做到逻辑完全;在表达的时候,能只管即便做到逻辑清晰。
那什么是逻辑,逻辑的起源经历了从自然哲学到玄学的发展,我们也无需穷究其发展过程。借用大师的总结,逻辑是指思维的规律和规则。或者更大略的理解,逻辑便是关系。
逻辑思维基本包含三个方面的要素:观点、判断和推理,逻辑思维的要义,就在于精确利用观点、判断、推理的思维形式。
观点是思维的基本单位;通过观点对事物是否具有某种属性进行肯定或否定的回答,这便是判断;由一个或几个判断推出另一判断的思维形式,便是推理。
实际上阅读一本书的逻辑也是包含这三个要素,如果你看过《如何阅读一本书》,里面提到的剖析阅读,说的便是如何通过提炼一本书的关键字词(观点),关键句子(判断),以及关键论述(推理)来剖析一本书的主旨。
2. 必备思维能力:抽象思维和构造化思维
程序员每天面对的事情并不但是大略的敲代码,而是须要对拿到的需求及问题进行剖析、归纳、综合、判断、推理。从而抽象出各种观点,挖掘观点和观点之间的关系,对问题进行有序建模,然后通过编程措辞实现业务功能。这里面就须要运用到抽象思维和构造化思维。
1)抽象思维
抽象是有层次性的,抽象层次越高,内涵越小,外延越大,扩展性越好;反之,抽象层次越低,内涵越大,外延越小,扩展性越差,但语义表达能力越强。
我们可以根据毕加索的画《公牛图》来理解一下抽象思维:
抽象的三个特点:
第一,抽象是忽略细节的。抽象类是最抽象的,忽略的细节也最多,就像抽象牛,只是几根线条而已。在代码中,这种抽象可以是Abstract Class,也可以是Interface。
第二,抽象代表了共同性子。类(Class)代表了一组实例(Instance)的共同性子,抽象类(Abstract Class)代表了一组类的共同性子。对付我们上面的案例来说,这些共同性子便是抽象牛的那几根线条。
第三,抽象具有层次性。抽象层次越高,内涵越小,外延越大,也便是说它的涵义越小,泛化能力越强。比如,牛就要比水牛更抽象,由于它可以表达所有的牛,水牛只是牛的一个种类(Class)。
2)构造化思维
构造化思维,是一种以逻辑(事物内在规律)为根本,从无序到有序,将搜集到的信息、数据、知识等素材按一定的逻辑进行剖析、整理,呈现出有序的构造,继而化繁为简的思考过程。其目的是减少繁芜度和认知本钱。
举个大略的例子解释构造化思维,考试测验用10秒钟记住下面20个数字:
估计大多数人都很难在限定韶光内记住。
但换一种办法,同样让你10秒钟记住下面的这20个数字:
是不是so easy,乃至完备不用10秒,扫一眼就可以记住了。
事实上,这是两组相同的数字,只是排列办法不同,第一组是无序的,第二组是有序的(有构造),也更有规律。
我们之以是能够轻松影象第二组数字,是由于其有构造、有规律,从而降落了繁芜度和影象包袱。面对无序的20个数字,我们须要记住20个影象项目,套用设计生理学中的7+—2法则【米勒定律】,人类短暂影象无法容纳7个以上的影象项目,因此我们很难记住这一组数字。
而正序排列的20个数字,我们实际上只要影象两个项目:一个是有0到9的20个数字,另一个是他们是正序排列的。
说到构造化思维,实在利用最多的要属构造化思维的圣经——芭芭拉·明托的《金字塔事理》。至于为什么是金字塔构造,大家可以自行去理解。
三、程序员思维与设计思维的不同
设计思维,实质上是一种以人为本的问题办理方法。这里所说的设计是广义的设计,因此探索人的需求为出发点,创造出符合其需求的办理方案。与传统办理问题的方法不同的是,设计思维是面向过程的办理方案,而且是一个没有标准答案的探索过程。
面对问题我们须要深入理解问题,这是一个发散的思考,从多方面理解问题发生的缘故原由,然后归纳出问题的关键点。办理问题时也须要探索各种办理问题的可能性,具有创造性的给出合理的办理方案,并从中收敛选择最佳办理方案。实在通过“双钻模型”就能很好的理解这一过程。
以人为本:认识到统统问题归根结底都是人的问题,从不同视角出发,对详细的人进行共情,而不是对抽象的事进行处理。
信息澄清:以人为中央重新组织和定义问题。在信息澄清常日可以用一句话来描述问题:谁?(用户User)有什么须要?(需求Need)我创造了什么?(洞察Insight),简称POV法。让大家对问题形成统一的认识,由于在谈论问题时,不同人理解与表达能力会有差异,造成的误会可以在过程中逐渐打消。
可视化:可以表现更多信息间的关系,更易被影象和通报,让信息共享效率更高。
反复迭代:认识到设计过程中的不愿定性与灵巧性,反复迭代是一种非线性目标向线性流程妥协的变通做法。在实际运用上,我们须要不断的明确收成然后连续推进下去。
大略理解设计思维后,我们可以大略总结程序员思维与设计思维的不同之处:
① 程序员思维在办理问题时多为趋于严谨的线性推理,而设计思维则更趋向于创造性,多线并行的发散性思维办理方案。
② 某些共性问题的办理方案上,程序员须要提炼更抽象的特色从而能够做到构造更加清晰;而设计须要从不同视角考虑,对详细问题面向工具进行共情,从而提出不同符合用户生理的办理方案。
③ 最表象的不同点就在于,程序员完成需求代码化,优先考虑是否可以代码实现,过程中会有哪些限定条件;设计则更多考虑可用性和可视化,以一种更合理的状态通报干系的信息。设计师不但是基本需求的实现,同时要让用户有一种更优的体验,能够产生生理上的知足感和愉悦感。
实在程序员思维和设计思维还是有共通点的,比如构造化思维的运用上,设计师须要以某种逻辑关系形成构造清晰的界面呈现给用户,大大增强页面的可读性和可理解性。同样的知足金字塔事理的代码,其可读性和可理解性也会极大的被增强。
代码也是一种表达,很多人以为代码是写给机器实行的,实际上,代码是写给人读的,只是偶尔会被机器实行。
四、程序员思维如何运用到设计中?1. 底层逻辑
底层逻辑的运用实在是贯穿全体产品生命周期的,不论是需求阶段还是界面设计阶段亦或是开拓实现和产品测试,都是基于底层业务逻辑去实现产品的。
产品在交互设计上除了要符合业务逻辑,还须要符合开拓实现逻辑。
比如页面在进行数据交互时,接口的调用是同步还是异步,这也将影响到界面的交互形式。在开始设计前,我们就须要弄明白数据交互接口的调用办法,什么是同步什么是异步?
这里我们先举个栗子。
比如在正常事情中,我们须要和业务沟通需求。
如果在会议室进行面对面沟通,当你抛出对需求的疑问后,须要业务当面给予你解答才算沟通结束。
这种便是同步。
如果在办公室用邮件的办法沟通,当你发出对需求的疑问后,不须要在邮箱界面等他回答,你可以关闭邮箱窗口去做其他的事情内容,不管多久,等他回答你邮件后,你都会即时收到邮箱提醒。
这种便是异步。
以是,和沟通一样,接口调用的办法分为同步调用和异步调用。
同步调用是最常见的接口调用形式,在同步调用模式下,接口的调用方在一定韶光范围内一贯等待,直到被调用方返回实行结果。比如页面的加载,你须要勾留在此页面等待加载完成才能连续后面的步骤。
异步调用是接口调用方给被调用方发出指令,但不会愣在那等待结果,调用方会给被调用方供应一个回调接口,处理完成后,再调用回调接口返回结果。比如运用的更新升级***,开始***后我们可以将其置于后台***,无需等待***结果,同时可以去完成其他任务。
我们无需去考虑通信的底层协议是什么,只纯挚的考虑场景,电话沟通和页面加载便是同步,邮件沟通和升级***便是异步。
以是在实际交互设计过程中,我们须要找开拓确认接口调用办法的底层逻辑,对付无需或者不能即时相应的事情考虑采取异步调用的交互设计办法。
2. 抽象思维
抽象思维看似与设计思维相冲突,一个是须要抽离高层次共性,考虑代码的可扩展性;一个是须要深入场景,精准的通报信息。实际上在设计中也有常常利用抽象思维,例如为了提高生产效率,我们会设计对应的组件库,提取常用的根本控件,普遍运用于各种产品。
我认为大多数情形下,我们是将抽象思维逆向利用的。
相同的组件,由于其功能是固定的,在大多数情形下都可以复用,但在一些分外的场景,我们可以发散思维,设计出更多符合场景的组件样式,从而传达更具象的内容。
比如大略的加载,比较大众的设计样式便是转菊花,这种加载可以运用到任何加载场景,常见得会让用户觉得很low,没有任何辨识度。
在实际设计中,我们是可以结合产品特性或品牌形象将实在例化或者内涵化,例如,B站加载样式,领悟了品牌LOGO,将品牌基因也融入到大略的加载设计之中,加强用户对付产品的印象及帮助品牌传播。
这种以抽象出来的类为出发点,逆向利用抽象思维,再结合自身的设计思维去发散,末了收敛得出一个有效的问题办理方案,也能很好的做事于我们的设计。
3. 构造化思维
人类很早以前就认识到,大脑会自动将创造的所有事物以某种秩序组织起来。基本上,大脑会认为同时发生的任何事物之间都存在某种联系,并且会将这些事物以某种逻辑模式组织起来。
比如,通过对下图的不雅观察,你可以看到什么?
任何人,看到上面的8个方块,都会认为共有两组方块,每组4个。这是由于人类大脑天性所致,大脑会认为同时发生的任何事物之间都存在某种联系,并且会将事物按某种逻辑模式组织起来。这种“联系”指的是某种类似的共同点或所处的位置比较靠近。
这种将事物组成逻辑单元无疑具有很大的浸染。我们更随意马虎记住那些具有逻辑关系的东西,而遗忘那些散点的东西。
实在以上的构造化思维办法也便是设计中的格式塔事理。
为了更好的理解构造化思维的运用,我们可以以做简历设计为例,简历制作实在便是把个人干系的信息整理成构造化信息的过程。
每个人的简历上大致会包含姓名、性别、民族、籍贯、出生年月、联系办法、电子邮箱、事情单位、事情韶光、职位、事情职责、离职缘故原由、毕业院校、学习韶光、所学专业、得到证书等信息。
这么多信息,如果不加整理的逐一罗列,会显得非常繁杂,可读性非常差。
我们可以将这些信息按一定的逻辑关系整理分组,读起来就会轻松很多。将信息进行构造化梳理后,会更清晰、更有条理。信息的通报效率也会大大提高。
末了,无论是产品思维、设计思维,还是程序员思维,不应该成为职业的边界限定,亦或是不同职位间争议的出发点。我们可以相互学习与理解不同的思维办法,共同更好地做事于产品。
作者:WOWdesign,研究设计代价最大化,涉及用户体验、品牌体验、空间体验。
本文由 @WOWdesign 原创发布于大家都是产品经理。未经容许,禁止转载。
题图来自Unsplash,基于 CC0 协议。
该文不雅观点仅代表作者本人,大家都是产品经理平台仅供应信息存储空间做事。