为什么要流水线?为了提升效率4488倍!
流水线出来之前,汽车工业完全是手工作坊型的。每装配一辆汽车要728个人工小时。这一速度远不能满足巨大的消费市场的需求.所以使得汽车成为富人的象征。
1913年,福特应用创新理念和反向思维逻辑提出在汽车组装中,汽车底盘在传送带上以一定速度从一端向另一端前行。前行中,逐步装上发动机、操控系统、车厢、方向盘、仪表、车灯、车窗玻璃、车轮,一辆完整的车组装成了。第一条流水线使每辆T型汽车的组装时间由原来的12小时28分钟缩短至10秒钟,生产效率提高了4488倍!
Android项目开发如何流水线化?
对于编程这样的智力密集型活动,能做到流水线式的生产吗?
对Android开发而言,这个答案是可以做到。
主流水线包含以下工序:
- 按照产品详细需求,设计框架,切分成module。
- 实现Module:
- 按照产品原型设计,将每个module细化为页面的Fragment类。
- 按照产品视觉设计,绘制每个Fragment的xml。
- 按照产品视觉设计,结合
butterfork
等工具,实现各个按钮的点击跳转,将各个页面连接在一起。 - 按照服务端接口文档,封装所有数据Model的结构和网络加载接口。
- 按照产品视觉设计,写好数据展示类的数据获取、展示(可能涉及到特殊的View控件封装,比如图表等);
- 按照产品视觉设计,写好数据上传类的数据提交、展示(可能涉及到特殊的View控件封装,比如时间控件等);
- 按照产品原型设计,结合
EventBus
等工具,优化跳转结构,设计Module内的Event事件产生和消耗,并实现; - 编译Module,生成apk,做模块测试
- 将各个Module组装在一起,生成目标apk,做整体的系统测试。
除了主流水线,还可以建立辅助流水线来生产特殊的控件
,比如
- 图表显示控件
- 日期选择控件
- 时间选择控件
- 图片选择控件
- 缓存管理控件
- 数据库管理控件
- 网络连接管理控件
- ……等等
这些辅助流水线通常可以放在项目预研期开始。Android开发人员在等待产品详细需求、产品原型设计、产品视觉设计、服务端接口文档时进行这项工作,即可以提前预估项目的技术风险,也有利于合理规划后面的工期,防止人员空转。
编程流水线化和汽车流水线的异同和由此带来的影响?
相同点 是 相邻的两个工序 由不同的人完成。这样做有两个好处:
- 界限清晰,每个工序可以在不同的领域内做自身的精深训练,完成积累;
- 每个工序依赖上一道工序的产物,因此工序间形成约束关系,有利于趁早发现上个工序的问题,及时修正。同时这也是培训新员工的好方便,便于大家对中间产物保持同样的理解。
不同点是 汽车流水线上是实物操作,每道工序可以切分的非常细致,输入输出非常明确,因此工作技能培训难度很低,每个人都可以轻易学会。
而编程是一项智力密集型活动,流水线上流动也是虚拟的文档、代码,所以在编程流水线上,彼此很容易模糊自身职责边界,顺手就把别人的问题解决了,别人的事情做了,达不到流水线的效果。这种现象在磨合初期是难以避免的,需要通过相应的培训来强化大家的分工理念。
编程流水线化对程序员带来的影响
- 可以专工某一个领域,不断沉淀,在效能上不断提升。
- 可以透过换岗的形式与周围工种进行技能交换,快速获得别人沉淀的经验。
怎么做到4488倍?不会唬我吧
流水线对于汽车生产的作用,是将工种细化到极致,降低对工人综合素质的要求,同时由于工种的细化使得整个每个工种的专业度上升,效率大幅提升。
对开发而言,原理是一样的。所以要想做到效率提升,方向就是两个:
- 细化工种,降低从业人员的需求。
- 研究每个工种的特性,制定相应的专业度提升方案。
比如,对xml绘制人员而言,把市场上排名前100的应用都看一遍,然后抽取通用的样式,形成模板库,以后制作xml的时候,要么把模板库中layout直接Include进来;要么复制粘贴,做简单的修改就可以了。单个页面制作从4小时,缩减为1秒钟,不是不可能。
对于控件封装更是如此,一个复杂的逻辑控件,比如下拉刷新,从设计到实现、优化,可能需要1~2个星期,但使用起来也就几行语句的事情。效率的提升远远操作4488倍。
软件就是一段方便复制、粘贴、复用的数据块,其效率的提升是没有天花板的。
【Android流水化开发】相关文章
Panda
2016-06-20
2016-06-21后记:
第一次写文章,收到负面评论,有点纠结是删除还是留着,最后决定还是留着吧,世界总有不同的声音,学会适应就好。
做app开发多年,也对编程这件事有些不一样的思考。如果更高效的输出编程产物?是一个一直引领我思考的问题,最近想到的答案是流水化,我也正在把公司的Android团队往这个方向带领,几个项目后应该会看到成效,到时候再跟大家分享吧。
@stefanli 提到了标题党的事情,其实我一开始写这个标题的时候,也会觉得有点标题党。但是我想表达的不是stefanli认为的组件化,而是如何在项目实践中高效地产生合适的组件。大家都觉得Android开始是一个完整的工种,很少有人提及 xml的制作 和 逻辑类的编写是可以分开的,而其实当它们分开的时候,才是各自效率大幅度提升的时候。就像福特之前,人们也就认为汽车就应该是手工作坊型,一个人即安装发动机、也安装车轮,没有人想到,如果一个人仅仅安装发动机,这种重复之中,他的效率可以快到惊人的程度,所以流水化的重点是社会分工的精细化。