美文网首页主题写作
全局化视野、系统性思考

全局化视野、系统性思考

作者: Metacognition | 来源:发表于2015-08-16 00:28 被阅读218次

    在与新踏入职场不久,或者新加入公司后不久的程序员沟通,了解他们的技术方案和代码的时候,我发现,他们与我最大的不同,就是难以全面思考问题,然后就是难以认识到自己思维的弱点。

    但是到底什么是全面思考问题呢?怎样才能做到全面思考问题呢?我估计,并没有人能够教导他们这些方法,就如同我自己没有学习过一样,然而,我认为,学习这件事情,不应该总是从无数的犯错中学习,从一开始,就应该有人作为教练来教给新人这些思考方式和技巧。而不应该向我当年一样花了这么多时间才学会这些东西。

    一般来说,思考问题有两种模式,一种叫聚焦性思考,另外一种与之对应,就是发散性思考。当一名程序员需要设计一个系统的时候,对于一些关键组件的实现,应该尝试去聚焦性思考,在大脑里构造出所有抽象组件,模拟他们互相之间的交互,推理设计出来的抽象,是否足够合理,足够精简,足够高效,足够易于扩展。

    而当考虑到要实现的系统,应该具备哪些特性的时候,应该尝试进行发散性思考。也就是我们常说的发散思维,多个人在一起的时候,就是脑暴。

    然而程序员的发散性思维,我认为不是漫无边际,或者意识流的发散。那样对设计系统,并无很大的帮助,很多时候在浪费时间,而程序员自己,应该意识到这一点。

    发散性思维,来考量系统设计的时候,我认为是有据可循的。我个人的方法,是从时间和空间两个维度进行发散和思考。

    先说时间维度。视角应该向历史回顾,向未来展望。向历史回顾的时候,要反思现有系统的设计缺陷,原有系统为什么会设计成这样,要找出其根本原因,要尝试去推理上一个实现者,思考问题的方法。一味去推翻一个旧的设计,固然大快人心,但是,新的实现者,要有效评估得失。新实现是否跟老系统兼容?这种兼容性是否带来问题?如果不兼容怎么处理?牺牲了兼容性而换来的优雅,是否值得?要花费多少时间处理问题?是否还有更好的方法,更彻底地解决问题?

    这种视角,不单单应该回顾历史,还要展望未来。我设计的系统是否足够合理?未来会遇到什么问题?需求在宏观上有哪一类发展方向?我是否对一种高概率的发展方向足够重视并留有余地?用户规模如何发展?系统如何扩展?怎么平行提高系统的性能?怎么提高系统的容量?

    时间维度的思考和审视,看起来还合乎一般直觉,训练有素的程序员,或多或少能着手进行一部分,但是在空间维度,就少有人能够有意识去努力了。

    我所说的空间层面,是跳出程序员,跳出开发这个任务,去思考问题。应该考虑到跟你设计的系统牵扯的所有人,所有事物的特点,你所实现的这个系统,对他们带来怎样的影响。

    最常见的,你在一个公司设计一个面向用户的系统,那么你首要考虑就是用户到底怎么去使用,而不是一味关心产品经理给你的需求,你怎么实现,还是应该站在用户的立场上来看待你将要实现的系统,是否真的带给用户好处?如果没有足够的好处,是否公司的商业目标如此限定?然后,你自然而然的要站在运营人员的角度思考问题?我如此实现系统,运营人员如何开展工作?他们是否能够快速发现系统用户的使用情况?能否快速归纳用户的使用习惯?能否统计出足够的评价指标?这种统计在现有系统的设计基础上,是否方便完成?如果这种用户系统,是涉及到公司现金收入的,你要考虑财务人员,有怎样的审计要求?有怎样的对账要求?有怎样的结算要求?

    当然,还有一个人群,也是你必须考虑的,就是其他程序员。如果多人共同开发系统,你的同伴能力如何,他们的知识体系如何,他们能否理解你的设计,如果你的设计过于精妙,对同事来说是否便于理解,便于合作,便于开发,便于维护,你选定的方案,是否有足够多的文档,他们是中文英文,同事学习是否有障碍,如果你离职了,接手人是否会遇到困难?

    空间角度的发散,要求你关注全公司所有相关工作人员的想法,你对一个业务系统的局部改变,对全局来说产生什么影响?哪些东西最终可能会出问题?如果你进行这一类思考,然后均衡利弊,给出最优的做法,这种做法,往往不具备技术视角的最优性,但是却对整个公司的运转,提供最优解。而这就是系统性思考了。

    个人觉得经常进行系统性思考训练,尝试开拓自己全局化视野的程序员,是真正走向了一个“解决问题专家”的成长道路,有时候,也更能理解一些伟大的设计的缘由。这种思考是困难的,耗费精神的,但是结果有时候却未必非常的复杂,可能只是数据库里多了一个看起来无关紧要的字段,对代码量也没什么增长,但是就是一个微小的设计,在未来却可以发挥巨大的作用。另一些时候,看起来是对一些缺陷的妥协,但其实,省却了因为不容忍带来的系统动荡,节省了很多运营事故处理的时间。

    最后一个我想说的是,程序员应该目标明确。不光是自己的目标,KPI,还应该考虑自己部门的目标,自己公司整体的目标。一般来说,只有公司整体利益最大化,个人才能从中受益。然而因为一些管理上的原因,公司的目标,部门的目标,小组的目标,你自己的目标,四者未必可以完全吻合,那些不吻合的部分,极可能都造成你做了无用功。而你应该总是尝试去识别出来。一旦识别出来后,该如何处理,这需要极大的智慧,就不在本文展开了。

    个人公众号:八〇后札记

    相关文章

      网友评论

        本文标题:全局化视野、系统性思考

        本文链接:https://www.haomeiwen.com/subject/eimwqttx.html