[56→100]Android端开发效率如何提升4488倍?

作者: 沉思的Panda | 来源:发表于2016-06-20 13:44 被阅读1134次

    为什么要流水线?为了提升效率4488倍!

    流水线出来之前,汽车工业完全是手工作坊型的。每装配一辆汽车要728个人工小时。这一速度远不能满足巨大的消费市场的需求.所以使得汽车成为富人的象征。

    1913年,福特应用创新理念和反向思维逻辑提出在汽车组装中,汽车底盘在传送带上以一定速度从一端向另一端前行。前行中,逐步装上发动机、操控系统、车厢、方向盘、仪表、车灯、车窗玻璃、车轮,一辆完整的车组装成了。第一条流水线使每辆T型汽车的组装时间由原来的12小时28分钟缩短至10秒钟,生产效率提高了4488倍!

    Android项目开发如何流水线化?

    对于编程这样的智力密集型活动,能做到流水线式的生产吗?
    对Android开发而言,这个答案是可以做到

    主流水线包含以下工序:

    1. 按照产品详细需求,设计框架,切分成module。
    2. 实现Module:
    3. 按照产品原型设计,将每个module细化为页面的Fragment类。
    4. 按照产品视觉设计,绘制每个Fragment的xml。
    5. 按照产品视觉设计,结合butterfork等工具,实现各个按钮的点击跳转,将各个页面连接在一起。
    6. 按照服务端接口文档,封装所有数据Model的结构和网络加载接口。
    7. 按照产品视觉设计,写好数据展示类的数据获取、展示(可能涉及到特殊的View控件封装,比如图表等);
    8. 按照产品视觉设计,写好数据上传类的数据提交、展示(可能涉及到特殊的View控件封装,比如时间控件等);
    9. 按照产品原型设计,结合EventBus等工具,优化跳转结构,设计Module内的Event事件产生和消耗,并实现;
    10. 编译Module,生成apk,做模块测试
    11. 将各个Module组装在一起,生成目标apk,做整体的系统测试

    除了主流水线,还可以建立辅助流水线来生产特殊的控件,比如

    • 图表显示控件
    • 日期选择控件
    • 时间选择控件
    • 图片选择控件
    • 缓存管理控件
    • 数据库管理控件
    • 网络连接管理控件
    • ……等等

    这些辅助流水线通常可以放在项目预研期开始。Android开发人员在等待产品详细需求、产品原型设计、产品视觉设计、服务端接口文档时进行这项工作,即可以提前预估项目的技术风险,也有利于合理规划后面的工期,防止人员空转。

    编程流水线化和汽车流水线的异同和由此带来的影响?

    相同点 是 相邻的两个工序 由不同的人完成。这样做有两个好处:

    1. 界限清晰,每个工序可以在不同的领域内做自身的精深训练,完成积累;
    2. 每个工序依赖上一道工序的产物,因此工序间形成约束关系,有利于趁早发现上个工序的问题,及时修正。同时这也是培训新员工的好方便,便于大家对中间产物保持同样的理解。

    不同点是 汽车流水线上是实物操作,每道工序可以切分的非常细致,输入输出非常明确,因此工作技能培训难度很低,每个人都可以轻易学会。
    而编程是一项智力密集型活动,流水线上流动也是虚拟的文档、代码,所以在编程流水线上,彼此很容易模糊自身职责边界,顺手就把别人的问题解决了,别人的事情做了,达不到流水线的效果。这种现象在磨合初期是难以避免的,需要通过相应的培训来强化大家的分工理念。

    编程流水线化对程序员带来的影响

    1. 可以专工某一个领域,不断沉淀,在效能上不断提升。
    2. 可以透过换岗的形式与周围工种进行技能交换,快速获得别人沉淀的经验。

    怎么做到4488倍?不会唬我吧

    流水线对于汽车生产的作用,是将工种细化到极致,降低对工人综合素质的要求,同时由于工种的细化使得整个每个工种的专业度上升,效率大幅提升。

    对开发而言,原理是一样的。所以要想做到效率提升,方向就是两个:

    1. 细化工种,降低从业人员的需求。
    2. 研究每个工种的特性,制定相应的专业度提升方案。

    比如,对xml绘制人员而言,把市场上排名前100的应用都看一遍,然后抽取通用的样式,形成模板库,以后制作xml的时候,要么把模板库中layout直接Include进来;要么复制粘贴,做简单的修改就可以了。单个页面制作从4小时,缩减为1秒钟,不是不可能。

    对于控件封装更是如此,一个复杂的逻辑控件,比如下拉刷新,从设计到实现、优化,可能需要1~2个星期,但使用起来也就几行语句的事情。效率的提升远远操作4488倍。

    软件就是一段方便复制、粘贴、复用的数据块,其效率的提升是没有天花板的。

    【Android流水化开发】相关文章

    1. 理念·Android端开发效率如何提升4488倍?
    2. 工序1:初始化项目框架
    3. 工序2:绘制xml
    4. 工序3:如何增加点击事件,将各个页面连接在一起?
    5. 工序4:封装数据加载、上传接口,并显示、跳转

    Panda
    2016-06-20

    2016-06-21后记:

    负面评论

    第一次写文章,收到负面评论,有点纠结是删除还是留着,最后决定还是留着吧,世界总有不同的声音,学会适应就好。
      做app开发多年,也对编程这件事有些不一样的思考。如果更高效的输出编程产物?是一个一直引领我思考的问题,最近想到的答案是流水化,我也正在把公司的Android团队往这个方向带领,几个项目后应该会看到成效,到时候再跟大家分享吧。
      @stefanli 提到了标题党的事情,其实我一开始写这个标题的时候,也会觉得有点标题党。但是我想表达的不是stefanli认为的组件化,而是如何在项目实践中高效地产生合适的组件。大家都觉得Android开始是一个完整的工种,很少有人提及 xml的制作 和 逻辑类的编写是可以分开的,而其实当它们分开的时候,才是各自效率大幅度提升的时候。就像福特之前,人们也就认为汽车就应该是手工作坊型,一个人即安装发动机、也安装车轮,没有人想到,如果一个人仅仅安装发动机,这种重复之中,他的效率可以快到惊人的程度,所以流水化的重点是社会分工的精细化

    相关文章

      网友评论

      • 北斗星晨:其实,速度要提上来,就是组件化,这个观点,我和楼主一样。 但不一定有人意识到。
      • 瓶盖45:很好,搜藏了
      • 醉酒肆之:有老板思维。
        但是,组件化是程序猿需要的。
        沉思的Panda:@醉酒肆之 嗯,做自己的CEO,当从单人作战转为团队作战的时候,有些思维就要转变了
      • KunMinX:看完全文,对作者的观点表示认同,悟得组件化思想在我看来是编程入门的标志,而作者所指的流水线,个人开发者不是一直都这么做的么
        沉思的Panda:@简洁笔记 :blush:
        KunMinX:@沉思的Panda 既然道相似,为何不关注你一下呢 :)
        沉思的Panda:@简洁笔记 一个人开发往往是按页面切分,流程往往是把一个页面的 xml做完,点击事件、网络加载、上传统统做好,然后再做下一个页面。而流水化的是指,先把所有页面的xml做完;然后再把所有页面点击事件加上,串起整个app;再实现数据加载、上传等等。这样不就用在 xml的思维环境 和 控制逻辑 的思维环境中来回切换。这种方式会帮每一阶段的产物更加明确,但个人操作要克服“顺手就做了更方便”的思维障碍,有点困难,有人配合一起做效果会好一些。
      • KunMinX:4488倍,这个数据是怎么来的,如果单纯为了强调高效,也不必一定要拿这个案例来说

        但是既然用了,就要确保数据前后一致,否则怎么让人信服:

        每装配一辆汽车要728个人工小时

        组装时间由原来的12小时28分钟缩短至10秒钟

        ……
        沉思的Panda:@简洁笔记
        1. **4488倍**来自百度百科的词条[福特生产流水线](http://baike.baidu.com/view/2368678.htm),12小时28分钟 = 44,880秒
        2. 每装配一辆汽车要728个人工小时,这是是指人工小时,也来自百度百科的词条[福特生产流水线](http://baike.baidu.com/view/2368678.htm)

        结合两者,可以推算出当时一个汽车装配间大概有58、59个人左右(728/12.5=58.24)。
      • stefanli:标题很火爆,但看完之后真的没有办法给赞或者喜欢,楼主整篇文章用三个字可以总结-“组件化”。因为这是最基本的东西,就好像最开始学代码打印hello world一样,所以,标题和内容的落差实在太大,而文中夸张的表现手法,确实会让人反感。分享本身是非常好的,期待楼主分享更多文章。
        沉思的Panda:@stefanli 其实我一开始写这个标题的时候,也会觉得有点标题党。但是我想表达的不是组件化,而是如何在项目实践中高效地产生合适的组件,目前思考出来的答案是——“流水化”,大家都觉得Android开始是一个完整的工种,很少有人提及 xml的制作 和 逻辑类的编写是可以分开的,当它们分开的时候,才是各自效率大幅度提升的时候。就好像福特之前,人们也就认为汽车就应该是手工作坊型,一个人即安装发动机、也安装车轮,没有人想到,如果一个人仅仅安装发动机,这种重复之中,他的效率可以快到惊人的程度。
      • 5421b812ee0d:不同意就不同意了,楼上骂人几位真跌分子
      • MeGaTr33:想想就好了

      本文标题:[56→100]Android端开发效率如何提升4488倍?

      本文链接:https://www.haomeiwen.com/subject/jsewdttx.html