Unix哲学与移动应用开发

作为Linux的忠粉,《UNIX编程艺术》这本书自然不可放过。书中第一章哲学部分,从多个方面阐述了Unix哲学。对于Unix哲学的普适性,作者认为,

“在其他操作系统下,要做到良好实践通常要相对困难一些,但是尽管如此,Unix文化中的有益经验仍然可以借鉴”

近来对移动应用开发有所涉猎,故尝试从Unix哲学角度谈谈对APP开发的一些认知。

1、模块原则:使用简洁的接口拼合简单的部件

模块化自始至终都是软件设计要遵循的重要原则之一,移动开发自然也不例外。在日常开发时,尝试把可能单独剥离出来的模块分离出来,形成自己的“轮子”仓库,无论从开发效率的提高,还是对于降低无端的BUG出现概率,都是极好的。这些可能独立出来的模块有:

  • 日志记录
  • 文件读写
  • 本地参数读写(Android中为SharedPreferences)
  • 配置文件读写(如xml、ini等)
  • 数据加解密(AES、DES、MD5等)
  • http协议类(POST/GET)
  • 图片操作
  • 二维码生成
  • 其他等等

这些模块,不管是自己沉淀下来的,还是借鉴他人的(阮一峰:如何选择开源许可证?),关键在于可复用性。当然你还可以开源出来,造福更多的猿儿们。

2、清晰原则:清晰胜于机巧

程序员重读自己代码的可能性非常之高,而自己的代码被他人阅读应视为一种荣幸(毕竟没有死在自己手里)。每天在指尖流淌出来的应该是优雅而清晰的代码,日久天长方能汇成一股清溪;倘若浊且颜色不正,最终毁的是自己的时间,甚至得到他人画的圈圈。

对于注释,如若架构设计清晰,文件及变量命名易懂,是可以不写的。但也正如书中所言:

永远不要去吃力地解读一段晦涩的代码三次。第一次也许侥幸成功,但如果发现必须重新解读一遍——离第一次太久了,具体细节无从回想——那么你该注释代码了,这样第三次就相对不会那么痛苦了。

3、组合原则:设计时考虑拼接组合

如果程序彼此之间不能有效通信,那么软件就难免会陷入复杂度的泥淖。

的确如此。在Unix中,提倡用简单、面向流、设备无关的文本来实现多个程序间的通讯。而在Android中,也有类似的机制,那就是URI。URI将大部分的Android资源都以字符串的形式表示出来,其他应用通过简单的接口调用即可与之通讯(调用)。

同样的,你的应用也可以自定义URI,并开放给第三方应用。这样的机制确实给应用间的通信带来了极大的便利。

4、分离原则:策略同机制分离,接口同引擎分离

调侃点说,分离原则实际上就是把活泼的和安静的两位同学分开。那些容易发生变化的,如书中所举例的策略和接口,与相对稳定的内容(机制和引擎)分离。形式上可能会是两个进程并行,或是上下隔离。

举个例子,一个用于加解密文件的应用,用户可能会选择不同的加密算法,同时会有不同类型的数据需要加密,照片、视频或者仅仅是文字。对于加密算法就需要单独设计成一个引擎,对外的接口可能如此简单:

byte[] encrypt(int algorithmType, byte[] src);

而上层的GUI,会根据加密场景延展出丰富的内容,比如照片批量加密、聊天实时加密、剪贴板加密等等。

如此一来,不管上层需求如何改变,底层的算法引擎始终不会变化。

(这种设计方式)大大降低了整体复杂度,bug有望减少,从而降低程序的寿命周期成本。

5、简洁原则:设计要简洁,复杂度能低则低

这似乎正是我之前设计的DATA+++的核心理念:用小而美的应用组成工具集,为用户提供可扩展的加密服务。

微信似乎正是这种理念的践行者,虽然有人觉得越来越臃肿。微信势必要做成一个“操作系统”,导致其涵盖的面越来越广。但就其应用设计本身而言,已经将简洁原则发挥到了极致:

  • 订阅号全部塞进一个对话入口内
  • 插件式的设计:依次点击 我/设置/通用/功能 才能看到隐藏的功能插件
  • “发现”和“我”中条目少到默认不会出现滚屏
  • 一个搜索入口可以搜索所有的内容,而非在通讯录、朋友圈、文章、公众号等各自设置一个搜索入口,mac的spotlight也正是如此

6、吝啬原则:除非确无它法,不要编写庞大的程序

能拆就拆,不能拆就叠。这似乎是模块原则和分离原则的最佳实践。

7、透明性原则:设计要可见,以便审查和调试

软件设计做到可见是不容易的,不过对于移动开发,固定的开发模式使软件很容易做到设计透明,这得益于移动开发框架的良好设计。

调试占到了设计的很大比重,程序的输出其实是有很大学问的。如果一个异常输出隐藏在一堆“aaaaa”、“12345”和“@@@@@”中时,上下反复的滚动会把时间和耐心都消耗殆尽。如果把这部分单独拎出来,会是个很有意思的话题。

8、健壮原则:健壮源于透明与简洁

健壮,健壮,谁都想壮壮的。可是,谁生来就是壮士呢?软件设计之初,就对整个架构有全面系统的思考,在开发过程中时时考量设计的健壮性,在开发结束后重新审视软件的各个层面。在所有的软件设计中重复上述过程,会使你设计出的软件不断趋于健壮。

12、补救原则:出现异常时,马上退出并给出足够错误信息

现在有越来越多的SDK收集移动应用的崩溃信息,并自动传递给开发者。我不建议这种方式来收集用户信息,一来有悖于对用户隐私的尊重,二来对于那些不具备联网权限的应用来说是很难实现的。一种好的方式是,提供崩溃信息收集引擎,实现信息提示接口,同时提供一键发送和复制接口,以便具备和不具备联网权限的应用选择使用。当然,这似乎与诸多SDK的运营策略有关,暂且不谈。

15、优化原则:雕琢前先要有原型,跑之前先学会走

产品界有个概念叫最小可行性产品(MVP),是说在产品设计时,先做出仅包含产品设计者最想要的功能的产品,投放市场后看用户反应,再来决定接下来的设计方向。同样的,软件开发实践中也有敏捷开发一说。两者和这里的优化原则有异曲同工之妙。

其他原则

9、表示原则:把知识叠入数据以求逻辑质朴而健壮
10、通俗原则:接口设计避免标新立异
11、缄默原则:如果一个程序没什么好说的,就沉默
13、经济原则:宁花机器一分,不花程序员一秒
14、生成原则:避免手工hack,尽量编写程序去生成程序
16、多样原则:决不相信所谓“不二法门”的断言
17、扩展原则:设计着眼未来,未来总比预想来得快

Unix哲学之一图以蔽之

KISS原则
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,577评论 25 707
  • 前言 Unix是开源运动历史上最著名的代表之一,而如今前端是开源运动中最活跃的一支队伍,我相信它们两者之间一定有共...
    云峰yf阅读 3,053评论 0 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,103评论 18 139
  • 转载至异次纪元文章链接:http://www.iplaysoft.com/p/brief-history-of-l...
    弄浪的鱼1阅读 3,101评论 0 22
  • 大家好,我是一名刚刚使用“简书”这款APP的新人。第一次码字发文,我就聊聊我是如何认识“简书”的。 彼时,我正...
    落叶满阶阅读 222评论 3 0