一个好的软件工程就是一个好电影

今天来跟大家分享一下我对于一个好的软件项目是什么样的观点和看法。

首先说一下一个好的电影到底是应该是什么样的评判标准?

首先我们要来说一个好电影,一定是讲清楚了某一个具体故事的。

实际上我们都认为每个电影都至少讲清楚了一个故事,但是也看到了很多的烂片讲的故事根本不值得讲或者是是讲了这个故事虎头蛇尾,甚至有些时候根本讲的都不是一个完整的故事。

所以一个好的电影必须是讲一个值得讲的故事,并且讲的清晰的故事。

其次,讲这个故事是需要有一个非常好的一个剧本。

换句话来说,我们要讲清楚某一件事情、某一个故事、某一个画面,并不是采用一种平白直序的方式来描绘这个故事,而是用一个良好的剧本围绕这个故事为主线来展开。或跌宕起伏,或婉转道来,每一个剧本每一个场景,每一个转折点都能够支持这个故事的线性发展。

一个好的剧本没有一处是多余的,每一个画面都是为了表达某一个想法,某一个观点或者为了铺垫下一个高潮。

与此相反,有很多烂的电影在剧本上面往往会出现很大的问题,很多时候用了大量的时间去叙述某一个场景或者画面,但是和电影的主旨却毫无关联,观众看了二十分钟对于某个情节的刻画,满以为会和后面的高潮情节关联起来,看完了才发现看了个寂寞,半毛钱关系没有,直接剪掉二十分钟完全不影响它还是个烂片。

对于剧情和情节设计之牛逼,这里面非常典型的我认为就是周星驰的电影,举一个具体的例子,就是《九品芝麻官》这个电影里面有大量的细节上面的场景上面那些描述,但往往我们看到了它在后面都是能够前后呼应,真的可以算得上没有一个画面,没有一个买伏笔是多余的。比如周星期在杂技班学习吞剑,就在后面对簿公堂上使用了这一招。

最后一个点,我觉得每一个电影画面是有细节的,而且这个细节是鲜活的。

往往说细节是魔鬼,一个细节往往在最小的地方有着最大的感染力。往往细节都是普通却撼人心魄的,一次流泪,一次微笑,一次幽默,一次反转,一次回头,一次牵手,一次拥抱这些都是一部好电影不可或缺的细节,往往就是无数个多个细节构成了画面和情节,最终直击我们的心灵。

当然细节是要有在好剧本的情况下才能够体现的,但是很多电影往往讲不好整个故事,却在细节处下苦工。有些时候就会变得画虎不成反类犬的既视感。

所以很多烂片里面你会发现它也存在很多搞笑的一些情节,但是你会发现在没有一个良好顺畅的主故事线路的铺垫下,这种细节反而成了扭泥作态,强行搞笑,刻意逗乐观众。

好,我们说完了一个好电影的几个特点,那么我们回过头来看一个好的软件工程应该具备什么样的特点?或者说为什么我们说一个好的软件工程实际上就是一部好电影?

首先第一个点一个好的软件工程一定是系统性的解决了某一个问题。

这个我相信一个好的软件系统工程和一部电影一样,电影要说清楚一个问题,而一部好的软件工程要解决一个好的问题。

在互联网软件行业里,我们更在乎的是一个软件工程是不是能够系统性解决某一个问题。除了在各方面能够达能满足需求外,在性能、体验、成本、安全上面也是满足合格的。

其次,一个软件系统是要跟一个电影一样,具有一个非常良好的结构的。

这个就是我们所谓的一个系统架构,软件系统架构要具备一定的优美性、结构性、可扩展性。和电影有点不一样,电影的结构是给观众看的,而一个软件工程的内部结构是给开发者去看的。这个就是所谓的这同样满足了某一个需求之后,软件的质量是完全不一样的。用同样的相关的逻辑,尽管也能写出一份满足需求的功能代码。好的软件工程和软件工程在结构性,在鲁棒性,在稳定性,可扩展性都是不可同日而语的,这个就非常考验软件工程师的架构设计能力,这个就如同一部电影需要有一个非常好的剧本一样。所谓骨架即架构,良好的骨架就能支撑一个生命体动态的活着。

和好电影一样,一个非常好的软件架构应该是多一行代码嫌多,少一行代码就跑不起来了。每一行代码,每一个模块,每一个方法,都有它具体和清晰的功能。或者换个专业说法,模块内的逻辑一定是紧耦合的。

好的工程里不存在累赘的,复杂的,多余的,无效的代码。这个就是如同电影里面的每一个台词,每一个场景,每一个细节都承载着它具体的功能的。

最后就是代码是有细节的。

尽管解决某一个特定的功能都可以用不同的代码方法,但是在好的软件工程里面解决某一个最具体的问题的时候,一定用的是一个当下最佳的办法。比如在处理某一个变量或者列表的时候,有没有用上一个很好的函数?比如同样处理一个常见问题的时候,是否运用了恰到好处的高级函数?

如对于两段处理相同的逻辑,有没有抽象到一个公用的函数来解决这个问题?

比如比如对于异常的处理是不是已经非常的明确,在面对各种各样的边界异常情况都能够展现出一个很好的用户体验?

比如在核心的场景链路里面有没有设计可以自动降级的逻辑,可以在次要的接口异常的情况下的话,不会损害主干的功能?

这个就是所谓的魔鬼细节。

当然和电影的剧情和情节一样,如果只是有代码细节而没有全局的架构,那么这个细节不值一提。

所谓细节决定成败,细节是魔鬼,往往是在有全局观的情况下,细节才能够彰显出来它的魅力。

所以一个好的软件工程就是一部好电影。一部好电影可以是一个很好的艺术品,一个软件工程也可以是一个极好的艺术品。