在架构设计过程中,肯定绕不开技术选型这个话题,大到架构、框架、语言选择,小到用什么组件、设计模式。
这也是最容易引起争议的话题,无论是现实中还是网上,到处有各种语言、框架的争论:Java好还是C#好?前端框架是Vue好还是React好?跨平台手机开发,该选React Native还是Flutter……
虽然这种争论从来没什么结果,但当你做技术选型时,却很容易受到这些信息的干扰,尤其是你身边有几个某种语言或者框架的狂热粉丝的话,他们会不停地在你旁边吹风,说他喜欢的语言或框架的各种好处。
在架构设计过程中,肯定绕不开技术选型这个话题,大到架构、框架、语言选择,小到用什么组件、设计模式。
这也是最容易引起争议的话题,无论是现实中还是网上,到处有各种语言、框架的争论:Java好还是C#好?前端框架是Vue好还是React好?跨平台手机开发,该选React Native还是Flutter……
虽然这种争论从来没什么结果,但当你做技术选型时,却很容易受到这些信息的干扰,尤其是你身边有几个某种语言或者框架的狂热粉丝的话,他们会不停地在你旁边吹风,说他喜欢的语言或框架的各种好处。
早些年,软件很简单的时候,不需要需求分析和架构设计,直接采用边写边改(Code And Fix)模型,也能做出来。后来软件复杂了,就对程序员要求特别高了,所以早些年的软件开发,都是个人英雄主义盛行。比如张小龙一个人完成了Foxmail,求伯君完成WPS,王江民写KV杀毒软件……
不过,那时候对于普通程序员来说,去写这样复杂的系统,也是可望而不可及的。再后来软件产品越发复杂后,靠高手的开发模式也不可行了。
软件需求越来越多,而高手又是稀缺资源,所以要解决的一个问题就是:让普通程序员也能参与其中,一起实现复杂系统,而不必依赖于很多精英。
我们专栏已经完成了项目管理和需求分析这两个模块的学习。这两个模块看起来都和技术没什么关系,但却是项目中至关重要的部分。
项目管理贯穿项目始终,需求是项目的源头。希望通过对这两个模块的学习,能加深你对项目管理和需求分析知识的理解,能应用其中一些方法,帮助你个人能力更上一层,项目越做越好。
这个过程中一如既往的收到很多同学的精彩留言。其中有一些是提问,一些是针对文章主题自己独到的思考,这些内容都是对专栏内容最好的补充,可以加深你对软件工程的理解和学习。
我以前在国内做开发的时候,加班加点是家常便饭。这几年在美国工作,极少加班,但是产出却并没有下降,所以我一直在思索其背后的原因。这里面涉及因素很多,包括大环境、管理水平、配套设施等,但是有一个因素至关重要,那就是需求变更。
在国内很多软件公司,需求变更是常态,开发到一半,很多原始需求就发生了变化,这时候当初的设计已经不能满足要求了,很多代码需要修改,不得不加班加点来赶上进度。
反观不加班的美国公司,需求确定后很少变更。这样开发人员就可以针对需求有良好的架构设计,而不用考虑太多可能的变更,从容地在项目计划的时间内完成任务,而不需要加班加点。
最近电视剧《都挺好》热播,没想到其中一段台词却引发了很多程序员的集体焦虑。台词说的是:“作为一个程序员,你的年龄已经很大了!我问你,你学新东西有年轻人快吗?”
是呀,年纪越来越大,而新技术却层出不穷,是难免会焦虑。但如果你真的每个新的热点技术都去跟,都去学,就可以不焦虑了吗?我看也未必,因为新技术一直会有,学习也都是有成本的,只要你不能一直跟上新技术的步伐,你就会一直焦虑。
那焦虑是怎么产生的呢?
我们都知道,软件项目中很多问题都和需求相关,比如说需求不明确,需求变更。这些问题轻则导致返工造成浪费,重则导致项目失败带来巨大损失。所以在软件工程中,搞明白需求是一件至关重要的事。
上一篇我带你学习了如何分析需求的方法,而分析需求,同样也离不开工具的支持。所以这一篇,我将带你学习需求分析中原型设计的用法,借助原型设计,用最小的代价完成产品特性。
什么是原型设计?
通过前面的学习,我们知道在瀑布模型中,第二个阶段就是需求分析阶段,同时需求分析的结果也决定了后续的系统设计、开发、测试等阶段能否顺利如期进行。即使是用敏捷开发,同样也少不了对需求的分析整理。
可以说需求就是整个产品的源头,所以需求分析的结果往往决定了产品的成败。如果没有正确把握客户需求,可能就会一步错,步步错!
就像我在《特别放送 | 从软件工程的角度解读任正非的新年公开信》提到的秋千的案例:
说到风险,很多人都模模糊糊有一些了解,然而在软件项目中,有风险意识的却不多。比如说:
早些年我在做项目管理工作的时候,除了制订计划外,还要花不少时间去跟踪计划的执行情况。
项目管理上出了问题,管理者总是喜欢从流程规范的角度去想办法,于是为此设定了不少流程规范,例如每天要写日报,根据日报更新项目进度,每周要开周例会,看看项目有没有执行上的问题。
对任务进度的量化也是个很困扰项目经理的事情,需要频繁的去问程序员:“你这个任务进展如何,大概完成比例多少?”,从程序员那得到的答复通常都是个很乐观的数字,例如80%。第二天以为他能做完,结果一问是90%,就这样要持续好多天才真的算做完。
说到开会,是很多人心中的痛,每天白天忙于参加各种会议,压缩了本来就少的可怜的工作时间。最可气的,有的人开完会工作就算完成了,而像我们写程序的,还得下班后加班加点赶进度!
所以一说到开会,程序员们往往如遇洪水猛兽一般,避之不及。
开会是有价值的
不知道你所在的软件项目中是不是也有各种流程规范,例如:
若干年前,我接手一个陷入困境的项目,当时的项目经理刚从技术高手转型项目管理,还是没有摆脱技术思维,项目没有什么计划。
他把关键模块分给了自己开发,同时还要兼顾项目管理,导致自己的工作遇到瓶颈,其他人的进度也受影响,大家加班加点也没什么进展,士气低落。
我接手后,第一件事是重新制定项目计划,在排任务时,避免了对某个人的过度依赖,设置了几个关键里程碑。我还特地把第一个里程碑设置的相对容易一点,只需要运行核心功能。