00.开发软件究竟在做什么?
公司级的软件过程实践系列文章,请参见连接。
概述
作为软件行业从业十年的人,在被别人问及你的工作什么的时候。怎么解释你的工作?
- 一个写代码的?(就是码农)
- 一个开发软件的?(就是程序猿)
- 一个做互联网的?(就是在网上买东西的)
- 一个做IT的?(就是修电脑的)
这些不能很好的解释我们的工作。就像现在有人找你开发软件,你给他解释了一套之后他还是不理解你到底为啥那么贵一样。
我想了很久,这个问题很难一句话解释清楚。不过还是努力的找了一个比较容易被接受的方式。我是做工程的。因为大家听到工程这两个字最起码会想到复杂的,严谨的,可靠的,有技术含量的等等方面的词。
对于业内人士来说每一个软件都有内部的核心概念与领域,在业务领域内的问题就非常复杂,那将领域问题转换为软件那会同等的复杂。所以才有了DDD这样的解决复杂问题的方法论。在解决这些复杂问题的时候,需要以严谨的态度对待每一个细节。并梳理出各个业务领域的模型与关系。梳理出业务领域模型后将模型以可靠的方式转换为软件实现。并在转换过程中以技术实现为核心。
在现在软件工程与技术还没有发展的比较完备与完善的阶段。很多开发者屈服于现实中的制约与约束,进行不完美的项目实施。这是可以理解的。不过我们软件从业者需要有一颗工程的心,以更加完善,更加可靠的方式想社会各界呈现出更加规范的软件工程。
公司级软件过程
怎么样才能做出完善的工程?虽然软件工程还完美的方法论,但是无外乎这几个方面:蓝图规划,过程域,技术域,运维域,运营域。蓝图规划主要是为公司制定各方面的规划,这样可以在团队运行过程中更有明确的目标。过程域主要有项目管理完成,这个域中主要可以参考PMP。技术域现在是被提及最少,或被忽略的。技术域主要负责公司的技术的一些管理和规划的工作。在运维域中主要负责线上环境,公司基础设施的运维工作。保证线上系统的稳定可用。运营域主要负责线上、线下的运营活动,并需要根据运营决定下一步的开发工作。
这些域每一个都是一个专业性很强的领域。可以说,每一个领域在大学里都对应着一个或者多个专业。用比喻就可以很清楚的看到每个领域都有庞大的知识体系所存在。
这里的域和项目/产品的关系,域和公司的关系都是很复杂的。在产品的生命周期中每时每刻都有这几个域中的工作内容。公司会在这些域中总结出适应于公司的规范和积累。
域与产品生命周期关系每个域与公司之间的关系会在介绍域时说明。
0. 蓝图规划
现在流行企业进行数字化、信息化转型的工作。企业在做信息化转型时一般的第一步会找个咨询公司咨询需要做什么。一般情况下咨询公司会根据ToGAF的推荐进行数字化转型的分析与咨询工作。
最终会得出企业的信息化的整体规划,以及规划中各项内容的详细分析结果。至于为什么这么做可以参见ToGAF内容。
我最近在写几个系列的Blog。基本上可以映射到这些域上。但是在蓝图规划这方面还没有一个系列的Blog介绍,所以,敬请期待这个域的系列Blog。
1. 过程域(项目管理)
这个域是体现软件实施过程的工程属性最明显的一个域。这里要做的就是怎样在现有的资源下按时按点的交付。这个里面包括所有的PMP的工作,并且还需要进行沉淀与积累。
在过程域最直接的公司级积累就是ISO质量认证和CMMI软件成熟度模型。并且过程域还需要管理公司内部的组织结构,与外部的沟通、对接机制。
这里对应的系列Blog就是本文所在的系列:公司级的软件过程实践
简单的可以分为:
- 组织管理
- 过程管理
- 资源管理
- 等
2. 技术域(技术管理)
技术域很多人不知为何物。今天看到一篇文章《雷军点将小米技术委员会:事关生死存亡的四件事》很好的回答了这个问题。公司要想长久的毅力不倒,最主要的是创新力。创新力的力量源泉就是技术。
技术域内的内容可以分为:
- 技术预演
- 技术选型
- 技术设计
- 技术规划
- 基础设施
- 等
在技术域为公司工程级的技术实施规范,并可以提供工程级的技术支撑。为公司之后的技术发展制定方向与规划。
这里对应的系列Blog就是本文所在的系列:架构设计,微服务实践,DevOps实践。
3. 运维域(软件运行时管理)
运维域保证线上系统的正常运行。这里更加关注线上系统的运行环境,包括:软件环境,硬件环境,网络环境,机房环境,产品的物理架构等等。在做架构设计或者运维设计时需要考虑的最多的内容是做可靠性和可伸缩性。满足这两个就可以满足线上大部分情况。
运维域可以分为:
- 资产管理
- 稳定性管理
- 可靠性管理
- 安全管理
- 等
这里对应的系列Blog就是本文所在的系列:架构设计,微服务实践,DevOps实践。
4. 运营域(运营管理)
运营是我最不熟悉的一个领域。按照我的理解运营是负责产品的方向,针对的客户群分析,业务形态规划等等工作的一个中心。产品是否好用,是否能吸引客户的决定在于这里。
运营域分为:
- 业务范围
- 目标客户
- 目标场景
- 等
我觉得运营域的积累是可以为公司积累出在特定领域中的业务模型,并业务分析模型。
这里不熟悉的内容就不出系列的Blog了。
总结
在不断的发展过程中,软件工程不会一直混乱下去。肯定是有更加可控,更加可靠的方法论出现。所以,怎么体现出一个团队或个人的专业能力。专业能力在于能否更加可控,可靠的将团队,产品,公司运营下去。所以,以工程化,体系化的方法论来指导公司、团队运营是必须的过程。这样可以给自己以信心,给外部以可靠。