跳过正文

软件工程实战

·1140 字·3 分钟
作者
KeJi

产品流程
#

软件工程从早期到现在,经历了几个时代的变化。就像是郭帆导演让电影作坊进化成电影工业一样,软件工程也经历了这样一个过程。

  1. cow boy风格完全依靠个人能力,靠着hardworking。团队小,两张披萨就能喂饱。没有任何工作流程,全靠个人能力。

  2. 文档 dev入门手册,提供基本的操作,流程。项目的目的,架构。出了问题找谁这些信息。

例如: 本项目的目标是什么

本项目的环境如何配置:step by step

第一次如何build成功

项目的代码架构等等内容

核心:保持daily build不断成功运行。每天及时反馈,必须更新一个可用的版本。

  1. Microsoft Project 通过MS Project软件来管理。虽然通过甘特图等方式能够清晰地展示实现路径,但是并不好用。软件的复杂依赖关系不好用它表示出来。

  2. 更好的工具 TFS。 这个工具经过多次迭代,反复失败才做成。比较有趣的是,即使是微软这样的大公司,也会出现项目失败,崩溃的问题。

不同角色如何合作
#

最初期的团队往往没有项目经理这种角色,但是随着团队扩增,交流变成N^2的项目。因此有人考虑,是否能够把团队分成这些角色。

由此诞生了Program manager,他们除了coding 和 testing,做其他所有事情。专门负责用户需求与产品说明。

如何提高工程效率
#

AI之梦:程序本质上是对数据及逆行一系列逻辑运算,那么这个过程理应可以被数学证明并且自动化。因此最终的结果是,人们不断用高级语言来进行“自动”编程。

编程->工程:70年代软件工程产生雏形。既然是工程,就可以按部就班地推动。但是当时存在许多缺陷,如:缺乏统一标准,吹牛过火,缺乏足够培训以及工具的局限性。

旧时代的人工智能+软件工程:程序员带一个能学习的AI程序作为徒弟。人工智能:探究知识表示和推理。软件工程:通过应用人工智能技术,来实现编程过程的自动化。缺点:基于抽象语法树作为知识表示和推理的基础,但是这个工作是子图同构问题,NP hard。

意图变成:开发者表达的是意图,而非具体的编码过程,系统会将此意图转换为可执行的代码。它旨在允许用户表达其意图,来反映人类解决问题的方式。纯文本文件本身就是一种技术局限,我们应该超越它。相当革命性的观点。

新时代的人工智能:基于规则的AI(如程序员学徒)就是一个典型的中文房间,其规则手册由人类专家明确编写。而现代大语言模型就是中文房间的终极形态。它的规则不再是人类编写的,而是通过海量代码数据上训练。AI是一个卓越的语法引擎,它实在模拟智能,而非真的具有智能。这个观点太棒了,完美符合我心中对AI编程的理解。

即使现代具有各种花里胡哨的软件,有了很fancy的AI大模型,软件项目成功的关键依然是:

  1. 智慧地使用技术
  2. 遵从一个好的软件开发流程
  3. 有经验的开发者
  4. 适当的技能组合

A fool with a tool is still a fool!