最近在读邹欣老师的书《构建之法》,读到很多地方,相当有感触,有种一拍大腿“啊,他说的太对了”的感觉,但都疏于记录,今天又看到一个一拍大腿特带感的一节,决定记录下来。
竞争性需求分析的框架——NABCD
N——need,需求
我在做软件的时候总是再想着,怎么能具体化用户的需求,还有就是怎么能拒绝用户新的或者不断变更的需求。用户有时候冲我噼里啪啦说了一大堆想要实现的功能,然而我完全没有抓住重点,根本没有明白用户到底说的是啥。反而每次和我的老师讨论需求的时候,我都非常清楚的明白他所说的需求是啥。我以前觉得这主要是因为需求是和他一块工作的人提的,所以他理解起来特别不费劲,直到有一次我和他一同去听用户需求,我才明白,其实用户对他提的需求也是噼里啪啦的,让人摸不到头脑,然而他总能和用户不断交流,最后确认用户到底想要的是啥,而且告诉用户,这个问题我将这么解决,会产生这样的效果,你看这样的效果是你想要的不,如果用户说是,那么也就完成了一个需求的确定。读《构建之法》我才觉得我以前的想法是愚蠢的,没有站在用户的角度考虑问题。我从来没有发现过用户的难处以及用户真正想要的是什么,我只是不断的在做软件的过程中,希望用户的需求简单,易于实现,不要总是变更,而没有考虑是不是用户还有其它想要的需求,或者这个功能做完了之后是否真的满足了用户的需求。
A——Approach,做法
提到这个就相当的惭愧,我总是用我自己特别擅长的技术来解决问题,有时超出了自己技术范围内的东西,更倾向于拒绝实现这个功能。然而每到这时求助于老师,老师一般会给两个解决方案:
1.你试试这个东西(一个我没见过的东西),这是一个标准解决方案。此时我的内心的崩溃的,因为我不知道这个东西会花费我多少时间,多少精力,既然它是一个标准的解决方案,那我如果没有解决问题可咋整,如果我实验没成功得多丢人啊。不过大多数情况下,是非常成功的。
2.如果上面的不成功,老师会选择一个我擅长的技术,然后给出一个曲线救国的方案。、
我觉得老师的做法才验证了邹欣老师书中所说的软件工程的思想,不用最好的最前沿的技术,而使用已有的最稳定的技术保证软件的正确运行。
B——Benefit,好处
东西做出来了,会给用户带来什么好处呢?这真的是用户想要的吗?你开发了一个聊天软件,能比QQ好吗?如果不比QQ好,那你开发的意义又在哪里呢?这觉得这个部分有点像研究生论文的高潮,你的东西为啥就好呢,现在世面上有那么多成熟的软件,你的能比那些天天成千上万的人都在用的软件好?你的好在哪里呢?至少得有一点好吧,要不你做的就完全无用武之地啊,你只说这对你个人的成长起到了帮助,那你自己做个软件玩玩好了,用户拿他来做什么呢?
C——Competitors,竞争
也许我开发的软件还不存在竞争者的问题,但我觉得我最大的对手就是市面上已经存在的软件,我怎么保证用户提到了的需求只有我的软件可以满足。可能市面上的软件已经有了XYZ功能,而用户提出的功能是WXYZ,那么我就赢了,我比市面上通用的软件多了一个W的功能。这也就是书中所说的,找到我方的优势才是最关键的。比如我的毕业论文,DSL大家已经都开始研究了,而我把DSL用在了电化学仪器上,你们没有,那我的软件的就比别人有竞争力了,我的毕业答辩也因此顺利了一小点。
D——Delivery,推广
其实我觉得这个是除了做软件以外非常重要的一个环节,就是你怎么把自己的东西推广出去。就好像毕业的时候找工作,你自己推销你自己。清华北大的人家软件硬实力就好比QQ和360,你和他们一块推销自己确定费劲了点。那如果你和同班同学一块去应聘呢,你如何能在你的同学中脱颖而出呢?首先你得能拿得出好的产品,也就是你学习得差不多点,一问三不知的肯定不行。其次就是你得把自己的优势拿出来,会C#的你就别应聘VB的岗位。第三就是你得找到正确的推销自己的渠道,硕士博士你就不要站在刮大白的地方应聘,而应该多关注研究所,各大院校高端人才招聘等招聘场所。