坚持住啊,还在代码屎山中爬行的同事们
"There are only two hard things in Computer Science: cache invalidation and naming things."
— Phil Karlton
在计算机领域只有两件艰难的事情:缓存失效和对象命名。
这还真不是一个笑话。写代码是比较容易的事情,但是阅读别人的代码,那就因人而异了。
好的工程师写出来的代码可读性很高,比如我上家公司的同事旭总。一般的工程师写出来的代码就像是一坨屎,比如之前某某几位同事。
所以我会经常去格式化他们的代码。如果不幸轮到你继续在屎代码上面开发,那就是屎上堆屎了。心疼你。
当然有时候工期紧张,我自己也会写一些屎代码shit code
,但是每次提交的时候都有一种强烈的愧疚感。希望这些代码最多存活一个月就消失,不要被人踩到了。
屎代码是怎么产生的?
要说怎么写屎代码,这个我就很拿手了。下面随便列举一些常见的屎代码产生方式:
- 看不懂的命名
- 过长的类|函数
- 大段重复的代码
- 没有注释的Magic number
- 100多个参数的函数
- 一堆没有注释的if-else嵌套
- 业务过度耦合:支付订单和点餐订单能耦合在一起?谁重构谁痛苦
- 代码和文档分离:几年前的业务完全不知道是个啥
- ...
很不幸,大多数人的项目中,这些常见的屎代码产生方式是随处可见的。
毕竟,几百个人写屎代码,就像几百个人堆积木。堆得歪歪扭扭,摇摇晃晃,乱七八糟,你千万不能抽里面的积木,指不定抽了一块就塌了。只能看见哪里觉得不牢靠不停的往那边填积木。只要不倒就好了。这也是大部分程序员的追求了。
不写屎代码从命名规范开始
如果想解决代码高耦合这坨屎,需要有比较好的顶层解耦设计,划分清楚各自服务的边界。
如果你一直都只是代码搬运工,传说中的cv工程师,那么到这一步还有一些内功需要你去修炼的。
但是好的命名规范确实每个人都可以做到的。不同的语言都有各自的规范,如果所有人都能正确理解那些规范,并且严格遵守,同时强制使用ci校验,就可以保证代码外表上是美观的。
这里就以Go语言的命名规范为例讲一下怎么写出人人都想闻的香代码。
go fmt
可以统一不同人的编码规范,却没有办法格式化出一个好的命名。但是在Go社区中其实一直都存在着一些成文的或者不成文的命名规则,比如:
- 某个名称在包外是否可见,就取决于其首个字符是否为大写字母
- 使用驼峰命名而不是下划线
- 单个方法的接口名称应该是
InterfaceName = MethodName + er
Getter
方法的命名不需要包含Get
,比如cat.Owner()方法不需要命名成cat.GetOwner()- 首字母缩写词应该保持原有格式:应该使用userID而不是userId,应该使用userAPI而不是userApi
- 变量名需要尽可能的简单但是又能描述清楚
- ...
总之,规则是有的。只是很多程序员选择直接忽视。比如前面的五条。
还有一些规则是被过渡滥用了。比如第6条,很多同事的命名沿用以前的老风格,在一个struct中大量使用单字符的的变量或者随心所欲的缩写。这样的代码是完全没有办法阅读的。所谓有追求的程序员,还是得追求一下代码的品味。
悲观的说,即使做到了这些也只是你一个人的代码是优雅的,但是你怎么能保证所有人都有这样的追求呢?作为个人,除了提建议之外,其实是没有太多有效的办法的。
怎么才能根治屎上堆屎?
想根治这个问题,只靠某个程序员一直保持优雅代码是没什么用的。
你写10句优雅的代码,其他10个同事每个人都写10句屎代码。这样算起来,优雅代码的比例最多只有十分之一。
如果一个团队想要彻底解决屎上堆屎这个老大难问题,就需要贯彻执行下面两点方法:
- 招高质量的程序员:code sense很重要,每个程序员都需要懂得奥卡姆剃刀原理:若无必要,勿增实体。
- 管理层需要有长远的视野而不仅仅是短期目标。
深度悲观的说,这两个方法真正执行起来的时候也是难度重重,基本不可能完成。
高质量无论是不是在互联网行业,都意味着价格昂贵,但又有几家公司能给得雇佣的起这么多昂贵的程序员呢?
而长远的目标在资本的压力之下,也显得一文不值。代码规范提升10%的重要性和“明天上线”这个命令比起来,也是低到尘埃的的。然后日复一日,明天又将是明天,规范性最终消失殆尽,屎山越来越高。
说到底,这些都是钱的问题,也是最无解的问题,最终在某一天,屎山崩溃,一切回到原点。
最后,大胆猜测一下,昨天的Google服务崩溃也是因为屎太多了吧。
记得帮我点赞哦!
精心整理了计算机各个方向的从入门、进阶、实战的视频课程和电子书,按照目录合理分类,总能找到你需要的学习资料,还在等什么?快去关注下载吧!!!
念念不忘,必有回响,小伙伴们帮我点个赞吧,非常感谢。
我是职场亮哥,YY高级软件工程师、四年工作经验,拒绝咸鱼争当龙头的斜杠程序员。
听我说,进步多,程序人生一把梭
如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个鼓励,将不胜感激。
职场亮哥文章列表:更多文章
本人所有文章、回答都与版权保护平台有合作,著作权归职场亮哥所有,未经授权,转载必究!
坚持住啊,还在代码屎山中爬行的同事们相关推荐
- 如何消除代码屎山中的一大坨参数列表?
有经验的程序员应该都见过,一个方法坐拥几十上百个参数. 方法为何要有参数? 因为不同方法间需共享信息. 但方法间共享信息的方式不止一种,除了参数列表,还有全局变量.但全局变量总能带来意外惊喜,所以,取 ...
- 某程序员动了公司祖传代码屎山,半年没改完,惭愧后交辞职报告
前段时间,有这样的一个话题,非常的火热,那就是关于程序员的,新入职程序员吐槽老员工写的代码就像是"一坨屎"!这样的言论瞬间就引起了程序员们的讨论. 有程序员认为,别看现在像是一坨屎 ...
- 某程序员动了公司的祖传代码“屎山”,半年后怒交辞职报告!
Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 来源:网络 前段时间,有这样的一个话题,非常的火热, ...
- 如何消除代码shi山中的一坨参数列表?
- 如何消除代码山中那一大坨参数列表
本文分享自华为云社区<如何消除代码屎山中的一大坨参数列表?>,作者: JavaEdge . 有经验的程序员应该都见过,一个方法坐拥几十上百个参数. 1 方法为何要有参数? 因为不同方法之间 ...
- GTA 5祖传「屎山」代码终于修复!R星认可黑客方案,还给他发了1万美元奖金
贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 折磨全球无数GTA 5玩家的联机版超长加载时间问题,终于要修复了. 什么?R星(游戏开发商RockStar)主动改善玩家游戏体验?不存在的 ...
- 入职第一天,我接手了号称【屎山】的祖传代码,这还能卷吗???
公司各种各样的祖传代码都是令新人虎躯一震的代码,因为有时候你根本不知道它是干嘛的,甚至觉得它毫无用处,关键是 还绝对不能动,碰一段改半年,别问我怎么知道的.最讽刺的是,你可能为了修改代码,也在里面拉了 ...
- p3c 插件,是怎么检查出你那屎山的代码?
作者:小傅哥 博客:https://bugstack.cn 原文:https://mp.weixin.qq.com/s/RwzprbY2AhdgslY8tbVL-A 一.前言 你会对你用到都技术,好奇 ...
- 为什么祖传代码被称为「屎山」?这个回答简直太形象了
经常听说祖传代码会被人称之为「屎山」,不同人可能有不同的体会,最近看到一个回答,简直是把这个阐述得"活灵活现",大家来感受下吧. " 阅读本文大概需要 3 分钟. &qu ...
- 为什么祖传代码被称为“屎山”?
任何设计人员,你几年之后再来看自己现在的作品,你就会觉得简直就是狗屎,拿出来真tm丢人. 如果你没有这种感觉,那说明你这行干不久了. 说到祖传代码不得不提之前在知乎上看到的两位网友的经历: 一 我刚入 ...
最新文章
- Android Studio窗口组成
- 用最少的机器支撑万亿级访问,微博6年Redis优化历程
- cookie获取java_java中如何获取cookie
- keyshot渲染图文教程_一篇文章教你学会3D建模和渲染 反正我是信了
- 数据结构学习笔记——顺序表的基本操作(超详细最终版+++)建议反复看看ヾ(≧▽≦*)o
- 罗斯蒙特电磁流量计8723说明书_罗斯蒙特8700系列电磁流量计和传感器的几种类型!...
- 作业5.2 5.3
- 代码中的时间格式问题究竟该如何处理?
- python进阶与数据操控_python进阶(mysql:表操作、数据操作、数据类型)(示例代码)...
- WMI 脚本入门:第二部分 (MSDN)
- Security+ 学习笔记51 风险分析
- Brettle.Web.NeatUpload.dll大文件上传控件使用详解
- c# 循环com,分别对串口写入与读取,获取需要的串口信息
- 编程珠玑Column11中插入排序和快排序
- 实战VMware虚拟机下使用海蜘蛛软路由
- C7N新增,保存,删除基础模板
- BigDecimal四舍五入保留两位小数
- 8255A的工作方式
- pyepics Device:PVs的集合
- 2015年南通二级建造师考试报名通知
热门文章
- 反转链表(leetcode 206)
- python编写beta计算器_|python编写计算器
- 工程制图与计算机绘图实训任务书及参考资料,工程制图与计算机绘图综合实训(12版).doc...
- 去掉vue中万恶的eslint
- android studio anr,Android ANR 分析
- 用AI如何预测《权力的游戏》死亡名单?真是神了!
- CentOS安装onlyoffice
- poco mysql 登录_POCO数据库操作简介
- ubantu 防火墙
- 6,美国2012年总统候选人政治献金数据分析