24

在之前的一次采访中,我被问到一个问题:“从 0 到 10,你如何评价自己作为一名程序员?”

我发现这是一个很难回答的问题,因为我不知道衡量我的技能有多好的指标。此外,了解自己的表现对于了解成为更好的程序员需要改进什么很有用。

那么有没有办法知道你的工作做得如何?

4

24 回答 24

60

打电话给你以前的雇主,和继承你所有旧代码的人谈谈。他们会告诉你你是一个多么优秀的程序员。;)

于 2008-09-21T08:19:10.143 回答
16

这是一个很难的问题。从纯粹内省的角度来看,我认为“优秀程序员”的最佳衡量标准之一是:你有多喜欢你的手艺?我遇到过很多开发人员,其中一些人非常出色,但我从未认识过任何一个朝九晚五的开发人员,并且管理的东西比平庸的结果更好。

当然,向内看并不是衡量能力的最佳方式。我应该认为你的程序员同行能够给你一个相当可靠的答案。措辞这样的问题涉及社交礼仪,但潜力仍然存在。以我的经验,与你共事的人会最清楚你的表现如何,哪怕只是因为如果你犯了错误,他们是必须收拾残局的人。:-)

最后的花絮:编程就是解决问题,纯粹而简单。想想你如何处理遇到的难题。首先,你在情绪上如何应对严峻的挑战?其次,你的代码会是什么样子?你只是盲目地穿过丛林直到你到达某个地方某种结果,还是您的方法有条不紊,经过精心衡量并且(最重要的是)经过大量研究?真正优秀的程序员不是什么都知道,或者可以用八种语言实现 Dijkstra 算法的人,他们是那些花费数小时翻阅教科书和晦涩难懂的博客来找到恰巧发生的想法的小块的人对手头的问题至关重要。如果你有耐心和热情去克服深刻的挑战,以及谦虚地向他人寻求想法,那么你就在通往“10”的道路上。

于 2008-09-21T08:23:58.963 回答
15

10 - 你不知道你真的什么都不知道。

9 - 你只是在吹牛,而且你可能没有你想象的那么好。即使你真的这么好,你也缺乏政治技巧来了解选择“9”对你的评价。那个,或者你在这个行业非常有名/很受崇拜(比如你曾经写过一本书,它有一个像“The ______ Book”这样的昵称或大多数开发人员会立即认出的首字母缩略词),并且不怕扔你的名字在身边。

8 - 你非常好,你知道这一点,但你足够聪明,可以意识到选择 9 或 10 的耻辱。你最好能够支持它。

7 - 你很好,但你知道你有很多东西要学。

6 - 你有能力,有很多东西要学,但对自己的能力不是很自信。你确定你不是7?

5 - 体面的初级开发人员。你刚从学校毕业,聪明到意识到你对现实世界的编程一无所知,但你知道如何将代码组合在一起。

4 - 平庸的初级开发者。您刚刚离开学校,但您的基本编码技能仍有待改进。你很难通过大部分编程课程,但出于某种原因决定你仍然想从事软件开发的职业。你也不是真的相信自己,那为什么要面试官呢?

3 或以下 - 如果您对自己的编程能力没有信心,为什么要申请编程工作?

所以“正确”的答案可能是 5-7,这取决于你面试的工作类型。一个 8 号有足够的经验,她不会问这个问题。

于 2009-04-09T13:03:50.873 回答
11

这个面试问题实际上并不是关于你作为一名开发人员有多好。这是关于你有多少自我意识,以及你如何证明(对面试官)你提出的任何数字。

在面试中回答这个问题的正确方法(而不是哲学答案)是选择你最擅长的领域并提供一些好的证据来证明你在这些特定领域的开发人员中排名前 X%。

例如,您可能会说,在创建可靠的软件时,您处于前 Y%,因为这是您的专长之一。那你可以举一些例子。或者,您可以说判断开发技能的合理方法是一个人赚了多少钱。

你不应该做的是从字面上理解这个问题。这通常不是面试官想要的。

于 2008-09-21T10:24:18.033 回答
8

我认识一个多年来一直使用这个面试问题的人。他说,最好的程序员往往给自己打 7 分左右。尤其是给自己打 10 分的人,通常对自己的能力如此自信,因为他们从未遇到过真正优秀的程序员。但是从来没有遇到过,他们会从谁那里学到任何真正的技能呢?当然也有例外。但是,如果您熟悉社区,您可能会知道谁是例外。

顺便说一下,这种现象不仅限于编程。我在很多事情上都发现了这一点。自我评价为十分之十的人通常不是很好。非常擅长 X 的人之所以优秀,是因为他们找到了擅长 X 的其他人,因此会将自己与更难的同龄人群体进行比较,并且通常不会给自己打 10 分。我发现这是真的对于远至打乒乓球或国际象棋的 X 值。

于 2008-09-21T08:58:53.590 回答
8

作为采访潜在开发人员的人,我会说 6-8 之间的任何地方都是该问题的最安全答案。我想平均反应是 7 左右。我认为淘汰无能(0-5)或无知(9-10)真的更重要。如果您决定回答 9+,请准备好证明这一点。

如果您真的想自己认真回答这个问题,我会说程序员能力矩阵是这样一个评级应该涵盖的领域的一个很好的起点。

于 2009-04-09T13:19:22.320 回答
5

任何编程语言似乎都有三个熟练程度:

  1. 您可以立即修复语法错误,无需任何辛苦的脑力劳动
  2. 您可以阅读其他人的代码并制定他们的意图,而无需将代码“翻译”成自然语言(或其他一些编程语言)
  3. 一旦你理解了一个问题,你就可以用语言提供的结构自然地表达它(命令式、OO、函数式......)

我认为这将带您从 1 -> 10 开始

值得注意的是,对一种语言的深入了解可能会妨碍学习另一种语言。因为一旦你用语言'A'来思考,你必须重新连接你的大脑来学习语言'B'。显然,这仅适用于完全不同类型的编程,例如 C->C++、C#->F#、Java->Scala 等...所以我认为它不可能成为抽象的“完美程序员”。

于 2008-09-21T08:29:36.907 回答
5

您的项目欧拉评级可能会给出一个想法(不是您的技能,而是您对不放弃直到最后的热情):

http://projecteuler.net/index.php?section=problems

于 2008-09-21T09:04:05.870 回答
3

一种完全有效的方法来解决“您如何从 1 到 10 给自己打分?” 就是指出自我评估的内在问题。总结在那篇引人入胜的论文中的实验结果:

  1. 几乎每个人都认为自己高于平均水平。这些人中至少有 50% 要么不诚实,要么受骗。
  2. 实际上位于前 25% 的人经常将自己推低到 50-75% 的范围内(即,他们人为地给自己打低分)。
  3. 处于 50-75% 范围内的人倾向于最准确地评估自己。

你可以合理地总结为 50% 的自我评估是谎言,另外 25% 是错误的。因此,您可以选择询问面试无人机,他们是在浪费您的时间还是在对您进行心理评估……

于 2009-05-14T17:33:49.227 回答
2

此外,了解自己的表现对于了解成为更好的程序员需要改进什么很有用。

实际上,了解您需要改进的地方对于了解您的表现如何非常重要。只需看看与您一起工作或互动的人,并尝试找出您希望看到自己做得更好的关于他们的哪些事情。这将慢慢帮助你成为一个更好的程序员。随着您的成长,请查看其他团队和源代码(其他开源项目),以帮助您进一步提高自己。

我认为可能回答给自己打分的一个更好的方法是说我给自己打分的百分比是与我共事过的所有其他人相比的。

于 2008-09-21T08:25:19.427 回答
2

简短的回答是,您将自己与同龄人进行比较。也就是说,拿一个什么都不知道的人给0分,拿你个人认识的最好的程序员给10分——与这两个人相比,你如何看待自己?接近最佳?那将是一个8。中间?那将是5。

只是不要回答 0 或 10 并尽量保持客观。问题的重点不是将您评为程序员,而是在自我评估中评估您的技能。你的洞察力,就是这样。

于 2008-09-21T08:26:07.803 回答
1

衡量一个优秀程序员的标准只有一个:LOC/hr。其他所有指标都是多余的:p

于 2009-04-09T14:19:10.833 回答
0

如果人们抱怨您的一些软件系统正在生产中时您的盘子里没有任何东西,那仅仅意味着您的系统设计良好且编码良好,并且与其他公司代码猴子不同,您没有 6-一个月的麻烦票队列让您忙碌。

如果是这种情况,请拍拍自己的后背。你做得很好。

请记住,软件在赚钱之前是没有完成的。

于 2008-09-21T08:20:25.727 回答
0

作为面试官,我会问这个问题,以了解候选人在表达自己方面的能力。

此外,它还显示了他们的自我批判性以及他们为自己和同事设定的标准。

它不仅告诉您他们对上帝/坏编程了解多少,还告诉您他们与客户互动以提取需求的程度以及他们与团队其他成员的匹配程度。

实际排名 0-10 的重要性要小得多。

于 2008-09-21T08:45:27.680 回答
0

我认为重要的是不要高估语言知识的重要性。

程序员可以拥有的最伟大的技能是在解决问题和设计方面。当您开始实际使用您选择的语言时,几乎只是打字。(接受您希望使用您的问题解决和设计技能的一个领域是在您的代码布局中,以解决可读性和维护问题)

因此,衡量程序员的标准是他们将不同范围的想法或问题结合在一起以解决特定问题的能力。更多的技能可能只是增加可以利用的知识领域。

当然,这些都不能作为衡量你自己技能的指标——但其他人已经说过,无论如何这都是一个无法衡量的问题。:-)

于 2008-09-21T09:05:37.693 回答
0

如果您想要一个声音字节作为答案:

当我开始专业工作时,我可能是 2,现在我会说我在 7 左右,但我每天都在努力达到 10。

于 2008-09-21T09:31:17.210 回答
0

每分钟字数。

于 2008-09-21T10:26:37.950 回答
0

在我看来,这是一个很难(在采访中甚至是UNFAIR)的问题!到目前为止,我一直在为三个不同的公司工作。我遇到的每一个地方都很少有优秀的程序员(比我好得多),很多优秀的程序员和一些应该变得更好的程序员。但不可能将它们归入从 0 到 10 的类别!

于 2008-09-21T12:44:44.873 回答
0

成为一名程序员有许多“善良的维度”;评估过程会因您对哪一个感兴趣而有所不同。这里有一些想法:

  1. 技术熟练程度:去买一本关于你主要使用的语言的“食谱”式参考;对于书中讨论的每项任务,首先编写自己的解决方案,然后将其与书中提供的解决方案进行比较。
  2. 开发速度:在TopCoder注册并解决他们存储的问题或参加实时竞赛。
  3. 参与开发团队:为您信任的一位同事买午餐,并请他/她诚实地评价自己作为团队成员(例如“作为我们团队的一员,您认为我的主要优势和劣势是什么? ?你会建议我做些什么来改进?”)[如果你的团队中没有人可以去进行这样的讨论,他们可能告诉你一些关于这个问题的信息。]
  4. 沟通技巧:与不是开发人员的同事坐下来,询问她/他对您当前项目的看法。注意; 考虑她/他的看法与您的看法是否相符。
  5. 估算:每天早上记下(仅供您自己查看)您希望当天完成的工作以及您预计需要多长时间。在一天结束时,将该笔记与实际发生的事情进行比较,看看你离你有多远。要在这方面有所改进,请考虑造成差异的原因以及您认为哪些因素会使您的猜测更加准确。
于 2008-11-20T13:46:26.843 回答
0

你总是可以与其他程序员竞争,看看你的思维能力有多好。您可以尝试 www.topcoder.com 或 www.spoj.pl 或 wwww.codechef.com 等网站,它们为您提供排名,您可以看到自己的表现如何。然而,这些纯粹是测试你的算法大脑,而不是你的编码方式。如果我被问到这个问题,我会说我是一个不断学习的人,并且相信犯错误和纠正错误,我不害怕自我批评我的代码,也不愿意让别人指出我的错误,你可以决定它的规模。

于 2009-04-09T13:11:50.590 回答
0

定义 100% 的比例。

确定自己停留在 100.0 标记上。

确定其他开发人员和 IT 知名人士的职位。

计算你有多好。

于 2009-04-09T13:18:59.090 回答
0

我被问过几次这个问题。当我刚从大学毕业时,我说 7/8。现在我已经工作了几年,我说 4,尽管我认为我现在已经无限好。

我不认为 0-10 是一条直线图。我更多地将其视为指数图。所以可以肯定的是,我仍然会说十分之四,但我相信我比 90% 的程序员要好。我看过他们的一些作品,这让我很害怕。我曾在银行软件 SSL 软件上工作过,但它确实有效,这很可怕。所以有 10% 的程序员比我好得多。我不确定我是否会赶上他们。在我看来,达到 4 很容易。很难达到 5。从 5 到 6 非常可怕。

值得 8、9 或 10 分的优秀程序员。

于 2009-04-09T13:24:23.837 回答
0

经验。您获得的经验范围越广,您就“越好”。你只知道你经历过什么。

您已开发(或在其中成功工作且未损坏)的系统的规模和复杂性。

于 2009-06-29T15:41:03.920 回答
0

这里非常有价值的讨论。爱它。我作为被访者,想就此作如下回答。

我想先分析一下这个问题。

分析取决于语言、框架、问题的性质等几件事,(我是 PHP 和 Wordpress 人,所以答案就在这种情况下)1. 插件补丁工作,2. 从头开始​​构建,3. api 的使用

My common approach would be (in most cases) 1. understand the given (or already built) scope of the functionality (relative to current problem statement) 2. reckoning one of the best way to solve (there are definitely more than one way every time…) 3. coding 4. testing in real time scenarios (for performance tuning) 5. in initial stages of any programmer, all four steps are recursive till getting final solution but as experience grows, 1 2 steps becomes recursive.

Aptitude of understanding fundamental philosophy of any language is imp. Rest is problem solving attitude.

And in PHP, I think I am 6.5.

于 2010-03-01T08:57:04.277 回答