Linux 2.6.39-rc3的一个插曲

Linux 2.6.39-rc3的一个插曲

2011年4月12日,Linux 2.6.39-rc3发布了,Linus Torvalds写了一个发布邮件,其中包含了一个长长的为这个版本做过贡献的人员名单,这个名单中有很多看上去应该是中国人的名字,我挺为他们感到骄傲的(不知道你是否还记得以前本站的”Linux是由谁写的“)。

不过,没过一会,发现了一个bug,经过大家的调查(2.6.38版没有发现这个问题),很快,找到了原因,是因为一个内存地址的问题,一个叫Yinghai Lu的人(看其名字应该是中国人,其邮件是@kernel.org)找到了原因—— radeon card使用了一个不正确的内存地址[0xa0000000 – 0xc000000]。Joerg Roedel跟贴说,这个地址超出了4GB的内存,然后他和Alex Deucher聊了一会,觉得不应该是这个问题,因为这个地址应该是GPU的,而不是系统内存的。

好像,Yinghai Lu没有理会他们说的不应该是这个问题,给出了个fix

diff --git a/arch/x86/kernel/aperture_64.c b/arch/x86/kernel/aperture_64.c
index 86d1ad4..3b6a9d5 100644
--- a/arch/x86/kernel/aperture_64.c
+++ b/arch/x86/kernel/aperture_64.c
@@ -83,7 +83,7 @@ static u32 __init allocate_aperture(void)
 	 * so don't use 512M below as gart iommu, leave the space for kernel
 	 * code for safe
 	 */
-	addr = memblock_find_in_range(0, 1ULL<<32, aper_size, 512ULL<<20);
+	addr = memblock_find_in_range(0, 1ULL<<32, aper_size, 512ULL<<21);
  	if (addr == MEMBLOCK_ERROR || addr + aper_size > 0xffffffff) {
 		printk(KERN_ERR
 			"Cannot allocate aperture memory hole (%lx,%uK)\n",

看到这个fix,Linus Torvalds不高兴了,他回贴问道:

  • 为什么全都是Magic Numbers?
  • 为什么0x80000000就那么特殊?
  • 为什么我们这样改就行?

还说了这样一句话——

This kind of “I broke things, so now I will jiggle things randomly until they unbreak” is not acceptable. 这种“我把事搞砸了,就随意地调整直到事情又工作”的方式是不可接受的。

还说,这里即没有说明为什么我们fix在了正确的地方(也没有解释那些Magic Number是什么),也没有回滚那个有问题的patch。还说——

Don’t just make random changes. There really are only two acceptable models of development: “think and analyze” or “years and years of testing on thousands of machines”. Those two really do work.

不要乱改。那里只有两个可行的开发模式:“思考和分析” 或是 “数年数年地不断地在几千台机器上测试”。这两个方式才是真正可行的。

当然,Yinghai Lu对其做了解释,说我们的确调查过了,老的代码用的内存地址是0x80000000,新的则是用0xa0000000,而0xa0000000不工作。这又引发了 Linus Torvalds 的不满的回贴。Linus说——

Yinghai, we have had this discussion before, and dammit, you need to understand the difference between “understanding the problem” and “put in random values until it works on one machine”.

Yinghai,我们以前谈过这个事,该死的,你真的需要明白“理解一个错误”和“设一个随意的值直到其正常工作”的区别。

There was absolutely _zero_ analysis done. You do not actually understand WHY the numbers matter. You just look at two random numbers, and one works, the other does not. That’s not “analyzing”. That’s just “random number games”.

这里就根本没有分析。你没有直正的明白为什么这些数字能行。你只看了两个随机的数,一个能行,另一个不行。这不是“分析”,这叫“随机数游戏”。

If you cannot see and understand the difference between an actual analytical solution where you _understand_ what the code is doing and  why, and “random numbers that happen to work on one machine”, I don’t know what to tell you.

一个解决方案真正经过分析了那段代码干什么的为什么的,另一个是“随机数字可以让其在一台机器上运转”,如果你不能看到和理解他们之间的不同,那我不知道要和你说什么了。

然后,Linus Torvalds进行了谆谆教导——(相当的受用啊)

Let me repeat my point one more time.

让我再一次重复一下我的观点

You have TWO choices. Not more, not less:

你有两个选择,不多也不少:

– choice #1: go back to the old allocation model. It’s tested. It doesn’t regress. Admittedly we may not know exactly _why_ it works, and it might not work on all machines, but it doesn’t cause regressions (ie the machines it doesn’t work on it _never_ worked on).

– 选择一:回滚到老的分配模式。那是测试过的。它过了回归测试。诚然,我们也许不知道为什么那样能行,并且,即使是那样也不一定能在所有的机器上工作,但是其没有让回归测试有问题(这个代码永不可能在不能运行的系统上运行)

And this doesn’t mean “old value for that _one_ machine”. It means “old value for _every_ machine”. So it means we revert the whole bottom-down thing entirely. Not just “change one random number so that the totally different allocation pattern happens to give the same result on one particular machine”.

这并不代表“老的值只能在一台机器上工作”。这代表“老的值可以工作在每一台机器上”。所以,我们需要回滚整个代码改动。而不只是“为了一个特别的机器去修改一个和以前完全不一样的随机数”。

– Choice #2: understand exactly _what_ goes wrong, and fix it analytically (ie by _understanding_ the problem, and being able to solve it exactly, and in a way you can argue about without having to resort to “magic happens”).

– 选择二:真正搞清楚为什么会错,并且有分析地修改他(理解问题才能真正解决之,并且,只有没有“魔法发生”的时候你才可以来争论)

Now, the whole analytic approach (aka “computer sciency” approach), where you can actually think about the problem without having any pesky “reality” impact the solution is obviously the one we tend to prefer. Sadly, it’s seldom the one we can use in reality when it comes to things like resource allocation, since we end up starting off with often buggy approximations of what the actual hardware is all about (ie broken firmware tables).

现在,整个分析方法(亦称作“计算机科学”的方法)应该是你可以在没有在外界干扰下真正思考这个问题而得到的解决方案,这很明显是我们推崇的。只有在极罕见地情况下我们可以在有外界干扰下分析这种资源分配的事,因为我们只有了解倒底是什么样的硬件,我们才能最终远离bug(如:错误的固件表)

So I’d love to know exactly why one random number works, and why another one doesn’t. But as long as we do _not_ know the “Why” of it, we will have to revert.

所以,我希望你能知道为什么一个随机数能行,而另一个不行。只要我们不知道,那么我们就不得和回滚整个改动。

It really is that simple. It’s _always_ that simple.

这真的是很简单,而且这一直是那么简单。

So the numbers shouldn’t be “magic”, they should have real explanations. And in the absense of real explanation, the model that works is “this is what we’ve always done”. Including, very much, the whole allocation order. Not just one random number on one random machine.

所以,那些数不应该是“magic”的,他们应该有真正的说明。在有真正的说明的情况下,我们的开发模式才会工作。其包括了整个分配顺序。不只是那个在任意机器上的随机数。

Linus

后面的事不用说了。我没有想到Linux 内核组会有像Yinghai这样工作的方式,毕竟这是一个黑客级的开发团队。我个人对这个乱写代码的人执零容忍的态度,不管你干过什么,不管你哪里毕业的,不管你简历怎么样,不求甚解随意写代码的人我无法接受。我不知道Yinghai Lu会怎么样想,他/她会像我在“程序员那些悲催的事儿”中谈我经历那样知耻而后勇吗?能得到Linus的教导真是一件很不错的事。虽然,Linus教导的这些东西,都应该是程序员最最最基本的技能。fix bug一定要fix在root cause上啊了解一个问题,不但要知其然,还要知其所以然啊,这都是老生长谈了。本站有很多提高程序员能力的文章,比如,这篇这篇,还有这篇

各位朋友,我真心希望你能从这个小插曲中明白点什么。

—– 更新2011/04/27—–

从本贴的回复中可以看到有朋友说如果时间紧,没有办法只能在不求甚解的地去fix bug,因为老板催。我认为这是老板的“急功近利”的问题。我想和大家说一下,你得想清楚你属于下面那种人:

  1. 你的老板给你压力,让你不得不乱fix,
  2. 你认同只要时间紧bug是可以乱fix的。

如果你属于1),那我觉得还情由可原,这是管理问题。但这不能成为你对乱fix bug的理由。一般这种问题怎么解决:首先,给一个hot fix去救火,然后,有时间去调查root cause,最后经过分析和测试,给出一个final 的 offical fix。这就是应急的做法,根本不存在什么可以乱fix bug的做法。

如果你属于2),那么我只能“过激”地说你没有成为程序员的资质!

另外,快速地fix bug,并不等于,不求甚解的fix bug。大家不要把这两件事等同。

 

(请勿用于商业用途,转载时请注明作者和出处)

(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

好烂啊有点差凑合看看还不错很精彩 (30 人打了分,平均分: 4.27 )
Loading...

Linux 2.6.39-rc3的一个插曲》的相关评论

  1. 像是国内比较普遍的开发习惯.老外做事比较保守,会分析再修改.国内压力比较大,出了bug会冒出3个老板在背后催.

  2. @Null 不同意。这不是保守不保守的问题,这就是正确的做事方式,Linus说了,这是“计算机科学的方式”。国内的公司也不完全是这样,如果是这样,那么我很为这个公司担忧。

  3. 程序员确实需要这种知其然知其所以然的境界,可惜的是为公司里开发软件公司是不会给时间知其所以然的,他们关注的是结果,不是过程。

    1. 我过激了?哈哈,不妨指点一下,我怎么过激了?要求一个人在做事前就分析好,知其然更知所以然,fix bug不是通过测试,而是通过分析和理解原因,这是难道不是正确的吗?这不是系统复杂不复杂的问题,这是做事方法的问题,这就是我说的能力问题。

      另外,简历并不代表什么,那是当事人自己写的。看一个人的能力不是看简历,而是看他的行为。

  4. @陈皓
    相对于国内程序员比较普遍的哪边有问题就贴个创可贴的工作方式,老外的先分析再修改就是相对保守的做法.保守又不是什么贬义词.就好像鹰派和鸽派,在不同的外部环境下,人会做出不同的选择.国内的环境确实很容易把人往这条路上推.这不仅仅是IT行业的问题.至于你说的国内的公司不全是这样.在只考虑中短期的成本的前提下,用激进做法会比保守做法的成本更低.那些一步一个脚印的公司会被拖垮.而激进的做法导致的后果(rework/bug/etc.),有很多可行的方法可以掩盖掉(加班/加班/茅台).

    总结一下.其实我有点跑题.但是就像改bug要先找到root cause一样,我们要更进一步找到”做事不先分析”的root cause.

    1. 我理解你说激进和保守是另外的问题吧,你是站在公司业务的角度上说这个事。而我则是站在产品质量和人员能力的角度上。我们的出发点不一样,所以自然理解不一样。但我觉得,如果一个公司的人fix bug时不求甚解,乱fix bug,那么你的代码就会越来越乱,产生的问题也会越来越多,自然会影响公司业务。

      对不起,作为一个有计算机科学背景的人,作为一个踏踏实实工作的人,我不能苟同这样的工作方式和工作文化。这就是为什么Linus能做出Linux造福全人类,而中国没有好的软件的原因了。

      你说的是在谋生的层次,而我说的是则是做事业的层次。这是我们的不同。

  5. @陈皓
    我同意 @Null 的看法,如果一个项目没有schedule的压力,没有客户在催,当然可以慢慢地找root cause,这绝对是正确的应该的做法;然而事实上大多数公司的产品都有压力,deadline之前必须把事情搞定,那有workaround多数情况下也可以了。尤其考虑到一个产品的生命周期不会太长,一些小的bug影响并不会太大。

    当然,linux kernel这样的东西,越谨慎越好

    1. Linus已经说了,你先roll back你的改变到上一次能够正常工作的版本,然后再找root case,没有第三条路。这就是做事业的人和应付工作的人的差别

  6. @Mine @Null
    不同意。同意陈皓的说法。先思考再行动这是一个素质问题。
    @Mine @Null 同意你们有关商业的说法。有名“window patch马上就到”。
    @陈皓,不同意“我很为这个公司担忧”。 微软,oracle就这么干,都干成首富N多年了。唉,流氓赚钱容易呀。

  7. 从本贴的回复中可以看到有朋友说如果时间紧,没有办法只能在不求甚解的地去fix bug,因为老板催。我认为这是老板的“急功近利”的问题。我想和大家说一下,你得想清楚你属于下面那种人:

    1. 你的老板给你压力,让你不得不乱fix,
    2. 你认同——只要时间紧bug是可以乱fix的。

    如果你属于1),那我觉得还情由可原,这是管理问题。但这不能成为你对乱fix bug的理由。
    如果你属于2),那么我只能“过激”地说你没有成为程序员的资质!

    一般这种问题怎么解决:首先,给一个hot fix去救火,然后,有时间去调查root cause,最后经过分析和测试,给出一个final 的 offical fix。这就是应急的做法,根本不存在什么可以乱fix bug的做法。

  8. 大家帮助大家 :

    @陈皓,不同意“我很为这个公司担忧”。 微软,oracle就这么干,都干成首富N多年了。唉,流氓赚钱容易呀。

    问你两个问题:

    1)微软,oracle,你怎么知道他们是在不求甚解的情况下fix bug?
    2)另外,快速地fix bug,并不等于,不求甚解的fix bug。为什么要把这两件事等同呢?

  9. 陈皓 :

    大家帮助大家 :
    @陈皓,不同意“我很为这个公司担忧”。 微软,oracle就这么干,都干成首富N多年了。唉,流氓赚钱容易呀。

    问你两个问题:
    1)微软,oracle,你怎么知道他们是在不求甚解的情况下fix bug?
    2)另外,快速地fix bug,并不等于,不求甚解的fix bug。为什么要把这两件事等同呢?

    1)你怎么知道他们是在求甚解的情况下fix bug?汝非吾,安知吾非知鱼之乐。Larry自己在访谈中都说,刚开始oracle是什么都新需求都敢接,永远告诉客户下一版会更好。
    2)快速地fix bug != 不求甚解的fix bug;但是 快速地fix bug ==》依然的蓝屏 ==》我只能认为MS在不求甚解的fix bug。

    1. 回复看不见我的语气。我没有激动,我问你的那两个问题是平和的。。但是我打出来的字显得我有点激动了。呵呵。Sorry啊。

      另我和你的理解不一样,bug永远都是有的。Windows和Oracle的成功还是有扎扎实实的过硬的产品为基础的,而且并未见他们release的patch又引发很多问题,我认为他们做事还是很认真的,并不是不求甚解。

  10. 本文可以证明,linux kernel不是在不求甚解fix bug。对MS,Oracle 用起来不像?

  11. 其实归到了一个层次的问题:(老罗语)
    有人一辈子坚持自己的理想,不受人待见,日子过得紧巴巴,咬牙维持老婆孩子的一般生活,到老都是这样。但他、她使这个世界又变得美好了一点点。
    有人 (取非(一辈子坚持自己的理想,不受人待见,日子过得紧巴巴,咬牙维持老婆孩子的一般生活,到老都是这样。))他、她使这个世界又变得恶心了一点点。

  12. 木有办法呀,Boss让改其他人的bug,这玩意儿如果甚解了估计我又得多花掉一周多,估计我就要被炒鱿鱼了……

  13. @大家帮助大家
    我觉得这不是激动不激动的问题,这个是“是非”的问题。什么方法是对的,什么方法是错的。首先应该直面是非,然后再考虑其他的问题。所谓环境问题,时间紧问题,什么老板催的问题,都不能解决是非的问题。难道时间紧,老板催,环境不好,1+1就不等于2了吗?事急从权的时候,首先应该明白从权的方法是错的。这个是最根本的。

  14. Null :
    像是国内比较普遍的开发习惯.老外做事比较保守,会分析再修改.国内压力比较大,出了bug会冒出3个老板在背后催.

    行情不同,国内比较浮躁,一帮不懂的人做指挥,,,

  15. vautrin :
    @大家帮助大家
    我觉得这不是激动不激动的问题,这个是“是非”的问题。事急从权的时候,首先应该明白从权的方法是错的。这个是最根本的。

    这的确是个是非问题。我是赞同要求甚解的fix bug的。
    我也是从不事急从权的。
    只是这里要给大家看一个全貌:
    要求甚解,你可能会穷困一生,但让这个世界变得美好了一点点。
    不求甚解,你可能会随波逐流,但让这个世界变得恶心了一点点。

  16. @大家帮助大家
    我相信大家都是知道怎么做是的对,但就是容易在无能领导的指挥下放弃原则,哎,人在江湖啊。

    不过,千万不要放弃自己心中的那些原则性的东西。不然,就真正的沦落了。

  17. 呵呵,这篇文章只能说明我通过其他文章对博主的判断基本是正确的。

    作为程序员,博主好像有点自负(相对于自身水平而言),作为中国人,博主好像有点自卑(相对于国人实际的能力而言)。

  18. 我也觉得楼主过激了。
    最后一段话,您有鄙视Yinghai Lu的嫌疑,就算你水平高,也不应该鄙视其他人。
    内核组为什么就不能有Yinghai Lu那样的人呢?内核组应该都是些什么人?
    您说,不知道Yinghai Lu会不会知耻后勇。首先,我觉得这不是什么耻辱,为什么这会是一个耻辱呢?我相信Yinghai Lu会接受Linus的教导,并且在以后的道路上更加严格要求自己。
    另外,还有一句:虽然,Linus教导的这些东西,在我看来,都应该是程序员最最最基本的技能。连用三个最,我不知道您打这句话的心情是如何。如果像您说的,这是程序员最最最基本的技能,那您说在中国,不,就您们公司得了,有多少个程序员完全具备这最最最基本的技能?

    基于这些,我认为楼主确实有点过激了,给人的感觉是你fix过好多linux内核的bug,达到了国人第一。

  19. 确切的说,我相信国外也有这样的情况,这就是资本主义的原罪——什么都是成本出发,而且是眼前的成本出发来考虑问题的。甚至我觉得这也是有这么多开源项目的原因,很多人在公司里被搞得很不爽,所以他想创造一个完美的项目来改变世界,这也就是很多人想不通,为什么很多开源项目都不怎么赚钱,甚至是赔钱的,大家都做得不亦乐乎吧。

  20. @wishmiss
    确实,不身处对方的环境,单凭和Linus的一番对话,就开始说出:“怎么会有这种人混在Kernel的队伍里”,绝对是赤裸裸的鄙视了。自己技术水平高不能变成鄙视别人的资本,鄙视,只能是人品方面的

    1. 不好意思,我行文的时候,我觉得Linux Kernal 应该都是黑客级的人,这些人都是有很强能力的人,所以出来这样的人,我有点不解。

      不过,我对此的不解和调侃,让大家有一种我BS人的感觉了,这是我的表达问题,没有表达到能让你不误解的水平。我还需要提高我的表达能力。

  21. 这就是所谓的碰运气编程,专业的程序员不应该犯这种错误。Linux Kernel这种项目是靠全世界无数程序员共同完成的,规模巨大历时又很长,所以很多约定和规则要贯彻始终,不然会给后来的人造成很大困扰。当我们阅读代码时遇到这种Magic数字很无奈,而且常常不知道为什么是这样的数字,写程序的也许只有一两个人,而阅读代码的人却是成千上万,所以这些东西一定要尽最大努力的去避免,造福苍生啊。
    不过写出烂代码也不用羞愧得撞墙,Linus向来不客气,大家不用替人感到难受,也许就是个不小心犯了低级错误而已,写程序的谁敢打包票没犯过低级错误啊~

  22. 印象中至少在过去两年里面 Yinghai 改过不少相当核心的代码,包括 APIC、shed 和 PCI 等等,尤其是启动内存管理方面。在 2.6.28 的时候贡献的 changeset 排名第二, 仅次于 David S. Miller。 参见: http://lwn.net/Articles/312074/,其中的评价是:“Yinghai Lu is a constant source of x86 architecture patches. ”

    像作者这种根本不怎么了解别人工作,就开始自命清高的说“真没有想到Linux 内核组会有Yinghai这样的人,是不是面试官面试的时候喝醉了。” 实在是有人身攻击的嫌疑,相当的不客观。

    也是另外一种无知无畏吧。

  23. 谢谢大家的批评。成文的时候没有太注意,现在回头看一下,可能真有这样的语气。老实说,我的确没有对Yinghai有BS的语气,我只是表示不能理解像Linux Kernal组这种黑客级别的团队也会有这样的工作方式。 我成文时的语气应该是不解,而不是BS。 不过,谢谢大家对我的BS。我的表达能力没有达到让你不误解的水平。我还需要修改一下原文。

    但是我仍然反对不求甚解的工作方法和人,不是因为不平高,也不是因为自负或是自卑,这就是最基本的事,不管我用了多少个最,不管你是不是做程序,不求甚解,乱写代码的人,你也许可以接受,但我不能接受。

  24. wishmiss :
    我也觉得楼主过激了。
    最后一段话,您有鄙视Yinghai Lu的嫌疑,就算你水平高,也不应该鄙视其他人。
    内核组为什么就不能有Yinghai Lu那样的人呢?内核组应该都是些什么人?
    您说,不知道Yinghai Lu会不会知耻后勇。首先,我觉得这不是什么耻辱,为什么这会是一个耻辱呢?我相信Yinghai Lu会接受Linus的教导,并且在以后的道路上更加严格要求自己。
    另外,还有一句:虽然,Linus教导的这些东西,在我看来,都应该是程序员最最最基本的技能。连用三个最,我不知道您打这句话的心情是如何。如果像您说的,这是程序员最最最基本的技能,那您说在中国,不,就您们公司得了,有多少个程序员完全具备这最最最基本的技能?
    基于这些,我认为楼主确实有点过激了,给人的感觉是你fix过好多linux内核的bug,达到了国人第一。

    我是菜鸟,但我也觉得yinghai的这种行为值得小小被鄙视一下,能进内核组的当然是牛人,但看到牛人表现出菜鸟的素质才更值得让人鄙视,凭什么菜鸟没有鄙视的资格
    linus反复追问强调的问题就是:为什么这样是错的,为什么这样是对的,原因? 而yinghai给出的回答是:因为新的不工作,改回去就可以了 —这种回答,放在任何事情上,都感觉是一种漫不经心的态度和对分析-思考-解决问题精神的一种冒犯
    另外我觉得楼上两位就是特地来鄙视楼主的

  25. 大家帮助大家 :

    陈皓 :

    大家帮助大家 :
    @陈皓,不同意“我很为这个公司担忧”。 微软,oracle就这么干,都干成首富N多年了。唉,流氓赚钱容易呀。

    问你两个问题:
    1)微软,oracle,你怎么知道他们是在不求甚解的情况下fix bug?
    2)另外,快速地fix bug,并不等于,不求甚解的fix bug。为什么要把这两件事等同呢?

    1)你怎么知道他们是在求甚解的情况下fix bug?汝非吾,安知吾非知鱼之乐。Larry自己在访谈中都说,刚开始oracle是什么都新需求都敢接,永远告诉客户下一版会更好。
    2)快速地fix bug != 不求甚解的fix bug;但是 快速地fix bug ==》依然的蓝屏 ==》我只能认为MS在不求甚解的fix bug。

    当初做MS技术支持的时候,就我与老外开发组交流的实际过程经验,即使我这边用户提出的Bug能用magic number的workaround来暂时解决,开发组还是会去找RootCause。

  26. @wishmiss @chao 好像是在歪楼了。我们还是对事(要求甚解改代码)不对人(陈皓BS不BS yinghai)吧。

  27. 大家帮助大家 :

    @wishmiss @chao 好像是在歪楼了。我们还是对事(要求甚解改代码)不对人(陈皓BS不BS yinghai)吧。

    没有关系,BS我也挺好的,这样可以让我反思我的过失,也算是一种警醒。欢迎大家的批评!

  28. 前面的故事很精彩。后面的结论不用看。
    Yinghai 在 <>中的排名非常靠前。我相信他是牛人一个,只是他还有改进的空间。

  29. Mine :
    @陈皓
    我同意 @Null 的看法,如果一个项目没有schedule的压力,没有客户在催,当然可以慢慢地找root cause,这绝对是正确的应该的做法;然而事实上大多数公司的产品都有压力,deadline之前必须把事情搞定,那有workaround多数情况下也可以了。尤其考虑到一个产品的生命周期不会太长,一些小的bug影响并不会太大。
    当然,linux kernel这样的东西,越谨慎越好

    不同意,如果做事情的基本态度和方式不正确,就算是在没有压力的情况下,一样会犯同样的错误。

  30. 我认为这事是“工作最怕光说不练”的典型场景。
    做Linus Torvalds容易,做Yinghai Lu难!

  31. 我很惊奇为什么有那么多人会同意随意修改bug,任何一个有点理智的人都不会同意这么做,难道你们从小到大就是被这样教育起来的吗,真是非常可怕!任何行业都不能容忍这样的态度。
    假设,今天瞎改了个bug,系统好像能用了,但是不知道为什么,这难道是在变魔法?难道你们不知道在不了解bug的情况下改bug有可能引入新bug?用这样的态度工作,这样的你不了解的bug越来越多,改任意一个地方就可能错碰到其他的地方。并且后来维护的人看到前面的人是这样的工作态度,就会认为这个系统是可以随意应付的,接着就不会认真。最后系统就会腐烂成一陀屎。这就是破窗效应:如果对待一个bug不认真,草率应付,那么团队里面其他人会觉得,连这种不认真的bug都能提交,那我还那么认真写代码干吗,于是新开发出来的代码也会烂掉。

    有的公司觉得产品是一次性的,反正做了卖了就不管了,这不是做产品,是排泄。
    有的人讨厌当前的工作,没兴趣,所以不认真,但是这种事是会影响人是有人品、口碑和习惯的,如果对每天要做的事情不认真,那么最终会导致你变成一个像排泄物一样的东西,连自己都讨厌自己。

    解决这种bug至少有两条比较好的路:1、如果你不想花时间调查,有压力,那就回滚,如果回滚不了,就不要解决,让它在那好好放着,这样做至少没有让危害的范围扩大从而让系统腐败,如果是随意解决,你的系统就开始腐败。2、如果决定要解决,就认真解决。

  32. @danton

    天天写程序的人告诉你,用这种方式解决的bug就是定时炸弹,将来一定会绊自己的脚,这是我的经验之谈。周围每次有人敢随便写这种代码,我都会说他一顿:现在轻松5分钟,以后万一出了问题就得花好几天来补救。绝对不能侥幸,其实不是万一出不出问题,根据经验,这种代码肯定会问题。

    请记住这么一个命令
    git blame
    请珍惜自己的人品

  33. @fooy

    fooy :

    wishmiss :
    我也觉得楼主过激了。
    最后一段话,您有鄙视Yinghai Lu的嫌疑,就算你水平高,也不应该鄙视其他人。
    内核组为什么就不能有Yinghai Lu那样的人呢?内核组应该都是些什么人?
    您说,不知道Yinghai Lu会不会知耻后勇。首先,我觉得这不是什么耻辱,为什么这会是一个耻辱呢?我相信Yinghai Lu会接受Linus的教导,并且在以后的道路上更加严格要求自己。
    另外,还有一句:虽然,Linus教导的这些东西,在我看来,都应该是程序员最最最基本的技能。连用三个最,我不知道您打这句话的心情是如何。如果像您说的,这是程序员最最最基本的技能,那您说在中国,不,就您们公司得了,有多少个程序员完全具备这最最最基本的技能?
    基于这些,我认为楼主确实有点过激了,给人的感觉是你fix过好多linux内核的bug,达到了国人第一。

    我是菜鸟,但我也觉得yinghai的这种行为值得小小被鄙视一下,能进内核组的当然是牛人,但看到牛人表现出菜鸟的素质才更值得让人鄙视,凭什么菜鸟没有鄙视的资格
    linus反复追问强调的问题就是:为什么这样是错的,为什么这样是对的,原因? 而yinghai给出的回答是:因为新的不工作,改回去就可以了 —这种回答,放在任何事情上,都感觉是一种漫不经心的态度和对分析-思考-解决问题精神的一种冒犯
    另外我觉得楼上两位就是特地来鄙视楼主的

    我一直非常敬重楼主,也非常感激他写过的一些东西对我的帮助。我是一个没写过一行实际代码的门外汉。我不反对楼主提出的那些做事的态度,相反我非常肯定。Yinghai Lu也不会不承认自己的态度出现问题,他也不会不接受linus的批评。他用他能力证明了他能进入内核开发组,得到了提交代码的权利。
    我没有资格去鄙视别人,我也没有鄙视过任何人的心。

    对,楼已经歪了,停止这样的讨论。

  34. 早上在歪楼的同时是想把问题再往前推推,没想到后来被划到另外一个层次去了,有点意外.

    如果仅限这个标题,大家的讨论结论应该是没有什么异议.至于我提的那个问题或者说博主在回复中表现出来的问题,参考博主的背景,这种情况在技术出身转管理的人中还是蛮普遍存在的.本来我下午在记事本里面写了一段打算改改晚点post上来,后来看到地上的白线就犹豫了,看来现在提这个还是太早了点.

    BTW:完全赞同Linus在这件事情上的处理方法.

  35. fix bug还是各种慎重的好,不然索性让bug飞一会儿吧

    老板那,咱们的下个版本会更好
    客户那,我们的下个版本会更好

    至于怎么要他们买账,那就各种沟通或者忽悠(中性词)了,也就是非程序层面的东西了

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注