【Android -- 软技能】聊聊高效开发的一些套路与实践

news2025/1/13 15:55:04

前言

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

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

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

1. 如何提升个人开发效率?

同样一个需求,不同的角色会如何来着手实现,然后我们再来看差距在哪里?
在这里插入图片描述
一个需求如何被处理,从初级开发工程师到中级再到高级、架构师他们处理的方式流程是不一样的。

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

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

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

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

在这里插入图片描述
我们来看看面向对象(Object-Oriented),你可以把OO分为,OOA、OOD、OOP,也就是面向对象的分析(Analysis),面向对象的设计(Design),以及面向对象编程(Programming)

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

  1. 通过OOA来分析业务流程输出模型

  2. 基于模型再做面向对象的设计OOD,借助UML来描述整体的一个业务需求的流程

  3. 以OOD归纳的用例图、时序图、类图做为蓝图来指导OOP

  4. 设计高层抽象,以伪代码的方式串联起整个业务流程

  5. 拆分出一些独立任务交给其他人实现

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

3. 如何跳出’低层实现’这口井?

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

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

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

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

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

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

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

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

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

4. 如何理解开发流程?

在这里插入图片描述
先得有需求分析,再做流程设计,最后才是代码实现。

5. 你开发环节中的角色扮演?

从OOA、OOD再到高层抽象架构和低层实现,不同角色的职责是不一样的。
在这里插入图片描述
很多工作两三年的同学都会焦虑,焦虑的是技术不能走的长久,30岁以后就走管理吧。有这样的焦虑不是什么错,错的可能是你对管理没有一个非常明确的概念。你知道如何做一个合格的管理吗?他的职责是什么?他比起其他角色,突出在哪些能力?

站在一个管理的层面,想要产品稳步迭代,需要让每个环节变得可控。

  • 想象下,如果需求分析不对,大量的业务代码要重写,这是潜在风险。

  • 想象下,如果业务设计不够明确,没有提前定好规则与约束,大量的代码都会是一次性的,也就导致了冗余和低效,这是技术债务,迟早要还的。

  • 想象下,如果代码不够解耦,未来修改会导致牵一发而动全身,使得重构困难,又无法满足产品快速迭代。

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

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

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

小结

支撑产品的是技术,推动产品的也有技术的功劳,只是觉得这个角度很有趣,大家可以再深思下,为什么要有面向对象语言?是业务推动了技术,还是技术革新了业务?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/435908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter - 动画使用及自定义动画组件(tabbar跳动动画或文字抖动)

demo 地址: https://github.com/iotjin/jh_flutter_demo 代码不定时更新,请前往github查看最新代码 Flutter - 动画组件(tabbar跳动动画或文字抖动) 序效果图动画简介动画类型Flutter动画的一些概念 常用动画实现隐式动画Tween动画Curve动画H…

低代码/无代码平台在软件开发中的应用

随着技术的不断发展,软件开发也在不断地进步。低代码/无代码平台已经成为软件开发的一个新的趋势。在这篇文章中,我们将深入探讨低代码/无代码平台在软件开发中的应用,包括它们的优势、如何选择合适的平台以及如何使用这些平台来开发高质量的…

机器学习 CarRentalData数据集分析和预测

介绍数据集 fuelType:燃料类型 rating:评级 renterTripsTaken:租房者出行 reviewCount:审阅计数 location.city:位置.城市 location.country:地点.国家/地区 location.latitude:位置.纬度 loca…

STM32按键实验中连接按键的GPIO管脚是上拉输入还是下拉输入

一、理解 关于STM32按键实验中连接按键的GPIO管脚是配置为上拉输入还是下拉输入的理解&#xff1a; 以江科大自动协教学视频按键输入实验为例&#xff1a; &#xff08;1&#xff09;按键KEY0<——>PE4 按键另一端接GND &#xff08;2&#xff09;按键KEY1<——&…

入门教学 | 快速了解集简云

集简云是一款超级软件连接器,无需开发,无需代码知识就可以轻松打通数百款软件之间的数据连接,构建自动化与智能化的业务流程。通过自动化业务流程,每月可节省企业数百甚至数万小时的人工成本。 集简云是什么? 集简云是一款超级软件连接器,无需开发,无需代码知识,就可以…

在现成的3D打印机上进行实验理论:一种数据孪生的攻击探测框架

在现成的3D打印机上提供了一种DT中攻击探测框架的DT解决方案的实验演示&#xff0c;作为说明性CPMS资源。通过网络安全DT对打印机正常运行、异常运行和攻击三种情况下的实验数据进行收集和分析&#xff0c;得出攻击检测结果。实验装置概述如下图所示。该实验研究是在现实世界设…

刚刚入职Android开发的应届生,该如何走向架构师

相信有不少从事Android开发的朋友&#xff0c;在工作一两年后会陷入一段迷茫期&#xff0c;有的是在工作中遇到了瓶颈&#xff0c;感觉无法突破&#xff1b;有的是想进阶成为架构师&#xff0c;但不知道如何进阶&#xff0c;因此产生了一些烦恼。为此小编在这里分享Android开发…

安卓开发: Compose 中的 Text 文本控件属性详解

Composable fun Text(text: String,modifier: Modifier Modifier,color: Color Color.Unspecified,fontSize: TextUnit TextUnit.Unspecified,fontStyle: FontStyle? null,fontWeight: FontWeight? null,fontFamily: FontFamily? null,letterSpacing: TextUnit TextU…

wps宏编辑器案例1-自定义函数使用

某公司考情和请假系统是2套独立的系统&#xff0c;人资在月底做考勤统计的时候需要把考勤系统导出的考勤信息表和OA请假流程导出的请假信息表进行合并&#xff0c;得出人员真实的考勤情况。比如员工“忠达”在考勤系统全显示缺勤&#xff0c;实际上请假系统里有4天请假&#xf…

16、Web原生组件注入(Servlet、Filter、Listener)

文章目录 1、使用Servlet API2、使用RegistrationBean 【尚硅谷】SpringBoot2零基础入门教程-讲师&#xff1a;雷丰阳 笔记 路还在继续&#xff0c;梦还在期许 1、使用Servlet API ServletComponentScan(basePackages “com.atguigu.admin”) :指定原生Servlet组件都放在那里…

全景天窗式科普数据仓库

数据仓库是一个面向主题的、集成的、随时间变化但信息本身相对稳定的数据集合&#xff0c;用于支持管理决策过程。其本质就是完成从面向业务过程数据的组织管理到面向业务分析数据的组织和管理的转变过程&#xff0c;也是商业智能BI中数据仓库的主要作用。 数据仓库 - 派可数据…

Spring Boot 定时任务

Spring Boot 提供了方便的注解来实现定时任务。下面是定时任务注解的详细教程&#xff1a; 一、添加依赖 要使用 Spring Boot 的定时任务注解&#xff0c;首先需要在项目中确认已添加过spring-boot-starter的依赖。 <dependency><groupId>org.springframework.b…

【youcans的深度学习 D01】PyTorch例程:从极简线性模型开始

欢迎关注『youcans的深度学习』系列 【youcans的深度学习 D01】PyTorch 例程&#xff1a;从极简线性模型开始 1. PyTorch 建模的基本步骤2. 线性模型的结构3. 建立 PyTorch 线性模型3.1 准备数据集3.2 定义线性模型类3.3 建立一个线性模型3.4 模型训练3.5 模型推断 4. PyTorch …

java-处理xml格式数据

处理xml格式数据 前言一、java处理xml格式数据1、 生成XML格式数据2、 解析XML格式数据 二、问题三、常用类及方法介绍 前言 dom4j是java中的XML API&#xff0c;性能优异、功能强大、开放源代码。 也是所有解析XML文件方法中最常用的&#xff01; 一、java处理xml格式数据 …

榜单发布 新能源乘用车OBC赛道进入转型升级周期

新能源汽车尤其是纯电动汽车市场的快速普及&#xff0c;也带动一批相关核心零部件厂商做大做强。比如&#xff0c;以车载充电机OBC及集成电源行业为例&#xff0c;威迈斯、富特科技等数家公司正在冲刺IPO。 目前&#xff0c;车载电源领域产品主要分为三种&#xff1a;一是单一…

步入AIGC时代,展望人工智能发展

步入AIGC时代&#xff0c;展望人工智能发展 0. 前言1. 步入 AIGC 时代1.1 人工智能简介1.2 AIGC 简介1.3 AIGC 发展与应用 2. CSIG 企业行——走进合合信息2.1 活动介绍2.2 走进合合信息 3. 文档图像处理中的底层视觉技术3.1 什么是底层视觉3.2 智能图像处理技术3.3 智能图像处…

消息中间件RabbitMQ---概述和概念 【一】

1、概述 1、大多应用中&#xff0c;可通过消息服务中间件来提升系统异步通信、扩展解耦能力 2、消息服务中两个重要概念&#xff1a; 消息代理&#xff08;message broker&#xff09;和目的地&#xff08;destination&#xff09; 当消息发送者发送消息以后&#xff0c;将由…

C语言中数据结构——顺序表

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下…

java多线程详细讲解 线程的创建、线程的状态、synchronized锁、Volatile关键字、和cas锁(自旋锁 乐观锁 无锁)

java多线程详细讲解 线程的创建、线程的状态、synchronized锁、Volatile关键字、和cas锁&#xff08;自旋锁 乐观锁 无锁&#xff09; 一、线程的概念二、创建线程的三种方式三、线程方法Sleep、Yield、Join四、线程的执行状态五、synchronized关键字1.为什么要上锁?2.锁定的内…

SDL初识(1)

简介 SDL(Simple DirectMedia Layer) 是一个跨平台开发库&#xff0c;旨在通过 OpenGL 和 Direct3D 提供对音频、键盘、鼠标、操纵杆和图形硬件的低级访问。 SDL 支持 Windows、Mac OS X、Linux、iOS 和 Android。可以在源代码中找到对其他平台的支持。SDL 是用 C 语言编写的…