【问题标题】:Number of lines of code in a lifetime [closed]一生中的代码行数[关闭]
【发布时间】:2008-11-09 23:20:35
【问题描述】:

其中一家公司要求其潜在员工提供在其一生中以某种编程语言(如 Java 或 C#)编写的代码行数。由于我们中的大多数人在多种语言的不同项目中都有多年的经验,而且我们几乎没有记录这一点,因此计算这些指标的最佳方法是什么。我相信 stackoverlow.com 的聪明成员会有一些想法。

这是一家在其领域中非常受人尊敬的公司,我相信他们有充分的理由提出这个问题。但也难以回答的是要考虑的代码类型。我是否应该只包括我实现的困难算法或我编写的任何代码,例如具有 300 个属性的 POJO,其 getter/setter 是使用 IDE 生成的!

【问题讨论】:

  • 哪个怪胎公司会问这样的问题?这让我想起了我的一位经理,他会通过签入源代码控制的代码行来判断性能。开发人员只是添加了额外的换行符和 cmets。
  • “通过代码行来衡量编程进度就像通过重量来衡量飞机制造进度。” (比尔盖茨?)

标签: metrics


【解决方案1】:

对此类问题的最佳回答是以下之一:

  • 你为什么想知道?
  • 你认为这样一个数字有什么意义?
  • 我现在就起身离开可以吗?

我会认真质疑任何向现任或未来员工提出此类问题的人背后的动机。很可能是同一类型的公司开始进行代码审查,重点是您键入的代码行数。

现在,如果他们认为代码行数是衡量程序员经验的标准,那么我肯定会在那时结束面试。

可以为复杂的问题找到简单的解决方案,并且通常比只在问题上输入足够多的代码行它会自行解决要好。由于产生的错误数量与语句的数量成线性关系并高于该数量,我会说,结合他们解决的问题数量,倒数可能更好。

作为测试响应,我会这样问:

如果在一个程序中我能够用 1000 行代码解决问题 A、B 和 C,而另一个程序员用 500 行代码解决相同的问题,那么我们谁是最好的(答案是:没有足够的信息来判断)


现在,如果您仍然想估计行数,我会简单地开始考虑该人编写的项目,并将它们的大小与已知数量进行比较。例如,我有一个类库,目前大约有 130K 行代码,我用 Delphi 和其他语言编写过类似的东西,加上一些相当大的应用程序项目,所以我估计我有 1000 万行代码至少我自己。数字有意义吗?一点都没有。

【讨论】:

    【解决方案2】:

    听起来这是 D E Shaw 的问卷?

    【讨论】:

      【解决方案3】:

      这似乎是诸如“您可以在波音 747 中放多少个乒乓球?”之类的问题之一。在这种情况下,提问者希望看到您展示您解决问题的能力,而不是知道您实际编写了多少行代码。我会小心不要对问题做出任何批评,而是诚实地尝试解决问题; )

      【讨论】:

      • 一架波音 747 可以装 23.782.991 个乒乓球。如果先打开头顶隔间,可以装 25.177.293 个。
      • 老兄!你说的对!我数过了!
      • 啊,原来你是另一个。有人告诉我,这些数字已经过核实,但不是由谁核实的。凉爽的! :)
      • 这是欧洲乒乓球还是非洲乒乓球? =]
      【解决方案4】:

      看看ohloh。该站点显示来自开源项目的指标。

      该网站估计 107,187 行代码对应于 27 人年的工作量(每年 4000 行代码)。

      这种指标愚蠢的一个例子是,这个数字来自我两年来一直在玩弄外部工作的一个项目。

      【讨论】:

      • 那是一个汇编项目,对吧?
      【解决方案5】:

      基本上有三种方法可以处理对无意义指标的荒谬请求。

      1. 拒绝回答,质疑提问者的理由并解释为什么这些理由很愚蠢。

      2. 花时间收集你能收集到的所有信息,并尽你所能计算出答案。

      3. 想出一个似是而非的答案,并在尽可能少的愚蠢情绪中继续前进。

      我看到的第一个答案似乎是第一行。想想你是否仍然想要这份工作,尽管他们的要求很愚蠢。如果答案仍然是肯定的,请避免使用数字 1。

      第二种方法是查看旧项目中的旧代码存储库。

      在这种情况下,我会选择第三种方式。

      将您在一种语言上工作的年数乘以每年 200 个工作日,再乘以每天 20 行代码,然后使用它。

      如果您每年声明一种以上的语言,请在它们之间分配。

      如果您在分析、设计或管理方面的工作更多,请将数字降低四分之三。

      如果您一直在高仪式环境(国防、医学)中工作,请将该数字降低一个数量级。

      如果您一直在一个仪式特别低的环境中工作,请将其提高一个数量级。

      然后把愚蠢抛在脑后,尽快开始你的生活

      【讨论】:

      • 并且不要忘记将数字除以您在 StackOverflow 注册后的一段时间内的声誉,以考虑分心因素。 :-)
      【解决方案6】:

      根据他们对答案的处理方式,我认为这不是一个坏问题。例如,如果候选人将 JavaScript 放在简历中,我想知道他们实际编写了多少 JavaScript。例如,我可能会询问他们编写的最大 JavaScript 项目中的行数。但我只是在寻找一种规模感,而不是一个实际的数字。是 10、100、1000 还是 10,000 行?

      当我问起时,我会非常清楚地表明我只是在寻找一个粗略的数字来衡量项目的规模。我希望提问者的雇主也是如此。

      【讨论】:

      • 在这种情况下,我也认为这是一个有效的问题。
      【解决方案7】:

      这是一个有趣的指标,考虑到你可以写很多行糟糕的代码,而不是只写几行聪明的代码。

      我只能假设他们正在考虑更多的行比更少的更好。完全不计划并开始编写代码会更好吗?这将是编写更多代码行的好方法,因为至少如果我这样做,我通常最终会至少编写两次。

      【讨论】:

      • 我会投票赞成它提出了一些非常好的观点 - 但它并没有回答他的问题:p
      • 遗憾的是,它没有。我想过用指标写另一个答案。因为我认为每天的代码量是有估计的。
      【解决方案8】:

      聪明的堆栈溢出者通常会避开提出此类问题的组织。除非正确答案是“嗯,wtf??”

      【讨论】:

        【解决方案9】:

        如果您要真正诚实,那么您会说您不知道,因为您从未将其视为有效指标。如果面试官是一个理性/理性的人,那么这就是他们正在寻找的答案。

        说你不知道的唯一其他选择是猜测,这并不能证明你解决问题的能力。

        【讨论】:

          【解决方案10】:

          为什么要在没有充分理由的情况下计算这个指标?一些随机的公司要求真的指标并不是一个好的理由。

          如果公司的问题真的很严肃,并且你认为面试可能会导致一些有趣的事情,那么我会随机选择一个数字来看看会导致什么:-)

          【讨论】:

            【解决方案11】:

            哈,当我接手一个基于 C 的测试框架时,我想起了,它一开始是 20K+ 我通过分解为子例程而最终崩溃为 1K LOC 的行 最初由原作者编写的 20K 行 diarrea 代码。很遗憾, 当我写的 KLOC 写的时候,我因为代码中的任何错误而被打得更厉害 否定的......我会考虑在一个指标驱动的组织中缩小代码库......

            【讨论】:

              【解决方案12】:

              即使我同意大多数人的说法,这不是一个很好的指标,但如果它是一个严肃的公司,正如你所说,他们可能有理由问这个问题。这就是我可能会做的:

              选取一个现有项目,获取行数,然后除以编写代码所花费的时间。这将为您提供一种每小时行数度量。然后,尝试估计您使用该特定语言的时间,并将其与您已经计算的指标相乘。老实说,我认为这不是一个好方法.. 但老实说,这也不是一个好问题.. 我还会告诉公司我过去提出这个数字的策略.. 也许,也许,这就是他们想..知道您对这个问题的看法以及您将如何回答? :p

              或者,他们只是想知道你是否有一些经验。所以,猜一个令人印象深刻的数字并写下来:D

              【讨论】:

                【解决方案13】:

                “这是一家在其领域内非常受人尊敬的公司,我相信他们有充分的理由提出这个问题”

                我很确定他们不会,因为“受到尊重”并不意味着“他们做的每件事都正确”,因为这肯定是不对的,或者如果是,那么在我看来至少是愚蠢的。

                什么算作“代码行”?我估计我已经编写了大约 250.000 行 C# 代码,可能更多。问题? 95% 是一次性代码,并非全部用于学习。我仍然发现自己第十次编写了一个小型的 3 行程序,仅仅是因为再次编写这三行(并更改参数)比去搜索现有的更容易。

                此外,代码行意味着什么都没有。所以我有两个人,一个比另一个多写了 20% 的行,但是这 20% 多是不必要的复杂行,“循环展开”和其他可以重构的无用内容。

                很抱歉,无论是否是受人尊敬的公司:询问代码行数肯定表明他们对衡量程序员的效率一无所知,这意味着他们必须依赖石器时代的技术,例如测量 LoC与石器时代的日历一样准确。这意味着,如果您喜欢偶尔放松一下并夸大您的 Numbers,这可能是一个工作的好地方。

                好吧,这更像是一个咆哮而不是一个答案,但我真的认为这个数字绝对没有充分的理由。

                【讨论】:

                • 安然不也是一家“非常受人尊敬的公司”吗? :)
                • 再次希望我能投票给 cmets。
                【解决方案14】:

                而且还没有人引用the Bill Atkinson -2000 lines story...

                在过去一年的工作中,我的周五下午(嗯,大约每月一个周五)进行自我开发练习,包括测试、原型和基础设施,我可能已经写了大约 5 kloc。然而,一个项目将现有的 25kloc C/C++ 应用程序重新实现为 1100 行 Erlang,另一个项目将现有 C 库的 15kloc 转换为 C++ 的 1kloc,因此网络严重负面。我有这些数字的唯一原因是我想看看有多么消极。

                【讨论】:

                  【解决方案15】:

                  我知道这是一篇旧帖子,但无论如何这可能对某人有用...

                  我最近从一家公司离职,我作为一名 Java 开发人员工作了大约 9.5 年。我们所有的代码都在 CVS 中,然后是 SVN,Atlassian Fisheye 提供了一个视图。

                  当我离开时,Fisheye 报告我的个人总 LOC 为 +- 250,000。这是它的LOC metric 的Fisheye 描述,包括关于如何计算每个SVN 用户的个人LOC 的讨论。注意SVN中的分支和合并问题,LOC通常应该只基于TRUNK。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2011-03-24
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-10-29
                    • 2010-09-22
                    • 2011-08-04
                    • 2012-10-30
                    • 1970-01-01
                    相关资源
                    最近更新 更多