设计师写代码

导语

半年前我由于不可抗拒的因素装上Eclipse开始学习编程,而现在终于可以写篇小文总结一番了。

2个发现

其实这半年来我并没有什么特别有价值的感悟,倒是发现了2个很有趣的事实。一个是我在写代码的时候我常常忘记自己是做设计的,或者说我对程序的丑陋UI一点也不介意。我曾经吐槽过很多独立开发者的应用界面丑破天际,而今我开始理解他们了。我分析过个中的原因,结论是我们在开发程序的时候运用的是实现 implementation思维——在这样的思维下,程序员会为实现最终的目标而不遗余力,但是如果程序员手上没有完整的设计稿,那么他会倾向于认为开发工作的最终目标是实现所有功能,至于UI,将就一下也无妨,毕竟作图、切图、写代码、调试、改代码、调试、改代码、调试 ……并不是一件轻松的事。
另一个有趣的事实是,我在写代码的时候比做设计更容易完全投入,以至于我往往一坐下来就是3个小时,常常埋怨人为什么要吃饭和上厕所。编程的过程是一个不断获取激励的过程,当你花了一整天终于解决掉一个bug的时候,你会觉得人生充满意义,然后迫不及待地定位下一个bug。我渐渐明白为什么互联网公司加班现象如此普遍——有些bug如果找不出来,下班还有什么意义?

写,还是不写

不过我今天要说的重点不是这2个有趣的事实,而是一个老生常谈的话题:UI设计师到底要不要写代码?


(最近Medium上的一篇文章)

目前比较主流的观点是:

要。因为这样可以更好地与工程师沟通。
不要。因为一个人很难在两个领域上都成为顶尖。

半年以前,我的立场并不确定,虽然我自己是希望学习编程的,但觉得这是个人爱好的问题。而现在我对这个问题有了更深刻的理解。
首先不懂编程并不会对设计师的工作造成硬性的瓶颈,换一句话说,那些因为你不懂编程而造成的困难,你都可以通过其他方式去解决。例如不懂编程可能也就不知道自己的方案是否能实现,但如果你使用各类APP或者浏览各类网页的经验丰富,那么你也会对现有工具的局限有一定的概念,也就基本不会做出不合理的设计方案了;又譬如不懂编程可能会难以跟工程师沟通,但如果你跟工程师的关系比较好,你也虚心求教,我相信工程师会给予你足够的耐心的。所以对编程没有兴趣的设计师大可不必纠结,对于设计师而言,作品永远是王道
那编程对设计师而言意义何在?
其实在大多数时候编程之于设计师,跟编程之于普通人,并无不同。学习编程能让你多掌握一项技能,学习编程能让你更了解计算机——这个即将占领我们生活的角色,学习编程能让你培养起创造性思维,学习编程很酷。
除此之外,我觉得最重要的,是编程能让设计师真正地开始“创造”。
设计师难免会遇到一个很尴尬的问题,很多自己钟情的想法只能停留在图纸中——即使你可以传到Dribbble,可以收到上千的赞,它们也还是停留在图纸中。工业设计师、建筑设计师、景观设计师要避免这个问题需要花费难以想象的成本,但UI设计师或者互联网产品设计师相对而言要幸运很多,因为只要他们会写代码,有些想法完全可以凭一己之力实现出来然后对外发布。如果恰好站在风口,也许还能一不小心改变世界。


(Dribbble像是一个聚拢全球UI设计师飞机稿的社区)

独立开发的魅力在于,一个人可以掌控一个产品的全部。独立开发的产品不再是作品集上的概念,而是一个会成长的生命,会不断地迭代;是一个实验室,可以验证某一个新鲜的想法;是一块自留地,是一位设计师的价值观外显。

Why Not?


(Chrome网上应用店)

当然,截至目前我还算不上一个独立开发者,我对独立开发的看法还只是想象。但即使前程未知,这也是一件非常值得尝试的事情。我可能会开发一个小工具型APP,可能会开发一个Chrome插件,还可能会开发一个博客的主题模版。这些在别人看来可能都是不足一提的小玩意儿,但到时我至少可以说,I create something
又或许我还可以说,I create something nice。笑。

可能会有的疑问

  1. 我应该学习哪一门编程语言?

    如果你对Android感兴趣,那就学Java;如果你有Mac和iPhone,可以考虑学习Objective-C或者Swift(后者似乎更适合编程初学者);如果你是网页设计师,那么JavaScript更加适合你。另外我认为HTML和CSS虽然不算编程语言,但非常值得学习,一是因为学习成本非常低,一周左右可以熟悉;二是因为了解这两样有时能带来意想不到的惊喜,比如写一个小而美的静态网站。

  2. 我应该如何开始?

    每个人都会有自己的学习方式。我个人喜欢项目导向的学习计划,因为特别适合短期突破。比如我决定做一个具体的Android应用,那么我会先学习Java然后是Android SDK,接着一个接一个地实现自己之前所构想的产品功能。这种方式的缺陷在于知识架构会比较松散。

  3. 数学不好还能写代码吗?

    根据我非常有限的编程经验,除非你想开发一个技术革新型的程序或者你对程序运行的性能要求特别高,你的数学水平基本不会影响你编程。相对而言,逻辑能力更为重要。

  4. 遇到问题怎么办?

    Google是最好的老师。目前我遇到的90%以上的问题都能从Google中得到答案。其中又有90%以上的答案来自于StackOverFlow,一个非常优秀的程序员社区。