近来,在带一个业务系统。这个系统涉及到产品、物料、库存等。说复杂不复杂,说简单也不简单。
但就是这样一个项目,我真的清楚了以前另一个客户说的话,我们就一直都在填坑,更有人还要把你往坑里推。
今天,我要说的有三点:
1. 软件设计
2 UI设计
3.做一个专业的从业人员
设计
设计这个词其实一个很严肃的词。因为,我们目前是处于一个设计的时代,设计已经融入在我们生活的方方面面。
我今天要谈到的设计主要分为两块,一块是软件设计,另一块是UI设计。我们先来聊聊软件设计。
一、 软件设计
大家应该都学过设计模式。如果你学过任何一种面向对象语言,你肯定听说过GOF的经典23个设计模式,或多或
少,肯定都用过其中的几个。设计模式能够带来好处不用多说,但真正把设计模式用好却不容易。因此,我总是
对刚入门的朋友说,如果你OOD没有入门。就先别用他们。因为,它们往往无法维护。而且,新手们特别容易陷
入到过度设计的混沌中。
敏捷开发已经大行其道很多年了。大家一直在强调迭代化开发、测试驱动开发、XP开发...。这些模型,都会提到
简单设计这一点。但有很多人根本不太清楚简单设计是什么。都以为简单设计就是要简单就好、一目了然就好。
但真的是这样吗?这些开发模型,其实都在围绕一个东西在发展、变化。那就是需求。在项目初期,我们很难对
项目有完整地把握。所以,基于此,我们就不可能做出完美、完整的设计。正如Uncle Bob所说,所谓的完美,
在不断发展的业务、不断变化的需求里,只是一个神话而已。
在我看来,简单设计其实应该是局部最优。在我们目前的视角里,它应该是可以cover住目前现有需求。但这够吗?
远远不够,初期的简单设计一定满足不了后续复杂业务的拓展。所以,这时候,重构这位救世主来了。具体重构的
各种原则,我这里就不介绍了,有兴趣可以去看看《重构:改善既有代码的设计》。简单设计 + 重构,才是敏捷的
重中之重。
理想总是很丰满的、但现实呢总是很骨感。一些自以为老资历的“专家”——我引用下Bob大叔的名字,称他们为代
码猴子。他们会跳出来,因为他们沉浸在自己的世界里,他们不愿意面对到处都是污垢的代码、他们不愿意接收新
鲜的血液、他们觉得实现功能就是最棒的。他们固守着自己的那一点点领地,生怕受到半点威胁。
我们怕什么,这些猴子们就在创造什么。他们创造了无数重复的代码,他们不断挑战SRP,他们不断撕扯那仅剩下
的一点点整洁。他们拒绝改进、他们沉浸在自以为复杂的代码中忘形。他们满满地都是自信,可自信的背后是无知
与愚昧。
这样猴子尤其集中在没有经过专业训练、而且特别容易自我满足的人群中。
尽管现实如此,我要呼吁:如果你是一名从业的专业人员,我们一定要对自己的代码负责!
二、 UI设计
可能大家觉得我一个搞程序的谈UI设计真是有点扯。但让大家失望了,我今天正是要谈谈UI设计(当然,不要指望
我有多么的专业:) )。
我一直以为,一个人的审美对他的做出来的东西是息息相关的。没有审美的人,不可能做得出好看、像样的东西。
那么审美是天生的吗?我认为不是,审美是吸收各类优秀的设计而形成的。
程序员们都有一种惰性,从骨子里认为,设计就是UI的事,我TM一程序员你跟我谈什么设计。在以前,确实是这样
的,在多年以前,在Window上用MFC写一个朴素的Desktop应用,几乎很少有人会来挑毛病。但现在,尤其是设计
大行其道的今天,已经不是这样了。特别是一些小型公司、小型项目,开发人员往往会身兼数职。因为,开发人员
几乎都要和业务人员对接, 此时,你能保证一个专业的UI会陪在你的身边帮你做设计?
————不是的。
程序员要做各种事情。虽然有各种前端框架可以用,但排版、配色、交互设计等等,都是由开发人员来完成。当你
面对客户的需求的时候,你两手一摊,我TM就是一开发,我就这样了。我想,你离被淘汰的日子不远了。
说来说去,一句话总结:程序员应该懂一点设计。
三、做一个专业的从业人员
经常听到有人在评价某某某的技术好,做什么东西特别快,短短几天就把一个东西交付了。某某某的技术特别好,
学习能力别强....
这些云云,相信大家都会听到很多。可我想问一句,到底怎样才是真正的好呢?下面是我的一些个人观点。
1. 算法与数据结构
相信上大学时候,大家都学过C语言。我记得谭教授那本经典的《C语言程序设计》里面有一句话,算法是程序的
灵魂。《算法导论》里面更是强调了算法在软件开发中的核心地位。只要去大公司面试,算法题是必不可少的,
面试官会根据自己的喜好,来考你算法或者是数据结构。算法与数据结构,是一位从事软件专业的人员所必须具备
的基础。因为,只有了解算法和数据结构,才能从若干中选择中找到效率最高的求解方法。一个复杂的业务逻辑,
用一种恰当的数据结构和算法就可以简单的实现。这种开发人员,现在似乎是可遇不可求。
2. 优雅的代码
要做到“优雅”其实并不简单。冰冻三尺非一日之寒,不是一两天就可以迅速提高的。优雅代码就是让你感觉非常有
默契、深知吾意的感觉。引用一句经典:Don't Make Me Think :)。优雅的代码不需要太多的注释,优雅的代码没有
多余的前缀,优雅的代码方法不会包含太多的代码,优雅的代码总是让你见名知意,优雅的代码总是不会让你的眼
睛在代码中切来切去,优雅的代码总是DRYF(Don't Repeat Yourself)。
好了,你的代码真的优雅吗?
3. 会造轮子
其实,我们只是一线的搬运工而已。造轮子?去TMD,叫给Apache或者GitHub的各位大拿吧。确实,在一些管理类
系统,我们很难有机会造轮子。但,不可否认,造轮子才是真正考验一个人技术实力的关键所在。所以,高手请把你
GitHub帐号我,让我拜倒在你的代码之下。
4. 对自己不满
这是不是有点扯了? 大家都说自信很重要,你这对自己都不满了,还谈什么提高?
——恰恰相反,只有对自己不满,才会想着如何去提高。就像前面所说的,我们很难完美,但我们可以追求完美。只有
对自己不满,才有机会接触到更好的、更专业的精神。盲目的自信,就是退步,就是要让人碾压。
呵呵,我可不想被人碾压。
5. 对原理的把握
我至今依然记得侯杰老师《深入浅出MFC》那句话,只是知其表,而不知其原理,实在不高明。在封面出,毅然写着
勿在浮沙筑高楼。
用Servlet不了解Http?
用ORM不了解JDBC?
用Web Service不了解SOAP?
用Socket不了解TCP/P?
用Oracle不了解Oracle体系结构执行计划?
...
6. 对代码的感觉
人们总说第六感,在软件设计中,从业人员应该培养对代码和业务的感觉。什么时候应该用策略、什么时候应该用装
饰、什么 时候应该用代理、什么时候应该用观察者。 什么时候应该重构成一个方法、封装一个成员变量、封装成
一个类、 什么时候该进行多层次的抽象、什么时候应该使用哪种结构、哪种算法等等。有良好的代码感的程序员总是能
找到最佳解决方法,他总能在设计、业务、代码、效率等中找到平衡。他们总是善于发现,通过在各种最佳解决方案
中找到BP。
————好了,先写这6条,共勉吧。
爱我的宝贝女儿