为用户而非自己编写代码

首先,无论采用哪种方法,我们都为用户(即客户,项目发起人,最终用户或客户)编写软件。 其次,无论采用哪种方法,我们都会逐步编写,逐一发布功能和错误修复。 也许我在这里说的是绝对显而易见的话,但重要的是要记住,每个新版本都应该首先满足用户而不是我们程序员的需求。 换句话说,我们将大任务分解成较小的部分的方式应该以用户为目标,这就是为什么您始终自上而下工作的原因。 让我们通过一个实际的例子来了解我的意思。

Jean-Pierre Jeunet的《熟食店》(1991)

Jean-Pierre Jeunet的《熟食店》(1991)

假设我受我的一个朋友委托创建了一个与wc非常相似的单词计数命令行工具。 他答应为此工作向我支付200美元,而我答应他我将以两种增量交付产品-Alpha版和Beta版。 我向他保证过我会在周六发布Alpha版本,在周日发布Beta版本。 第一次发行后,他要付给我$ 100,第二次发行后,他要付给我。

我将用C书写,他将以现金支付。

该工具非常原始,只花了我几分钟的时间编写。 看一看:

#include <stdio.h>
#include <unistd.h>
int main() {
  char ch;
  int count = 0;
  while (1) {
    if (read(STDIN_FILENO, &ch, 1) <= 0) {
      break;
    }
    if (ch == ' ') {
      ++count;
    }
  }
  if (count > 0) {
    ++count;
  }
  printf("%d\n", count);
  return 0;
}

但是,让我们成为专业人士,不要忘记构建自动化和单元测试。 这是一个可以同时完成这两个任务的简单Makefile

all: wc test
wc: wc.c
  gcc -o wc wc.c
test: wc
  echo '' | ./wc | grep '0'
  echo 'Hello, world! How are you?' | ./wc | grep '5'

现在,我从命令行运行make并获得以下输出:

$ make
echo '' | ./wc | grep '0'
0
echo 'Hello, world! How are you?' | ./wc | grep '5'
5

全部干净!

我准备拿起我的200美元。 等等,交易是提供两个版本并分两期获得现金。 让我们稍微备份一下,然后思考-如何将这个小工具分为两部分?

首先,让我们先发布工具本身,然后再构建自动化和测试。 这是一个好主意吗? 我们可以交付任何软件而无需先通过测试运行它吗? 如果不将测试与它一起提供,如何确定它能正常工作? 我的朋友会对我发布未经测试的任何内容有何看法? 这将是一个尴尬。

好的,让我们先释放Makefilewc.c释放wc.c 但是,我的朋友将通过几次测试而手头没有产品怎么办? 这个第一版绝对是毫无意义的,我不会得到我的100美元。

现在我们到了本文的重点。 我要说的是,每一个新的增量都必须为产品增加一些价值,因为它是客户而不是我们的程序员所感知的。 Makefile绝对是有价值的工件,但对我的朋友没有任何价值。 他不需要,但我需要。

这就是我要做的。 我将发布该工具的框架,以测试为后盾,但具有完全虚拟的实现。 看它:

#include <stdio.h>
int main() {
  printf("5\n");
  return 0;
}

我将相应地修改Makefile 。 我将禁用第一个测试,以确保构建通过。

我的工具可以用吗? 是的,它确实。 它算单词吗? 是的,它对某些输入有用。 对我的朋友有价值吗? 明显! 他可以从命令行运行它,并且可以传递文件作为输入。 但是,由于计数,他将始终获得数字“ 5”。 那真是令人遗憾,但它是Alpha版本。 他并不期望它能完美运行。

但是,它可以正常工作,并得到测试的支持,并且已正确打包。

我刚才所做的是一种自上而下的设计方法。 首先,我创造了一些可以为客户带来价值的东西。 我确保它也满足我的技术目标,例如适当的单元测试范围和构建自动化。 但是对我来说,最重要的目标是确保我的朋友收到了……并付给我钱。

翻译自: https://www.javacodegeeks.com/2015/03/code-for-the-user-not-for-yourself.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值