Post

软件系统的两次创造

软件系统的两次创造

两次创造

一个软件系统应该经历两次创造:第一次是可以解决问题,第二次是可以优雅地解决问题

能够解决问题和优雅地解决问题之间天差地别,前者对于交付的质量和团队的效率都会产生长期负面影响。但由于软件系统的优雅度很难被清晰量化,加上市场竞争激烈生存环境恶劣,大多数团队既没有心力也没有能力对软件的优雅度进行考量(甚至都不算是一个话题)。追求软件系统的优雅几乎成为工程师个人的追求。

第二次创造凝结着大量的复杂思考,它很大程度上受到一个工程师审美的影响。这种审美能力当然是可以习得的,但是否要习得这种能力更像是一种自发的选择。例如,一个工程师在阅读到设计模式规范或代码风格最佳实践时,他感受到的是美好还是繁琐,仿佛是一种刻在基因里的感觉。

第二次创造的复杂思考包含了对于关键问题的识别和抽象,对于核心概念模型的定义,对于各个模型之间关系的梳理,对于业务未来发展优先级的判断,对于各种非功能需求的理解等等,这其中当然有很多经验,但也都可以认为属于审美的范畴。

优雅的软件系统可以产生巨大的复利,它可以让工程师关注能力而不是过程,关注能力的扩展而不只是匆忙应对需求。通过代码实现需求和通过系统演进来满足需求之间天差地别,但只有优秀的工程师才能理解这其中的差别,才真的感受过这其中的不同。优秀的工程师关心数据结构和它们之间的关系,而糟糕的程序员只关心代码

人工智能的快速发展,大大加速了第一次创造的过程,普通工程师和优秀工程师仿佛都可以快速搭建起一个软件系统来解决问题。但如何完成第二次创造,则需要很多耐心,很多经验,很多对于优雅的追求,可能还需要很多审美。也正是因为第二次创造是一件困难的事情,所以才导致了很多人抱怨借助人工智能快速搭建的软件系统的可维护性太差。在我看来,这其实是轻视了第二次创造的复杂度

这个过程犹如造房子和室内装修,如果你只是想要一个三口之家可以日常生活的房子,那几乎所有的样板间都可以,这是第一次创造。而如果你想要建造一座城堡,一座宫殿,或者你想要装修一个与你的生活习惯高度契合的房子。那你必须要花非常多的心力去思考每一个细节,考察你的每一个生活习惯,深入分析自己的需求,理解自己对于生活愿意做出什么样的取舍。这个复杂思考的过程,是施工队无法替代的,不论他们干活的速度有多快

成为一个优秀的 Vibe Coder 并不容易

再来说说 AI编程Vibe Coding

写代码(准确地说是开发软件)这件事情正在发生根本性的变化,以前的工程师需要花很多时间来码代码,在这个漫长的码代码的过程中,其实也会伴随很多复杂思考。过程中他可能会意识到某个类的抽象不合理,或者某个函数需要拆分,或者某个变量的命名有歧义等等。因此,对于一个软件系统的二次创造,可能会融合在整个写代码的过程中。

然而,随着Vibe Coding的到来,码代码的能力突然成为了无限供应的资源,几乎所有人都能够在短时间内完成一个需求。但优雅的软件系统对于高质量的复杂思考的消耗量是不会变少的,我们同样需要去做需求理解、去做抽象建模、去做结果验证等等,只是某些具体的执行动作变化了而已。但现在的真实情况是,高质量的复杂思考还没有完成,人工智能已经开发完第一个版本了。此时,工程师都会面临巨大的诱惑,是就此停下,接受已经可以解决问题的系统(当然很多情况这样已经足够)。还是克服惰性,继续投入复杂思考,借助人工智能完成二次创造。

在我看来,越来越强大的Code Agent实际上给了工程师更多自由的时间,让他可以把精力放在更有价值的思考上。

但想要完成二次创造,想要创造真正优雅的软件系统,最终还是得看工程师的个人追求。

写在最后

当然了,并不是所有的软件系统都需要二次创造。识别是否需要二次创造,是否值得二次创造,本身就需要依赖复杂思考。

一个优秀的工程师,本身就可以识别出到底哪些事情值得进行复杂思考,值得进行二次创造。而那些平庸的工程师,连优雅这个词,甚至都还觉得陌生。

This post is licensed under CC BY 4.0 by the author.

Trending Tags