架构师前辈告诉你:代码该如何才能自己写得容易,别人看得也不痛苦

来源 | 编程新说

责编 | Carol

头图 | CSDN 下载自视觉中国

切身感受

在这个世界上,最难看懂的文档,永远是同事写的需求文档。最难看懂的代码,永远是同事写的业务代码。

我很纳闷,像Spring这样的官方英文文档,我看起来也不太费劲,但是需求文档,我却要花费极大力气。

像Spring这样的源码,我读起来也尚能较好应付,但是业务代码,我却常常需要绞尽脑汁。

清晰 VS 混沌

如果一道高考证明题的作答,是卷面清晰,字迹工整,说明考生当时的思路是清晰的。

相反,如果卷面凌乱,写了之后又划掉,划掉之后又再写,说明考生当时的思路是混沌的。

对高考作文来说也是一样的,一气呵成的一定是思路清晰的,修修改改的一定是思路混沌的。

思路清晰的作答,正确的可能性更大一些,思路混沌的作答,错误的可能性更大一些。

就像狙击手一样,一定要一发命中,否则便暴露了自己、丧失了天机、影响了情绪,几乎不可能再命中了。

需求文档写的不清晰,是因为需求人员自身对需求的认知就不清晰。代码写的混乱的,是因为开发者自身的思路就是混沌的。

相同的东西,不同的宿命

北方有些省份早晚都是吃稀饭的,我家乡就是。

面粉和水就可以做出一种稀饭叫面汤,如果加几个鸡蛋进去,口感会更好些。

然而同样是面粉和水,只要把比例变一下,最后做出来的就是浆糊。可以用来粘东西。

我们经常听到一个比喻,说场面乱成了一锅粥,其实粥还好,要是乱成一锅浆糊,那才是真的乱。

如果我们要建造一个普通的平房,那几乎不用准备什么,直接按自己的思路走就可以,最后也不会有太大出入。

如果要建造一座复杂的房子,那必须要先设计好造型、画好图纸,这才能保证造出来是自己想要的样子。

同样是面粉和水,一个成了面汤,一个成了浆糊。同样是一堆建材,一个成了平房,一个成了别墅。

为什么相同的东西最后却落得不同的宿命呢?其实不在东西本身,而在它的主人,主人掌握了它们的命运。

主人精雕细刻一些,那就是工艺品,主人粗制滥造一些,那就是日用品。

渴望美丽,追求美好

工具都是一样,代码却是不同,原因不在于语言、类库或IDE,而在于写代码的人。

水平和能力只占次要原因,主要是认知和态度。

这些写代码的人只把代码当作“日用品”,压根儿没想过把它变成“工艺品”。

要知道代码除了被服务器运行外,也是要被人看的,怎么说也要讲究点美感吧。

我们从小都知道踏青和春游,那是因为春天万物复苏、柳绿花红、春意盎然。不仅是视觉上的盛宴,还有心灵上的享受。

我们从来没见过像下面这样的诗句:

脚踩干枯的野草,手拿落叶的光棍,眼望满目的疮痍,背对凄凉的大地,内心万念般俱灰。

这种场面应该不会有人追求,是吧。

前戏做足,水到渠成

我对画画不太了解,但是我知道有个成语叫胸有成竹嘛,就是在画竹子之前,大脑中已经有竹子的样子了。所以画画就是一个对物体的复原过程。

随着计算机科学的发展,软件行业也得了较大的发展,三维立体图,三维动画,各种仿真程序等做的越来越逼真。这对各行各业都起到了极大的推动作用。

比如在一栋大楼开工前,它的三维立体模型就用软件做出来了,跟真的一摸一样。那么在实际建造时,就是一个复原过程,只需解决工程问题即可。

同样在装修开始前,装饰公司也会用三维软件把装修后的效果图给画出来,我们可以调整配色方案,调整家具布局,这样最后装出来的才能最大限度的满意。

写代码也是一样的,如果提前不规划,想到哪儿写到哪儿,结果很可能就是混乱的。不仅别人很难看懂,自己过段时间也会迷糊。如果再没有注释的话,简直就是噩梦。

当然了,写代码要想做到“胸有成竹”,其实也是很难的。但是大脑中必须有个七七八八的样子,这样写代码的过程就是对自己想法的复原过程或实现过程,这就叫做代码实现。

所以“代码实现”的含义就是,已经做好了设计或已经有了成熟的想法,然后采用写代码的方式来变现。而不是啥也不想,一上来就一通乱写。

就像从来没见过,哪个人在街上看到个美女就立马上去表白的,这样的结果不是挨骂就是挨揍。所以,无论做什么事情,前戏一定要做足。

模型化是必由之路

其实“建模”这个词我们每个人都知道,而且都听过无数次了,我自然也是这样的,但是我以前一直没有认真思考过这个问题,所以对建模也没有什么深刻印象。

直到我从事软件开发几年后,我发现如果能把复杂的问题在生活中找到一个与之相似的场景,这样问题可以得到极大的简化,真的是极大的。

这其实是一种“转换”的思想,把不熟悉领域的问题转换到熟悉的领域去解决。当然这也是一种“模型”思想,因为在我们熟悉的领域必然存在很多我们熟悉的场景,而场景就是模型,或者说是简化的模型。

举一个转换的例子,以前科学家在地球上观测火星,记录了很多时间和位置数据,最后把火星的轨迹画出来,发现是一团乱麻。可是我们都知道火星的轨道明明就是椭圆啊。

这需要一个前提,就是以太阳作为参考系才是椭圆。但是科学家是在地球上观测的,是以地球作为参考系的,因此画出来的是火星相对于地球的轨道,是非常复杂的。

这里讲的是参考系或坐标系的转换,可以极大的简化天体的轨道方程。我记得高中物理中也有通过转换坐标系来简化解题过程的。

把复杂的领域转换到简单的领域,把不熟悉的领域转换到熟悉的领域,很多熟悉的场景自然浮现,很多适合的模型也会灵光乍现。

操练一把试试

老话说得好,“光说不练假把式,光练不说真把式,连说带练全把式”。这次咱们来个全活儿,从头到脚的“大保健”,有说也有练。

首先需要郑重说明的是:

在对未知事物探索的过程中,不存在严格意义上的对错,也不存在严格意义上的好坏。

只有一个八字方针,那就是:大胆假设,小心求证。

我希望读者朋友不要以对错好坏去评价这个世界上的任何人和事。这不是一个非黑即白的世界,这是一个五彩缤纷的世界,同样,这也是一个真实的世界。

假设领导让你实现一个限流方案,可是你对此没有一点概念,说白了就是束手无策,因为你从来没有接触过编程中的限流。

此时我们要把不熟悉的领域转换为熟悉的领域,那么什么领域是我们最熟悉的呢?当然非生活莫属,那生活中有限流场景吗?

非常之多,经过这次疫情之后,我们应该对限流更熟悉一筹。下图就是2月份在我家楼下拍的,超市八点半开门,我去晚了,所以要排队等待。

这其实就是一个限流场景,因为怕人员太密集的话,会增加互相感染的风险,所以在人为的控制。

我们一起来分析下,看这个场景中有哪些值得我们关注的方面:

1、所有人进入超市前都要测体温(后来还要扫码),也就是说需要满足一定条件才可以进入,这叫准入门槛。

2、体温并不是自己测,而是由专人为你测,所以这个人就是准入门槛的执行者。

3、超市空间有限,一次进入的人数是有限制的,要保证低的人员密度。所以有专人查看着密度,一旦达到临界值便通知门口测体温的,不允许顾客再进入。或者测体温的自己记录好进入超市的人员数目也行。

4、当超市内人员密度降下来后,或者出去一定数目的顾客后,才允许新的顾客进来。

5、当超市内顾客购物时间过长时,会有人提醒他们赶紧选购好去收银台结账,外面还有很多人在排队等着呢。

6、当体温不合格时,会被拒绝入内,或者直接打120把人拉走。(我没有遇到过不合格这种情况)

7、外面很多人排队时,可能还需要一个人来维持队形或秩序,或给一些解释说明,甚至安抚。

8、有些人排队时间较长,等不及了,就选择放弃,然后自行离开了。

这就是生活中真实发生的且我亲身参与的限流场景。对于这个普通的甚至有些平淡的场景,我们随意分析一下,竟然分析出至少8个方面的问题。

所以我就想问一句,对于那些想成为优秀程序员或架构师的人,你们是否真心愿意花时间和精力去琢磨和分析这些各个方面的问题,如果愿意,那恭喜你,如果不愿意,那也恭喜你,至少是遵从自己内心的选择。

这个场景中描述的限流方法是有效的,因为最终解决了问题,大家都买到了菜,而且整个过程中人员也不密集。

我们可以把这个场景(或模型)中的限流方法转换到编程中,如果代码写的没有问题的话,一定是管用的,因为它的有效性已经在生活中得到了验证。

不过话说回来,肯定不是原封不动的直接照抄过去,要根据实际的情况和需求进行适合的取舍和定向的改造。毕竟生活领域和编程领域还是有差别的。

当然了,即使最后不采用这个方法,但是,它也为你打开了思路,不再让你没有方向,不再让你寸步难行。

最后送给读者朋友一个祝福(或期望)吧:

勤学习,多思考,要总结,会分析。凡事多向自己熟悉的领域靠,但也要有挑战未知领域的勇气。


推荐阅读

  • 一文带你认识keepalived,再带你通关LVS+Keepalived!

  • 那个分分钟处理 10 亿节点图计算的 Plato,现在怎么样了?

  • “谷歌杀手”发明者,科学天才 Wolfram

  • 数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程

  • 超详细!一文告诉你 SparkStreaming 如何整合 Kafka !附代码可实践

  • 5分钟!就能学会以太坊 JSON API 基础知识!

    真香,朕在看了!

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

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

相关文章

20万天猫智慧门店背后的商业思考和技术重构

阿里妹导读:2016年,「新零售」被首次提出,在这些年里,无论是互联网公司、零售企业,还是像酒店、机场等这些服务型业态,都在积极探索新的零售模式。对于天猫这样一个服务了全球诸多品牌的平台来说&#xff0…

JavaScript-表单提交验证及前端密码MD5加密

表单提交方式一&#xff0c;按钮onclick绑定 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!-- MD5 工具类 --><script src"https://cdn.bootcss.com/blueimp-…

Knative Eventing 之 Sequence 介绍

在处理数据时&#xff0c;往往会涉及到一个数据需要进行多次加工&#xff0c;这时候我们一般是通过Pipeline的方式进行处理。那么在Knative Eventing中是否也能支持对一个事件进行分步骤多次处理&#xff1f; 这个还真有。从 0.7 版本开始&#xff0c;Knative Eventing中提供了…

Linux基金会亚太区与开源中国达成战略合作 共同推动中国开源人才培养

北京时间2020年4月24日&#xff0c;Linux基金会亚太区&#xff08;LFAPAC&#xff09;与开源中国战略发布会暨LF开源软件大学联合启动仪式圆满落幕。发布会获得了多家业内知名企业的大力支持&#xff0c;邀请了50余家国内外新闻媒体参与直播报道。 会上&#xff0c;Linux基金会…

TortoiseGit 基础5部曲

文章目录1. 新增/修改文件2. 将工作区文件提交到本地仓库3. 更新最新版本项目到本地4. 将本地仓库中变动文件记录推送远程仓库5.登陆远程验证1. 新增/修改文件 新建VersionOfTheContrast.java文件&#xff0c;添加内容如下 2. 将工作区文件提交到本地仓库 3. 更新最新版本项…

即将发版!Apache Flink 1.9 版本有哪些新特性?

2019阿里云峰会上海开发者大会于7月24日盛大开幕&#xff0c;本次峰会与未来世界的开发者们分享开源大数据、IT基础设施云化、数据库、云原生、物联网等领域的技术干货&#xff0c;共同探讨前沿科技趋势。本文整理自开源大数据专场中阿里巴巴高级技术专家杨克特&#xff08;鲁尼…

TortoiseGit 单文件版本对比_入门试炼_09

文章目录一、单文件版本数据模拟二、单文件版本对比2.1. 查询单文件提交记录2.2. 单文件版本之间差异对比案例场景&#xff1a; 依次提交5次&#xff0c;推送远程&#xff0c;同一个文件5个版本之间的相互对比 一、单文件版本数据模拟 (企业内部) TortoiseGit 基础5方针_入门试…

数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程

作者 | 张秋剑&#xff0c;天云数据上海副总经理责编 | 唐小引头图 | CSDN 下载自东方 IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;近日&#xff0c;有传闻 PostgreSQL 会发布 13 版本&#xff0c;这是去年 9 月发布 12 版本之后&#xff0c;PG 社区紧锣密鼓…

那些年,我们见过的Java服务端乱象

导读 查尔斯狄更斯在《双城记》中写道&#xff1a;“这是一个最好的时代&#xff0c;也是一个最坏的时代。”移动互联网的快速发展&#xff0c;出现了许多新机遇&#xff0c;很多创业者伺机而动&#xff1b;随着行业竞争加剧&#xff0c;互联网红利逐渐消失&#xff0c;很多创…

看!闲鱼又开源了一个 Flutter 开发利器

阿里妹导读&#xff1a;随着 Flutter 这一框架的快速发展&#xff0c;有越来越多的业务开始使用 Flutter 来重构或新建其产品。但在我们的实践过程中发现&#xff0c;一方面 Flutter 开发效率高&#xff0c;性能优异&#xff0c;跨平台表现好&#xff0c;另一方面 Flutter 也面…

这些常见的分布式存储系统,你是否都了解?

来源 | 清平の乐来源 | CSDN博客&#xff0c;责编 | Carol头图 | CSDN 下载自视觉中国一、数据存储类型一般情况下&#xff0c;我们将存储分成了4种类型&#xff0c;基于本机的DAS和网络的NAS存储、SAN存储、对象存储。对象存储是SAN存储和NAS存储结合后的产物&#xff0c;汲取…

给软件工程师、数据科学家和数据工程师的面试指南:该做与不该做

亚马逊这样的公司有 14 项领导原则 。他们不想仅仅雇佣一个数据科学家或软件工程师。对于许多只进行一次或两次面试的面试者来说&#xff0c;这可能没有那么明显&#xff0c;因为你太专注于回答面试的技术部分。但是&#xff0c;在你进行技术面试时&#xff0c;我们希望提供一些…

限制在同一台电脑上只允许有一个用户登录

文章目录1. html 部分2. js部分3. 拦截器部分4. 认证授权部分5. 控制层部分6. 工具类实现流程: 1.从reqest域中获取现在登陆的新sessionId 2.根据登陆的用户名从reqest域中获取已经登陆的老sessionId 3.判断老sessionId是否存在和新旧sessionId是否是否一致 如果一直返回当前用…

FM算法介绍

概述 FM (Factorization Machine) 算法可进行回归和二分类预测&#xff0c;它的特点是考虑了特征之间的相互作用&#xff0c;是一种非线性模型&#xff0c;目前FM算法是推荐领域被验证的效果较好的推荐方案之一&#xff0c;在诸多电商、广告、直播厂商的推荐领域有广泛应用。 …

最新!Vicor 270V-28V DCM5614以96%效率提供1300W功率

近日Vicor 宣布推出隔离式稳压 270V-28V DC-DC 转换器 DCM5614&#xff0c;其采用 5.6 x 1.4 0.3 英寸 VIA™ 封装&#xff0c;额定输出功率为 1300W。据了解DCM5614 重量仅 178g&#xff0c;提供无与伦比的功率密度可达451W/in3 &#xff0c;支持功率密度、重量和效率都至关重…

JavaScript-jQuery事件

参考文档&#xff1a; https://jquery.cuishifeng.cn/ 事件 鼠标事件&#xff0c;键盘事件&#xff0c;其他事件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src&…

58 集团大规模 Storm 任务平滑迁移至 Flink 的秘密

Flink-Storm 是 Flink 官方提供的用于 Flink 兼容 Storm 程序 beta 工具&#xff0c;并且在 Release 1.8 之后去掉相关代码。本文主要讲述 58 实时计算平台如何优化 Flink-Storm 以及基于 Flink-Storm 实现真实场景下大规模 Storm 任务平滑迁移 Flink。 背景 58 实时计算平台…

前后端敏感数据加密方案及实现_01

文章目录一、组成部分1. html2. js3. 拦截器4. 认证授权5. 控制层6. 工具类一、组成部分 1. html <form id"formId" class"layui-form" action"${ctxPath}/login" method"post"><!-- 用户名 --><div class"layu…

离屏渲染在车载导航中的应用

导读 与手机导航不同&#xff0c;高德地图的车机版&#xff08;AMAP AUTO&#xff09;直接面对各大车厂和众多设备商。这些B端用户采用的硬件参数参差不齐&#xff0c;提出的业务需求涉及到渲染中诸多复杂技术的应用&#xff0c;这对渲染性能提出了极高的要求。 最初车机版沿…