对软件工程的思考:你所设计的,到底是override还是overwrite?

2026-06-22 ·2520 字 ·8 分钟

仔细想来,从我深度使用 AI Agent 编写项目以来,已经过去几个月了。无论如何,AI 确实对我这种记性不好所以编程苦手的人带来了极大的帮助。我从一个卑微的牛马,一跃成为了统领数个 Agent 的独裁设计师,日常任务基本就是:发初步构思、把关进度、做设计决策、查漏补缺。

嗯,感觉是纯粹的脑力劳动!因为变成了只需要打几个字、点头摇头的岗位,我的开发效率可谓是大幅提升。当然了,太久听不到反对的声音,人难免会变得昏君,所以我一路上也吃了不少苦头。不过吃一堑长一智,Level up up up!

不知不觉好像写了好多东西,代码似乎也能顺利运行的样子。只是……有一个小问题我一直没说:

笔者我,根本没学过软件设计

可是,诶,等一下等一下,我怎么记得笔者的自我介绍是计算机学生?是的,CS 学生没学过软件设计!因为笔者在撰写这篇博客的时候尚未升入大三,高阶课全都没过~

就是这样,笔者作为一个软件工程行业的野人,这几个月一直在自己摸爬滚打,瀑布下苦修庐山升龙霸。我想,作为外行,视角想必和科班有所不同。因此,我想在这篇博客里讲讲自己的感悟。


他人的想法我并不知晓,不过说到自己写各种项目的理由,那肯定是「对已有的实现不满,所以想造个自认为更完美的」这种癫狂重复造轮子心态。(嗯,感觉如果这个人喜欢玩手工,肯定会批量制造很多垃圾。)这就造成了一个前提:当我开始一个项目的时候,我的脑子里已经有至少一个同类项目作为参照物了。

之后便是快乐的构思阶段!只需要制造充满术语、定义、大空话的长篇文字,零代码参与,怎么能不爽呢?不知是受了什么企业文化的影响,还是天性爱装,我特别喜欢提概念。今天这个是「儿童友好的成人分级内容」,明天那个是「初音未来作为根本原子」(※注:并没有真的提出过这些概念)。以这个概念,或者说——原则——为中心,再往下一点点做设计。「因为要儿童友好,所以把所有的血都变成绿色的吧♪」,诸如此类。在这个过程中,需要一直检查是否违背了核心概念、系统是否自洽——用大白话来说,就是是否问心无愧


可能因为平时使用自然语言比较多,我很快就发现了一个重要的核心——语义。而且,语义混乱是很要命的。让我们稍微回退一下,重温一遍上个自然段:

以这个概念,或者说——原则——为中心……

前面还在说概念,这一下又变成原则了,这是搞什么?如果一直混着说「蟋蟀」和「蛐蛐」,让不知道这两个词其实指同一种昆虫的人看到,可就要头疼了!「创可贴」和「创口贴」换着用,一个不小心嘴瓢成了「创贴」(虽然听起来还挺可爱的),自洽性可就要保不住了……!

所以,个人感想:要做纯爱战士,每个词语和概念之间互相有且只有彼此,三心二意绝对不可! AI 很喜欢莫名其妙地引入新词汇,一定要保持警惕,坚决反对来路不明的词语!


在笔者看来,软件设计本身似乎是遵循着特定的原则,去进行优雅决策。「小孩才做选择,我全都要!初音未来和看板娘酱都是我的老婆!!」并不是一种决策,毕竟这里的「全都要」好像也没什么损失。而决策行为之所以被需要,原因不言而喻:资源是有限的,我们需要进行取舍

假设是在设计一位美少女角色,她的概念是活泼开朗的邻家妹妹,选择高双马尾肯定更符合概念;然而,选低双马尾或许会有意料之外的反差萌和辨识度;无论如何,同时扎高双马尾和低双马尾可能就不太像邻家妹妹了,而且她的发量应该也不够;要是扎得一高一低,可能会让大家以为她的头发扎歪了。(凡事都有特殊情况,这段话只是举例!扎四个辫子或一高一低辫子的美少女也依然是美少女!)

在程序上,细节的设计我往往会选择最符合核心概念的;可有时候,也会不得不选一个有些偏离的,原因往往很复杂。概念是死的,人是活的,思维是动态的。可以无脑选的最优解并不永远存在,还要考虑和其他内容的关联。几种格式照单全收、全部兼容,或许对用户很友好,但是并不优雅,维护也会变得极其复杂。钱、时间、个人的脑力、用户的感受、腱鞘炎是不是快要发作了……各种各样的因素都被胡乱地塞进了选择里。让客户满意的设计可能是丑陋的(比如能卡出好几代 UI 的、臃肿的 Windows);但是优雅又并不意味着友善(比如 macOS 出了新一代就不再兼容以前的软件)。

坦白来说,我总是对决策感到迷茫。不过作为个人开发者,我考虑得最多的还是自己的精力。如果项目根本就无法完成,优雅与否就都成了空谈。再然后,果然还是得将心比心,思考用户画像吧——这是我在学校里真正学到的概念!多想想潜在用户的需求是什么样的,他们的喜好与排斥又在哪里。


编程里有两个概念,override(重写)和 overwrite(覆盖),拼写和发音都有一些相似。override 指的是子类覆盖从父类继承的方法,并进行不同的实现;而 overwrite 指的是对一堆数据进行完☆全☆抹☆杀,然后再自己鸠占鹊巢。很难不看出来,它们俩在概念上基本——毫无关系!

没错,笔者在此并不是要讲具体的编程概念。看看标题,我们在聊的是软件工程。这一章节几乎是上一个章节的延伸,我想表达的只是:

不忘初心,做好自己力所能及的事情,这就已经足够优秀了。

一个人的见解会受到视角的影响,而视角的形成则取决于你的位置(立场)和个人状态等等。现实生活中,人们常说这个人格局很大、那个人格局很小。在软件设计上,也存在类似的说法,不过我们一般叫「野心」。

我在之前提到过,我的项目几乎都有参照物。好处是我的设计不至于太盲目,坏处是我很容易受到那些既有项目的限制,它们的质量会直接左右我项目的质量。

一个典型的例子就是我之前的文章《手搓Agent框架数月,这是我心态发生的变化…》。说了那么多 OpenClaw 的坏话,其实我也不过是在写一个小气版的龙虾。AI Agent 的概念现在很火,所以我很快又见识了各式各样的 Agent 框架。这不禁让我觉得自己实在是太没见识,想象力也过于狭隘!

我曾对自己不足的野心、想象力和能力感到沮丧,不过那种情绪倒也没持续很久。作为一个大脑异常活跃的人,我很快又开了很多新项目!感谢这众多的尝试,让我有了新的思考。

一个充满创意的项目背后通常有:专业团队😎(疯狂的人力堆叠!)、商业需求💵(钱、钱、钱)……又或者,它确实是没有同类竞品、横空出世而来的。在一个已经有不少人踏足过的领域,我们很难不产生路径依赖。这篇博客也无意教导如何脱离已有的框架,毕竟笔者自己根本做不到

想想本章节开头讲的 override 和 overwrite,我们是如何评价的?毫无关系,它们的职责完全不同。也因此,「修复已有架构的小细节」和「全新的创意设计」是两条完全不同的道路,并没有可比性。

「充满创意」的项目撕碎前人留下的地图,另辟蹊径,也因此能赏到没人见过的景色。笔者做项目的初心是什么?「对已有的实现不满,所以想造个自认为更完美的」。这本身就是一个迭代的过程,如果我可能对大体的框架并无不满,那我确实没必要去颠覆它,只需要把它继承过来就好。我所做的设计其实是对既有生态的override(重写局部以追求完美);而那些想要 overwrite(彻底抹杀并重来)的野心,以我目前的能里还很难实现。

我觉得有野心没什么不好,开辟一条全新的道路也很浪漫。~~如果精力足够,我也想试试。~~可是,如果透支自己,强行去做超出原有资源和能力范围的事,那根本就是失控了。软件设计最忌讳的肯定就是不知足了。💩山的道路,想必谁也不想踏上!

评论 (0)

点击看板娘登录后即可评论。

已登录: ()

加载中...