做人肉代码翻译器是什么感受?

程序员编码的常规流程是通过大脑把将要实现的功能切分成一个个逻辑单元,使用编程语言将这些逻辑单元实现并组织在一起,积少成多, 形成电脑软件

缺乏经验的程序员可能并不是以这总方式实现功能,对于一个功能,在逻辑实现的逻辑组织上, 他们也许不会提前组织和规划。 想到哪写到哪,想写什么写什么。其实这样做也没什么大问题, 只是效率低了点、代码质量差了点、 BUG多了点、维护难了点,我以前就是这么干的

但是不管用什么方式编码,总会得到正面的反馈,大脑中的想法通过双手敲击键盘编写代码的方式展现了出来,多么了不起的一件事情, 这正是程序员、技术狂们不断在自己的领域学习、耕耘的动力所在。

我也一直如此

但这两天我却以另一种方式编写着代码,一种没有丝毫创造性,犹如走在漆黑悬崖边上,每移动一厘米都需要小心翼翼,而且枯燥乏味到令人崩溃的方式

我发誓, 在我写代码的生涯当中,这绝对是体验最差的一次。中途, 我差点坚持不下去,所幸, 最终我挺了过来。

事情是这样的

我们这边有一个WebService项目, 旧系统应付不了业务的变化,一些重要的功能迁移到了新的架构上。然而, 其中某一个重要的功能却无法迁移,因为这部分代码混乱到没人看的懂。

好吧, 迁不了就在老地方呆着, 别闹事就成了。

还好,这个功能一直以来比较安分, 稳稳当当的运行着, 做自己该做的事情。

可是,不知道是不是因为这几天天气太热的缘故, 这个功能最近老是出现罢工现象, 经常不出数据或吐一些错误的数据。接着就是用户骂娘,老板发火,程序员焦头烂额。

妈蛋, 看来随着数据量的变大、请求数的增多,加上偶尔抽风的网络环境, 这部分功能已经支撑不了现有业务的运行了,一只脚已经踏进棺材了。

于是我决定赋予他新的生命, 把它迁移至新的架构之中。

人啊, 都是被逼出来的,这件事情其实半年前就应该做了,但那时候还没有陷入绝境,所以面对困难的问题,能拖就拖着。 现在老虎追到屁股后面,退无可退了,就只能硬着头皮上了。

然而, 这真他妈不是人干的事。

我要做的事情就是把上千行只知道很重要,不知道干什么的,没有文档,没有可读性, 有几百万人在用的,输出的内容连一个字符都不能有误的php代码改成golang代码

这不仅艰难, 而且乏味

我先要使这些代码在开发环境中运行起来,但这还真不是一件容易的事情。 申请运行代码的服务器的权限、构造程序运行需要的数据、收集调用程序的参数、测试看看程序能不能跑,还没进入正题,光搞这些前戏就花了大半天时间。

接着便是改写代码。既然不知道旧代码干了些什么, 那只能把自己当作人肉编译器了,通过自己对php和golang掌握, 人肉将php代码转换成golang代码,程序的逻辑丝毫不变,变的只是语法元素。 这是一个很痛苦的过程, 期间有一个念头在我的脑海里想起许多次:要是有一个工具能把php代码转换成golang代码, 我一定不惜一切去获得。

php中数组、map是同一个东西,golang中要分别使用slice、map实现

php中string、int、double可以放在同一个变量里, golang不行

php中"1"+"2"可以等于3,golang中只能1+2=3

等等其它各种问题就不一一举例了,反正实现的过程中才深刻的体会到,不同的语言做同一件事情, 做的过程和方法真的差了十万八千里

别以为把这些代码改写完成就万事OK了,这可是有大量用户在使用的线上代码,不可以出丝毫差错的,不然铁定吃不了兜着走。

所以吧, 我哼哧哼哧写完上面这些代码, 还要写测试代码, 对比新旧两个功能返回的数据是否一致,需要精确到连一个字符都不能有差别。

完成测试脚本后踩住马达一运行, 新旧两个实现返回的结果完全不一样, 数据项上的差别起码有上千项。

于是我又是检查测试脚本, 又是琢磨旧代码, 又是修改新代码的, 使不一致的数据项减少到了五百项

还是不行

于是我又是检查测试脚本, 又是琢磨旧代码, 又是修改新代码的, 使不一致的数据项减少到了三百项

还是不行

于是我又是检查测试脚本, 又是琢磨旧代码, 又是修改新代码的, 使不一致的数据项减少到了一百项

还是不行

反正一直不停的循环

最后, 不一致的数据项目终于为零了, 我整个人瘫倒在椅子上面, 连下班的力气都没有了。 我再再再再再…一次体会到,屎一样的代码害死人、猪队友害死人(已离职)

放几张旧代码截图大家感受下

这只是冰山一角

原文发布于微信公众号 - 带你撸出一手好代码(gh_afab56b37671)

原文发表时间:2017-08-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏七夜安全博客

python基础教程第一课

17750
来自专栏张善友的专栏

依赖注入是否值得?

在博客的世界里进行了一场关于使用依赖注入(DI)之优点和缺点的有趣讨论。论题是:依赖注入是否真的值得? 讨论始自Jacob Proffitt,他撰文解释他的观...

19590
来自专栏ImportSource

听说Redis5.0发布了,那个Streams好叼

在这个商业世界中,如果你占领了概念高地就意味着有种先天的优势。就好比你给自己起了一个名字叫Java。

89330
来自专栏安恒信息

通用缓解措施和多维度攻击简介

  DEP(Data Execution Prevention,数据执行保护)这东西很多人都知道,但ASLR(Address space layout rand...

37480
来自专栏Python爬虫与数据挖掘

用代码向90后逝去的青春致敬

前段时间,腾讯宣布停止乐斗Ⅱ和QQ宠物的运营,然后就订阅号里就被各种回忆杀的推文刷屏了。今天也来称蹭一下"热点",虽然有点晚。

10210
来自专栏杨建荣的学习笔记

运维平台元数据稽核小结

数据库运维中的元数据建设都是重中之重,如果元数据不具有参考的价值,那么后续的操作都会受到影响,但是元数据的建设也应该是分成几个步子来走,首先得能够收集到元数...

15540
来自专栏企鹅号快讯

浅淡Python-初学者不得不说的秘密

不知道大家是否知道,Python的出现其实很偶然,是著名的“龟叔”Guido vanRossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言...

28550
来自专栏Java架构

金三银四如何找工作?阿里、京东、美团内推题送给还在迷茫的朋友从事Java开发工作十二年总结面试宝典一、阿里巴巴面试二、京东金融面试三、美团面试四、滴滴面试

39140
来自专栏Play & Scala 技术分享

Play For Scala 开发指南 - 第1章 Scala 语言简介

31660
来自专栏FreeBuf

解密千万密码:透过密码看人性

对于密码,我们已经知道了不少。比如,多数密码短小、简单、且容易破解。但我们对一个人选择某个密码的心理原因却所知甚少。在本文中,我们分析了包括企业CEO、科学家...

18960

扫码关注云+社区

领取腾讯云代金券