尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

团队里来了个写Python的新人,代码比我写了五年的还优雅

团队里来了个写Python的新人,代码比我写了五年的还优雅 实际上, 当瞅见新人小周头一天递交的代码时, 我险些觉得系统出现故障了。身为有着五年开发经历的我, 凝视着屏幕看了好一阵子, 根本没法发现一处能够进行优化的地方。这种感受恰似开了五年手动挡汽车的老司机, 陡然瞧见有人运用自动驾驶来漂移过弯。小周所编写的代码, 有着一个相当显著的特性, 那就是短到竟然会让人内心发虚。我向来习惯去写那种长达二十行的函数, 然而到了他的手上, 却一下子化为了仅仅三四行的模样。就好比是在处理批量数据的时候, 我一贯习惯于运用for循环, 再加上if判断, 随后还要搞个try来进行收尾。而他却径直采用列表推导式, 并且同时配合生成器, 仅仅依靠一行代码就达成了读、判、转这三个步骤。我询问他难道就不担心会出现错误吗, 他回应说这种模式匹配在PEP 636当中写得清清楚楚, 只要测试覆盖率能够达到100%那就稳稳当当的。更为让我遭受刺激的是, 他的变量命名方式。我花费五年时间运用的那些方式, 在他的代码里全然消失不见。他把给数据切片的操作起名为那个, 给过滤条件撰写了一个那样的名称。人们以读英语句子的速度去查看代码, 完全无需停下来去猜测变量的含义。我刚入职的时候看别人的代码需要翻来覆去地查看注释, 而他的代码直接就如同文档一般。我在版本管理这方面被他“教育”了, 之前我写提交代码备注时写“修bug”、“改了一版”、“别问”, 他说这是犯罪行为, 他教我使用规范, 把一条备注写成fix(cart): 处理空购物车结算时的索引越界, 三个月后回过头去看历史, 就如同看项目日记一般, 每行改动的原因都清晰明了, 以前我回滚代码得靠猜测, 现在借助git五分钟就能定位问题。某次的联调期间遇到了性能方面的瓶颈状况, 我依照习惯伸手掏出进行了一番分析。他并未使用那些工具, 反而是从包里拿出了一本名为《高性能》的书籍。他讲道大部分的性能问题都无法逃脱数据结构选型、缓存策略以及并发模型这三件事情的范畴。他当场就指出我所使用的列表查询应当替换为集合, 原因在于 in 操作能够从 O(n)降低至 O(1)。代码修改完成之后, 性能得到的提升清晰明了地呈现在眼前, 让我彻底信服了。他写测试代码时所养成的习惯, 着实令我惭愧得满脸绯红。我习惯仅仅编写那种正常执行路径情况下的单元测试, 然而他, 不仅全部涵盖了各类极端边缘的情形, 及其异常的类型示例。就讲写出一个文件解析的函数出来, 他会针对空文件、乱码文件、包含非法字符的文件、极度庞大的文件展开检测, 甚至就连扫描枪输入的顺序, 他都会予以模拟操作。当时我询问他, 是不是手头的时间太过充裕了, 他却讲, 只有把测试工作做到位, 最终睡觉方才能够睡得安稳踏实。话说后来在程序线上运行期间, 已然出现了次数较多的数据方面的问题。由于需要处理这些问题, 我加班一直到半夜时分, 而他, 依旧如同往常一样下午六点就准时下班走人了。他所编写的代码在上线之后, 基本上很少出现报错的异常情况, 可恰恰是我这一方用来调用他代码那一部分却频繁出现问题。无比扎心的是代码审查这个事儿, 以往我看别人代码, 老是爱指指点点, 小周的做法却截然不同, 他总是先要找出代码中写得不错的部分, 接着才去问“这儿是不是还能够这样进行优化”, 他询问的方式并非是“这不行”, 而是“我留意到这段逻辑换种方式会不会更为简洁呢”, 合作一个月之后, 以往见到我就躲开的同事开始主动和他探讨代码, 团队里的代码质量明显地得以提升, bug数量反倒下降了六成。一番思索他的全部做法, 发觉关键仅一项: 将他人视作人。命名是供人瞧的, 注释是供人念的, 性能优化是为了使人不耗费时间等候。他讲的每句话都于减轻别人的认知负担。我历经五年积攒的所谓经验, 实质流于堆砌自身的习惯, 全然没顾及接手代码之人的感受。此刻, 我同样在效仿他的行为方式。更改命名习惯, 起初着实令人困扰, 然而度过适应阶段后, 便发觉诸多益处: 代码的可辨识度提高以后, 更改需求变成一件舒心之事。以往修改一个功能需进行全局查找各类缩写以及代号, 如今我径直依据含义进行索引。测试覆盖率从百分之三十提升至百分之八十以后, 发布新的版本再也无需忧心忡忡。我对自己往昔五年所做之事展开反思, 发觉大量时间耗费在自我慰藉式的重复性劳作之中。并非技术领域最残酷之处在于知识更新节奏快, 实际上更是在于, 那些良好习惯常常与直觉背道而驰。新人携带着未受污染影响的最佳实践进到这里, 直接给像是我们这般资历较老的人上了一课。要是你同样期望提升代码质量, 那么能够从小周所提出的三条底线着手开展: 采用具有实际意义的变量名称, 撰写确实具备实用价值的测试, 进行具有建设性作用的代码审查。
返回列表