IM体育编程之钻(The Programming Diamond)
栏目:行业资讯 发布时间:2023-12-06
分享到:
 IM体育(本文主要适合初、中级程序猿以及用了 Scrum+XP 但效果不佳的敏捷团队成员阅读)  当你工作了几年,编程经验积累到一定阶段,相信你也会和我一样IM体育,对下面这个问题感兴趣:  上图描绘了编程作为一个完整工作流程(work process)的四项最基本活动(也可以叫任务、动作或状态等)。我们开发任何一个软件功能、实现某个软件需求,一般都需要经历这 4 项基本的活动或状态(如果编程

  IM体育(本文主要适合初、中级程序猿以及用了 Scrum+XP 但效果不佳的敏捷团队成员阅读)

  当你工作了几年,编程经验积累到一定阶段,相信你也会和我一样IM体育,对下面这个问题感兴趣:

  上图描绘了编程作为一个完整工作流程(work process)的四项最基本活动(也可以叫任务、动作或状态等)。我们开发任何一个软件功能、实现某个软件需求,一般都需要经历这 4 项基本的活动或状态(如果编程一次性测试通过,通常不需要经历调试状态)。

  把这四个状态连起来恰好形成一个菱形,所以我把它叫作“编程之钻”(The Programming Diamond)。犹如一颗大钻镶嵌了四颗小钻,把它们称作编程的“钻石”,也凸显了这几个基本任务及其相关技术与方法在软件开发、软件工程中的重要性。

  就软件开发流程来说这图其实并不完整,为了突出重点,我只画出了系统部署前软件开发的四个基本的核心动作。一般在通过系统、全面的测试之后,进入部署状态,部署完毕后进入日常运维状态等等,这些均略去了。

  编程之钻的这张示意图既可以描述单人、个体的开发流程,也可以描述整个团队的开发流程,可以有 n 种变化、n 种用途。

  编程就是解决问题(Problem-solving),即通过编写可正确、高效运行的计算机程序代码来解决或处理某个(或一类)实际的问题,解决了这些问题将给用户带来价值,而我们最终交付的软件及程序就是针对这些问题的解决方案(Solution,简称方案)。

  这里所说的问题(problems),其实就相当于软件工程里的软件需求(requirements)。如果我们把每一个待开发的功能(或待实现的需求)都看作当前需要解决的一个问题,那么编程就与解一道数学题或物理题在本质上没有多大区别,一个差别主要在于解题所用的语言:前者用各种计算机程序语言和语句编写,而后者主要用数学公式与符号(数学语言)推导。

  既然软件工程中的用户需求代表了开发需要解决的问题,那么可以在编程之钻的“需求分析”下面划一条虚线把整个空间分成两半,虚线的上半部分代表了编程的问题域(Problem Domain),包含需求分析;下半部分则代表编程的解决域(Solution Domain),包含设计与实现、测试与调试等等。见下图:

  Problem 与 Solution,你看,是不是又回到了二分法与二元论?这正是哲学的奥妙。

  问题域有多重要?互联网时代IM体育,产品需求(做成什么样子)常常是由产品经理(PM)牵头负责的,产品与开发之间的爱恨情仇也是老生常谈了。为什么许多软件开发常常会延误、超支?需求分析的质量是一个大问题。作为软件开发上游的需求不稳定,时常变化调整,必然会导致下游开发(设计、实现、测试与调试)中的许多折腾(返工与浪费)IM体育。

  因此,在编程前、编程中,最好经常想一想你写的这些代码到底是解决什么问题的,什么是对用户有价值,用户真正想要的东西?如果连开发到底要解决什么问题都没搞清楚、弄明白,就盲目地投入努力,那么最终难免会白忙一场。从只关注代码的各种奇技淫巧,到开始关注并高度重视把编程的问题域尽早地搞清楚,这是普通码农成长为优秀的职业软件工程师的重要一步。