关于软件产业的两个契机
软件产业是一个产业 , 和其它的产业一样 , 有各种角色分工 。
未来的软件是跨行业的 。 未来 , 软件会将各个行业联系在一起 。
云计算是第一代互联网发展到成熟的标志 。
网格计算是第二代互联网的开始 。
软件产业 在 未来 会 分为 平台(基础设施) 和 应用软件 2 个 阵营, 应用软件 是 跨行业的, 也可以说, 各行业 之间 由 应用软件 连接 起来,
应用软件 贯穿 了 各行业 。
举个例子, 我们可以看看 汽车 行业 的 发展方向, 就能 看到 这一点 。
汽车产业, 在 未来 本身 也是 融合 了 各个行业 的 , 因为 汽车 上 会扩展出 许多 功能 。
所有这些功能, 都 需要 应用软件 的 支持 。
应用软件 的 工业化 不久的 将来 就会 到来 。
所谓 工业化, 就是 像 工厂 一样 生产软件 。
工厂 是 什么样?
有 流水线, 分工, 每个 工种 负责 自己的 工序 和 专业,
软件工厂 也是 这样 。
但, 软件 说 “工业” 不太合适, 说 “产业” 比较 合适,
软件业 是 技术性 知识性 很强 的 智力密集型 行业, 再加上 软件 “软” 的 特性, 说 “生产” 不合适, 说 “研发” 比较合适 。
软件 的 “软”, 比如 软件 是 无法 或者 很难 像 硬件一样 交付 的 。
好吧, 我觉得 “软件生产力” 还是 叫做 “软件研发能力” 比较好,
不过 战斗力 , 爆发力 这是 不变 的 。
软件研发能力 是 软件产业理论 的 一个核心 。
而 软件研发能力 的 一个 表现 是 产能 。
所谓 战斗力 爆发力, 是指 可以 快速 的 转到 不同的 技术平台 和 业务领域 ,
乃至于 可以 同时 应对 不同的 技术平台 和 业务领域 。
这是 由 团队 不同 角色 的 分工合作 而 达到的 。
技能 应该 贯通, 角色 应该 分开 。
这就是 DevOps ,
不止是 DevOps , 还超越了 DevOps, 简称 SDevOps ,
即 Super DevOps 。
团队角色 可以分为:
开发/运维, 测试, 设计/架构(指挥官), 项目经理(总指挥官), 技术支持(可选) ,
所有的 角色 均从 开发 进化 而来 。
根据 Netflix 的 “谁开发, 谁运维”, 开发 本身就包含了 运维 。
技术支持 提供建议 帮助 解决一些 技术难点 、 架构难点 等 , 参与项目 但 不直接对项目负责, 是 可选 的 角色 。
测试 是 SDevOps 的 关键 核心 枢纽 。
需求分析师 这一类的 角色 是 不需要的, 整个团队 就是 需求分析师 。
协作 是 团队 的 本质,
团队 的 力量 来自于 协作 。
协作 就是 1 + 1 > 2 , 我可以把牛吹的 大一点, 1 * 5 > 10 。 ^^
项目的规模 不仅仅 包含 工作量, 还包含 复杂性,
当 项目 达到一定 规模 时, 复杂性 成 级数 增加, 需要 用 协作 的 方式 拆解 。
复杂性 需要 将 大 的 需求 分解 为 小的 模块 来 解决, 这是 纵向 的 分解 。
还有 横向 的 分解, 就是 不同的 角色 参与, 首先, 在 开发 的 基础 上, 加入 测试 角色, 这是一种 分解 复杂性 。
不同 的 角色 从 不同的 视角 来 审视 系统, 这样 来 分解 复杂性 。
测试人员 应该 高频 的 配合 开发人员 完成 一个 模块 。
在 部署 运维 的 时候 也 应该 高频 密切 的 配合 开发人员 。
这是 以 协作 来 取到 高效率 和 分解复杂性 的 一个 例子 。
刚开始 的时候, 可能 这样 做的 成本 会 有点高,
但是 当 团队 规模 达到 一定 规模 时, 成本 会 降低 , 且 产生的 力量 是 排山倒海, 势不可当 的 。
这样的 团队 可以 应对 任何规模 的 项目 。
这就是 SDevOps,
Super DevOps 。