软件设计的沉静|ONES 技术人

软件设计的沉静|ONES 技术人
文章图片

蔡明金自称他是吉他「十年初学者」。在读大学期间,他跟伙伴组过乐队。如今,投身技术工作,他对协作、编程和软件设计都有「沉静式」理解。
以下是蔡明金与 ONES 故事——部分来自其自述,部分来自他某次技术分享会的内容。
【软件设计的沉静|ONES 技术人】软件设计的沉静|ONES 技术人
文章图片

冷静解决问题
我以前的脾气比较暴躁,如果发现产品设计上的不一致,就会怼回去,毫不留情面。
现在我有了很大的转变。我觉得,能够心平气和地与别人在一件事情上达成一致,朝着共同的目标去完成任务,也是很好的体验。
学会冷静地解决问题、处理人际关系,是我进入 ONES 工作两年多以来看得到的成长。虽然可能跟我的年纪渐长有关系,但更重要的是受到的 ONES 工作氛围熏陶。
在有些公司,部门之间边界明晰、泾渭分明。而 ONES 是一家认真做产品的公司,部门之间的联系和合作很多,所以平时了解彼此的习惯和处境,耐心地沟通,这样下来从结果来看效率也并不会降低。
最近,我梳理了《软件设计的哲学》这本著作的内容,和同事们做了一次交流。
战略性编程
哲学是一种冷静的处理方式。我之所以做这个分享,主要是想告诉大家,哲学其实是工作过程中的点滴,目标是让大家更有意识性地编码。总的来讲,是**希望大家要进行战略性编程,而不是战术性编程。
**
软件设计是工程、数学、艺术、文化的融合创造。软件设计里面有「门道」。
软件设计整体目标是减少复杂度。而所谓的复杂度反映的是:软件系统的结构的理解、修改的难易程度。
如果你尝试了一个方法但是没有减少复杂度,你很可能没必要保留它。
具体来看,复杂的特征包括:
1.当新增特性时,需要修改大量的代码;
2.当需要开发一个功能时,开发人员需要了解许多知识;
3.当新增/修改功能时,不能明显地知道要修改哪些代码。
可以概括为:系统是不是难以理解,系统是不是难以修改——如果是,那么这就是复杂的。
复杂度并不是由单一的巨大错误产生的,它是由很多小错误累积而成的。一个简单的依赖和晦涩的名称定义,并不足以影响整个系统。但是积少成多,数量足够多时会导致复杂度。最后,任何小的改动都会影响整个系统。
接口是一种别人需要记住的信息,那么过于多的接口,或者过于复杂的接口都会加重别人的认知及理解负担。这就是一种复杂性的引入。
「异常」一词是指代任何会改变程序中正常控制流程的不常见条件。充分考虑容错的情况下,异常处理可以占系统中所有代码的很大一部分,但错误处理并不是越多越好,这会导致一种过分防御的风格,其中任何看起来甚至有点可疑的东西都会抛出异常,这就变成了异常的泛滥,从而增加了系统的复杂性。
为了快速完成一个任务,也许你有一个截止期限,此时长期的效益并不是首要考虑的事情。你没有花更多的时间寻找好的设计,你只是想快速解决问题,你想的是写一堆代码去实现功能,越快越好——这只是战术性编程,不可取。
战略性编程是从小事做起,是不断地在当下做“小投资”,不断地寻求更好的设计,以换取长期的复利回报。

    推荐阅读