程序和界面简洁化设计的思考
一年前,在被面试过程中,有很多面试官以各种方式问我“你会哪些计算机技能?”此时我总会几乎不停顿地说出几十个名词(此处省略100字)。面试官有点吃惊,然后他会在其中挑几个他最擅长的技能,然后把我的自信心彻底打败。
不过好像是真的,越牛的人,简历越短。
我也许是众多程序员的一个缩影,每个同学都希望自己掌握更多的知识,写更多的程序,有更多的技能树,赚更多的钱。总之,多就是好的,少就是不好的。一旦看到别人在做什么,那自己也做一把吧,反正“技不压身”。
于是,你维护了好几个工程,同时学习着N门技术,自己写的类库里几乎没有private类型(公开给别人越多,功能越强,是不是?)总是标榜着自己的某产品或软件又多了几项功能,界面做得越来越复杂,滚动条越来越细。投入了大量的时间,使用者不懂怎么用,同事看不懂你的文档,过了一段时间,连自己都不知道原来写的是什么了。
你喜欢复杂还是简单呢?
从类库的角度来说。有些人标榜他设计的Web服务类库功能强大,可是当你在使用他设计的类库时,一下子弹出来几十个莫名其妙的函数和公共变量,有StartService, AddService, BindingService, XXXService一大堆,最可怕的是表现服务是否启动的IsStart变量还可以被外部修改!在学习微软官方类库时,我们几乎不需要看文档,就能猜出个大概。一个Web服务,Start()就是打开,Close()就是结束。简单地就像削好了一个苹果让你吃,你只负责张嘴就行了。如果希望最简单地实现功能,那么最明显的那几个函数应该就能用了;如果想要更多功能,那再逐级深入不行么?
从界面设计的角度来说,十年前的软件和现在的软件,从UI上看最大的区别是什么?十年前的软件,几乎每个角落里都会塞几个菜单和按钮,而当前的软件非常简洁,一个页面只关注一个内容,更符合人的思维方式。现在扁平化大行其道,简单就是好的。确实是这样,每多一个选项,用户的学习成本就增加一倍。
我对复杂界面的喜爱是有渊源的,那就是之前在科幻片里看到的超酷的UI界面。这些界面的共同特点就是看着非常复杂,一个屏幕几乎就会显示全部的信息,各种动画,几乎所有的元素都在运动,让人目不暇接,只能留下“我看不懂一定是我太笨”的想法。(可以参考COD现代战争系列每次的过场动画效果)。同时,看了视频剪辑软件After Effects,或者是建模工具3ds max的高冷的灰色调调和控件风格后,我就喜欢!
在学习WPF之后,我满脑子都是那种所谓的“绚丽UI”,一定要将控件塞满整个屏幕!下面看我演示的观众在一阵唏嘘声之后问到,这个东西到底怎么用啊?下面就是一个典型的例子:
Holy shit!
我犯了一个需求错误,这种超复杂界面的需求场景有两个特征:一是使用者专门针对该软件进行过训练,会非常熟悉这套界面的功能;二要让观察者尽可能减少或者干脆取消掉对界面的一切操作,在最短的时间内获得自己想要的所有信息。 在这种情况复杂设计是合适的。想想战斗机飞行员的驾驶舱的那些仪表和操作按钮,非常直观且直接,一个操作对应一个按钮,紧张的战斗时刻,哪有时间操作那些导航菜单!一个实体按键对人的心理带来的踏实感,几乎是任何界面设计都比不上的。
但我们的软件,真的是那样的使用场景么?用户是每天几乎只使用你这套软件且那么注重实效性么?甚至退一步说,以我们的水平,设计出来的这些界面,真的满足了上面说的两个特征了么?
没有,不仅没有,而且极大的增加了操作复杂性,让绝大多数人都望而却步,只为了自己方便而把所有东西堆在一起是不负责任的。因为所有人都越来越懒,越来越忙了。软件用户体验差一些,就被直接抛弃。“总之,别让我看太多的文字,我会直接跳过去。图片?只有好看的我才看”。这就是现状,那些曾经每天看着报纸上密密麻麻的新闻和大部头书籍的人越来越少了。你要充分接纳用户的懒和忙,否则用户就不可能接受你的产品。(所以我估计这篇文章这种大段的文字也没什么人看)
怎么办呢?
首先要认准一个事实,复杂事物是由简单的事情组合而成的,以我们绝大多数人的智商,是搞不出足够复杂的东西的。更多情况是我们把简单的搞的更复杂了! 任何工具使用太复杂,一定是设计者的问题。
从认知来说,一定要符合用户的习惯和预期:一个桥,就应该是起运输和转换作用的,连接了两头;一个任务管理模块,只关心管理,至于任务怎么做,它不需要关心;一个界面就应该有一个重点,对于移动端更是如此; 至于配色的简洁,排版的简洁,那就是高级层次的问题了。清晰简洁的设计满足某种规范和模式,让人触类旁通。一个好的设计,不论是代码还是界面,不论是开发者还是使用者,都会有一种如沐清风的感觉,世界本来就是简单的,大道至简。
从更大的层面说,作为程序员,一定要有最核心的内功,我越来越意识到,一是算法,修身;二是设计模式;齐家,三是架构,治国,平天下的事情就先不讨论了。以无招胜有招,到后来那些纷繁的问题看起来其实只是同一个问题。“能搞定字符串,就能解决绝大多数算法的问题”。满足于自己又学会了某个类库的使用,在简历上说自己会某种聚类算法或ORM框架,这就像给马拉松选手吹嘘自己跑了三公里一样可笑。
共勉。