upeng / translation

博文翻译记录保存

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

程序员最可怕的噩梦是什么

###Answer Wiki

  • bug只出现在生产环境中,而且它不可再现,或者在本地无法触发。
  • 产生bug的可能性非常低,但并未低到可以忽略的程度。
  • bug产生的原因包括竞争条件,只发生在荷载作用下。
  • bug产生的原因是未知的。
  • 产生bug的代码并不是你写的,但是你要负责修复它,关键是写这些代码的人早已离开公司。
  • 导致错误的问题是一些图书馆的时间是可靠的99.9%,你会看的最后一个地方。
  • 硬件bug,但是所有人都认为它是软件bug。
  • 多年来很多人都尝试去调试这个bug,却没有人成功。
  • 这个bug是一种逻辑错误,只发生在经过了很长一段时间的某个运行时刻。
  • 调试bug需要某个领域的专业知识,而你却对这个领域一无所知。
  • 你有一个严格的时间期限去修复这个bug。
  • 这个bug不可忽略,因为你的工作岌岌可危。
  • Stack Overflow 挂掉了
  • 去Stack Overflow发现有人提出了你也一直想获得答案的问题,但是这个帖子已经一年无人问津【XKCD:古人的智慧]
  • 键盘的分号键坏掉了
  • 一年后在一个可怕的工作项目中苦苦挣扎,看到自己没有注释的代码,尖叫道,“我怎么会这么做呢?”,“我真的写了这些代码吗”,就像迷失在自己的房子。
  • 没有任何说明文档的库
  • 需求再次改变。
  • =而不是==
  • 过度自信。准备不足。低估。狂躁而不是groking
  • 仅仅在Stack Overflow中寻找答案
  • IE浏览器(如果你是一名web开发者)
  • GitHub的合并冲突
  • 在一个你无意操作的目录中输入rm -rf *命令。game over!:(
  • 我的代码能运行,我却不知道原因
  • 沟通过程中:程序员需要了解他们在做什么,以及它将如何被使用,而且你需要提供上下文环境。这是因为在构建一些东西的时候大约有100个不同的点,你需要做出判断。有上下文你才能做出判断。
  • 过多的沟通:会议,会议,会议...会让程序员疯掉
  • 当“客户”在另一个时区时,为了得到澄清不得不等上一天
  • 没有提供说明文档,或者更糟,提供了无用的文档(例如,不相关的代码等)
  • 缩进混乱,由于不合理的结构导致你无法调试代码
  • 由于一个bug,导致了程序停止响应,而且这个bug位于一个你没有访问权限的特殊版本的操作系统中
  • 老板试图使用旧版本去测试程序。
  • 客户做了一件不可思议的事情使得程序停止运行,你又不知道客户到底做了什么,而你的老板要你第二天把这个bug修复。:(

Mick Stute, Programming for 35+ years 1.2m Views • Upvoted by Kah Seng Tay, I actively follow and learn new programming languages. Answer featured in Forbes. Mick is a Most Viewed Writer in Software and Applications. 米克是一个在软件和应用方面最最受关注的作家。

这是我的答案: 我被一个心理学家雇佣,去修复一个看似具有强大输出功能的程序,这个程序是他之前带过的一个研究生写的。这是一个读取数据文件的程序,问50个问题,做一些计算,而且基于博士的研究提出一些分数。在大学的里这是一个3B2的研究。他演示了程序,果然当从一个问题到另一个问题时,似乎有奇怪的闪烁的文字在屏幕上,他们看起来不怎么友好。我同意去做这件事,本应该非常直接的,这样他会按小时付费给我,确定修复有多大难度然后同意付费。

第1天

我坐在3B2旁边,登录给我的之前那个研究生的学生账户。这也是代码所在地。我检查C代码。代码可读性太差了。所有的代码都挤在一行。它包含15文件,每个文件有3个函数-所有都在一行。所有变量名看起来都是随机的三个字母的组合。我跟他同意去的小时在这(伟大的决定)。我理清所有的代码并将它很好的格式化了,这样我才能看懂它。

这么做是有原因的。它使用了诅咒图书馆移动到屏幕上的一个点,打印一个问题和答案,并等待响应。但它第一次移动到问题的第一行时,打印一些白人至上的消息,等待0.5秒,然后重写它的问题。这本应该是简单的。只有大约五个的地方它可以输出任何东西,而且他们都有这种潜在的闪烁的消息。每一个编码都很困难。没问题。删除违规mvprintw(),一切都好了。或着。我编译思考我所做的。但当我跑这个程序的时候了,它又出现了-这个潜在的消息。这一次,不同的文字还是同样的主题,只是不同的消息。

我检查我的代码,信不信由你,它回到了我最初发现它的时候的状态。15个文件,错位,3个字母组成的变量,整个事情就回到我开始的地方。我想死的心都有了——没有把自己的代码备份。我再次重构代码,这一次把它以不同的命名放在三个文件里面。我复制整个目录,我标记这些文件只读。然后编译。看上去一切都好。我运行这个程序。现在原来的15个文件的目录中的一个副本,连同我的代码和潜在信息又出现了。

好的,所以在磁盘的某处是源代码要坚持这样做,他设定的程序,当你把代码编译它。我在(/usr/include)做全盘搜索,因为这是一个研究的版本,我们源只是一切但内核本身。这是很多的头文件,还需要一些时间在3B2,这是第1天。

第2天

磁盘没搜索出什么。字符串似乎不是加密就是放在在一个库中的某个地方。因为我没有所有原始的可执行文件校验和,我决定搜索所有的库。这次比以前更长,所以第二天就这样结束了。

第3天

没有结果。字符串都加密了。这意味着我不得不去从所有#include中的头文件去找到它们在哪。这将需要一些时间。我们警示校园计算部门,我们相信有人已经获得root级别的权限访问菲尔普斯博士研究的计算机,这是一个共享实验室计算机科学大楼。他们不相信是可以理解的。

我开始展开#include文件。我这样做了,但还是无法找到代码。所以现在我知道它是在一个库中编译。一点问题都没有。为什么不重新编译所有的库,毕竟我们有源文件。

第4-6天

最难的部分,让校园的这批人确信他们系统有问题。但我们最后做标记,UNIX管理员被雇了,因为他娶了院长的女儿,忙着学习该怎么做。最后,他同意让我来处理,因为他不知道如何把所有的东西进行编译。6日结束,所有的标准库都编译了。呜呼! 我拿出我的修改,清理源文件开始编译。看上去一切都好。我运行它。OMG,问题又出现了。15个混乱的源文件和潜在的信息又回来了。简直突然像变魔术一样。我非常非常仔细地研究虽然我被难住了。在源代码中并不存在这样的代码。我想我可能失败了。菲尔普斯博士不满意时间就这样浪费了,他认为也许我们应该从头开始重写程序。“当然”,我说,此时我就像一个迷路的小狗,思维模式被禁锢,眼睛盯着终端,“我想你是对的。这样将更快。” “好的,”他说,“我们明天就开始。”

第7天

见鬼去吧。这家伙不打我。我们一点也不想编译他的代码!”你不用给我钱了,菲尔普斯博士,我只是想呆在实验室。”这是书呆子的战争。

第8-14天

我变得聪明了,我想无论如何他将修改curses库。我编译curses库的代码并进行组装,尽管我不知道3B2组件,于是我开始学习。我阅读手册用了6天时间,拼凑,重构代码。十分浪费时间,一切看起来都很正常。

第15天

我突然意识到这是在编译过程中出现的问题。是编译器。每一次你编译原代码并运行,潜在的代码信息会注入源代码。我以前听说过这个问题。


待续...

About

博文翻译记录保存