程序员之拍案惊奇:为什么我会一天到晚的想说FUCK!

开发 项目管理
经常有人找我给他们的软件项目做修改或维护,我对这些项目毫不了解,而他们只告诉一些很少的项目相关信息。必然的,需要在项目中增加一些新的功能,但在动手之前,我通常需要耗费大量的功夫来大幅度的重构它们。

[[63072]]

经常有人找我给他们的软件项目做修改或维护,我对这些项目毫不了解,而他们只告诉一些很少的项目相关信息。必然的,需要在项目中增加一些新的功能,但在动手之前,我通常需要耗费大量的功夫来大幅度的重构它们。

JavaScript

JavaScript (Photo credit: Johannes_wl)

大概一个月前,一个公司老板给我来信“嗨,我有一个软件,需要做一些个性化的改动,有个大客户愿意花一大笔钱来买它,正等着呢,可我现在都没办法让它跑起来,最初的开发人员都找不到了。你能帮我搞定它吗?”

最初的程序员的逃离已经是亮起了红灯,但这个项目的技术架构正和我的胃口:node.js,mongodb,大量的事实数据流,以及UI上更新的速度要求。这个等待使用这个软件的用户的名字也让我精神一振。

我干!能坏到哪去?

你会忍不住的想骂街

能坏到不能再坏。

项目的一部分是用Java写成的。这很好,根据项目的现状,选用静态类型的语言是明智的选择。

而其余部分是用Javascript写的。Java和服务器端JavaScript和前端Javascript通信的机制是…..哇塞,这有个限制,参数名长度不能超过3个字符。

好吧,节省带宽,不是吗?我们现在说的这个项目具有巨大的数据流量,所以就尽量让json对象保持最小体积吧。

这就是让事情变得棘手的地方。

因为核心传输协议里只让各种变量名长3个字符,所以数据库设计也遵照这个原则。因为数据库里的各种表名、字段名、视图名等等都是这个模样,你猜怎么着?没错!所有的程序代码都沿袭了变量名不超过3个字符的特征。

这个风俗的渗透超出了变量名进而感染了数据。

为什么在应该写成label地方偏要写成lbl呢?以及诸如此类,等等等等…..在差不多两个月的研究这个项目后,我仍然不知道大部分的变量名的真实含义。我只是把它们当作是拉丁语,用来描述一种模糊的概念。我开始对这个项目是如何运转的有了一些理解。

情况慢慢清晰起来。

如何让一个布尔值符合这种命名机制?这样做:

  1. function fix(boolean_value) {  
  2.  
  3.     return boolean_value ? 'tru' : 'fls';  
这样能节省空间。把一个1bit的值编码成一个24bit的字符串!服了!

好吧,但愿事情到此为止,但我发现了另外一个有趣的东西…这个东西在很多代码里反复出现,我不敢动它们,我怕会发生什么不可思议的事,会让有些程序跑不起来。

我有没有跟你们说过这个项目是没有单元测试代码的?当发现需要给它们写单元测试时你知道我有多受打击吗?但是,好在这个项目看起来最终不需要通过一个安全测试….哦,等一下,程序里有安全检查代码。

  1. if (!thing || thing === 'null') ... 
好可爱,不是吗?肯定是因为null被编码成了字符串。你还能有其它办法吗?

起初我一直在宽慰自己说他们这样做一定有必要的原因。

不管怎样,我全忍受了,有些东西从某种角度看似乎是合理的,有些可能是过度优化造成的。很糟糕,但有些我还是可以忍受的。

下面的这个是让我真正抓狂的东西:

  1. function getPurple(cake) {  
  2.  
  3.    cake.color = global_color_setting;  
  4.    return cake;  

我甚至不知道如何入手去重构它,让它变得有实际作用…完全就是…什么玩意?谁干的!?

然而,这最糟糕的事情,最最糟糕的事情是,这个项目不知从何时起由传统的jQuery转向了Backbone。这没任何的问题,迁移的很好,我喜欢Backbone!

但他们忘了进行彻底的迁移。很多时候Backbone只是一个很薄的皮,包着旧的东西。大部分的代码甚至根本没有使用Backbone,仍然使用大量的$.ajax,随处可见。

在这样一种弱类型化的语言、没有单元测试代码的情况下,我根本不可能说“嗨,我修改名称X,请把相关的所有引用都改一下”…用grep命令搜索,也只能这样了,我的这段日子过的太充实了。

不知道系统什么时候就会突然崩溃,因为我也忘了去测试…

英文原文:My very own daily WTF

译文链接:http://www.aqee.net/my-very-own-daily-wtf/

责任编辑:林师授 来源: 外刊IT评论
相关推荐

2009-12-31 10:06:47

ADO .NET组件

2010-01-06 20:45:48

双线机房智能网络升级产品世纪互联

2019-04-28 09:56:15

程序员互联网脱发

2019-11-07 15:30:00

EmacsIDE

2015-02-10 10:21:22

程序员

2015-12-24 18:00:45

资深程序员

2012-06-05 00:26:58

程序员

2015-06-10 10:50:29

程序员感觉到累

2009-06-25 09:10:25

很牛的程序员

2022-06-09 09:27:16

前端行业生存

2015-09-16 09:46:17

Java程序员C++

2019-02-14 10:04:34

程序员离职技术

2018-08-24 09:02:26

2019-08-19 09:21:36

程序员Bug代码

2015-04-13 14:07:01

程序员100到1的输出

2015-07-20 10:11:08

程序员幸福

2011-04-19 09:59:47

工资程序员

2014-08-15 11:07:09

程序员

2011-12-20 09:01:25

.NET

2012-09-06 10:30:58

点赞
收藏

51CTO技术栈公众号