原始问题
我已经为公司做过一些采访,主要是开发人员职位的计算机科学家,还有一些测试人员和项目经理。现在,我必须填补研发部门的研究小组的空缺(旁注:“研究”是指我们试图与大学,其他公司,研究中心一起使用研究项目中的软件来解决专业领域/市场领域的问题。和最终用户组织。这不是计算机科学研究;我们不会解决P = NP问题)。
现在,我们邀请了一个拥有化学硕士学位的人(他的简历中也有很多物理学方面的东西),他从未上过任何计算机科学课程。在当地一所大学的职业生涯中,我已经与他交谈了大约半小时,毫无疑问,这家伙很聪明。他的成绩也很出色,并且以优异的成绩毕业。为了获得理学学士学位,他需要在Mathematica中自学编程,并且可以相信地告诉我他非常喜欢编程。此外,他使用自己的软件(在Mathematica中实现)解决了理学硕士问题,可能解决了一些我可能不理解的物理化学问题。它包括一个GUI和8,000 LoC的显着大小。他似乎对我们在研究小组中所做的事情非常着迷,并且说实话,像我们这样的中小型企业很难找到好人。我对雇用他也很感兴趣,因为他可以协助我撰写项目建议书,报告,做演示等。他可能也适合我们的团队。
剩下的唯一问题是:我将如何检查他是否将获得在我们的项目中进行软件实现所需的编程技能,因为这将是工作的重要部分?
我当然会问他是什么,这让他着迷于编程。我还将询问他如何着手编写其自然科学软件以及其结构。我将询问他如何设法获得所需的软件开发技能和信息。但是我还有什么要问的吗?也许更具体些?我应该请他解释一下他的Mathematica解决方案吗?
需要明确的是:我不是在寻找特定语言或技术堆栈中的知识。我们是产品开发方面的.NET商店,但我想为我们的研究项目提供自由选择。因此,我对元能力能够学习实际需要的内容感兴趣。
我希望这个问题是可以回答的,而不是开放性的,因为我真的很想知道是否存在一种默认的方法来检查获得进一步的编程技能的能力。如果您不清楚某些地方,请给我一些评论,让我改善我的问题。
更新以反映在2011-12-01之前给出的答案
我接受什么答案,为什么
谢谢大家的回答,其中大多数都非常有帮助,所以我表示非常赞赏!尽管汤姆·斯奎尔斯(Tom Squires)的答案获得了最多的票,但我将接受古拉什亲王(Prince Goulash)给出的答案。当然,汤姆(Tom)客观上是正确的,但是Prince的回答对我来说更有用,我仔细检查了FAQ(常见问题),认为这是接受答案的标准。
面试中我要问他什么
我让他解释一些简单的任务,例如克里斯·伯特·布朗(Chris Burt-Brown)提到的《骆驼有两个驼峰》中 的示例
我将请他以图形方式解释一些更高级的控制流程。
我将使用一个数学示例来检查他对递归的理解。
我让他用自然语言解释他选择的算法。
我将让他解释他的Mathematica解决方案,特别是我将询问他的过程模型,工具的使用,总体上代码和软件的结构以及不同的抽象层。
为了检查他的动机,我将要求他对软件开发感兴趣。
我问他是否知道他需要了解有关企业软件开发的知识。特别是,我希望将讨论转变为团队合作,结对编程,TDD的方向,因为我希望他仅凭自己的MSc工作就不会对此有很多了解。
听起来这将是一个漫长的采访;)
面试后更新2011-12-09
再次感谢大家的良好回答。他通过面试通过了面试。我从未对申请人感到满意。他的Mathematica解决方案似乎结构良好。尽管他不知道这些被引用为高阶函数,但他能够解释在哪里使用了高阶函数。他回答了我基于数学的递归问题,以及《骆驼有两个驼峰》中的简单作业和控制流程问题。当他解释一些算法时,我学到了很多关于非线性拟合的知识;)另外,他老实说,他当然不能保证他将能够学习到到目前为止尚不了解的有关专业软件开发的知识。但他可以相信地说,他总是擅长学习新概念-即使是独自学习-并且对软件开发真的很感兴趣。他还要求提供该项目的技术堆栈,首先将他应用到家里进行研究。他也对结对编程和团队合作感到好奇。现在,我希望能订立雇用合同。