开发软件究竟在做什么?

简介: 作为软件行业从业十年的人,在被别人问及你的工作什么的时候。怎么解释你的工作?1. 一个写代码的?(就是码农)2. 一个开发软件的?(就是程序猿)3. 一个做互联网的?(就是在网上买东西的)4. 一个做IT的?(就是修电脑的)

公司级的软件过程实践系列文章,请参见连接。

概述

作为软件行业从业十年的人,在被别人问及你的工作什么的时候。怎么解释你的工作?

  1. 一个写代码的?(就是码农)
  2. 一个开发软件的?(就是程序猿)
  3. 一个做互联网的?(就是在网上买东西的)
  4. 一个做IT的?(就是修电脑的)

这些不能很好的解释我们的工作。就像现在有人找你开发软件,你给他解释了一套之后他还是不理解你到底为啥那么贵一样。

我想了很久,这个问题很难一句话解释清楚。不过还是努力的找了一个比较容易被接受的方式。我是做工程的。因为大家听到工程这两个字最起码会想到复杂的严谨的可靠的有技术含量的等等方面的词。

对于业内人士来说每一个软件都有内部的核心概念与领域,在业务领域内的问题就非常复杂,那将领域问题转换为软件那会同等的复杂。所以才有了DDD这样的解决复杂问题的方法论。在解决这些复杂问题的时候,需要以严谨的态度对待每一个细节。并梳理出各个业务领域的模型与关系。梳理出业务领域模型后将模型以可靠的方式转换为软件实现。并在转换过程中以技术实现为核心。

在现在软件工程与技术还没有发展的比较完备与完善的阶段。很多开发者屈服于现实中的制约与约束,进行不完美的项目实施。这是可以理解的。不过我们软件从业者需要有一颗工程的心,以更加完善,更加可靠的方式想社会各界呈现出更加规范的软件工程。

公司级软件过程

怎么样才能做出完善的工程?虽然软件工程还完美的方法论,但是无外乎这几个方面:蓝图规划,过程域,技术域,运维域,运营域。蓝图规划主要是为公司制定各方面的规划,这样可以在团队运行过程中更有明确的目标。过程域主要有项目管理完成,这个域中主要可以参考PMP。技术域现在是被提及最少,或被忽略的。技术域主要负责公司的技术的一些管理和规划的工作。在运维域中主要负责线上环境,公司基础设施的运维工作。保证线上系统的稳定可用。运营域主要负责线上、线下的运营活动,并需要根据运营决定下一步的开发工作。

这些域每一个都是一个专业性很强的领域。可以说,每一个领域在大学里都对应着一个或者多个专业。用比喻就可以很清楚的看到每个领域都有庞大的知识体系所存在。

这里的域和项目/产品的关系,域和公司的关系都是很复杂的。在产品的生命周期中每时每刻都有这几个域中的工作内容。公司会在这些域中总结出适应于公司的规范和积累。

域与产品生命周期关系

每个域与公司之间的关系会在介绍域时说明。

0. 蓝图规划

现在流行企业进行数字化、信息化转型的工作。企业在做信息化转型时一般的第一步会找个咨询公司咨询需要做什么。一般情况下咨询公司会根据ToGAF的推荐进行数字化转型的分析与咨询工作。

最终会得出企业的信息化的整体规划,以及规划中各项内容的详细分析结果。至于为什么这么做可以参见ToGAF内容。

我最近在写几个系列的Blog。基本上可以映射到这些域上。但是在蓝图规划这方面还没有一个系列的Blog介绍,所以,敬请期待这个域的系列Blog。

1. 过程域(项目管理)

这个域是体现软件实施过程的工程属性最明显的一个域。这里要做的就是怎样在现有的资源下按时按点的交付。这个里面包括所有的PMP的工作,并且还需要进行沉淀与积累。

在过程域最直接的公司级积累就是ISO质量认证和CMMI软件成熟度模型。并且过程域还需要管理公司内部的组织结构,与外部的沟通、对接机制。

这里对应的系列Blog就是本文所在的系列:公司级的软件过程实践

简单的可以分为:

  • 组织管理
  • 过程管理
  • 资源管理

2. 技术域(技术管理)

技术域很多人不知为何物。今天看到一篇文章《雷军点将小米技术委员会:事关生死存亡的四件事》很好的回答了这个问题。公司要想长久的毅力不倒,最主要的是创新力。创新力的力量源泉就是技术。

技术域内的内容可以分为:

  • 技术预演
  • 技术选型
  • 技术设计
  • 技术规划
  • 基础设施

在技术域为公司工程级的技术实施规范,并可以提供工程级的技术支撑。为公司之后的技术发展制定方向与规划。

这里对应的系列Blog就是本文所在的系列:架构设计微服务实践DevOps实践

3. 运维域(软件运行时管理)

运维域保证线上系统的正常运行。这里更加关注线上系统的运行环境,包括:软件环境,硬件环境,网络环境,机房环境,产品的物理架构等等。在做架构设计或者运维设计时需要考虑的最多的内容是做可靠性和可伸缩性。满足这两个就可以满足线上大部分情况。

运维域可以分为:

  • 资产管理
  • 稳定性管理
  • 可靠性管理
  • 安全管理

这里对应的系列Blog就是本文所在的系列:架构设计微服务实践DevOps实践

4. 运营域(运营管理)

运营是我最不熟悉的一个领域。按照我的理解运营是负责产品的方向,针对的客户群分析,业务形态规划等等工作的一个中心。产品是否好用,是否能吸引客户的决定在于这里。

运营域分为:

  • 业务范围
  • 目标客户
  • 目标场景

我觉得运营域的积累是可以为公司积累出在特定领域中的业务模型,并业务分析模型。

这里不熟悉的内容就不出系列的Blog了。

总结

在不断的发展过程中,软件工程不会一直混乱下去。肯定是有更加可控,更加可靠的方法论出现。所以,怎么体现出一个团队或个人的专业能力。专业能力在于能否更加可控,可靠的将团队,产品,公司运营下去。所以,以工程化,体系化的方法论来指导公司、团队运营是必须的过程。这样可以给自己以信心,给外部以可靠。

参考:

TOGAF
PMP

目录
相关文章
|
分布式计算 Java Hadoop
Scala入门必刷的100道练习题(附答案)
Scala入门必刷的100道练习题(附答案)
1032 1
|
XML SQL 安全
Struts2 漏洞集合
Struts2 漏洞集合
给 element-plus 增加一个防抖的功能(二)
element-plus 功能非常强大,但是好像只有 el-autocomplete 提供了一个防抖功能,其他表单子控件并没有提供防抖功能,而 el-autocomplete 的防抖和我想要的效果又不太一样,所以只好写个函数实现我想要的防抖效果。
|
人工智能 运维 自然语言处理
通义灵码:体验AI编程新技能-@workspace 和 @terminal为你的编程插上一双翅膀
本文介绍了通义灵码个人版中的@workspace和@terminal功能,帮助运维工程师快速理解项目结构、实现需求和执行指令。@workspace通过RAG技术深度感知代码库,支持快速上手新项目和协助实现新需求;@terminal则提供智能指令生成和解释,提升开发效率。
1018 5
|
容器
阿里云最新产品手册——云基础产品与基础设施——计算——弹性容器实例——通用部署ACK虚拟节点组件创建ECI Pot——虚拟节点和弹性容器ECI——专有版操作步骤
阿里云最新产品手册——云基础产品与基础设施——计算——弹性容器实例——通用部署ACK虚拟节点组件创建ECI Pot——虚拟节点和弹性容器ECI——专有版操作步骤自制脑图
231 1
阿里云最新产品手册——云基础产品与基础设施——计算——弹性容器实例——通用部署ACK虚拟节点组件创建ECI Pot——虚拟节点和弹性容器ECI——专有版操作步骤
|
NoSQL Linux Shell
Redis 的安装与部署(图文)
Redis 的安装与部署(图文)
|
关系型数据库 MySQL 数据库
实时计算 Flink版操作报错合集之在分配所需的最少资源时出现问题,该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
Oracle 关系型数据库 MySQL
Flink CDC产品常见问题之使用cdc-Oracle连接器报错如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
Flink CDC产品常见问题之使用cdc-Oracle连接器报错如何解决
|
JSON 前端开发 数据格式
react-json-view
react-json-view
362 0
|
弹性计算 Linux 应用服务中间件
使用ECS部署并使用Docker
本文介绍如何在云服务ECS实例上,部署并使用Docker。