持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情
如何做不可替代的程序员--写出不可维护的(烂)代码
- 如何做不可替代的程序员--写出不可维护的(烂)代码
-
- 为什么要说这个
- 什么是不可维护的代码
- 怎么写出不可维护的代码
-
- 如何让人看不懂
- 如何让人改不动
- 如何让人一改就错
- 如何让人改不动
- 实际业务过程中的其它坑
- 总结
为什么要说这个
为什么
为什么要说这个,能不能直接告诉我怎么写出可维护的代码,写出高质量代码,我只想要正确的答案
有一个现象一直摆在我们大多数人面前,就是告诉你标准答案的人很多,比如如何成为一名好学生,比如正确的解答一道数学题目。但是没有人告诉你,怎么做会成为一个学渣,怎么错误的解答一道 数学题目。
写可维护的代码,有标准答案,但怎么造成(写出)不可维护的代码却有很多方法达到。
把事情做的不正确太容易了,容易到我们自己都忽略了。其实失败也是就体现在我们在做这件事件的过程中的可能每一个步骤,但人往往只关注最终结果,最终结果错了,我应该怎么样怎么样才对。在关注结果的同时,更应该关注实现结果的过程。
关注如何写出不可维护的代码的过程,是确保写代码的过程的底线有保证,从而最终保证的代码是在一个及格线之上的做法。
什么是不可维护的代码
来吧,定义一下这个问题。
看不懂, 不敢改,一改就错,改不动。这些词汇大概描述了不可维护的代码的全部。
怎么写出不可维护的代码
如何让人看不懂
命名
说到这个就不得不说命名了,命名的重要性就不强调了,一个随意的命名可能就能达到让人看不懂的目的,不可能维护性大大上升。
来吧,见识一下这些命名吧,绝对会让你觉得似曾相识。这里只列了变名命名,对于方法函数也是一样的道理。
var a,b,c
var test
var testA
var t1
var t2
var fcl
var taskReqParam1
var taskReqParam_1
var taskReqParam_2
var xxx11
var ttt2
var aaa
var qwert
var qaz
上面的命名,应该没几个人能知道实际的意思,特别是fcl,我去问了当事人,说这个变量是存放一个描述性的词,是分享出去展现用的,一般放的是“发财了”这样的字符串,所以这样命名,惊喜不,你说你能看的懂才怪了。
实际中,还有些人用方言拼音命名,这种骚操作,我只能说,写出来,绝对是不可替代的人了。
其实,为了让人看不懂,还真有实际用途的,比如加密代码,有些加密混淆就是修改变量名,方法名进行混淆,添加无用的代码,导致你完全不知道实际意思了。
如何让人改不动
超长函数
一个函数上千行。可能有些人不信,怎么会写这么长的函数。
笔者工作第一年,去维护一个会展中心的的出票系统,里面有一个js函数,8000行,我要做的是在购票逻辑上加上优惠逻辑,看起来需求很简单,但实际改不动。
为什么,因为购票逻辑在js中,这个js函数中做了很多事情,比如表单检验,价格计算,购票条件检查,购票参数拼接,发起支付,等等支付回调等等。而我要这中间的价格计算步骤加上读取优惠券,计算最后的价格,看起来比较简单,但实际上改的时候很难改。几千的代码,而且是js,没有类型,实际上这个功能搞了快三天才搞定,很头痛。
超长函数有几个坏处,
第一是把所有逻辑搞到一起,读起来费劲,
第二是,修改的时候,容易改出问题,你明明只改动一个地方,结果,跑不通了。函数过长,变量作用域就不容易把控。
第三是,没有封装成函数,显得没有层次,把实现和流程调用都搞一起,非常不方便维护。
如何让人一改就错
魔术数字
同个数字,可能是相同的意思,也有可能是不同的意思,如果定义它的地方,没有提取出来,修改的时候,可能改了一个地方,漏了另一个地方。
最近接手的一个项目,产品经理让我修改给用户送的红包数值,发现了改了没生效,原来是返回展示的值和实际扣的值都是魔数,没有统一定义成一个常量,我修改了返回展示的地方用的数值,实际调用的是那个送红包的方法里面的定义的值。就这,浪费了快一个小时。
还有的就是同个业务逻辑,被复制了多次或者分散在不同的函数里面实现,你改的时候,经常顾此失彼,很容易出错。
如何让人改不动
改不动的意思是,你都知道,但是要改动,感觉都要重构
那么如何让人改不动呢?很简单,就是发挥超长函数的作用了。把所有逻辑都耦合在一个函数里面,实现和流程不分离,你就改不动了。
实际业务过程中的其它坑
db链接有多个
开事务的时候同个db用不同链接, 你说坑不坑。不仅如此,你修改配置的时候也不好修改
for if else switch
在一个函数里嵌套过多,然后整个函数了解起来心智负担特别高,而且不好改。想要做不可替代的人 可以试试。
关于这个有2个词来衡量这个东西。一个是圈复杂度,一个是认知复杂度,想知道这2个词的意思的同学可以搜索了解一下。主要表达是不要把写过多if else for switch在同个函数中。
业务配置
放置地方比较神秘,需要多方寻找,与常规工程代码结构不一致。
这个你还别不服气,我见过配置文件放一份配置,代码中写死一份配置,你不看完整个代码,都不知道从哪里改起。
总结
好了,只要平时有上面这些习惯的,就是一个不可替代的人了。
其实达到很容易做到了,实际上平时不用怎么注意,想怎么写就怎么写的时候,你很容易变成一个不可替代的人了,这个代码只有你的改动,很是牛逼的。
企业比较久一点的系统中,比比皆是,但当初写的人已经去了其它公司,继续做一个不可替代的人去了。
还有哪些方法可以变成不可替代的程序员了,欢迎评论补充。