编程糟糕透了

jopen 10年前

编程糟糕透了

我有工作的朋友中,每一个至少都会每周两次做一些比在笔记本上(体力上)更重的事情,最终找到一个逃避方法,就像下面的谈话:“哥们,你工作可不努力。我用螺丝刀仅花了一个4700小时的周时就在Mordor下面挖了条隧道。”

编注:魔多(Mordor)在托尔金魔幻小说中的中土世界中,是黑暗魔君索伦的领地,位于中土世界的东南部、安都因河(Anduin)以东。佛罗多和山姆·詹吉要前往魔多摧毁魔戒。魔多的地形非常独特,有三个巨大延绵的山脉从南、西、北包围着魔多。这些山脉可以防止人们从这些方向入侵,也可以阻止魔多内的人逃出。

他们说到点子上去了。Mordor很烂,并且挖隧道肯定比敲键盘更耗费体力,除非你是一只蚂蚁。但是,仅仅是讨论的需要,我们可以在压力和精神错乱是坏事这个争论上达成一致吗?真好。欢迎来编程。

所有的编程团队由疯狂的人组建

假设加入一个工程师团队。你非常兴奋、充满想法,可能是由于可能是刚走出学校,遇到一个一尘不染、包含漂亮的设计以及令 人惊叹的用途、经济和力量三者审美相统一的世界。你首先与项目负责人Mary会面,这个项目是一个主要的大都市的桥梁项目。在你通过15层安全检查之 后,Mary将你引荐给Fred。那个安全检查是Dave在他放在桌上衣服被偷过一次以后设置的,并且后来再也没发生过丢失事件。Fred仅从事于木艺, 因此当你问他为什么也会参与其中时,那是由于这座位于急流之上200英尺的桥是用于交通高峰时的,布满着汽车和人。“不要担心”,Mary说,Fred将 会处理人行道的问题。什么人行道?好吧,Fred已经做过一个很好的人行道案例,并且人行道将会增加桥的吸引力。当然,人行道必须建成没有栏杆,那是因为 并非工程师的Phil没有强迫配备栏杆。没有人可以确定Phil要做什么,但是可以肯定的是,Phil要做的是关于协调各方一致,并且必须与上级保持一 致,没有任何工程师愿意与这些领导打交道,只好随Phil意愿做。

同时,Sara发现了一些即将造成损失的拼凑工艺,并且它们已经融入到桥的设计中,所以你将不得不围绕建桥进程中的每一环节,因为每一个环节意味着 不同的底层支撑和安全考虑。汤姆和哈里已经合作了多年,但当前在使用公制还是英制测量上产生仇隙,它已经发展成为 “谁先完成了那部分的设计”的地步。互相将事情拧在一起已经成为令人头痛的问题,他们已经放弃了,仅仅使用蛮力、锤打、或一整天焊接处理的部件。桥梁设计 为悬索桥,但没有人确切知道如何建立一个悬索桥,所以他们在已经完成一半时,添加额外的支撑柱保持物体直立,但他们没有管悬索,因为他们仍然是支撑桥的部 分。没有人知道哪部分(真正支撑桥),但每个人都相信他们是重要的组成部分。经过说明之后,需要你拿出一些新想法,但你没有,因为你是推进工程师,对桥梁 东西一点都不了解。

你会开车穿过这座桥吗?不会。如果桥莫名其妙地被建造起来,相关的每个人都应该被处决。然而,某些你用过的那些随便写的每个独立程序、银行业软件、网站以及一个广泛使用的程序,(声称)能够保护互联网上信息,但事实上不存在这样程序。

所有的代码都是坏代码

每一个程序员在没有人在家的时候偶尔会关掉灯,倒一杯威士忌,放一些德国轻音乐,在电脑上打开一个文件。这个文件因程序 猿而异。有时他们写,有时找到它且不得不保存它。他们快速阅读几行,调整它们使它们看起来更舒适,随后想起剩余文件和这些文件(经来某些时候)必然崩溃时 泪水随之变苦。

这个文件中代码好。它的变量和函数命名清晰明了。它(编码)简洁,没有做任何愚蠢的事情。它从来不生活在野外(译注:可能是指代码产生非预期结 果),或面临一个销售团队(译注:可能是指产生效益)。它仅做一件普通且特定的事情,运行也很好。它由一个人编写,并且从来没有其他人动过。读起来就像一 个大于30岁的人写的诗。

每个程序员开始时会写一些这样的完美的小片段。然后周五有人告诉他们需要在周二之前编写600个这样的片段,他们糊弄了 一部分,也许复制一些片段,试着把它们贴在一起或者他们要求能够解决该部分的同事一起工作,然后将所有的程序员编码胡乱糅合在一起,有人靠毕加索画生活, 因为没人想看到猫尿浸泡你那 “在光线下逐渐融化的雪花”。下周, 大家铲更多的雪在其上以阻止毕加索画作跌倒。

有一个理论说除了相比计算机实际可做事情还有更多的规则之外,你可以通过下述的规则来纠正,这些规则都是不同程度的改善且被编码的个人喜好所非议, 所以没有任何代码集在没有做几十个一致、一些远远不止相似方式的事情时就让它进入真实的世界。任何工作刚开始很少的几周仅是清楚了解到一个程序是如何工作 的,即使在熟悉每一个单独的编程语言、框架以及涉及到的标准规范(因为规范是“独角兽”)。

黑夜总会出现

我花了好些年成长,伴随着的是卧室里的橱柜。这个橱柜有一个古怪的设计。期初看起来很正常,当走进去做一些事情时,会发 现右手边的墙会给凹室让路,通向一个方便的小架子。然后向上看,在凹室后面的墙有一条通向一个未放任何东西的狭小空间,那里没有光线,(让)你立即认为它 是一个日间休息室,是为在夜间打着手电筒饲养每一个饿坏的怪物贮备的。

这就是编程要学到的东西。你逐渐知道对自己有用的工具,然后四处查找,并且身旁也有一些方便的新工具,那些总在床边工具给你展示无穷无尽的恐惧。

例如,假设你是个一般的Web开发人员。你熟悉十几种编程语言,数以千的库,标准,协议,以及其它你掌握的。你仍然需要至少一周左右学习更多,记得 检查你知道的事情查看它们是否已经更新或过时,确保它们仍能够一起工作并且没有人修复你在某个周末喝醉时开发的自认为很好的东西。你一直跟上时代,很酷, 随之一切事情容易突破。

“我勒个去”,你说,然后开始寻找问题所在。你发现,有一天某些白痴因为另一个白痴采用1/0表示无限而才用它来作为自 己的无限标识以简化代码,随后一个非白痴正好认为这种行为很白痴且本应该由第一个白痴决定1/0是否可以作为无限,因此他决定成为一个卫道士的同时在他的 新编译器里规定这种行为是错误的。因为他自己也是个白痴,然后决定不告诉任何人这个错误行为,现在所有的“雪花”落入猫尿,你甚至无法找出这只“猫”。

你擅长所有的这些技术,那很好,因为经验让你只花费6小时就能指出哪里出错,而不是丢掉饭碗。你现在需要从上百万个小事情中妥善地处理一个小的额外 事情,终生难忘,因为你需要的程序都是这些混蛋和白痴写的。并且那只是在你个人选择的领域,这只是你需要知道计算机科学领域中事情的一小部分,可能你也从 没有学过该领域中事情。

一个人在5岁时不会知道MacBook实际是如何运作的。为什么我们会叫你反复关机?因为我们不清楚Macbook出什 么状况了, 且真地很容易导致计算机内部休克,也很容易地通过运行自带的自动检测工具指出问题所在。程序猿的电脑比非程序猿的电脑运行的更好的唯一原因是程序猿对待自 免疫病毒就像带有强迫症的小孩,当电脑出毛病时我们不会敲打它们。

大量的工作在互联网上做,互联网有它自己的缺陷

还记得那个关于疯狂的人和糟糕的代码吗?互联网的真实情况是比他的字面描述要糟糕十亿次。类似由12人维护的三页动态网站被美化为“购物车”,这是 一种夸大,事实上这种“购物车”随时随地都会崩溃掉;就现在为非死book工作的工程师正面对数以万计的程序漏洞,拼命的在系统崩溃之前试图找到解决 的办法。在谷歌的办公室,会有团队连续三天没有休息过;某地一个数据库维护员工作在山谷包围的公司里,顾不得跟家里人联系,家人甚至认为他死掉了;如果这 些维护人员垮掉的话,世界将会崩溃;很多人甚至不了解系统维护人员每天的工作状态,但是相信我,如果他们同时要吃午餐的话,肯定不会像你一样去熟食店排队 买饭,因为他们认为那样会浪费时间。

你无法重启Internet。数万亿美元依赖一个摇摇欲坠的“蛛网”,它基于非正式协议和“目前足够好”代码,旁边有十年前注释,类似

“TODO:FIX THIS IT’S A REALLY DANGEROUS HACK BUT I DON’T KNOW WHAT’S WRONG”。

我甚至没有提到那些为了刺探情报和利益的人们对互联网的各个部分的攻击,哎呀他们太无聊了。听说过4chan吗?当他们决定一个下午不喜欢你时,4chan可能毁掉你的生活和事业。我们甚至不用担心4chan那是因为核武器与处于核冬天没有太大的差别。

在网上,可以说“你知道的,如果恰到好处使用科技,这种工作有效,”嘭!现在已成为网络的一部分。任何人只要有点小钱和一台电脑可以嵌入互联网的一 点点,放上他们想要的恶意代码,然后将他们的一点点集聚,一切都开始变得更差。即使是好的程序员也懒得去学习的的神秘规范,这规范是由一些组织建立起来去 实现一些‘独角兽’,所以每个人都会在一半的时间,处理这个事实:没有什么东西能匹配任何东西或有具有任何意义,(反而)可能会随时暴露事实,这时我们只 是试图掩盖它,希望没有人注意到。

这些是互联网的潜规则:在你第一次打开浏览器5分钟后,一个老毛子小孩就会获得你的社会安全号。你使用账户登陆过吗?在NSA的某台电脑正开始追踪你的物理位置直至你的肉体在宇宙不复存在。发送邮件?您的电子邮件地址刚在尼日利亚一个BBS上出现过。

这些事情不是真的,那是因为我们不去关心,也不试图阻止,它们是真的是因为所有的事情都不完美,没有完全的代码,每个人只是试图让它运行。如果你从事于互联网,这是你的工作:期望最后一段代码(你写的)足够好,能够运行几个小时,这样你就可以好好吃一顿和休息一下。

我们没有疯,我们正被逼疯

错误:尝试用正则表达式解析HTML;系统返回克苏鲁(邪神)。

有趣吧?不是?那么下面这个呢?
“那是叫做?arrayReverse?”
“s/camel/_/”
“酷,thx”

难道没用?使用骆驼(驼峰命名法?)?看起来不像正确的响应吗?不是?天呐。你可以仍然找上帝。在开始讨 论这段代码时,你还没有花很多时间去阅读。人的大脑在基本逻辑上不是特别好,现在有一个整个职业不用做事,但真的真的需要很复杂逻辑。巨多的抽象状态和判 断条件链被用于发现东西,像忘写的逗号。让你一整天都这样做,会让你处于轻微的失语状态就像你看着正在说话的人的脸,你不知道他们已经说完,因为话中没有 分号。你沉浸在一种完全无意义的世界,所有的烦恼都来源于由一系列的数字变成一个巨大的迷宫般的符号和一系列不同的数字或结局可能是一只小猫的照片。

对大脑破坏性影响大脑已经由写程序语言人证明(译注:估计是揶揄程序语言设计者脑残)。这是一个程序:

#include <iostream>    int main( int argc, char** argv ) {      std::cout << "Hello World!" << std::endl;      return 0;  }

这个程序与下面做同样一件事情:

`r```````````.H.e.l.l.o. .w.o.r.l.di

这个程序:

>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]  >++++++++[<++++>-] <.>+++++++++++[<++++++++>-]<-.--------.+++  .------.--------.[-]>++++++++[<++++>- ]<+.[-]++++++++++.

还有这一个:

Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.  Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.  Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.  Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.  Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?  Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.  Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.  Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.  Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.  Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.  Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.  Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.  Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.  Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.  Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.  Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.  Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!  Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook!  Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.  Ook. Ook. Ook. Ook. Ook! Ook.

一旦谁设计的程序语言让其他人写成这样:

#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||  open(Q,$0);while(){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/|  /:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"n";  #.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|

依据作者,那个程序是“一个两行程序,用于解析嵌入到代码中的两行注释,以读取玛雅数字代表的单个ASCII字符,这些组成杂志标题,杂志放在一个在90度旋转的ASCII艺术空间里。”

该方案赢得了比赛,因为它必须得到。想生活在这样的世界里?不。这是个一天抽一包烟都没有人管的世界。“当然他一天一 包,谁不这样?”,最终每个程序猿苏醒,在他们完全意识到所见到的世界和其中的相互关系如同之前代码一样,他们交流关于这些的故事仿佛困倦引起的幻觉是正 常的事情。这是一个世界,人们避开xxoo去写猩猩编程语言。所有程序员都是强迫他们的大脑做大脑不愿做的事情,大脑在这种情况下永远无法做出更好,每天 10至15小时,每周5到7天,一个人慢慢地变疯。

</胡言乱语>(结束胡言乱语)

原文链接: stilldrinking   翻译: 伯乐在线 - luakuc
译文链接: http://blog.jobbole.com/69342/