首页 > 其他分享 >一个好的软件工程就是一个好电影

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

时间:2023-12-04 10:04:21浏览次数:34  
标签:故事 一个 代码 电影 细节 软件工程

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


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

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

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


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


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

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

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


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


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


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


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

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


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

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


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

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

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

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


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

一个好的软件工程就是一个好电影_软件系统_02

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

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

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

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

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

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

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

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

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

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

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


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


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


更多精彩文章可以关注公众号:ali老蒋,或访问作者博客:http://www.javaer.com.cn/



标签:故事,一个,代码,电影,细节,软件工程
From: https://blog.51cto.com/u_15990596/8673455

相关文章

  • 一个好的软件工程就是一个好电影
    今天来跟大家分享一下我对于一个好的软件项目是什么样的观点和看法。 首先说一下一个好的电影到底是应该是什么样的评判标准?首先我们要来说一个好电影,一定是讲清楚了某一个具体故事的。实际上我们都认为每个电影都至少讲清楚了一个故事,但是也看到了很多的烂片讲的故事根本不......
  • 第10次-创建一个在线网站
    第10次-创建一个在线网站这个作业属于哪个课程https://edu.cnblogs.com/campus/uzz/cs3这个作业要求在哪里https://edu.cnblogs.com/campus/uzz/cs3/homework/13118这个作业的目标创建一个在线网站我的在线网站链接(公网):http://43.139.173.201/......
  • 使用 anasible 搭建一个多 master 多 worker 的 k8s 集群
    kubernetes+istio是目前最强大,也是最易于使用的服务网格方案。要使用kubernetes+istio,首先要搭建kubernets集群。搭建kubernetes集群的方式有很多,其中使用anisble自动化搭建kubernetes集群算是最具合适的方案了。服务器列表:192.168.2.58k8s-lvs-01#lvs主服务器1......
  • OUC软件工程08小组团队项目-Alpha冲刺-3/3
    在本周的时间里,我们继续完善了代码,调试了SAR图像检测算法的参数,训练了一些模型。对于网站,我们继续使用html5以及css完善了web页面,并且编写了api接口用以调用SAR的后端。在实现接口的过程中,出现了一些困难,还需要学习更多关于接口实现的知识。在接下来几周的时间内,我们需要尽快实现......
  • 软件工程读后感8-代码阅读方法与实践
    最近,我阅读了代码阅读方法与实践的下一部分。在C程序中,指针一般用来:构造链式数据结构、引用动态分配的数据结构、实现引用调用、访问和迭代数据元素、传递数组参数、引用函数、作为其他值的别名、代表字符串、直接访问系统内存。过去,我对于指针的作用的了解不够,将来,我会尽可能的多......
  • 仿京东淘宝商品列表筛选组件:实现一个高效的侧边栏弹框筛选功能
    仿京东淘宝商品列表筛选组件:实现一个高效的侧边栏弹框筛选功能一、引言随着电子商务的快速发展,用户体验成为了竞争的关键因素。在众多的电商网站中,如京东和淘宝,商品列表筛选功能为用户提供了便捷的途径来找到心仪的商品。本文将详细介绍如何使用cc-widget、uni-icons和xg-list......
  • 一个好汉三个帮【投名状】
    各位靓仔:本人是混迹北京15年大中小公司互联网行业的老炮,研发10余款APP,联合孵化5个百万级项目,曾任APP研发工程师、项目经理、创新经理、质量品控经理、新浪动漫子公司制片人。现已回归故里,时间充裕,只因无法接受碌碌无为躺平的日子,故此,与志同道合的两位大腿“刘丹博士”“林祥纤”,......
  • 分享一个LCD驱动框架
    首先需要说明的是本篇文章不是关于如何点亮一块LCD屏的教程,而是介绍一个LCD开发框架,更准确的说是介绍一个LCD的中间件(Middlwware),用来连接UI和不同类型的LCD屏。笔者本人的工作内容中很重要的一部分就是在不同的LCD屏上做UI开发,所以对如何最大程度复用LCD代码以及解耦屏驱有着一定......
  • 同一个train.py,没改任何代码,一会能跑,一会不能跑
    问题描述跑一个模型,加载预训练权重,只进行推理,没有修改任何代码,刚开始直接运行可以得到推理结果,然后再跑,程序又卡住了;然后我使用调试,一会能跑,一会跑到第五六个batch时,又卡住了。解决方法修改dataloader的num_workers。我程序原来workers设为的8,后面改为4就可以了。原因因为代......
  • 2023-10-28:用go语言,给定一个n*m的二维矩阵,每个位置都是字符, U、D、L、R表示传送带的位
    2023-10-28:用go语言,给定一个n*m的二维矩阵,每个位置都是字符,U、D、L、R表示传送带的位置,会被传送到:上、下、左、右,.、O分别表示空地、目标,一定只有一个目标点,可以在空地上选择上、下、左、右四个方向的一个,到达传送带的点会被强制移动到其指向的下一个位置。如果越界直接结束,返......