我被要求在面试中编写代码/设计的东西.有时甚至提供代码示例.非常合理也非常明智(当这不会发生时总是感到惊讶)
我有一年左右的工作回到那里,代码非常糟糕,我不会接受这份工作,如果我看到了我必须提前处理的混乱.我不能告诉你我有多少可怕的数据库.
我不能要求他们提供代码示例并查看他们的数据库设计吗?假设我很乐意签署保密协议,我觉得在没有检查我正在使用的代码库或数据库的情况下找工作会很疯狂.
有人做过吗?
这将是我稍后在面试过程中会问的事情,如果事情进展顺利,我觉得即将提出要约.
这也是在小型商店或小型项目中工作的背景,因为我倾向于避免使用诸如"让开发人员离开地方"这样的短语的地方
你绝对可以问.答案可能是"不",但没有人应该认为这是一个糟糕或不恰当的问题.
如果他们不会向您显示代码,那么在您决定是否接受要约时,一定要考虑到这一点.我认为至少有以下一点是正确的:
代码是如此可怕,他们知道你会逃避尖叫.
该公司有一个超级秘密的信任 - 没有人的文化(我讨厌).
该公司认为他们拥有如此惊人的代码,只需看一眼它就会让你成为超级巨星的竞争对手.(换句话说,他们是自欺欺人的蠢货.)
他们有明显的安全漏洞,希望保密.
面试你的人不知道如何自己获取代码.(在这种情况下,你不是在与合适的人交谈.)
我更感兴趣的是看到公司的系统 - 即测试框架,发布过程,autobuilds ......这些存在或不存在会告诉我超过几百行代码.
我确实问过:"我能看到一些代码并与在这里工作的程序员交谈吗?"
雇主回答:"当然!来吧,您可以直接与我们信息系统的首席程序员交谈!"
真是太棒了!
他们给我看了概念文件
我可以和首席程序员交谈
他们向我展示了一个非常新项目的一小部分:"这只是一个原型,direct3d是如此粗略,这就是为什么这个代码如此混乱"
结果表明:
首席程序员离开我到达的那一天
他领先的软件是个烂摊子
不知何故,我最终花了50%的时间来对抗这场混乱
我们采访过的候选人都没有问过这个问题; 然而,他们中的许多人都是公司的合作社/实习生,因此他们熟悉我们的代码......
话虽如此,我们极不可能向任何候选人展示我们的代码,无论NDA如何.我很乐意回答有关我们使用什么技术,我们用于修订的系统,实践等等的问题.但实际的代码呢?没有.
同样在一个足够大的系统中(就像我们的那样),有人可以向你展示"最好的"代码......你会在哪里开始:)至于数据库设计...我曾经工作过的两家公司都有拥有庞大的数据库(大学,公司公司)...所以这也无济于事.
我在采访Xerox PARC(一家创业公司)和雅虎时都问过这个问题.
在PARC他们坐在一个工作站上,如果雇用了我接管的代码,超短暂地翻过代码库的结构,让我独自呆了大约20分钟.这足以让我知道我是否能够继续使用它,尽管我已经喜欢了更多的时间,比如一小时.后来我询问了一个看起来很可疑的设计决定,我们聊了一下设计和风格.这不仅告诉了我更多关于这份工作的信息,还告诉了他们更多关于我的信息:我是自上而下还是自下而上探索他们的代码,我接受了什么或者询问了什么,等等.
在创业时,他们在另一天设立了一个单独的会议,引入了代码的作者(谁不是雇员); 我们坐在一台笔记本电脑上,一起过去.对他们来说这是一个不寻常的要求,我想我必须签署新的NDA.这再一次是值得的:我之前的采访并没有真正理解这种花哨的人工智能语言是什么,或者他们希望我用它做什么,坐下来用一些具体的代码吹掉了很多迷雾.
在雅虎,我没有看到任何东西; 我不记得他们的反应是什么.如果我看到我最终处理的代码,我可能会有第二个想法(尽管最终可以解决).(我确实看到的上述两个代码库看起来都更好; PARC的代码库后来开源了.)
在所有这些情况下,我与他们共享了一些我自己的代码.
如果你打算这样做,那么我认为你需要给他们一点警告,这样他们就可以准备好NDA,并获得一个适当的环境设置,你可以在其中看到它.还要准备好花一点时间来理解为什么代码的形状.
如果你在第一次面试时出现并说,对,我能看到代码,除了极少数人之外,其他人都会拒绝.并不一定是因为他们是邪恶的而且不想告诉你,但因为它并不像说"是"那么简单.
根据我作为大型软件公司的招聘人员的经验,我们需要花费大量时间来为任何候选人披露足够的代码细节和内部开发的框架 - 无论多么明亮 - 能够对其做出有意义的判断利弊.如果我们认真雇用他们,我们只会考虑这样做.
如果我被问到这个问题我会说是的,请再来一次,我们会安排一些事情.我会让一个值得信赖的开发人员在场外让他们带一台笔记本电脑参加下一次面试并展示一些代码.
现实几乎是任何一个合理规模的软件项目,并且已经存在多个版本将会有一些可怕的可怕垃圾.