我们如何衡量自己作为程序员的技能?
在上一次采访中,我被问到一个问题:"从0到10,我们如何评价自己是一名程序员?"
我发现很难回答这个问题,因为我不知道一个衡量我的技能水平的指标。此外,知道表现如何对理解成为一个更好的程序员所需要改进的知识很有用。
那么有没有办法知道你的工作做得如何?
解决方案
打电话给我们以前的老板,并与继承了我们所有旧密码的人交谈。他们会告诉我们我们是一名优秀的程序员。 ;)
如果人们抱怨几个软件系统都在生产中时没有任何东西,这仅意味着系统经过精心设计和良好编码,并且与其他公司代码猴子不同,我们没有6-一个月的故障单让我们忙。
在这种情况下,请拍拍自己的背部。你做得很好。
请记住,只有在赚钱之前,软件才能完成。
这是一个很难的问题。从纯粹内省的角度来看,我认为"优秀程序员"的最好标准之一是:我们对自己的手艺有多喜欢?我遇到了很多开发人员,其中一些人非常出色,但是我从未认识过9-5的开发人员,并且管理的任何事情都比平庸的结果要好。
当然,向内看并不是衡量能力的最好方法。我应该认为程序员同伴将为我们提供一个相当可靠的答案。对这个问题的措词涉及社会礼节,但潜力仍然存在。根据我的经验,与我们一起工作的人将最好地了解表现,这仅仅是因为他们是如果我们弄错了就必须清理烂摊子的人。 :-)
最终花絮:编程是解决问题的方法,纯净而简单。考虑一下我们如何处理遇到的难题。首先,我们如何应对严峻的挑战?其次,代码是什么样的?我们是否只是盲目地闯入丛林直到获得某种结果,还是方法是有条不紊,经过精心衡量和(最重要的)是经过大量研究的?真正优秀的程序员不是一无所知的人,或者不是可以用八种语言来实现Dijkstra算法的人,而是花大量时间浏览课本和晦涩的博客以发现这种想法的小块东西的人。对眼前的问题至关重要。如果我们有足够的耐心和热情去克服挑战,并且谦虚地寻求他人的帮助,那么我们就很容易迈向" 10"级。
Moreover, knowing how well you perform would be useful to understand what you need to improve to be a better programmer.
实际上,了解我们需要改进的内容对于理解表现非常重要。只是看看与我们一起工作或者与之互动的人,然后尝试弄清楚他们希望自己做得更好的事情。那将慢慢成为一个更好的程序员。随着成长,请查看其他团队和源代码(其他开源项目),以进一步提高自己。
我认为更好地回答对自己进行评级的问题的一种更好的方法是,说我对与我合作过的所有其他人的评级为x百分位数。
简短的答案是,我们将自己与同龄人进行比较。也就是说,请一个什么都不知道的人分配一个0,并选择我们个人认识的最好的程序员并分配一个10-与这两个人相比,我们如何看待自己?接近最佳?那将是8. Middle?那将是5.
只是不要回答0或者10并尝试保持客观。问题的重点不是对我们作为程序员的评价,而是对自我评估的技能的评价。就是见解。
任何编程语言的熟练程度似乎都达到三个级别:
- 立即修复语法错误,无需费劲
- 我们可以阅读其他人的代码并弄清他们的意图,而无需将代码"翻译"成自然语言(或者其他某种编程语言)
- 一旦理解了问题,就可以用语言提供的构造自然地表达它(命令性,OO,功能性...)
我认为这会带我们从1-> 10的比例
值得注意的是,对一种语言的深入了解可能会妨碍学习另一种语言。因为一旦我们用语言" A"思考,就必须重新连接大脑以学习语言" B"。显然,这仅适用于移动到完全不同类型的编程时,例如C-> C ++,C#-> F#,Java-> Scala等...所以我认为抽象地成为"完美的程序员"是不可能的。
作为一名面试官,我会问这个问题,以了解候选人表达自己的能力如何。
此外,它还显示了他们的自我批评的重要性以及他们为自己和同事设定的什么样的标准。
它不仅告诉我们他们对错误/糟糕编程的了解程度,还告诉我们他们与客户互动以提取需求的程度以及与团队其他成员的匹配程度。
实际等级0-10的重要性要小得多。
我认识一个多年使用该面试问题的人。他说,最好的程序员倾向于将自己评为7分左右。特别是,将自己评为10分的人通常对自己的能力充满信心,因为他们从未遇到过真正的优秀程序员。但是,从未见过一个人,他们会从谁那里学到任何真正的技能?当然也有例外。但是,如果我们适应了社区,那么我们可能会知道谁是例外。
附带地,这种现象不限于编程。我发现它在许多方面都是正确的。自我评价十分之十的人通常不是很好。擅长X的人之所以出色,是因为他们找到了擅长X的其他人,因此将自己与较困难的同龄人群体进行比较,并且通常不会以10为基数进行自我评估。我发现这是真的X的值远比打乒乓球或者国际象棋大。
项目Euler评分可能会给出一个主意(不是技能,而是我们对直到最后不放弃的热情):
http://projecteuler.net/index.php?section=问题
我认为重要的是不要过高估计语言知识的重要性。
程序员可以拥有的最大技能是问题解决和设计领域。到我们真正使用所选语言时,它几乎只是在打字。 (接受我们希望使用的解决问题和设计技能的领域是代码的布局,以解决可读性和维护性问题)
因此,程序员的衡量标准是他们可以将各种各样的想法或者问题集中在一起解决某个特定问题的能力。
更多的技能可能只是增加可以借鉴的知识领域。
当然,这些都不能作为确定我们自己技能的指标,但是其他人已经说过,无论如何这都是一个无法衡量的问题。 :-)
如果我们想要一个声音字节作为答案:
When I started work professionally I was probably a 2, Now I'd say I was around a 7, but every day I'm working to reach 10.
这个面试问题实际上并不是关于我们作为一名开发人员的表现如何。这是关于我们拥有多少自我意识,以及我们对所提出的任何数字(向面试官)证明的合理性。
在面试中回答这个问题的正确方法(与哲学回答相反)是选择我们最擅长的领域,并提供一些充分的证据表明我们在这些特定领域的开发人员中排名前X%。
例如,我们可能会说,在创建可靠的软件时,我们处于Y%最高的位置,因为这是专长之一。然后,我们可以举一些例子。或者,我们可以说,一种判断开发技能的合理方法是一个人赚多少钱。
我们不应该做的就是从字面上看这个问题。那通常不是面试官想要的。
每分钟字数。
我认为,这是一个难题(在采访中甚至是公平的问题)!到目前为止,我一直在为三家不同的公司工作。我遇到的每个地方都很少见到优秀的程序员(远胜于我),很多优秀的程序员和几个应该变得更好的程序员。但是将它们归类为0到10是不可能的!
成为程序员有许多"善良维度"。评估过程会根据我们感兴趣的对象而有所不同。以下是一些建议:
- 技术熟练程度:在我们主要使用的语言上购买一个好的"食谱"风格的参考书;对于本书中讨论的每个任务,请首先编写自己的解决方案,然后将其与本书中提供的解决方案进行比较。
- 开发速度:在TopCoder注册并解决他们所存储的问题或者参加实时竞赛。
- 参与开发团队:为我们值得信赖的同事之一共进午餐,并请他/她对自己作为团队成员的诚实评价(例如,"我们认为我们团队的主要优点和缺点是什么? "我们会建议我做些什么来改进?")[如果团队中没有人可以参加这样的讨论,他们也许会告诉我们有关此问题的一些信息。]
- 沟通技巧:与不是开发人员的同事坐下来,征求她/她对我们当前项目的看法。请注意;考虑她/他的看法与我们自己的看法相符的程度。
- 估计:每天早晨记录一下我们希望当天完成的工作以及预计需要花费的时间(仅供我们注意)。在一天结束时,将该笔记与实际发生的情况进行比较,以了解我们离我们有多远。为了在这方面有所改进,请考虑差异的原因以及可以认为哪些会使猜测更加准确。
10你不知道你什么都不知道。
9我们只是在吹牛,可能不如我们想像的那样好。即使我们真的是这个好人,我们也缺乏政治技巧,无法看清选择" 9"对评价。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。那样的话,或者我们在业内相当知名/很崇拜(例如,我们曾经写过一本书,它的昵称是" The ______ Book",或者是大多数开发人员会立即认出的首字母缩写),并且不怕扔你的名字。
8你真该死,你知道,但是你很聪明,可以意识到选择9或者10的耻辱。你最好能够备份它。
7我们非常棒,但是我们知道我们需要学习很多东西。
6我们有能力,有很多东西要学习,但是对自己的能力不是很自信。我们确定我们不是7岁吗?
5体面的初级开发人员。我们刚刚放学,并且足够聪明,意识到我们对现实世界的编程一无所知,但是我们知道如何共同编写代码。
4平庸的初级开发人员。我们刚刚放学,但是基本编码技能仍有待改进。仅通过大多数编程课程就很难了,但是由于某种原因,我们仍然想从事软件开发工作。我们也并不真正相信自己,那为什么要面试官呢?
3或者以下如果我们对编程能力的信心不足,为什么要申请编程工作?
因此,"正确"的答案可能是5到7,这取决于我们要面试的工作类型。 8岁的孩子有足够的经验,她不会问这个问题。
我们可以随时与其他程序员竞争,看看自己的思维能力如何。我们可以尝试使用www.topcoder.com或者www.spoj.pl或者wwww.codechef.com之类的网站
他们为我们提供排名,我们可以看到表现如何。但是,这些纯粹测试了算法头脑,而不是编码方式。如果有人问我这个问题,我会说我是一个不断学习的人,并且相信自己会犯错误和改正错误,我不怕自我批评我的代码,也不犹豫要别人指出我的错误,你可以决定它的规模。
定义100%的比例。
标识自己停留在100.0标记上。
确定其他开发人员的职位和IT的知名人物。
计算出好些。
作为采访潜在开发人员的人,我想说6到8之间的任何地方都是该问题的最安全答案。我想平均回应大约是7. 我认为淘汰不称职(0-5)或者无知(9-10)的确更多。如果我们决定回答9+,则准备证明它。
如果我们真的想为自己认真回答这个问题,那么我想说程序员能力矩阵是此类评级应涵盖的领域的一个很好的起点。
我被问过几次这个问题。当我刚离开大学时,我说7/8. 现在我已经工作了几年,尽管我认为自己现在已经无限好了,但我还是说4.
我看不到0-10是直线图。我更多地将其视为指数图。因此,请确保我仍然说十分之四,但我相信我比90%的编码员都好。我看过他们的一些作品,这使我感到恐惧。我曾经从事过银行软件SSL软件的开发,但实际上它确实很吓人。因此,那里有10%的编码员比我更好。我不确定我是否会追上他们。我认为要达到4很容易。很难达到5. 从5到6令人难以置信。
值得8、9或者10的优秀编码员。
衡量优秀程序员的标准只有一个:LOC / hr。所有其他度量都是多余的:p
一种完全有效的方法是"我们如何从1 10开始评价自己?"指出自我评估的内在问题。总结那篇引人入胜的论文中的实验结果:
- 几乎所有人都认为自己高于平均水平。这些人中至少有50%是不诚实的或者受骗的。
- 实际处于前25%的人经常将自己压低到50-75%的范围内(即,他们对自己的评价很低)。
- 处于50-75%的人群倾向于最准确地评估自己。
我们可以合理地总结一下,因为50%的自我评估是谎言,另外25%的观点是错误的。因此,我们可以选择询问面试无人机是否在浪费时间或者在心理上进行评估……。
经验。我们拥有的"越好"的经验范围越广。我们只知道自己的经验。
我们开发的系统的大小和复杂性(或者在不破坏的情况下成功进行了工作)。
这里非常有价值的讨论。爱它。
我作为受访者,对此给出以下答案。
我想先分析一下这个问题。
分析取决于诸如
语言,框架,问题的性质,
(我是PHP和Wordpress专家,所以答案就在这种情况下)
1.插件补丁工作,
2.从头开始构建
3. API的用法
我的常用方法是(在大多数情况下)
1.了解功能的给定(或者已构建)范围(相对于当前问题陈述)
2.算是解决问题的最佳方法之一(每次肯定有不止一种方法)
3.编码
4.实时测试(用于性能调整)
5.在任何程序员的初始阶段,所有四个步骤都是递归的,直到获得最终解决方案为止,但是随着经验的增长,1 2个步骤将递归。
理解任何一种语言的基本哲学是很重要的。休息是解决问题的态度。
在PHP中,我认为我是6.5.