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

标签: 命名规则 项目维护 变量名 批评评论 | 发表时间:2013-01-31 00:07 | 作者:Aqee
出处:http://www.aqee.net

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

JavaScript

JavaScript (Photo credit: Johannes_wl)

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

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

我干!能坏到哪去?

你会忍不住的想骂街

能坏到不能再坏。

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

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

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

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

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

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

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

情况慢慢清晰起来。

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

function fix(boolean_value) {

    return boolean_value ? 'tru' : 'fls';
}

这样能节省空间。把一个1bit的值编码成一个24bit的字符串!服了!

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

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

if (!thing || thing === 'null') ...

好可爱,不是吗? 肯定是因为null被编码成了字符串。你还能有其它办法吗?

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

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

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

function getPurple(cake) {

   cake.color = global_color_setting;
   return cake;
}

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

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

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

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

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


本文由 外刊IT评论网( www.aqee.net)原创发表,文章地址: 程序员之拍案惊奇:为什么我会一天到晚的想说FUCK!

相关 [程序员 拍案惊奇 一天] 推荐:

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

- - 外刊IT评论
经常有人找我给他们的软件项目做修改或维护,我对这些项目毫不了解,而他们只告诉一些很少的项目相关信息. 必然的,需要在项目中增加一些新的功能,但在动手之前,我通常需要耗费大量的功夫来大幅度的重构它们. 大概一个月前,一个公司老板给我来信 “嗨,我有一个软件,需要做一些个性化的改动,有个大客户愿意花一大笔钱来买它,正等着呢,可我现在都没办法让它跑起来,最初的开发人员都找不到了.

末世拍案惊奇(连载中)

- Metaphox - 墙外楼
第〇回:赖大还朝惊老臣 太师良策安众官. 第一回:北戴河督抚朝圣驾 小茶馆草民议时局. 第二回:明大势奸相缄口 举红旗西王起兵. 第三回:汪洋入京急勤王 太子正位强续统. 第四回:大争辩西王受谪 小折腾太上逼宫. 第五回:至尊屈意拔大海 太上违众指春华.

拍案惊奇,原来折纸背后的数学如此强大

- Syuuto - 果壳网 guokr.com - 果壳网
果壳DIY上前不久的 “叹为观纸”第一期:现代折纸介绍 一文让无数人喜欢上了折纸这门艺术. 死理性派也来凑个热闹,讲一讲折纸背后的数学之美. 一张白纸,不剪不裁,却能折出无数变化. 有时候尺规作图无法完成的任务,折纸却能解决. 这还要从折纸对应的几何操作说起了. 1991 年,日裔意大利数学家藤田文章(Humiaki Huzita) 指出了折纸过程中的 6 种基本操作,也叫做折纸几何公理.

普通程序员、文艺程序员、2B程序员

- 可可 - 宇宙的心弦
希望能引起广大苦逼的正在学或者已经学过c++人的共鸣和会心一笑吧. 如何辨别自己在现实还是虚拟世界.

如何面试程序员?

- bluesnail - 阮一峰的网络日志
你要面试一个程序员,应该问他什么问题. 有人在Hacker News的讨论区里,请求指点,怎么才能在面试中发现合格的人. 众人纷纷出主意,有很多高质量的回帖,我觉得挺有启发,就整理出了下面这篇文章. 首先,最重要的是,你自己一开始就应该想清楚:. 哪些途径和方法可以发现这样的人. 只有明确这些根本性的问题,才能正确高效地完成面试.

程序员的本质

- Allen - 译言-电脑/网络/数码科技
来源What do programmers really do?.   很多人(包括我岳母)认为计算机变得如此智能,所以在不久的未来将不再需要程序员. 另外一些人认为程序员是天才,他们在电脑前能不断地解决复杂的数学难题. 甚至不少程序员对他们是做什么的都没有清晰的概念.   在这篇文章中,我想给不知情的人解释一下程序员到底是做什么的:.

程序员人生之路

- myartings - 博客园-首页原创精华区
   程序员人生之路(强烈推荐,分析的透彻. ),某程序达人的人生感悟,估计没有半个甲子的时间,是绝对不可能感悟出来的.    相对同时刚出校门同学从事其它行业而言优厚的薪水,以及不断学习更新的专业知识不仅仅让你感到生活的充实,更满足了你那不让外人知的虚荣心. 在刚出校门的几年中,你经常回头看看被你落在后面的同学们,在内心怜悯他们的同时,你也会对自已天天加班的努力工作感到心里平衡:“有付出才会有回报”这句话在那几年中你说的最多,不管是对自已的朋友们还是自已的爱人.

程序员装B指南

- Qing-Run - 博客园-首页原创精华区
1.电脑不一定要配置高,但是双屏是必须的,越大越好,能一个横屏一个竖屏更好. 一个用来查资料,一个用来写代码. 总之要显得信息量很大,效率很高. 2.椅子不一定要舒服,但是一定要可以半躺着. 3.大量的便签,各种的颜色的,用来记录每天要完成的事务,多多益善. 沿着电脑屏幕的边框,尽量贴满,显出有很多事情的样子.

程序员收入报告

- diaoxsh - cnBeta.COM
最近,波兰的程序员Chris(也叫KreCi)公布了他的第十四期程序员收入报告. 数据显示,上月是目前为止他收入最多的一个月. Chris的收入并不是指他的工资或薪水,Chris是一个自由职业者. 他的收入也不是来自个人承包软件工程的收入,他更像是一个果农,种了优良的果树,只要不断的给这些果树施肥浇水,这些果树会给他带来源源不断的财富.