要求在面试中查看雇主的代码/数据库

时间:2020-03-06 15:01:41  来源:igfitidea点击:

我被要求在面试中编写代码/设计东西。有时甚至提供代码示例。非常合理,非常明智(永远不会感到惊讶)

大约一年前,我有一份工作,那里的代码简直糟透了,如果我看到必须提前处理的烂摊子,我就不会去做这份工作。而且我无法告诉我们必须使用多少个可怕的数据库。

让我问他们提供代码示例并查看他们的数据库设计对我来说是不可能的吗?假设我很乐意签署一份NDA,我中的一部分人会觉得在不检查要使用的代码库或者数据库的情况下接受一份工作会很疯狂。

有人这样做吗?

更新

我会在面试过程中稍后问这个问题,如果一切进展顺利,并且我认为要约即将到来。

这也是在小型商店或者小型项目中工作的环境,因为我更喜欢避免使用诸如"让开发人员离开地板"之类的短语的场所。

解决方案

我们面试过的候选人都没有问过这个问题;但是,他们中的许多人都是公司的合作社/实习生,所以他们熟悉我们的代码...

话虽如此,我们几乎不可能向任何候选人展示我们的代码,而不管NDA。我很乐意回答有关我们使用什么技术,我们使用什么系统进行修订,如何实践等问题。但是实际的代码是什么?不。

同样在一个足够大的系统中(就像我们一样),有人可以向我们展示那里的"最佳"代码……而我们将是我们开始的地方:)至于数据库设计……我曾在这两家公司工作过拥有巨大的数据库(大学,公司)...因此也不起作用。

提出这个要求很容易,这是一个很好的主意,我将在我的问题清单中添加此问题以询问雇主。

我认为这是一个很棒的点子;但是,作为雇主,我会犹豫-即使有NDA-也不提供面试候选人真实,有效工作代码的样本,除非我确定要雇用该人。

你肯定可以问。答案可能是"否",但是没有人应该认为这是一个不好或者不合适的问题。

如果他们不向我们显示代码,则在确定是否要接受报价时,我们一定要考虑到这一点。我认为这是至少下列其中一项是正确的:

  • 该代码是如此可怕,以至于他们知道我们会大喊大叫。
  • 该公司具有超秘密的无人信任文化(我讨厌)。
  • 该公司认为他们拥有如此惊人的代码,以至于只要看一眼就能将我们变成超级巨星的竞争对手。 (换句话说,它们是自欺欺人的白痴。)
  • 他们有明显的安全漏洞,希望对其保密。
  • 面试人不知道如何自己获取代码。 (在这种情况下,我们没有在与正确的人交谈。)

我确实问过:"我可以看一些代码并与在这里工作的程序员交谈吗?"

雇主回答:"当然!我们可以直接与我们信息系统的首席程序员交谈!"

真是荣幸!

  • 他们给我看了概念文件
  • 我可以和首席程序员谈谈
  • 他们向我展示了一个非常新的项目的一小部分:"这只是一个原型,direct3d太粗略了,这就是为什么这段代码如此混乱的原因"

结果表明:

  • 首席程序员离开了我到达的那天
  • 他带头的软件大乱七八糟
  • 不知何故,我最终花费了我50%的时间,与混乱作斗争

一个有趣的想法,但我不知道有多少公司会这么做。我知道我们现在不能在工作的地方做。

我认为我们将要遇到的最大问题是,我发现许多人对不喜欢自己的代码的人进行冒犯。就像批评某人的治疗师一样,成为局外人并做到这一点不是一个好主意。看到代码然后不参加工作可能会给我们带来这样的声誉,即我们傲慢或者不够擅长处理代码,这就是为什么我们不参加工作的原因。这可能使我们免于获得我们不想要的工作,但是却可能给我们带来负面声誉。我生活在一个大城市中,但是IT人士仍然彼此了解并且广为流传。我们领域的人自负,与承认自己编写的代码不符合标准相比,浪费somoene其他人的声誉要容易得多。

与其他响应类似,我从未有候选人要求查看我们的代码。即使他们这样做了,我也要非常小心,而且很可能不会。正如Swati所提到的,几乎所有非平凡的系统都会有看起来不错的部分,因此即使看到代码也无济于事。

比看实际的代码更好的是Joel测试。基本上,我们可以问雇主12个是或者否的问题。是的答案越多,预期的工作环境就会越好。这显然不是一成不变的"规则",但似乎表明那些认真对待代码(和编码人员)的公司。

即使他们向我们展示了一些代码,这是否足以使我们对花费时间的代码质量做出一个粗略的结论呢?例如,在我以前的住所,他们的产品之一是大型电子银行中间件应用程序。该应用程序的核心是C ++,并且以出色的方式设计和编写。但是,扩展(到目前为止涵盖了应用程序的很大一部分及其各种不同的版本),也都是C ++的,大多数由经验不足,知识不足的开发人员编写的代码是一堆糟糕的代码(我不得不修理和工作,或者有时从头开始写东西),以某种方式工作。如果我让他们在面试中向我展示代码片段,并且他们向我展示了一些核心内容(扩展代码实际上主要包含特定于客户的业务逻辑,那么没有商业领域知识等),我会认为代码的整体质量很好(事实并非完全如此)。

我不认为没有显示一些类或者谈论他们正在使用的体系结构的原因。从我的角度来看,这就像要求他们向我们展示我们要去哪里工作(房间,桌子,椅子,队友...)。
无论如何,要求它会向他们表明我们对最佳实践感兴趣,并且我们也不希望以任何价格寻找工作,也不知道这会如何造成伤害。

如果要执行此操作,那么我认为我们需要给他们一些警告,以便他们可以准备一份NDA并设置适当的环境以使其可见。也要准备花一些时间来理解代码的形状。

如果我们在第一次面试时露面,说,对,我能看一下代码吗,除了极少数人,其他人都会拒绝。并不一定是因为它们是邪恶的并且不想向我们展示,而是因为它并不像说"是"那样简单。

根据我作为一家大型软件公司的招聘人员的经验,我们需要花费大量时间来公开足够的代码细节和内部开发的框架,以供任何候选人使用,无论他们多么聪明,都能够对其优点和缺点做出有意义的判断缺点如果我们认真考虑雇用他们,我们只会考虑这样做。

如果我被问到这个问题,我会说"是",请再来一次,我们会安排一些事情。我会请一位值得信赖的开发人员来,让他们带一台笔记本电脑进行下一次面试,并展示一些代码。

实际上,几乎任何规模合理,已经存在多个发行版的软件项目都将包含一些可怕的可怕垃圾。

我对查看公司的系统(例如测试框架,发布过程,自动构建...)更感兴趣。这些内容的存在或者不存在将告诉我很多,而不是数百行代码。

转到开源项目。在这里,我们无需征求许可即可查看代码。

我认为,比要求代码片段更重要的是,要求他们使用哪种源代码控制产品(远离回答" Visual SourceSafe"的公司)以及使用哪种方法:"敏捷"或者" Scrum"发送积极的信号,CMMI通常意味着公司喜欢官僚主义的过程,如果他们给我们一个"呵呵"?然后你会被警告;)

我在对初创公司Xerox PARC和Yahoo的采访中曾问过这个问题。

在PARC,他们让我坐在工作站上,那里有我被录用时要接管的代码,简要介绍了代码库的结构,让我独自呆了20分钟左右。这足以让我知道我是否可以继续使用它,尽管我希望有更多的时间,例如一个小时。之后,我询问了一个似乎可疑的设计决策,然后我们讨论了总体设计和风格。这不仅告诉我更多有关工作的信息,还告诉了他们更多关于我的信息:我是自上而下还是自下而上地探索他们的代码,我从中学到或者询问了什么,等等。

在启动时,他们在另一天举行了一次单独的会议,邀请了代码的作者(不是雇员);我们坐在笔记本电脑旁,一起看了看书。这对他们来说是一个不寻常的要求,我想我必须签署新的保密协议。这再一次值得:我以前的采访并没有真正弄清这种花哨的AI语言是什么意思,或者他们想让我用它做些什么,而坐下来的一些具体代码使人们大为困惑。

在雅虎,我什么都没看到。我不记得他们的回应是什么。如果我看过我最终要处理的代码,我可能会有第二个想法(尽管最终效果很好)。 (我确实看到的上述两种代码库通常看起来都更好; PARC的代码库后来开源了。)

在所有这些情况下,我都与他们共享了一些自己的代码。

问题是他们将向我们展示一些代码,但是他们的每个程序员都将以不同的方式编写代码。不幸的是,我们必须在编写良好的代码库中进行工作。

要求查看他们的编码标准及其执行方式的可能性更大。