【代码质量】码农提升代码质量的三重境界

前言:文章的开头,我要先讲个段子(真实案例),玩过拳皇的同学应该对下面这张图不陌生(一不小心暴露年龄了):

        本以为这种也就是作为笑料,有意为之,然而就在我工作的第三年,确实碰到了这样的代码,老夫掰起脚指头数了数,该同学写的代码里有整整13层if-else, 对于这段代码,我直呼遭不住,这段代码后来被流传为一段佳话,无人能接手,接手一个跑路一个,于是余叹诗为:

《码皇》

   诗人:被shit code 坑害过的码农

键盘秃头保温杯,欲敲代码产品催;

垃圾代码君莫笑,古来接手几人回?

        从工作伊始到现在,一直在被各种"大开眼界"的代码摧残,一边心里在着骂脏话,一边立志要写出高质量的代码,不给别人留困惑,期间不断学习和提升代码质量,几年下来,代码质量有了质的变化,关于代码质量,总结出了三重境界,与君分享,共勉.

第一重境界:开悟之境

        这个境界,是作为码农最基本的要求,就是要遵循大部分前人沉淀下来且被认可的规则,公约,比如java代码中的驼峰命名,类名首字母要大写,命名尽量用对应的英文,做到见名知意,避免直接用汉语拼音首字母命名等...

        关于第一重境界,其实在阿里巴巴代码规范中有很好的总结,这里就不再赘述了,能够将代码规范中的绝大多数条目熟记于心并在代码中实践,日久天长,第一重境界就修习到位了,第一重境界虽然要求不算太高,但却是最为码农最基本的素养,现实中其实有很多码农连这一重境界都没打到,如果连这层境界都没有达到,写出来的代码自然是晦涩难懂的,害人害己.

第二重境界:化心之境

        第二重境界,需要有一定的代码基础,对各种设计模式和适用场景烂熟于心,对各种场景下代码的性能和易读性有所追求,有代码洁癖,不能接受瑕疵代码.举个例子,比如一段代码if-else 超过3层,且里面控制逻辑较多,未来if-else的场景还不固定,可能有拓展项,此时就可以考虑用策略模式/责任链模式,结合工厂模式,写出低耦合,高内聚,易拓展,可读性高的代码,这里篇幅原因,就不具体代码演示了,实际上23种设计模式也不可能在这一篇文章里一一演示,传统功夫,点到为止,码保国在此有礼了.

        当然设计模式也不是生搬硬套,设计模式也是一把双刃剑,不能为了使用设计模式而使用设计模式,使用设计模式一定是有一定场景,确实需要用设计模式,利大于弊时才使用设计模式.比如某同学学会了适配器模式,于是为了提高代码"逼格",强行在一段新开发的功能中(并不需要兼容老接口),使用适配器模式,将原本简单的功能复杂化,代码反而难读,也没有起到提升代码质量的作用,适得其反.

        在这重境界,对码农的要求是比较高的,需要码农在设计功能的时候,要兼顾代码的性能和易读性,而不是仅仅停留在实现功能的层面.举个例子,产品需求是:"需要在订单列表中展示商品的详细信息".

  • 开发同学可以先查出订单列表,再写for循环去查商品信息;
  • 开发同学也可以通过订单表left join 商品表连表查询出订单和商品信息;
  • 开发同学也可以先查出订单列表,再通过Jdk8Lambda语法,收集订单中的商品id列表,一次性查询出商品id列表对应的商品列表,然后设置进订单详情中;

        ...

        可以看到实现方式多种多样,但性能和代码的可读性也是有差距的,而且在不同的场景下比如涉及表是否分库,是否分表,灵活选择.不难看出,上面的实现方式是有性能差距的,好的码农肯定不会选第一种实现方式,会根据实际业务和系统架构场景去选择性能最优,可读性最高的实现方式.

        在此境界的码农,是有原则的码农,是会尽量遵循前人总结的原则的,比如常见的SRP单一职责原则,OCP开闭原则,LSP里氏替换原则,DRY不要重复自己等原则,关于代码遵循这些原则的好处这里也不详解,感兴趣的读者可以自行了解,懂的码农自然会乐在其中,其中甜意,谁用谁知道!

        在此境界的码农,通常也是有一定的代码洁癖的,对代码有很严苛的要求,眼里容不下沙子,力求每个细节都做得好,写出高质量,高逼格,高性能的代码,要做到这些,至做到上面提到的各种设计模式,实现方式选择,原则遵循等是远远不够的,剩下的路古人其实已经帮我们总结好了:

  • 涓滴之水,可以穿石(多积累,量变引起质变)
  • 学而不思则罔(面对代码实现多思考,多问为什么)
  • 思而不学则殆(多学习,比如JDK8-16新特性,新语法,jdk8提供的新特性对代码优雅和效率的提升大家也都看得到)
  • 它山之石可以攻玉(多借鉴别人代码中的精髓,它为己用)
  • 工欲善其事必先利其器(打磨自己对语言,算法,底层原理的理解)

第三重境界:出神之境

        第三重境界是凌驾于前面两层境界的,是前面两种境界的升华,达此境界者飘飘乎如遗世独立,羽化而登仙,是码农追求的最高境界.

        达此境界者,对代码质量的追随不仅仅停留在代码本身,而是能够站在系统全局的层面,从架构,需求,性能,现有人力资源,不同阶段技术栈选型,产品未来发展等多种角度,综合考虑选出最适合的方案,去落地整个产品.苏东坡先生曾说:"不识庐山真面目,只缘身在此山中",在第三重境界不能仅仅局限于代码本身,需要站在全局的角度,一览众山小,是有大局观的码农.

        亦如中国菜的造诣,放多少盐,火候,菜品搭配,烹饪时间,烹饪方式,刀法,雕刻,摆盘,时令等每一个细节都非常考究,无法具体衡量,不能像西餐一样可以被量化和复刻,完全是凭借经验和感觉.

        这是一门艺术,经验的艺术,想达到此境界,需要深厚的经验积累,需要保持空杯心态,需要一定的天赋和热爱,需要有理想和追求,需要...

总结

        对代码质量的追求,是码农孜孜以求的目标,如果一个码农放弃了对代码质量的追求,那么也就意味着"他可以拥有铁饭碗了,在公司无人能撼动其地位,毕竟没人能接手TA写的代码,具备不可替代性",果真如此吗?

        也许你现在还处在第一重境界,也许你处在第二重境界,也许你已经到达第三重境界,但事实上境界根本就没有天花板,需要时刻保持空杯心态.

        读者可以通过自己当前所处的境界,对号入座,按照文中罗列的当前境界的休息图谱,加强修炼,假以时日,未来可期!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值