设计师/产品经理:“他会在万众瞩目中出现, 身披金甲圣衣, 脚踏七彩祥云,咔咔咔把我的设计全部实现!”
引子
偶然跟设计师同事聊天,谈到他们眼中的程序员应该是什么样的。
大叔:“好的程序员不应该三心二意,上来就学很多不同的语言,应该精通一门语言!”
小九:“那设计师会在Photoshop,Pixelmater,Sketch,balsamiq等等这些工具中,只精通一样,而不去学习别的吗?”
大叔:“这不一样,编程语言怎么能跟这些工具相提并论,比如Sketch比较适合快速实现一些Hi-Fi的高保真原型,Photoshop善于处理位图,balsamiq用于画一些Low-Fi的线框图,这些工具都是在不同情境和需求下使用的。”
小九:“我倒觉得这跟编程语言一样一样的。当需要写后台服务端的时候,我们用Java;要快速写工具脚本的时候用Ruby;要写页面交互的时候用Javascript;要写底层高性能代码的时候,用C或者C++。每个语言都有自己的特点,也有自己的使用场景。设计师应该不会说只要精通Photoshop或Sketch,其它工具就不用学了吧。怎么能为了一滴水,而放弃整片海洋!每一种设计工具都有自己独特的魅力,在学习中都会体会到不一样的乐趣 ”
语言/工具 vs 特性
熟悉PS的都知道,Photoshop中有滤镜、蒙版、图层等一系列特性,我们也往往是先学习工具,顺便就学会了这些特性。然而,其实这些特性比工具本身具有更高的复用性。现在几乎任何一款绘图软件,都会带有图层功能。
程序员也一样,往往是从语言开始,来认识语言的特性的。比如我们学习了C++,顺便知道了Template;从Java中知道了Exception的处理方法,从Javascript中知道了闭包,从Scala中知道了Monad等等。这些特性、思想在程序设计中的应用往往要比语言本身更重要。
除了语言,其实还有一些别的,也是程序员和设计师可以类比的。
思维方式
在程序世界里,有3种比较经典的编程范式:面向过程,面向对象和函数式。
- 面向过程的编程范式,简单的讲就是把一个大的任务拆分成N多个步骤,只要一步步从上到下的实现即可。
- 面向对象则是把所有程序中的概念都想成是一个个具体的对象,每个对象有自己的属性、行为,每个对象可以完成自己应该完成的一些事情。通过对象间的彼此互动,来完成复杂的功能。
- 函数式则是更侧重于用数学函数的方式来思考,把现实中的复杂问题转换成各种不同类型的函数,通过数学的思维方式来解决问题。
这是程序员的三种不同的思维方式,而映射到设计师,可以理解成平面设计师习惯的平面思维和工业设计师习惯的立体思维。
模式
程序世界中的设计模式,是前人大量经验的总结,是在实战中形成的一些在面对具有一定共性的问题时所采用的***实践。
在产品设计中,也同样有一些模式可以遵守,比如现在的提醒功能,往往会使用内含数字的小红点模式。
再比如说消息通知功能,往往是采用消息中心的模式 。
再比如说一些常用的组件,如输入的文本框,在交互上共有诸如auto suggestion之类的模式。
有了这些模式之后,不管是在做程序设计还是界面设计,都可以有效的降低设计的复杂度。
Clean Code -|- Human Interface Guidelines
大部分情况下,我们不是一个人工作,而是一个团队工作。
作为一个程序员,我可能会阅读、修改团队内任何一个人的代码,这时候一套统一的规范就很重要,而《Clean Code》就是这么一套规范,让我们写出的代码可读性大大提高,便于团队彼此共享编辑代码。
而作为一个设计师,也有这么一套规范,比如iOS中的《Human Interface Guidelines》,或者Android的Material Design,这些规范用于指导我们在做界面设计的时候该如何选择合适的控件,应该有何种样式,如何在界面中合理的布局,并在团队中形成共识,好让大家可以在同一个工程中协调工作。
***
综合上面说的:看起来程序员和设计师的工作好像差得很远,但其实大家做的事情是有很多相通之处的。细细体味其中的不同,可以填补之前一些unknow unknow的空白,说不定还可以给你现在的工作带来一些新的灵感。
【本文是51CTO专栏作者“ThoughtWorks”的原创稿件,微信公众号:思特沃克,转载请联系原作者】