程序员修炼之道 12:项目启动前

不记录,等于没读。

这里是我阅读《程序员修炼之道》这本书的记录和思考。


在项目的最早期,你和团队需要了解 需求

需求之坑

需求 很少停留在表面。通常情况下,它们被埋在层层假设、误解和政治之下。更糟糕的是,无人确切知道自己想要什么。在现实世界中,得到任何事物的精确规范,即使不是完全不可能,也是非常罕见的。

而程序员的最有价值所在,就是帮助人们理解他们想要什么

典型的客户会带着需求来找我们。需求有时用业务术语表达,有时用技术术语表达。新手经常犯的错误是,把这种需求照单全收,然后实现对应方案。根据我们的经验,最初的需求声明,往往并非绝对要求,客户可能没有意识到这一点。

我见到的技术人员很少说“不”:只要有人提出需求,他们就开始尝试解决。这可能是产品越做越差的主要原因。

一个例子。
你收到一个新的需求:为登录界面增加 短信登录 功能。

在这里插入图片描述
停一秒,你有大把机会发现问题:

  1. 验证码应该有一个 有效时间 ,比如 5 分钟。不然一个短信码可以重复验证。
  2. 验证码应该有 发送频率限制 ,比如两次发送间隔不小于 1 分钟。限制用户频繁点击。
  3. 应该有每日 发送次数限制,设置每个手机号每天可以接收验证码的最大次数。防止有人恶意拿登录界面当短信轰炸机。(因为手机号是可以随意输入的)
  4. 应该检查是 否是真人操作,比如图形验证。防止有人恶意使用机器人刷短信,造成短信费用升高。
  5. 错误输入次数 限制,过多错误尝试后,应锁定账号一段时间。因为验证码一般是 4 位或者 6 位,在验证码有效时间内,会有暴力破解验证码的可能。
  6. 应能解决 短信延时 问题。比如客户点击 “发送验证码”后,半天收不到短信,然后 1 分钟限制时间到了之后,又点击 “发送验证码”,这个时候收到第一次的验证码,但是这个验证码已经作废了,所以出现验证码登录不上的问题。可以在上一条验证码有效期内,再次请求验证码,发送的验证码不变。
  7. 要有好的 用户界面,比如重发机制提醒做成倒计时,让用户知道何时可以再次请求发送验证码。
  8. 如果用户来自不同国家,要考虑不同国家手机号码规格,短信到达速度差异,支持不同的语言。

这就是我们所做的。当某些事情看起来很简单的时候,我们却会去寻找那些 边缘情况(正常情况下不太可能出现,但特殊条件下会出现的场景),并就其不胜其烦地问人。

需求是一个过程,可以先制造出产品原型,并让用户先用用看。在与客户讨论的过程中,迅速修改原型,然后问客户:是不是更像这样。

了解需求的另一个方法是和用户一起工作,以便从用户角度思考。

有时用户提出的需求并不准确,需要针对更普遍的情况做开发。比如用户说“只有员工的主管和人事部门可以查看该员工的记录”,实际上,你应该能明白,客户要的是“只有授权用户才能访问员工记录”。

需求文档不是为客户准备的:

  1. 客户并不确切知道自己想要什么。
  2. 客户从不阅读规范。

需求文档是为计划准备的:团队中的开发人员需要知道即将做什么。可以写在真实(或虚拟)索引卡上。

需求文档切忌过于具体。好的需求是抽象的,由准确反映业务需求的语句组成。需求不是架构;需求无关设计,也非用户界面;需求就是需要的东西(Requirements are need)。

许多项目失败,都可以归咎于不断扩大功能范围。让客户知道多增加一个功能带来的影响。

处理无法解决的难题

面对难题,需要确定 真正的约束条件,而不是想象的约束条件。

戈耳狄俄斯曾经打了一个无法解开的绳结,解开之人就可以当亚细亚之王。亚历山大见到这个绳结之后,拿出剑将其劈成两半。只要对要求做了一点不同的解释,一些明显的约束条件并非真的约束条件。

面对难题,需要认识到你所受到的 约束 和你所拥有的 自由度。笔不离纸,画三段直线,把下图的所有点连起来,且最后回到起点。
在这里插入图片描述
你必须挑战任何先入之见,并评估它们是否是真实的、硬性的约束。一个解法是:
在这里插入图片描述
我们太容易忽视潜在的解决方案。当面对一个棘手的问题时,把你面前所有可能的解决途径都列举出来。不要忽略任何东西,无论听起来多么无用或愚蠢。列举并逐条解释为什么不能选择这条路。你确定吗?你能证明吗?

如果你发现正在解决的问题比想象的要困难的多。先暂停下来,一定有比这更容易的方法!给自己一些放空的时间,去找更容易的方法。或者找个人解释一下这个问题,通常情况下,围绕它的简单谈论就可以让你获得启迪。有一些问题可以问自己:

  • 为什么你在解决这个问题?
  • 解决这个问题有什么收益?
  • 你遇到的问题是否与边界情况有关?你能消除这些边界情况吗?
  • 有没有一个更简单的相关问题,是你能解决的?

在观察的领域里,命运总是垂青有准备的人。解决问题也是如此。在日常生活中,将什么行得通什么行不通反馈给大脑,是一种很好的准备方式。实现这一目标的好方法是记录工程日记

携手共建

用户 是你团队的一部分。

使用 群体 来解决困难问题效果很好。

批评要针对代码,而不针对人。

倾听他人的观点并试着理解。观点不同不是错误。

敏捷的本质

敏捷是一个形容词,它指向你做事情的方式。敏捷的价值观:

  • 个体互动高于流程和工具
  • 工作的软件高于详尽的文档
  • 客户合作高于合同谈判
  • 响应变化高于遵循计划






每一份打赏,都是对创作者劳动的肯定与回报。
千金难买知识,但可以买好多奶粉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值