昨日部门技术分享的内容是“Unix的设计思想”,有些感悟,这里分享给大家。
unix是什么
不是软件开发的人可能不懂什么是unix,但其实它老牛逼了,我们每个人几乎无时无刻不和它打交道。
unix是经典的操作系统,可以说是现在操作系统的鼻祖,大家听说过的系统中大部分是来源于unix,例如linux、苹果电脑的osx都是类unix系统。大家使用的苹果手机,它的ios系统的核心也是类unix,安卓手机用的也是linux内核,大部分服务器都是使用linux。
你们现在都手机不离手,每天都要上网,你们说你们不是每天都离不开它~
unix的设计思想
你们现在知道unix这么厉害了,那它的设计思想绝对靠谱没错吧。这里舍弃只适用于技术领域的设计原则,并“翻译”部分原则成非软件用语。完整的介绍可以查看维基上的条目。
do one thing and do it well
在软件开发层面的意义是尽可能让一个代码模块只做一件事情,把这件事情做好,然后把一个个小功能组合起来实现大功能。打个比方,把“泡茶”这件事情拆分成“烧开水”、“找茶叶”、“放茶叶”、“倒水”这样4个功能。这样很好维护,如果其中一个模块没做好,只要修改那个模块就好,而且可以提高程序的复用性,比如“烧水”除了可以用于“泡茶”还可以和其他小功能组合成其他功能,例如“煮泡面”。
- 单一职责
一个模块做一件事情,就叫单一职责。只做一件事情,就能把事情做的更好,而且模块间的组合可以提高软件的复用性。这是一个普适的道理,可以以很多角度去解读。比如现代工业中,产品的生产环节被拆分成很多部分,每一部分的生产来源可能是世界各地。再比如,在企业管理中,让每个部门每个组甚至每个人做职业明确专一的工作,职业划分清楚,不仅可以提高专业度,也可以提高整个企业的协同效率,不会出现相互推诿的情况。
- 杠杆效应
假设有A、B、C、D四个功能,那排列组合可以组成N个功能,这就是一个杠杆效应。比如ABC串连可能形成一个功能A+B+C,对AB的结果进行C操作又可以形成一个功能C(A+B)。只要职责清晰,虽然每个功能很小很专一,但是组合起来就可以无限的可能。如果你掌握A技能,同时掌握B技能,它们组合起来就可能给你创造很大价值。例如你英语很好又善于投资,早几年看到了看到了国外的比特币的资料,然后随便买了几千,现在就财务自由了...
- 一生只做一件事
日本人的制造业世界一流,有很大部分原因在于他们做事的专一程度。很多日本人,一辈子只做一件事,做饭的做一辈子饭,做手表的做一辈子手表。一生或者一个阶段只做一件事,对于大部分人或者组织来说都是做好事情的必须。前段时间我有一个习惯培养计划,一下子写了很多个,结果发现顾此失彼,后来直接删到只有一个,我花一年时间能养成一个好习惯,其实完全值得。
简单即是美
这个在程序开发里的意思是尽量避免不必要的复杂性,例如接口简单易用。KISS,即Keep It Simple & Stupid。在程序开发上,这样可以提高程序的使用成本。在类unix系统中,各种文本都是小写为主,而且有简写。例如ls
是list
的意思,但它还可以写的更简单,一个l
就够了。这个设计思想其实和乔布斯对苹果产品的定义也是一样的。没有多余的信息和操作,只保留最精简最核心的点。苹果产品的设计无论是硬件还是软件都是尽可能简洁。这个思想可以在平时的创作、沟通表达等等不同角度去应用。例如你可以在写PPT、工作报告时不要太花哨,重点突出,少无价值信息的修饰,刻意精简生活用品数量,衣服太多每天还得纠结串哪件~
90%的解决方案
没有100%完美的方案,99%完美度的方案的成本很可能是90%的几倍。所以不追求100%,如果一个方案可以解决问题的90%,那就可以了。打个比方,如果你上网想买个椅子,花10分时间你看到一款还行,那你就把它买下。也许你花点时间可以找到质量更好价格更便宜的,但你很可能为此付出几个小时时间。100%和90%的差距并不大,而更好的椅子可能只是便宜几十块,质量好点但是并没有打区别,但你却为此付出了2小时。
结语
专一、单一、简单、不追求完美,这些思想都是概念上的,大家可以脑洞大开,看看还能有什么应用。