被同事嘲笑说技术方案没深度?

大家好,我是Z哥。

程序员群体中有个很好玩的现象。

工作年限短的程序员热衷于设计“高大上”的技术方案,而工作年限长的则对技术方案好像不太感冒,上手就撸代码。

然后呢,年限短的程序员们想的技术方案又不好意思拿出来讲,而年限长的程序员们又不屑于设计技术方案,久而久之,大家好像就不太care技术方案了,都是拿到任务上手直接撸代码。

我想这个情景在国内的大环境下是很常见的。

之所以工作时间越长,越不care技术方案,在我看来的主要原因是,大家都觉得就算做了技术方案,也没啥新奇的,认为其中的思路和用到的技术框架大家都知道,没啥意思,不是浪费时间么。

到如此地步,Z哥觉得可能是大家没有掌握设计技术方案的合理思路导致。所以今天我来分享一些我的看法。

想要让方案让人有一种眼前一亮的感觉,或者说有一些意料之外的信息收获,关键在于你是否能挖掘到其他人没考虑到的盲区,并且将如何解决这个盲区问题的思路给讲出来(重点:思路比具体的方案更重要)。而想要挖掘盲区,只能往细节里去抠,因为在大方向上,大部分人的认知都是差不多的。

有过一定开发年限的小伙伴们可能有过这样的经历:因为前期设计考虑不周,导致在开发过程中过遇到某个业务细节无法很好的处理,进一步导致要么选择更加复杂的“曲线救国”方案,要么推翻重头好好设计。假如,我们在前期的技术方案设计时就能预见到这点,这可不就是让人眼前一亮的方案么。

根据我的经验,不要着急撸代码,基于以下这4个步骤去做技术方案的设计,想要挖掘到这些细节其实不难。

  1. 需求分析

  2. 方案设计

  3. 方案落地规划

  4. 方案总结

乍一看这些步骤没啥特别的,下面我来展开说说,或许会让你有新的发现。

/01  需求分析/

需求分析分为两个方面,业务和技术。前者是必做的,而后者往往在中小型公司里被大家给忽略。这些忽略的地方往往是亮点所在。

怎么考虑技术层面的需求分析?其实脑子里只要记住一句话:如何保障系统无时无刻稳定地运行?

一般来说往这4个点考虑总是没错的。

  • 安全性问题:被劫持、被逆向、被抓包等;

  • 兼容性问题:在不同设备上运行可能存在的兼容性风险;

  • 性能问题:内存泄漏、卡顿、高CPU占用等可能导致整机流畅度和功耗等问题;

  • 合规问题:技术上可能存在的法律风险,比如使用第三方开源库等。

/02  方案设计/

第一步的需求分析,主要目的是确定目标(需要解决的问题,解决到什么程度)。第二步的方案设计其实就是拆解目标,并且转化为具体技术实现方案的过程。而这其中,如何拆解目标比如何选择技术实现方案更重要。因为前者考虑的是how和why,而后者只是在what中做选择题。

这一步要做的事情最多,耗时也最多,首先是方案设计和技术选型。

我建议你拆解目标的时候多画图,不管是业务流程图还是技术架构图,甚至是UML建模图,这些都有助于充分发挥你的抽象能力。而这个能力恰恰是目标拆解的关键所在。

通过这些图,能够清晰地知道整个项目涉及到哪些技术领域(如,WEB、大数据处理),以及这些技术领域由哪些技术点组成,并且它们之间是如何配合运作的。在开始阶段只需要画出项目的主流程和核心流程就可以了,其它子流程可以在大框架确定下来之后再画。

这里有一个要点需要注意:在选择每一个具体使用的技术框架的时候,如果没有特殊情况,我建议优先考虑复用公司里现有的资源,其次才是考虑引入开源资源或者商务合作的资源,最后才是自研。毕竟「低成本」和「快速」是每一个组织都在不断追求的目标。

如果确实需要自研,那么要走预研流程,在有预研成果作为对项目的一定把握后才能进入工程化。如果是引入新技术,需要做技术方案选型,技术方案选型要基于项目的各维度关注点来选出最合适而非最厉害的方案。在方案选型中呈现的信息必须是经过实际验证得出的,毕竟商业资源的信息透明度不如开源资源,还是有不少存在夸大嫌疑的。

除此之外还需要注意以下三点。

01  防止过度设计

这点就不展开说了,但是非常有必要单独列出来。的确有很多人通过过度设计来体现自己方案的亮点,但是现实价值可能是负的。

02  争取尽可能多的设计时间

在如今的大环境中,很多公司给的前期设计时间可能很少,甚至完全不给。但是只要我们能证明这么做的价值,我们也是有办法去争取更多的前期设计时间的。

比如,下下策是你给自己工作估时的时候就把设计的时间考虑进去,不要只给一个理想情况下单纯coding的时间。毕竟,coding快不一定等于质量好,把时间拉长到项目上线后来看,理性的领导应该能看到你这么做的价值。但是如果你花时间设计了,质量和没设计的没差,这就另当别论了……(人与人之间的信任一旦崩坏就很难重新建立了)

03  避免以技术先入为主来设计

很多人可能会基于之前最熟悉什么技术或者近期对什么技术感兴趣来设计方案,这个是非常不可取的。虽然说最终可能也能满足需求,但是毕竟“强扭的瓜不甜”。

/03  方案落地规划/

方案设计只是开始,真正完成落地才是结束。

有些人的方案设计得很高大上,但是落地的时候问题百出,这里的原因就在于没有很好的考虑具体该如何落地。毕竟不同的环境背景、人员水平,都对落地起到了很大的影响。

一般在落地规划上,主要关注以下两个方面。

  1. 里程碑的划分。划分的颗粒度尽量小一些,以小步快跑的方式及时交付,这样遇到问题能快速调整,降低风险。使得整个落地的过程平滑、可控。(像我这种偏理想化的人,会对里程碑的时间节点预留20%~50%的弹性空间,以免被自己的乐观给坑了~)

  2. 验收指标的确定。整个系统设计后是否符合预期,是需要有一些指标来度量的。否则没有人知道你设计的技术方案到底咋样。不小心在别人眼中沦为ppt架构师。

/04  方案总结/

可能你会觉得疑惑,为什么还要总结呢?

很多人在做完第二步之后就结束了,但这也是他们的技术方案让其他人觉得没啥感觉的原因所在。因为缺少了总结,你就缺少了提炼,缺少了对亮点的突出,其他人自然会觉得你设计的技术方案没啥新意了。

其实总结主要就是回答这4个问题。

  1. 这个场景中存在的主要问题有哪些?

  2. 这个技术方案能解决其中的哪些问题,以及解决到什么程度?

  3. 实施过程中存在哪些风险?有何预案?

  4. 整个项目的投入情况如何?

其中第2、3点往往是亮点所在的地方。第4点则可以体现你考虑的全面。

如果来听你讲述技术方案的人里有非技术人员,那么你还得考虑如何将总结做的更加地通俗易懂。

好了总结一下。

这篇呢Z哥和你分享了我对如何设计技术方案的看法。

思路其实很朴实,但往往很多人的方案轻视了第3、4点。

  1. 需求分析

  2. 方案设计

  3. 方案落地规划

  4. 方案总结

其中第2点主要额外注意:

  1. 防止过度设计

  2. 争取尽可能多的设计时间

  3. 避免以技术先入为主来设计

希望每一位小伙伴都能设计出让你眼前一亮,有收获的技术方案。

推荐阅读:

  • “鸭梨”大吗?

  • 近业务=困死在一条船上?

原创不易,如果你觉得这篇文章还不错,就「点赞」或者「在看」一下吧,鼓励我的创作 :)

也可以分享我的公众号名片给有需要的朋友们。

如果你有关于软件架构、分布式系统、产品、运营的困惑

可以试试点击「阅读原文

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

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

相关文章

有个厉害的程序员女朋友是什么体验?

全世界只有3.14 % 的人关注了数据与算法之美自古妇女能顶半边天,在 IT 界,女生的力量也越来越强大,杰出的女性闪耀在我们身边。有人说:世界上有两种程序员一种是程序员一种是女程序员据数据汪了解,世界上第一个程序员 …

oracle 11g ORA-12541: TNS: 无监听程序 (DBD ERROR: OCIServerAttach)

em无法浏览,同时监听起不来。同时他的监听服务还是正常的,我做了两步修改 这个问题,最被大家认可的原因是IP地址变动,或者是其它原因,导致Oracle配置文件中的机器名或者IP不能被识别。有种解决办法是修改Network Confi…

out参数不用赋值?这么神奇吗!

首先提醒大家一下,docs.microsoft.com上的《C# 指南》是这样描述out 参数修饰符[1]的:作为 out 参数传递的变量在方法调用中传递之前不必进行初始化。但是,被调用的方法需要在返回之前赋一个值。请注意上面加粗的话,然后看看下面的…

SVN客户端--TortoiseSVN使用说明

TortoiseSVN是windows下其中一个非常优秀的SVN客户端工具。通过使用它,我们可以可视化的管理我们的版本库。不过由于它只是一个客户端,所以它不能对版本库进行权限管理。 TortoiseSVN不是一个独立的窗口程序,而是集成在windows右键菜单中&…

年底求职难?起薪28万的数据岗位,人才缺口达150万,不限专业学历……

全世界只有3.14 % 的人关注了数据与算法之美2018下半年开始,“寒冬”说愈演愈烈。事实上企业的结构调整、人才升级是常见的现象,而且并非所有互联网企业都在“缩招”,很多企业甚至计划在明年扩大校招。人工智能、数据技术的迅猛发展&#xff…

helm安装postgres_添加到postgres数据库外的keycloak k8s helm chart环境参数

我是Kubernetes和helm-charts的新手,并试图让Keycloak在Postgres中保存数据而不是在H2中(因为他默认情况下这样做) . Postgres将由单独的头盔图创建 . 首先我按命令创建Postgres:helm install --namepostgres-keycloak stable/postgresql然后我看一下新的…

在.NET 6中使用DateOnly和TimeOnly

千呼万唤始出来在.NET 6(preview 4)中引入了两个期待已久的类型,将作为核心库的一部分。DateOnly和TimeOnly允许开发人员表示DateTime的日期或时间部分。这两个类型为值类型(struct type),可以在代码中独立处理日期或时间概念时使…

团队强才是真的强

没有优秀的个人,只有优秀的团队。如果说今天上午大兴交通局举办的“安全知识竞赛”我们拿了第一名是由于我本人发挥的出色不如说是我们这个团队的整体水平的再现,我们八个队轮番角逐,开始成绩分数不分上下,没有拉开距离。八个队每…

预售┃要孩子逻辑清晰、善于思考,别忽视空间想象力的游戏锻炼!

▲数据汪特别推荐点击上图进入玩酷屋在之前的文章时,马斯提到数学存在一种现象叫“梯次掉队”,原因在于孩子的数学思维地基没有打牢。(传送门)提到初中孩子需要空间想象能力时,很多父母疑惑为何需要?关于这…

mysql中查询出现的错误_在MySQL查询中查询语法错误

您在此专栏后缺少逗号:p.name请考虑以下查询:SELECT i.itemtype AS Item, p.name, SUM(CASEWHEN itemtype 2148 THEN i.countELSE 0END) AS Count, SUM(CASEWHEN itemtype 2152 THEN i.countELSE 0END) * 100 AS Count1, SUM(CASEWHEN itemtype 2160 …

通过Dapr实现一个简单的基于.net的微服务电商系统(十六)——dapr+sentinel中间件实现服务保护...

dapr目前更新到了1.2版本,在之前4月份的时候来自阿里的开发工程师发起了一个dapr集成Alibaba Sentinel的提案,很快被社区加入到了1.2的里程碑中并且在1.2 release 相关升级文档里可以看到已经实现了对Alibaba Sentinel的支持。今天我们就讲讲我们如何通过…

预售┃让苹果CEO库克折服的程序员仅10岁!?

▲数据汪特别推荐点击上图进入玩酷屋在国外,编程教育课早已普及,美国、英国、新加坡等国家少儿编程已进入小学标准必修课程体系。韩国、日本也相继在2017年和2020年开展一年级至初三的编程教育普及。美国总统孙女,五岁开始学习在电脑上编程最…

IBM-X3650 6核处理器安装sql server 2005报错解决方法

1、在运行中输入msconfig2.选择BOOT.INI在高级选项3.勾选/NUMPROC,数字选择为2的n次方,点击确定4.重新启动系统后,可正常安装SQL Server 20055.安装完成后,在装sql server2005 sp4补丁后6.然后把/NUMPROC勾去掉7.重新启动后,可正常…

java 字符串小写_Java字符串如何转换大小写?

程序开发中,经常需要对字符串进行转换操作,例如将字符串转换成数组的形式,将字符串中的字符进行大小写转换等。接下来通过一个案例来演示字符串的转换操作。 public class string03 {public static void main(String[] args) {String str="abcd"; System.out.prin…

C#-using与添加引用的关系

添加引用是using的必备条件 只有添加了对程序集的引用,此程序集内的命名空间才能被using项目添加引用的目的是引入程序集 程序集的概念是什么? 程序集是一个 DLL,这是调用其中类的必备条件 一个程序集包括一个或多个命名空间 举例来说 命…

如何提高自己的工作效率

1. 对整体的项目需求的了解(建议给新入职项目成员整体介绍一下); 2. 做具体模块的时候有必要再细讲一次当前开发模块的具体内容,越详细越好(由于刚入职对整体不了解还有对新的技术有个入门过程)&#xff1b…

入门机器学习,就这么简单!

AI这个词相信大家都非常熟悉,近几年来人工智能圈子格外热闹,光是AlphoGo就让大家对它刮目相看。今天小天就来跟大家唠一唠如何进军人工智能的第一步——机器学习。在机器学习领域,Python已经成为了主流。一方面因为这门语言简单易上手&#x…

程序员过关斩将--错误的IOC和DI

什么是IOC?什么是DI?IOC和DI有什么关系?作为程序员,天天撸代码,怎么能不知道IOC和DI呢。很多面试官也喜欢问这两个概念,虽然概念很简单,但是可以从面试者的回答当中,大体的可以估算到…

java 生成jar_java如何生成jar

将*.class文件压缩成一个文件交付给用户使用,那么这样的文件就称为jar文件。如果要想生成jar文件,直接使用JDK中bin目录里的jar.exe就可以将所有的类文件进行压缩。此命令是随JDK一起安装的,直接在命令行中输入jar,即可看到此命令…

windows server 2012 dhcp 配置故障转移

在前面,青年怪客搭建的活动目录服务,在前面的内容中,我希望能在一个企业中,有一到两台域服务器可以管理我们企业内容中的计算机,但是一般的企业都是需要DHCP服务器的,为此我在前面的内容中,也配…