守望的麦子

我所理解的“软件设计”

2014-7-30    大连 /essays/2014/07/30/software-design.html essays

编程是一个“从无到有”的过程,其中蕴含着个体对交互体验的认识、对资源的统筹调用、对整体的全面规划,过程中需要全身心的投入,倘若期待着“让思维照进现实”,一旦投入其中,这种乐趣也是无法言喻的。

从一开始接触电脑,我就对软件很有兴趣,觉得每一个软件都是一个魔法箱;后来接触到编程,更逐渐感觉到每一个软件都是一个追求完美的用心作品。

对于使用“软件使用”[20140818修改]来说,我应该算是一个“老玩家”,但对于编程,我自知有些愚笨,但我愿意花时间慢慢学习,慢慢总结我所理解的“软件设计”的一些原则。

易用性

如果你也认同 Zed A. Shaw 在 Advice from an Old Programmer 中提到的 编程是一种能让你创建交互式艺术的艺术形式 这个观点,那么我想你一定会同意“易用性”是一个好的软件设计的基本要素,良好的“易用性”让我们在使用软件过程中几乎是跟着“直觉”去操作,甚至在通过软件轻松完成了指定的任务后,瞬间对开发者心存感激!

如果你还没有读过 Zed 的那篇文章,我强烈建议你去读一读。

接口

我猜想这是一个[20140801删除]会引起争议的原则之一。对于“追求自由网络精神的用户”来说,会希望拥有更多的控制权;而对于“拿来主义的用户”来说,“几次点击即可用”是再适合Ta们的口味不过的了。

而从软件设计的角度来看,开放意味着可定制化、可玩性;封闭的接口一切都在开发者的设计之中,可以拥有更好的稳定性这是毋庸置疑的。

内存控制

对于硬件飞速发展的今天,很多人认为“内存控制”已经不必过度考虑了,但我觉得还是有必要关注一下,包括变量内存的占用和合理释放。我曾经写过一个简单的 Python 脚本用来处理一个 900 多万行的通信用户数据,在那个脚本的运行过程中,我深切感受到合理分配和控制内存的重要性。即便硬件配置再高,对内存进行合理优化总是好的。

简洁

一个事情事物搞复杂是一件简单的事,但要把一个复杂的事物变简单,这是一件复杂的事。[20140830修改]完美的设计“不是无物可加,而是无物可减”。

手机上有一个 APP 叫做 Clear 是一个很好的例子。

科技专栏作家约翰•帕夫卢斯(John Pavlus)评论说:“Clear很有趣,它没有提供很多功能,例如它没有日程表同步功能,没有标签功能,没有智能分类,甚至在其手势操作界面上,连个明确的操作指引都没有。”

溢出处理

C.A.R. Hoare 曾说,有两种方式构建软件设计:一种是把软件做得很简单以至于明显找不到缺陷;另一种是把它做得很复杂以至于找不到明显的缺陷。

我们设计一个软件,当参数和功能越来越繁杂和强大时,总难免存在思考的盲点,如果这些盲点都在我们的意料之中并给出了处理方式,这时我们就向完美的设计更近了一步。

专注

Instagram 第一代应用程序 Burbn 功能齐全,产品定位复杂,包括地点登记(check in at particular locations)、交友、图片分享、聚会等等,但用户却寥寥无几。后来经过统计发现,用户通过 Burbn 使用最多的功能是图片分享,而对其地点登记的功能几乎无人使用!Systrom 和 Krieger 开始重塑软件,专注图片分享,一番简化后的 Instagram 可让用户在 30 秒之内学会使用。随后,用户增长速度也快得惊人,仅用四个月就达到两百万,增速超过 Foursquare, Facebook 和 Twitter。

关于作者
麦子,80 后,现从事通信行业。安卓玩家一个人的书房朗读者。
MRJENGLISH
jsntn
jasonwtien
jasonwtien
更多…… /about.html

最近更新: