最近我和一家公司进行了一次电话采访。在那次电话采访之后,我被告知要完成一个简短的编程任务(一个小程序,不应该超过三个小时)。我只被直接指示完成作业并交出代码。我完全可以自由地使用我想要的任何语言,而且没有人确切地告诉我如何提交代码。
我马上计划把它扔到Github上,为它编写一个测试套件,使用Travis-CI (公共Github存储库的免费持续集成)运行测试套件,并使用CMake为Travis-CI构建Linux。这样,我不仅可以证明我理解如何使用Git,CMake,Travis-CI,以及如何编写测试,而且我还可以简单地链接到Travis-CI页面,这样他们就可以看到测试的输出。我想这样会让面试官更方便一些。
因为我非常了解这些技术,所以它基本上不会增加分配的时间。
然而,我有点担心,为了一个相对简单的任务而做这一切看起来会很糟糕。虽然这不会为我增加更多的时间,但我不希望他们认为我花太多时间在应该简单的事情上。
发布于 2013-06-19 11:29:26
作为一名面试官,我很乐意看到这种方法所展示的软件开发过程的知识,而不仅仅是代码的编写。
特别是,即使是非常简单的问题,拥有一个测试套件也是一个很好的迹象(即使是FizzBuzz级别)。我看到候选人提交的解决方案甚至没有解决问题,一组简单的测试就会向他们展示这一点。而且,有了提交历史,我就可以了解候选人用来获得解决方案的思想过程。
另一方面,我知道有些人在过度工程的早期阶段就被一些公司拒绝了。然而,在大多数情况下,这是由于过度工程的解决方案,不一定使用的过程。
发布于 2013-06-19 11:37:51
作为一个应聘者,有一个能理解版本控制、CI、单元测试之类的东西的人,将是我通常看到的一个进步。
虽然,对我来说,最重要的是问题得到解决,并很好地解决,知道候选人知道如何提高他们的交付品的质量肯定会引起我的注意。
我通常看到的是那些不仅不理解问题,而且不知道如何解决问题的人--不管他们在这个过程中使用了多少额外的工具,他们都会被忽视。
发布于 2013-06-19 14:05:46
记住,这是有时间限制的。面试官知道这一点,所以这意味着(如果我是面试官的话)他不仅会看到你在指定的时间内解决问题,而且你做得太快了,你有时间做镀金,这是你解决问题的能力以及你对严谨和勤奋的欣赏的好迹象。
当您创建AbstractFactoryManagerAdaptors时,过度工程是个坏词,它会插入BuzzManager和FizzManager,只为了解决FizzBuzz问题。
你所做的是过度努力,这甚至不是一件事(尽管不够勤奋肯定是这样)。
尽管如此,如果你最终得到的结果是一些半黑的解决方案,因为你把你的时间花在了你声称“根本不增加时间”的额外工作上,这看起来就好像你对看起来小的任务有多大的理解很差。对于一个工程师来说,这可能是一个危险的属性,在初级学生中非常普遍。只有在完成了所需的解决方案后,才能适当地确定优先次序,并完成额外的工作。
https://softwareengineering.stackexchange.com/questions/202003
复制相似问题