it-swarm.cn

我的“代码示例”应该是什么样?

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

我不是too担心我的代码不能自己站着,但我非常是一名中级程序员而不是专家。如果我的代码示例当场把我排除在外,我应该确保我的代码示例属于什么明显的陷阱?其次,这可能是问题最难回答的部分,代码示例中的哪些功能会给人留下深刻的印象,以至于它们立即使您更有利地倾向于走向程序员?

欢迎所有想法或建议!

24
thesunneversets

我想看 清洁代码

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

这意味着:

  • 功能-一些简单的功能是不平凡的(一堆吸气剂/塞特剂不会显示出您知道什么)
  • 一致,简洁的样式流行或至少常见大小写,缩进,间距和括号样式
  • 良好命名-质量名称-除非是唯一的增量值,否则请勿使用i。不要使用无意义的变量名。
  • 干净代码的其他属性-有关错误检查,条件,循环,便捷方法或实用程序方法的良好实践,以及 separation-of -问题 (方法之间)。这是个100%的好时机 [〜#〜] dry [〜#〜] -不可重复!

您想给他们发送一些东西,它非常复杂,可以做到有趣,但是要足够干净,这样一个好的开发人员就可以几乎立即=理解它在做什么。

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


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

17
Nicole

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

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

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

最后:

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

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

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

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

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

3
Machado

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

2
HLGEM

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

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

低级方面比较简单:

  1. 样式:代码应干净,一致(遵循某些已建立的准则),并具有充分的文档记录。
  2. 包装:至少应有简短的自述文件,可运行的版本和可运行的测试。自述文件应告诉我如何运行后两个代码,以及为什么要演示此特定代码示例。
  3. Language(s):我通常会要求某人以该位置所用语言以及自己最擅长的语言来抽样。这很好地说明了一个人当前的最高限额。

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

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

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

0
Namey

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

0
Chris Knight