因此,请记住,这是一个面试问题,而不是实际的实际情况,我认为正确的方法(可能是面试官在寻找什么)是提出一个明确的问题,或者写上“它不能完成”,继续前进。这就是为什么。
采访者的要求:
写一个保证永远不会两次返回相同值的函数。假设该功能将被多台机器同时访问。
采访者需要什么:
该候选人是否有效评估需求并在需要时寻求其他投入?
永远不要假设。
当工程师(通过SOW或规范或其他一些需求文件)提交需求时,有些是不言而喻的,而另一些则完全不清楚。这是后者的完美示例。如先前的答案所示,如果不对(a)问题的性质或(b)关于系统的性质做出几个主要假设,就无法对这一要求做出回应,因为无法满足该要求照原样(不可能)。
大多数答案都通过一系列假设来尝试解决该问题。一个人特别建议尽快完成它,并让客户担心它是否有错。
这确实是一个糟糕的方法。作为客户,如果我提出了一个不清楚的要求,而工程师离开并为我建立了一个行不通的解决方案,那么我会为他们投入工作而花我的钱而又不打扰先问我而感到沮丧。这种轻率的决策表明缺乏团队合作精神,无法批判性思考和判断力差。它可能导致任何形式的负面后果,包括安全关键系统中的生命损失。
为什么问这个问题?
进行此练习的目的在于,要建立模棱两可的需求既昂贵又耗时。对于OP,您将获得一项不可能完成的任务。您的第一个动作应该是要求澄清-要求什么?需要什么程度的唯一性?如果值不唯一会怎样?这些问题的答案可能是几周时间和几分钟之间的差异。在现实世界中,复杂系统(包括许多软件系统)中最大的成本驱动因素之一就是不清楚的需求和难以理解的需求。如果项目足够大,这将导致昂贵且耗时的错误,重新设计,客户和团队的挫败感,以及令人尴尬的媒体报道。
承担时会发生什么?
考虑到我在航空航天行业的背景,并且由于航空航天故障的高度可见性,我想举这个领域的例子来说明重点。让我们检查一下一对失败的火星任务-火星气候轨道飞行器和火星极地着陆器。两次任务均由于软件问题而失败-因为工程师做出的无效假设部分是由于需求不明确且沟通不畅。
火星气候轨道器 -这种情况通常被引用为NASA尝试将英语转换为公制单位时发生的情况。但是,这是对真正发生的事情的过于简单和糟糕的表示。的确,存在转换问题,但这是由于在设计阶段沟通要求不高以及验证/验证方案不当所致。此外,当两名不同的工程师注意到该问题是因为从飞行轨迹数据中可以明显看出来时,他们没有将问题提出到适当的水平,因为他们认为这是传输错误。如果使任务行动小组知道了这个问题,那么有足够的时间来纠正它并保存任务。在这种情况下,存在一种不可能的逻辑条件,其根本无法识别,导致代价高昂的任务失败。
火星极地着陆器-这种情况鲜为人知,但由于其暂时靠近火星气候轨道器故障而更加尴尬。在此任务中,该软件控制了火箭的推进器辅助下降到火星表面。在距地面40米的位置,着陆器的腿部展开以准备着陆。腿上还有一个传感器,该传感器检测运动(在受到冲击时发出信号),以告知软件关闭发动机。NASA关于发生的事情的最佳猜测(由于存在多个可能的故障和不完整的数据)是腿部的振动由于腿部的同时部署和不适当地触发了地面40m以上的关闭机制,导致110美元坠毁和破坏。 M飞船。这种可能性是在开发中提出的,但从未得到解决。最终,软件团队对这段代码的运行方式做出了无效的假设(一种假设是,尽管测试显示相反的结果,但虚假信号的生命周期太短而无法被拾取),这些假设直到之后才被质疑。事实。
其他注意事项
面试和评估人是一件棘手的事情。面试官可能希望探索候选人的多个方面,但最重要的一个因素是个人的批判性思考能力。由于多种原因,尤其是批判性思维定义不清,我们很难评估批判性思维技能。
作为一名工程老师,我评价学生批判性思考能力的最喜欢的方法之一是提出一个模棱两可的问题。敏锐的学生会选择问题的前提,然后注意,并在给出前提的情况下回答或拒绝回答。通常,我会问类似以下的问题:
您可以从工作堆中拾取图纸。该图形包含各种不同的标注,但最重要的是指向水平面并说“完全平坦”。表面宽5英寸,长16英寸,部件由铝制成。您将如何加工零件以创建此功能?
(顺便说一句,您会对如此糟糕的规范在工作场所中出现的频率感到震惊。)
我希望学生会认识到不可能创造出完美的功能,并会在答案中说明这一点。如果他们说他们会回馈设计师并在制造零件之前要求澄清,我通常会奖励一个积分。如果学生继续告诉我他们将如何实现.001平面度或其他弥补的价值,我将给予零分。这有助于我向我的学生指出他们需要考虑更大的范围。
底线
如果要面试工程师(或类似专业),我正在寻找可以批判性思考并质疑摆在他面前的东西的人。我希望有人问“这有意义吗?” 。
要求完美的扁平零件是没有意义的,因为没有完美的零件。要求一个永远不返回重复值的函数是没有意义的,因为不可能做出这样的保证。在编程中,我们经常听到短语“垃圾进,垃圾出”。如果您对要求不满,则道德上的责任是停止并提出任何可以帮助您激发真正意图的问题。如果我正在面试候选人,并且给他们一个不清楚的要求,我将期待澄清问题。