其潜在员工要求其中一家公司以Java或C#等特定编程语言提供终身编写的代码行数。因为,我们大多数人在多种语言的不同项目中都有多年的经验,我们很难记录这一点,这是计算这些指标的最佳方法。我相信stackoverlow.com的聪明人会有一些想法。
这是一个在其领域非常受尊敬的公司,我相信他们有一个很好的理由提出这个问题。但令人难以回答的是需要考虑的代码类型。我是否应该只包括我实施的困难算法或我为其编写的任何代码,例如一个POJO,它有300个属性,其getter / setter是使用IDE生成的!
答案 0 :(得分:18)
对此类问题的最佳回答是以下之一:
我会严肃质疑任何人向当前或未来的员工提出这样一个问题的动机。很可能是同一类型的公司开始进行代码审查,重点关注您键入的代码行数。
现在,如果他们认为代码行的数量是程序员经验的衡量标准,那么我肯定会在那时离开面试。
对于复杂的问题,可以找到简单的解决方案,并且通常比更好地为问题抛出足够的代码行并且它将自行排序。由于产生的错误数量随着语句的数量而线性增加,因此我会说反向可能更好,再加上他们解决的问题数量。
作为测试反应,我会问:
如果在一个程序中我能够用1000行代码解决问题A,B和C,而另一个程序员在500行代码中解决了同样的问题,我们哪个是最好的(答案是:没有足够的信息来判断)
现在,如果你仍然想要估计行数,我会简单地开始考虑这个人写的项目,并将他们的大小与已知数量进行比较。例如,我有一个类库,目前大约有130K行代码,我用Delphi和其他语言写了类似的东西,加上一些相当大的应用项目,所以我估计我有1000万行代码至少在我自己。这个数字有意义吗?没有丝毫。
答案 1 :(得分:10)
这看起来像是一个问题,比如“波音747可以装多少乒乓球?”在这种情况下,提问者希望看到你展示你解决问题的能力,而不是知道你实际编写了多少行代码。我会小心不要回答任何批评这个问题,而是诚实地试图解决问题; )
答案 2 :(得分:8)
听起来这是D E Shaw的调查问卷?
答案 3 :(得分:7)
答案 4 :(得分:5)
基本上有三种方法可以处理对无意义指标的荒谬请求。
拒绝回答,质疑提问者的原因,并解释为何这些理由是愚蠢的。
花时间收集所有可能的信息,并尽最大努力计算答案。
制定一个看似合理的答案,并尽可能少地进行愚蠢的情感参与。
我看到的第一个答案似乎是第一线。考虑一下,尽管他们的要求愚蠢,你是否还想要这份工作。如果答案仍然是,请避免使用数字1。
第二种方法是从旧项目中查看旧的代码存储库。
在这种情况下,我会采用第三种方式。
将您使用某种语言的年数乘以每年200个工作日,每天使用20行代码,并使用它。
如果您每年声称使用多种语言,请将它们分配出去。
如果您在分析,设计或管理方面做得更多,请将数字减少四分之三。
如果您一直在高级仪式环境(防御,医学)工作,请将数字降低一个数量级。
如果您一直致力于仪式特别低的环境,请将其增加一个数量级。
然后把愚蠢的东西放在身后,尽快开始你的生活
答案 5 :(得分:3)
根据他们对答案的处理方式,我认为这不是一个糟糕的问题。例如,如果候选人将JavaScript放在他们的简历上,我想知道他们实际编写了多少JavaScript。例如,我可能会问他们编写的最大的JavaScript项目中的行数。但我只是在寻找规模感,而不是实际数字。是10,100,1000还是10,000行?
当我问起时,我会清楚地表明我只是在寻找一个粗略的数字来衡量项目的规模。我希望提问者的雇主也是这样的。
答案 6 :(得分:2)
这是一个有趣的指标,要求考虑你可以编写许多不良代码,而不是只写几个聪明的代码。
我只能假设他们正在考虑更多的线路比更少的线路更好。最好不要计划,只是开始编写代码,这将是编写更多代码行的好方法,因为至少如果我这样做,我通常最终会写出至少两次。
答案 7 :(得分:2)
堆栈溢出程序的智能通常会避免组织提出这类问题。除非正确的答案是“嗯,wtf ??”
答案 8 :(得分:1)
为什么在没有充分理由的情况下费心计算这个指标呢?一些随机的公司要求指标真的并不是一个好理由。
如果公司的问题确实很严重,并且您认为面试可能会引发一些有趣的事情,那么我会选择一个随机数字以查看其中的哪些方面: - )
答案 9 :(得分:1)
答案 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。