最近在评审技术方案,和代码review的时候,遇到刚入行的同学们,很多都讲不清楚技术方案。

具体表现是:
 – 上来不说需求,直接说算法实现。台下一头雾水,根本不知道设计方案是否合理。
 – 描述完需求后,又直接看代码,看表结构,没有交代流程。
 – 比较简单的算法,描述的特别绕,让人听不懂。被别人指出后,觉得这东西这么简单,你们为什么听不懂,还很委屈。
 – 直接说术语,不给解释。还有自己造术语不给解释的,更混乱的是「复用」已有的术语,让大家理解都不同。

那么程序员如何把技术方案讲清楚呢?下面从实用的角度教大家一些小技巧,在短时间内具备讲清楚的能力。在文末给出通用的方法论学习书籍,供长线学习,达到把所有事情都能交代清楚。

一、要先交代需求背景。

为什么要做这个需求,对于实现的要求是什么,产品经理提了哪些边界条件。没有银弹,一个技术方案的好坏与实现要求息息相关,是不能脱钩的。例如,一个接口访问质量统计系统,可以接受一天跑一次脚本生成数据。但是为用户提供服务的消费明细,肯定要能实时展示,并且不能出错。

在评审中,消耗时间比较多的,就是台下的听众问被评审人需求背景。还有台下的人给出了某个建议,然后被被评审人否定,说有个产品的要求我刚才没说。这时对提出建议的人来说,是很伤的。

交代好背景并对齐,是评审技术方案和代码review的基础,否则别人不知道你后面的是否合理,甚至不知道你到底在做什么。技术方案评审就无从谈起了。

二、介绍技术方案整体架构

背景知识说完后,说你的做法。要先总后分,先从整体介绍架构设计。有哪些模块,各自负责什么职责,如何衔接……让大家有个整体认识,看到哪部分是主要矛盾,大家把80%的精力花费在20%的重要模块上评审,好钢用在刀刃上。

例如一个发奖活动,最重要的模块是发奖抽奖模块,但是上来不讲整体,而是先讲展示活动规则的模块,而且用掉了大半的时间,是很浪费人力的。

整体架构的描述用架构图、流程图,加上简练的语言,交代明白即可。一般都有架构模板,直接按照模板的要求,参考已有的优秀例子,都不会有大问题。最重要的是这块要先讲,先交代清楚。

三、介绍协议、库表设计

整体方案介绍完之后,介绍协议和数据库表设计,开始逐步深入细节。因为这块设计的是否合理,对程序的效率影响比较大。

分清哪些协议、表是重要的,着重讲,其他不太重要的快速讲。

协议的执行流程,要交代清晰,整个协议是怎么在各个模块中流转的,到具体数据修改时,是如何和已有表结构串联起来的。这也是程序执行的流程,如果讲不清楚,会深度怀疑你是否能实现清楚。

这部分要注意,尽量少说术语。因为大家的背景知识不同,一些专门术语大家是不知道的,你要用直白的话语让大家听明白。

例如:有人在描述协议流程时说「我调用server提供的123号命令,返回成功后,把数据库的state字段改为2,就完成发奖了」。但是你说的123是干什么的,state是什么意思,2是什么状态?

大家的疑问太多了,好的说法应该是,「我调用server提供的123号发奖的协议,返回成功后,把数据库中该用户的发奖状态,更新为已发奖」。

四、描述分支和异常逻辑,讲解代码

经过前面几部的讲解,方案基本上讲完了。剩下的就是讲分支逻辑,和异常逻辑。一份代码写的好不好,程序员是否有经验,主要是看对于异常处理是否到位。

这部分从架构上主要讲容灾、鲁棒性,例如某个server死掉了,或者某个模块频繁请求,你的系统是否有预警,能够兼容。说白了就是要讲解系统的边界条件和服务能力。

最后上代码,如果是代码review,在这个时候才开始说你的代码。虽然看的时间比较晚,但是大家都知道你的代码是什么功能了,看的速度也会加快。

五、复盘

每次评审后,要自己复盘,总结。别人都问题哪些问题,为什么要问?哪些问题是我应该交代没交代的,让人家问了?哪些是我方案的问题,别人提出的挑战?

对于自己没交代的,思考为什么会漏,如果能提前讲清楚,是否能节约很多时间。

根本的心法就是要有同理心。从对方的角度思考,这个问题他会了解吗,我不说他明白吗?方案评审重要的不是你说完,而是别人听懂。关注台下人的反应,你的任务不是讲,而是让大家听明白。不是一个劲的说,而是要让大家都理解你的意思,这样别人才能帮你。否则别人会一直问问题,挑战你,最后否定你的方案。

千万不要觉得听众好笨,这么简单都不明白,如果台下的人都不明白,那么一定是你错了。能力强的人是能够把难题讲解的很简单的。美国有专门负责科普的作家,把复杂的科学知识做到「老妪能解」。台下评审的人都是身经百战的,如果他们都反映听不懂,那么会是谁的问题呢?

总结

技术方案讲解要先交代背景,再讲整体架构,再细化流程。先主线,再分支,先正确路径,再异常逻辑。要在听众的角度去讲,尽量直白简单,能够让不懂技术的人听懂才是最好的。

延伸阅读
通用的方法论可以学习《金字塔原理》《问题的分析与解决》中的SCQA、MECE等方法,这些才是根本,要努力学习和刻意练习才能够掌握。

程序员如何讲清楚技术方案相关推荐

  1. 一个PHP程序员的职业生涯技术提升阶梯规划方案

    优秀的PHP程序员的职业生涯技术提升阶梯规划方案 作者:极客小俊 一个专注于web技术的80后 我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人! CSDN@极客小俊,原创文章, B站技 ...

  2. 程序员如何在技术上提升自己

    程序员如何在技术上提升自己 发表于2014-10-29 09:48| 26529次阅读| 来源CSDN| 111 条评论| 作者钱曙光 社区之星访谈李运华程序员面向对象团队管理 allowtransp ...

  3. 程序员如何从技术岗转为技术管理层

    有一个非常有趣的现象:据说大部分的技术管理者,在其从程序员转为管理岗位的时候,都是在领导或公司的要求下,被动的推到管理岗位上的,并非是自己当初有强烈意愿.主动去选择管理岗的.这种被动的比例还不低,高达 ...

  4. 程序员如何从技术岗转为技术管理层?

    有一个非常有趣的现象:据说大部分的技术管理者,在其从程序员转为管理岗位的时候,都是在领导或公司的要求下,被动的推到管理岗位上的,并非是自己当初有强烈意愿.主动去选择管理岗的.这种被动的比例还不低,高达 ...

  5. 好程序员web前端技术分享媒体查询

    为什么80%的码农都做不了架构师?>>>    好程序员web前端技术分享媒体查询 什么是媒体查询 媒体查询可以让我们根据设备显示器的特性(如视口宽度.屏幕比例.设备方向:横向或纵向 ...

  6. 好程序员web前端技术之CSS3过渡

    好程序员web前端技术之CSS3过渡,css3的transition允许css的属性值在一定的时间区间内平滑地过渡.这种效果可以在鼠标单击.获得焦点.被点击或对元素任何改变中触发,并圆滑地以动画效果改 ...

  7. 阿波罗登月51周年,程序员用DAIN技术还原阿波罗登月高清影像,效果震撼

    简介:7月20日是阿波罗登月51周年.一位YouTube名为DutchSteamMachine的程序员使用AI技术修复了阿波罗登月的原始影像,将登月镜头的像素从每秒12帧提升到每秒60帧,效果令人震撼 ...

  8. java在容器中导入图片_Java程序员必学技术:@Import直接导入类,在容器@Configuration、@Component中是怎么直接导入类注册到容器的?...

    Java程序员必学技术:@Import直接导入类,在容器@Configuration.@Component中是怎么直接导入类注册到容器的? Spring IoC 容器是一个管理 Bean 的容器,在 ...

  9. dba的前景_运维、测试、程序员,这些技术岗位哪个更有前景?

    在一个初具规模的互联网公司,从业务方面出发,有很多岗位类型,比如运营.客服.市场.产品.设计.技术等等. 在这些大类下面,还要细分各种小类,以技术为例,可分为前端(客户端).后端.测试.运维.DBA等 ...

最新文章

  1. MySQL数据库聚合函数(count、max、min、sum、avg)
  2. 四路服务器芯片组,四路服务器主板配置
  3. 【Linux环境】简单Shell脚本实现定时备份文件、压缩、删除超时文件操作(showDoc文件备份脚本举例)
  4. 电脑技巧:如何彻底关闭电脑右下角闪烁弹窗广告?
  5. oracle 的变量的定义和赋值
  6. mysql根据id主键查询是找到了就不再遍历后面的数据了吗_MySQL索引相关
  7. 基于单片机的火灾消防系统设计(#0480)
  8. ftp断点下载工具,推荐6款好用的ftp断点下载工具,怎么使用
  9. 武汉科技大学计算机转专业吗,武汉科技大学可以转专业吗,武汉科技大学新生转专业政策...
  10. 大脑神经网络记忆原理图,记忆力机制的神经网络
  11. 同一目录下批处理执行Word宏
  12. “数”峰亮剑,优炫数据库助力国产数据库算法对抗赛成功举办
  13. Charles工具使用教程,以及注意事项。
  14. LaTex:实现在Springer可以使用bibtex自动生成引用文献,而不用写Bibitem
  15. Minor GC和Full GC有什么区别?
  16. 《数据结构》八大排序(详细图文分析讲解)
  17. STM32嵌入式实现智能家居控制系统
  18. 洛谷3258 松鼠的新家
  19. 学习网站:中国大学MOOC(慕课)
  20. 百度音乐java_jsoup解析百度音乐

热门文章

  1. Java Calendar.add()方法的使用,参数含义。指定时间差。
  2. 2022-2028年中国工业节能行业深度调研及投资前景预测报告
  3. mysql6.0设置时区_关于Mysql6.0+的时区错乱问题
  4. Redis 笔记(15)— 管道 pipeline(客户端将批量命令打包发送用来节省网络开销)
  5. view(*args)改变张量的大小和形状_pytorch reshape numpy
  6. Android Studio中RecycerView依赖库加载问题
  7. LeetCode简单题之删列造序
  8. MindSpore后端运行类
  9. 优化汽车仪表板以实现高效渲染
  10. AI解决方案:边缘计算和GPU加速平台