生命周期中的代码行数

时间:2008-11-09 23:20:35

标签: metrics

其潜在员工要求其中一家公司以Java或C#等特定编程语言提供终身编写的代码行数。因为,我们大多数人在多种语言的不同项目中都有多年的经验,我们很难记录这一点,这是计算这些指标的最佳方法。我相信stackoverlow.com的聪明人会有一些想法。

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

15 个答案:

答案 0 :(得分:18)

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

  • 你为什么想知道?
  • 你对这样的数字有什么意义?
  • 如果我刚刚离开现在就可以了吗?

我会严肃质疑任何人向当前或未来的员工提出这样一个问题的动机。很可能是同一类型的公司开始进行代码审查,重点关注您键入的代码行数。

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

对于复杂的问题,可以找到简单的解决方案,并且通常比更好地为问题抛出足够的代码行并且它将自行排序。由于产生的错误数量随着语句的数量而线性增加,因此我会说反向可能更好,再加上他们解决的问题数量。

作为测试反应,我会问:

  

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


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

答案 1 :(得分:10)

这看起来像是一个问题,比如“波音747可以装多少乒乓球?”在这种情况下,提问者希望看到你展示你解决问题的能力,而不是知道你实际编写了多少行代码。我会小心不要回答任何批评这个问题,而是诚实地试图解决问题; )

答案 2 :(得分:8)

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

答案 3 :(得分:7)

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

该网站估计107,187行代码相当于27人年(每年4000行代码)。

这种指标的愚蠢的一个例子是这个数字是来自我在2年内从事外部工作的项目。

答案 4 :(得分:5)

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

  1. 拒绝回答,质疑提问者的原因,并解释为何这些理由是愚蠢的。

  2. 花时间收集所有可能的信息,并尽最大努力计算答案。

  3. 制定一个看似合理的答案,并尽可能少地进行愚蠢的情感参与。

  4. 我看到的第一个答案似乎是第一线。考虑一下,尽管他们的要求愚蠢,你是否还想要这份工作。如果答案仍然是,请避免使用数字1。

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

    在这种情况下,我会采用第三种方式。

    将您使用某种语言的年数乘以每年200个工作日,每天使用20行代码,并使用它。

    如果您每年声称使用多种语言,请将它们分配出去。

    如果您在分析,设计或管理方面做得更多,请将数字减少四分之三。

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

    如果您一直致力于仪式特别低的环境,请将其增加一个数量级。

    然后把愚蠢的东西放在身后,尽快开始你的生活

答案 5 :(得分:3)

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

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

答案 6 :(得分:2)

这是一个有趣的指标,要求考虑你可以编写许多不良代码,而不是只写几个聪明的代码。

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

答案 7 :(得分:2)

堆栈溢出程序的智能通常会避免组织提出这类问题。除非正确的答案是“嗯,wtf ??”

答案 8 :(得分:1)

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

如果公司的问题确实很严重,并且您认为面试可能会引发一些有趣的事情,那么我会选择一个随机数字以查看其中的哪些方面: - )

答案 9 :(得分:1)

当我接手一个基于C的测试框架时,提醒我,最初的开始是20K + 通过分解为子程序,我最终崩溃到1K LOC的行 20K行的diarrea代码最初是由原作者编写的。不幸, 我的代码中出现了任何错误,因为我的KLOC书面实际上已经写了,我更加打屁股 否定...我会认为在指标驱动的组织中缩小代码库已经很长很难了......

答案 10 :(得分:1)

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

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

答案 11 :(得分:0)

即使我同意大多数人说这不是一个非常好的指标,如果它是一个严重的指标,正如你所说,他们可能有理由问这个..这就是我可能会做的:< / p>

选择一个现有项目,获取行数并将其划分为编码时间。这将为您提供每小时的一种行数指标。然后,尝试估算您使用该特定语言的时间,并将其与已计算的指标相乘。老实说,我不认为这是一个很好的方式..但老实说,这不是一个很好的问题..我也会告诉公司我曾用这个号码提出的策略..也许,可能,这就是什么他们想......知道你对这个问题的看法以及你将如何回答这个问题? :P

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

答案 12 :(得分:0)

  

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

而且我非常肯定他们没有,因为“受到尊重”并不意味着“他们做的一切都是正确的”,因为这当然不对,或者如果是,那么在我看来,这至少是愚蠢的。 / p>

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

此外,代码行意味着没有。所以我有两个人,其中一个写了20%的行,而另外一个,但是那些20%更多的是不必要的复杂行,“循环展开”和其他无用的东西,可以被重构。

很抱歉,尊重公司与否:要求代码行是一个明确的迹象,表明他们不知道如何衡量程序员的效率,这意味着他们必须依靠石器时代技术,如测量LoC,与石器时代的日历一样准确。这意味着如果你喜欢每隔一段时间懈怠和夸大你的号码,这可能是一个很好的工作场所。

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

答案 13 :(得分:0)

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

在我周五下午(好,大约每月一个星期五)在过去一年的工作中进行自我发展,包括测试,原型和基础设施,我可能写了大约5千字节。然而,一个项目采用了现有的25kloc C / C ++应用程序,并将其重新实现为1100行Erlang,另一个项目占用了15kloc的现有C库并将其转换为1kloc的C ++,因此网络严重为负。我拥有这些数字的唯一原因是我希望看到有多么消极。

答案 14 :(得分:0)

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

我最近从一家公司搬到了大约9。5年的Java开发人员。我们所有的代码都在CVS中,然后是SVN,Atlassian Fisheye提供了一个视图。

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