14

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

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

4

15 回答 15

20

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

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

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

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

可以为复杂的问题找到简单的解决方案,并且通常比只在问题上抛出足够多的代码行它会自行解决更好。由于产生的错误数量与语句的数量成线性关系并高于该数量,我会说相反的情况可能会更好,再加上他们已经解决的问题的数量。

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

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


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

于 2008-11-09T23:29:32.513 回答
18

听起来这是 DE Shaw 的问卷?

于 2009-12-01T08:02:57.053 回答
11

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

于 2008-11-09T23:49:00.760 回答
7

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

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

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

于 2008-11-09T23:44:58.770 回答
6

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

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

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

  3. 做出一个合理的答案,并在尽可能少的愚蠢情绪中继续前进。

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

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

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

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

如果您每年要求使用一种以上的语言,请在它们之间分配。

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

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

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

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

于 2008-11-09T23:43:32.877 回答
4

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

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

于 2008-11-09T23:56:18.450 回答
2

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

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

于 2008-11-09T23:25:08.840 回答
2

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

于 2008-11-09T23:43:03.313 回答
2

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

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

于 2009-07-25T08:22:12.347 回答
1

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

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

于 2008-11-09T23:31:08.110 回答
1

哈,这让我想起了当我接手一个基于 C 的测试框架时,它一开始是 20K+ 行,但我最终通过分解为一个子例程而不是最初由原作者编写的 20K 行 diarrea 代码而崩溃成 1K LOC。不幸的是,因为我写的 KLOC 写的实际上是负面的,所以我对代码中的任何错误都大打出手……我会认真考虑在指标驱动的组织中缩小代码库……

于 2008-11-10T03:40:08.843 回答
0

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

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

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

于 2008-11-10T00:00:05.213 回答
0

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

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

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

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

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

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

于 2008-11-10T00:06:35.357 回答
0

还没有人引用比尔·阿特金森 -2000 线的故事......

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

于 2009-07-25T08:50:40.930 回答
0

我知道这是一个旧帖子,但这可能对某人有用......

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

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

于 2011-09-01T07:51:01.143 回答