你的开发为何如此低效?

在开发中,编码我们有分层架构、设计模式做为套路来高效开发,但你也知道编码不是开发的全部,一个完全的开发流程用面向对象思想来概括,它分为OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)。一个好的代码结构是需要需求分析,架构设计做为辅助的,Stay尝试向你描述一个理想高效的工作流程,有了这个套路,不仅能让你缩短编码时间,还能得到团队的认可。

关于高效开发,大多数人的第一反应就是成熟的分层架构、设计模式以及第三方lib。这些给了我们设计准则还有便利的工具更快的去做需求实现。

高效开发还有另外一层含义,关于一个团队他要如何去提升团队的整体开发效率、缩短开发周期,能够一步一步去更快速的产品迭代,在这个过程中你要做好需求分析,架构上的设计。

今天的主题是撇开技术和大家聊聊高效开发的一些套路与实践。

如何提升个人开发效率

如何来提升开发效率?我们先来粗暴的对比一下,同样一个需求,不同的角色会如何来着手实现,然后我们再来看差距在哪里?

architect.001.png

这个图我想大家应该都能看懂。

一个需求如何被处理,从初级开发工程师到中级再到高级、架构师他们处理的方式流程是不一样的。

例如你是一个新人,刚到了一家公司,被委派了一个任务,可能直接就去搜索了。因为分配给你的任务是拆分出来一个比较具体、比较小的功能,所以不需要去做什么架构上的分析,只需要去做具体的实现。对于一个实现者而言,他只需要去搜索或者去找以前自己写过代码,最笨的方式才是自己去手写。不过呢,不是所有实现都是可以面向Google编程的,单纯的复制粘贴会让你的代码增加隐患,而你也知道,这是相当危险的,而且也不会有技术沉淀。

当你工作一两年,对一些工作流程比较熟悉后,再拿到一个任务就会想应该如何去解决这个问题,当然这个时候你的任务也从小功能变成了一个模块。这个业务是什么样子的,应该如何去做分析,拆分成一个个小功能,然后有针对性的去搜索,虽然搜来的不能完全满足你的需求,但你只是要个解题思路,借鉴下稍微做下适配就可以实现啦。

而对于高级开发工程师或架构师来说,拿到的任务就是一个比较庞大的、成体系的一个模块或者一个系统。所以要考虑的事情要比初级或中级要多的多,这时候就得做需求分析,架构上的设计,并且在设计的时候,还得去考虑应该如何解耦,如何分离高层抽象和低层实现,因为具体的实现是要拆分出来交给team中其他人去做的。

不同的角色面对同一个任务时,他们的关注点是不一样的,也就使得工作方式不那么一样。

初级和高级的差距在哪里?

既然我们已经清楚了一个需求不同的人来实现它是不一样的,那么不一样到底在哪里,我们要挖掘那个具体的因素,这样才能知道应该如何做调整。

现在我们的问题就是找出初级与高级的差距到底在哪里,少了哪些环节?

architect.002.png

Stay先把视角拉高一点,我们来看看面向对象(Object-Oriented),你可以把OO分为,OOA、OOD、OOP,也就是面向对象的分析(Analysis),面向对象的设计(Design),以及面向对象编程(Programming)

那初级与高级的差距到底在哪里呢?就差在这三部上。

高级开发工程师他会有一个具体的步骤:

  1. 通过OOA来分析业务流程输出模型
  2. 基于模型再做面向对象的设计OOD,借助UML来描述整体的一个业务需求的流程
  3. 以OOD归纳的用例图、时序图、类图做为蓝图来指导OOP
  4. 设计高层抽象,以伪代码的方式串联起整个业务流程
  5. 拆分出一些独立任务交给其他人实现

在面向对象编程的过程中,还可以套用经典的设计模式、设计原则来提升系统的稳定性,让代码变得可测试,可扩展。

对比下初中级呢,他们的关注点更多的放在OOP上,在具体代码实现上。这样就不太能全观整体业务的流转和边界,无法预见需求未来可能发生的变化,仅仅做些重复劳动力对提升开发效率是没有任何帮助的。

跳出'低层实现'这口井

但是啊,让初中级去像高级那样去做OOA、OOD也不现实啊,如果对业务不是很熟悉,一些流程上想得不够清楚,或者没有考虑如何去提升用户体验,没有站在产品角度考虑问题,那么设计出来的架构可能会比较死板,同时也漏洞百出。

这是不是很矛盾?没有经验沉淀,就无法像高级工程师那样思考,做不到那样就只能做低层实现,这样沉淀的太慢了,就像死循环啊,那么我们该如何break出这个loop呢?

那就先从更好的做OOP开始,其实想把一段代码写好,还是有点困难的,关键在于你想写出来的代码能打多少分,及格分是60分,它刚好处于可以跑的状态,偶尔会出点小bug;100分就是通过设计模式设计原则写出的良好代码,它能很好的去做测试、做扩展,那它的稳定性也很强。

如何才能得高分?有一句古话说的很好,读书破万卷,下笔如有神,你做的准备工作越多,底蕴越足,写代码就会越顺畅。

首先第一个是你要考虑的是,这个产品提出的需求有没有得到你的认可,你觉得什么的方式来实现会使得效益最大化。你可以给产品提些建议或者改进,因为你想做一个产品把它做好,你必须要参与进去,即使你做的是比较小的需求,功能,模块。

当你看到感兴趣或者有挑战的任务,得自己去争取这一块的整体的设计和实现,不要被动的去接受一个任务。因为接收来的任务都是别人咀嚼好的,给你定好了条条框框,你只用往里面填实现就可以的,那些都是没有技术含量的。

同时也不要急着去表达这个做不了,那个做不了,安卓做这个很难实现的等等。不要去逃避责任,至少要先做一些真实的调研和尝试,或者选取一些可变通的、折中的解决方案,给对方做选择题,而不是直接拒绝。

在确定了技术选型之后,那么接下来就是哪些人来领哪些任务。领任务的时候,大家不要总是去领那些自己擅长的,每个人都要变得多元化,不仅仅是只会一门手艺(以后只会安卓也不行了)擅长做UI的要去尝试处理复杂业务、能处理复杂业务的也要想想如何处理一些动画自定义UI。

Stay在做代码实现的时候,比较偏向于先实现业务,再去考虑UI上的实现。因为用户体验是一个没完没了的事,你可以把它设计得很好花哨也可以把它设计得很简单,这锅得产品经理去背。而对于业务来说,改动就不会那么频繁了,业务梳理清楚了,还愁不能响应UI的action嘛,并且还有另外一个好处就是业务是testable的,不需要View层也可以测试。假如你上手就画UI,十有八九你就把UI和业务耦合在一起,连剥离复用都很难做到,更别提写测试用例啦。

写代码不可能一天写满八小时,也不可能说一天就能把整体的业务全部写完。如何可持续地做开发,最最重要的是,得有一个蓝图、一个清晰的高层抽象结构,有了高层定义再一个一个往里面填具体实现就可以了。(可以参考下毛胚房装修的全过程)

如果实在是总结不出适合自己的套路,那就用‘书读百遍其义自现’这一招好了,但读是远远不够的,还得写代码,写完了还要想如何去改良。

重新理解开发流程

刚才Stay给大家描述的是一种抽象的实施方式。接下来给大家做个示范:

architect.004.png

高效开发Stay觉得应该分为,OOA、OOD、OOP,跟我们刚才讲的那个是一样的。先得有需求分析,再做流程设计,最后才是代码实现。

更多经验分享,请参考Stay精心制做的架构课程->Android架构设计方法、技巧与实践

开发环节中的角色扮演

从OOA、OOD再到高层抽象架构和低层实现,不同角色的职责是不一样的。请看图说话:

architect.005.png

很多工作两三年的同学都会焦虑,'焦虑的是技术不能走的长久,30岁以后就走管理吧'。有这样的焦虑不是什么错,错的可能是你对管理没有一个非常明确的概念。你知道如何做一个合格的管理吗?他的职责是什么?他比起其他角色,突出在哪些能力?

就这一点,Stay想分享点自己的观点(仅局限于技术管理层面):

刚才Stay一直在强调OOA、OOD、OOP,是因为站在一个管理的层面,想要产品稳步迭代,需要让每个环节变得可控。

  • 想象下,如果需求分析不对,大量的业务代码要重写,这是潜在风险。
  • 想象下,如果业务设计不够明确,没有提前定好规则与约束,大量的代码都会是一次性的,也就导致了冗余和低效,这是技术债务,迟早要还的。
  • 想象下,如果代码不够解耦,未来修改会导致牵一发而动全身,使得重构困难,又无法满足产品快速迭代。

正因为要避免这些不可控的因素,才会有了职责的细分。有了项目经理、售前、架构师、技术负责人、开发人员。当然在小公司,职责没那么清晰,可能一个技术负责人就cover所有职责了,如果你做为开发人员经常加班,进度缓慢,可以反思下,你的leader是在哪些环节做的不够好而导致低效,你能否分担一些。

从职业发展的角度来说,大家都是自下而上从d1、d2、d3这样的小角色慢慢往上走的,除了技术需要不断深入,未来转管理还需要有抽象思维、业务能力、沟通协作,这些并不比写代码简单多少。

也不要觉得目前自己只是一个小角色,只能替大佬擦擦鞋。不要这么想,每个人都应该更好的表达自己,更好的去体现自己在一个团队的价值。如果你做不到这点的话,你就很有可能被替换掉。所以多做一些事情,不要怕犯错,多去和其他部门沟通交流,要把自己耦合到每一个部门中去。重构最怕强耦合,想要开掉你,团队还要有一个阵痛期呢,对不(奸笑😈)

来个收尾

虽然通篇没讲技术,但不代表我觉得技术没用哈,支撑产品的是技术,推动产品的也有技术的功劳,只是觉得这个角度很有趣,大家可以再深思下,为什么要有面向对象语言?是业务推动了技术,还是技术革新了业务?

单纯的讲方法论就和鸡汤一样,喝了都说好,第二天就忘记了。这不是方法论的锅,更多的还是自己无法结合整理出适合自己的方法论,同时也是因为眼界不够,过于关注眼前的细节。

那些入行两年就到处和人说自己迷茫,遇到瓶颈的同学,有没有想过是自己的眼界不够呢,是不是把技术开发单纯的理解为堆代码了呢?

更多经验分享,请参考Stay精心制做的架构课程->Android架构设计方法、技巧与实践

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容