我的“代码示例”应该是什么样?[关闭]


24

我刚刚接受了不错的电话面试(对于CakePHP相关职位,这并不是一个特别重要的问题)。面试官似乎对我的简历和个性印象深刻。但最后,他要求我通过电子邮件将我现有工作项目中的代码示例发送给他,“以检查您是否不是秘密地可怕的程序员,哈哈!”

不太担心我的代码不能站立自己的两只脚,但是我非常是一名中级程序员,而不是专家。有什么明显的缺陷,我应该确保我的代码示例他们统治我出去当场陷入,万一?其次,这可能是问题最难回答的部分,代码示例中的哪些功能会如此令人印象深刻,以至于它们立即使您更倾向于程序员?

欢迎所有想法或建议!


2
对要发送的代码示例有任何要求吗?似乎毫无意义,任何人都可以从Web复制/粘贴漂亮的代码。除非他们试图淘汰的人谁甚至不能正确的...
FrustratedWithFormsDesigner

5
只是为了踢一下,您可以发送一个以他/她的名字形状的Perl脚本...;)
FrustratedWithFormsDesigner

2
@thesunneversets:所以我想绝对华丽的源代码从您的个人项目都出来了...;)说真的,这可以很容易伪造。您目前的雇主是否可以提供源代码的代表性示例?如果某些代码是由同事编写的(可能随着时间的推移在几个人之间来回传输文件),可以吗?
FrustratedWithFormsDesigner

2
道德影响有点令人担忧……但只有一点点。我不认为我会陷入工业间谍陷阱。对于同事来说,可惜只有两个人掌握了此代码库,而另一个人的代码却一团糟,所以我几乎是一个人!:)
thesunneversets 2011年

4
@thesunneversets,提供您的雇主代码不仅不道德,而且在许多地方都是非法的。不要那样做。
HLGEM 2011年

Answers:


17

我想看干净的代码

干净的代码:正确且有组织地格式化的软件代码,以便另一个编码器可以轻松读取或修改它。

这意味着:

  • 功能 -一些简单的功能是不平凡的(一堆吸气剂/装料器不会显示您知道什么)
  • 一致,干净的样式 - 流行的或至少是常见的机壳,凹痕,间距和括号样式
  • 良好命名 -质量名称- i除非它是唯一的增量值,否则不要使用。不要使用无意义的变量名。
  • 干净代码的其他属性-有关错误检查,条件,循环,便捷方法或实用程序方法的良好实践,以及良好的关注点分离(方法之间)。这是100%干燥的好时机- 不可重复!

您想给他们发送一些东西,使其既有趣又足够干净,以至于优秀的开发人员几乎可以立即了解它在做什么。

上面的某些评论似乎与这种伪造的难易程度有关。*如果您想防止这种情况的发生,则可以在电子邮件中简短地描述代码的用途和历史。


*至少,如果面试官事先询问过过去的项目,然后要求您提供该项目的样本,并询问您需要什么来编写它或它是如何演变的,我认为该过程非常可靠。我认为大多数撒谎的候选人无论如何都会在其他方面表现出问题。


如果您要求该人解释该代码,而他们却不能不编写该代码,或者他们在维护时调整了别人的代码,而不必首先去理解它。这些年来,我采访了多少无法解释自己样本的人,这让我感到惊讶。
HLGEM 2011年

添加一些注释,以防您的标记讨厌干净的代码。
伊万2015年

9

在寻找工作时,我用几种不同的语言解决了一堆ACM编程竞赛问题,并将其用于代码示例。我认为他们提出了很好的代码示例,因为:

  • 他们解决了难题
  • 该问题不需要大量的背景信息,而且很容易获得问题
  • 编写的代码没有任何IP风险。
  • 每个问题都可以合理地存在于单个文件中,并且通常不会很长,因此任何人都应该易于编译和测试您的解决方案,并可以使用问题中的测试数据。
  • 说明您可以将一个复杂的问题分解为较小的部分。
  • 如果您被问到解决方案的各个方面是如何工作的,它为您提供了一个很好的机会来证明您知道自己在说什么,尤其是如果它已经使用了很多年,但是您可以迅速了解发生了什么。

然后,您创建的代码应该清晰,一致,易于阅读且易于理解。

最后:

  • 仅仅为了娱乐而解决它们是值得的,并且是一种好的做法。

这是一个很好的解决方案。我要这样做。您最喜欢什么特定的问题吗?
zkent 2015年

1
作为我的评论,我认为拥有单文件代码示例不一定是个好主意,除非您正在申请职位以优化代码或算法。代码当然不应该很大,但是应该可以一定程度上代表您可以实际完成的工作(例如,如果您可以编写良好的OO代码并将代码合理地拆分为模块,则应该证明这一点)。
2015年

6
  • 它应以最高的严格性级别免费编译/解释错误和警告。
  • 它不应该是您每天编写的样板代码。使它独特且有趣,因此很明显您没有复制/粘贴它。
  • 它应该有一些有趣的设计决策,并附有注释,说明您如何/为什么做出它们。
  • 最多打印2-3页。
  • 应该使用您要申请的语言。
  • 第一次阅读时,它不会使我的大脑受伤。让一个朋友查看它,或在codereview上发布。

3

好吧,如果我在采访您,我想看看您的代码。

干净是好的,解决问题的能力很好,但是真正的代码更好。一个好的程序员知道什么时候他/她被另一个程序员骗了,所以信心可能会下降。

读别人的密码就像跳舞时做爱:你知道什么时候是真实的东西,如果别人在伪造它,最终会发生灾难。(刚意识到真正的书呆子不会跳舞)

只要相信自己和自己的编码能力即可。除非您真的认识您的面试官,否则您将无法预期他对您的编码风格/技能的期望。


10
我喜欢您认为书呆子不会跳舞,但您对他们的性能力充满信心!:D
thesunneversets

不,我自己看到太多的灾难... :)
Machado

在我的学校里,仅有的参加社交舞蹈课程/舞会的人是工程专业。
伊娃

您应该用一些游戏参考代替性,以便更准确:)
zkent 2015年

2

也要非常小心,它不是您当前雇主的代码(他们拥有您不拥有的代码,我保证他们不会喜欢您共享它。)。拿出您引以为豪的东西,然后自己重​​新做一些工作,以使其不受雇主的限制(摆脱对数据库表或服务器名的引用)。无论您做什么,都不要提交有错误的代码,或者是对于它的代码类型而言,这是一种不好的技术(我可能会拒绝在提交基于集合的操作会更简单并且在查看SQL代码时表现更好时提交了游标的人。对于其他语言,也有类似的技术可以解决一个相对罕见的问题,可以将其用于其他更常见的问题,但不是解决其他问题的最佳选择。这句话有意义吗?)


我同意,将其完全重做,使其不再包含任何特定于雇主的信息,这似乎是个好主意。道德很重要-谢谢小费!
thesunneversets '02

0

我会第二次提及Renesis的有关干净代码的文章,但会添加到列表中,为您提交的代码提供质量和有据可查的单元测试。一个好的程序员应该为他们的代码编写单元测试。


0

在评估候选者时确实要求代码示例的人的一种观点是,有一些高级功能(代码的内容)和一些低级功能(代码的结构)。高级功能:

  1. 身份:代码的风格。如果您要以自己的用户界面/ HCI编码器计费,那么我希望在运行它时看起来很直观。如果您是数据库构建者,那么我想对数据表示或分析感兴趣。样本应该是您引以为傲的东西。如果您至少没有其中之一,那么您就没有身份。
  2. 成熟度:您是否针对不同的问题调整策略?您正在解决有趣的问题吗?代码或方法是否容易扩展到类似问题?相反,我是否正在寻找货运邪教公社的成员?
  3. 交流:代码是否容易解释其作用及其原因?这并不意味着代码需要简单。实际上,使复杂的代码易于理解是一个好处。

低级方面比较简单:

  1. 样式:代码应整洁,一致(遵循一些已建立的准则)并有充分的文档记录。
  2. 包装:至少应有简短的自述文件,可运行的版本和可运行的测试。自述文件应告诉我如何运行后两个代码,以及为什么要演示此特定代码示例。
  3. 语言:我通常会要求某人提供该职位所用语言的样本以及他们最擅长的一种语言。

对于一个好的候选人,我希望样本可以是:A)防弹的小样本,或者B)有趣的大型项目的重要部分(例如,来自Github个人仓库的模块)。我希望它们是个人项目或学术项目。如果他们从付费项目中寄出一个邮件,我希望得到一条说明,告知他们可以使用它。如果我没收到笔记,我将把他们从候选人(弱候选人)中剔除,或在面试(强候选人)中询问他们。未经许可将是一个很大的危险信号(可能无法克服)。对于一个高级候选人,我希望有一个免责声明,指出他们的一些最佳来源样本无法显示,因为这是他们工作的一部分。但是,我然后期望得到一个涌现的证明,即为什么他们为这种不起眼的设计感到自豪,以及他们如何像孩子一样爱它。

最后,有人嘲笑“哦,有人可以从互联网上获取代码示例”,反驳的观点是,大多数不了解优质生产质量代码的人也看不到它。 。此外,您始终可以在Google上找到一条与众不同的代码行来进行检查。而且,充其量,窃取代码会使候选人在面试中感到尴尬(“那么,为什么要这样做呢??”)。

关于先前雇用的代码的最后说明:别这样。从人力资源的角度来看,从以前的工作中索要代码是不适当的,并且是关于公司的危险信号。你们俩都有法律责任(即,你们都可能被起诉),这表明他们不知道自己在做什么。除非已公开可用的密码或您已获得该雇主的明确许可,否则永远不应给出为前任雇主编写的密码。更糟糕的是,在一家大公司中,您的直接上司可能无权授予您许可,那么在这种情况下与法律部门玩得开心吗?我相信他们会为即将离职的员工公开IP感到高兴。


我还将注意到,在全面披露的情况下,我向研究生院的实验室提供了代码示例,并在那里获得了博士学位。此代码示例是自治机器人(5-10k行)的完整代码,其中特别列出了三个文件。文档是值得尊重的,但不是原始的。如果必须重新做一次,我可能不会将代码的印刷版带到我的现场采访中(本来可以带100页,用大写字母写上“ ROOKIE MISTAKE”)。我确实获得了全额研究金,所以这并不是什么虚假的事。道德:太多> =太少。
纳西2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.