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

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

缺乏经验的程序员可能并不是以这总方式实现功能,对于一个功能,在逻辑实现的逻辑组织上, 他们也许不会提前组织和规划。 想到哪写到哪,想写什么写什么。其实这样做也没什么大问题, 只是效率低了点、代码质量差了点、 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了,这可是有大量用户在使用的线上代码,不可以出丝毫差错的,不然铁定吃不了兜着走。

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

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

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

还是不行

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

还是不行

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

还是不行

反正一直不停的循环

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

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

这只是冰山一角

时间: 2024-10-17 17:28:09

做人肉代码翻译器是什么感受?的相关文章

小项目感受不到系列

毕业之后,进了一家创业公司. 大家都知道,公司创业前期,各方面资源都不能到位. 其他的,我们暂且不论,就说项目. 公司的部分业务是给客户定制开发,可以理解为接外包项目.项目特点比较明显:项目较多,规模不大,时间紧张. 走流水线,一个完了一个,大家的目标就是:上线. 每个参与开发的人员都清楚,我们交付给客户的项目,只是空有一身皮囊.所谓:金玉其外,败絮其中.万丈高楼,都是堆起来的.谁开发谁开心,谁维护,谁就想辞职. 连公司不懂技术的Boss都愤怒的说: 你们做的项目就是一个大Demo! 你们做的项

Codeforces 609D 被二分教做人

传送门:http://codeforces.com/problemset/problem/609/D (如需转载,请注明出处,谢谢O(∩_∩)O) 题意: Nura想买k个小玩意,她手上有 s 个burles(一种货币),有m个小玩意供她选择购买,但每个小玩意只能用dollars或者pounds来购买,所以每次购买的时候Nura都要通过汇率将她手上的burles换成dollars或者pounds,而每一天的汇率又不一样,给出n天,并且这n天中burles换成dollars和pounds的比率,问

unity Dotween插件的简单介绍及示例代码

unity里面做插值动画的插件有许多,比较常见的有itween.hotween.dotween.根据大家的反馈和实际体验来说,dotween插件在灵活性.稳定性.易用性上都十分突出.这里简单介绍下它的用法,并在后文做了一些效果示例,还是不错的. 所谓"插值动画",顾名思义就是在两个值中插入其他的值来实现动画.原理非常简单,比如想让某个物体从A地到达B地,我们只知道A和B的坐标,插值动画就可以根据"缓动函数"确定A.B间的其他值,来实现物体从A到B的"运动过

Object-C iOS纯代码布局 一堆代码可以放这里!

前言: 最近写的文章都是创业类,好吧,今天好好写写技术类的文章! 不过分享的不是IOS相关的文章,毕竟这几天在速成IOS,看的是objective-c,由于速成的很快,好累! 好在现在基本已经入了点门道了,这才看的懂新人的代码,才能提前感受代码危机. 对于IOS的速成口诀,回头再分享,今天先分享一个简单的抽象封装! 1:先看看问题 说明:通常对于界面布局,有编写代码.Xib.Storyboard三种方式,而我看到新人写的,是通过代码布局的. 看到的代码是这样的: A:编写UI的代码已分离到新的类

New UI-纯Java代码加载布局

New UI-纯Java代码加载布局  --转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途! 小猪Android开发交流群已建立,欢迎大家加入,无论是新手,菜鸟,大神都可以,小猪一个人的 力量毕竟是有限的,写出来的东西肯定会有很多纰漏不足,欢迎大家指出,集思广益,让小猪的博文 更加的详尽,帮到更多的人,O(∩_∩)O谢谢! 小猪Android开发交流群:小猪Android开发交流群群号:421858269 新Android UI实例大全目录:http://blog.csdn.ne

进行代码复审训练

任务说明: 一.结对,找到一个伙伴进行结对:林坤煌http://www.cnblogs.com/LKH254974541/p/8604791.html 二.各自对自己的伙伴上周进行的"单元测试"练习所完成的代码进行复审,形成"代码复审检查表". 1.概要部分 (1)代码能符合需求和规格说明么? 答:可以符合需求与规格 (2)代码设计是否有周全的考虑? 答:不是很周全,修改了几次 (3)代码可读性如何? 答:可以简单读懂 (4)代码容易维护么? 答:代码容易维护 (5

Java三大框架

Struts.Hibernate和Spring是我们Java开发中的常用关键,他们分别针对不同的应用场景给出最合适的解决方案.但你是否知道,这些知名框架最初是怎样产生的? 我们知道,传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的 JSP.负责流程逻辑控制的Servlet以及负责数据封装的Javabean.但是这种结构仍然存在问题:如JSP页面中需要使用符号嵌入很多的 Java代码,造成

WEB前端开发成长指南

小 编注:相比起网页射击狮,操纵代码的前端攻城狮凭着双手在键盘巴拉巴拉敲出的字符,就能赋予二次元的静态页面生命,各种lovely 的~~fabulous的~~elegant的交互效果,那叫一个锦上添花哈~~不过,要修炼成一个百战百胜的攻城狮,那是得从基本的 JavaScript开始,一点一滴积累hacking技能.日前小编在茫茫信息汪洋里瞟到这神级干货,本着你好我好大家好的精神,怎能收着掖着不分享 叻?想成为一只威武的攻城狮的各位,马上开啃吧~~O(∩_∩)O [背景] 如果你是刚进入web前端

ASP.NET 缓存技术分析

缓存功能是大型网站设计一个很重要的部分.由数据库驱动的Web应用程序,如果需要改善其性能,最好的方法是使用缓存功能.可能的情况下尽量使用缓 存,从内存中返回数据的速度始终比去数据库查的速度快,因而可以大大提供应用程序的性能.毕竟现在内存非常便宜,用空间换取时间效率应该是非常划算的.尤 其是对耗时比较长的.需要建立网络链接的数据库查询操作等. 对于web页面的缓存,WebForm与ASP.NET MVC有不同的语法.在WebForm中, <%@ OutputCache Duration="6