软件的极简主义

最近在公司同时带了好几个项目,在开发过程当中总会遇到不一样的需求而后不断的修改,最后回过头来对比最初的项目设计发现一个很小的项目最后居然变得如此之复杂,冗余的API和大量复杂的接口。linux

而这一切就是为了知足不一样的客户需求,下降客户的使用成本。可是这样的设计最终会是一个软件面临死亡(复杂过分以致于在重构的代码大大增长)。redis

反思本身所带的项目内容和开发现状,我想到了一个词---软件的极简主义sql

软件的极简主义,虽然目前没有明确的定义,就看成是个人瞎想吧。服务器

通常认为“极简主义”是设计界的一种风潮,可是软件发展至今,好像也渐渐有了这样的趋势,甚至我认为这是将来的必然,咱们常常听人说“flexible”这个词,字面上来看就是“灵活的”,可是具体到这个软件是否灵活,就不太好判断了。数据结构

可是,简单的软件,必定是灵活的。多线程

极简主义的的大敌

软件极简主义的三个大敌:配置文件,冗余的参数,和大量复杂的接口。异步

不少人热爱配置,迷恋配置,认为越多的配置项意味着软件越强大,适用范围越广,但这是九十年代的事了。实际咱们仔细翻翻经常使用的软件,90%的配置都是多余,没有人明白他是作什么的,也没有人但愿去改变他。比方不少软件的configure文件,经常能列出上百个配置项,可是咱们真的须要这么多吗?不,咱们须要默认的那些值就好了。何谓默认?由于软件的设计者以为这些是最优化也最有可能被选择的配置,那么既然是最优配置,咱们又有什么理由去改变他们?分布式

再说说冗余的参数,linux中有一个很是强大的命令’tar’,从man文件看来他起码有二十来个参数,可是我真的须要这么多参数吗?其实我只要记住压缩是-c,解压是-x就能够了,那么何须为了1%的功能而去加上这99%的参数呢。flex

最后是复杂的接口,举个栗子,全文搜索引擎solr很是强大,能知足咱们对于文档索引的各类需求。可是他使用起来可不简单,缘由我想就是由于他那种sql式的查询接口,把一件很单纯的事情搞复杂了。咱们来设想一下,须要找出包含某几个关键词的文章,必要的条件是什么?关键词,文档,没了。而文档是存储在服务器的,为何咱们提供了关键词以后,仍需加上各类条件,他才能告诉咱们想要的答案呢?我想软件发展到必定的智能,他就应该像一部能说话的百科全书,提问,而后告诉咱们答案便可。优化

凡事都要对比着看,因此咱们找点软件来对比一下。

redis 与 sql

redis很灵巧,全部源代码加起来不满5M,可是他很强大,hash结构能取代咱们80%对于sql的需求。他也有配置文件,可是选项不多,并且每一项都有详尽的注释,而且使用默认配置就能够应对大部分的状况。惟一值得诟病的就是他的接口种类繁多,但好在这些接口颇有规律可循,你只需了解了redis的基础数据结构,那么跟着官网的文档就很容易搞懂全部接口的用途,并且大部分的接口都只接受3个之内的参数,这可好记多了。我刚接触redis的时候,只花了半个小时就能玩得起来,我想面对sql恐怕没人能这么轻松的掌握吧。

zmq 与 rabbitmq

zmq是我见过的最具备极简主义风格的软件(组件)。一方面他要面对的任务很是繁杂,在异步通讯中全部咱们可能遇到的状况,他都为咱们考虑到了,可是他又将底层的复杂问题掩盖起来,让咱们看到一个光滑的表面,深藏功与名。一样来看看他的同行rabbitmq,关键词:中心服务,多线程,模式单一,最后一个特色,慢!而仅有1.7M的zmq,快是最直观的感受,而分布式和扩展性则是锦上添花。有人说zmq就像乐高积木,每一个人都能搭出他想要的形状,这话一点都不错。

结语

软件的设计突飞猛进,未来确定会接触到更多优秀的软件,也许哪天我想法变了,也许哪天遇到了更神奇的方案,可能我会补充在这里。

相关文章
相关标签/搜索