作为程序员,你如何衡量你的技能? [关闭]
Posted
技术标签:
【中文标题】作为程序员,你如何衡量你的技能? [关闭]【英文标题】:How can you measure your skills as a programmer? [closed] 【发布时间】:2010-09-11 18:01:10 【问题描述】:在之前的一次采访中,我被问到一个问题:'从 0 到 10,你如何评价自己作为程序员?'
我发现这是一个很难回答的问题,因为我不知道有什么指标可以衡量我的技能有多好。此外,了解自己的表现对于了解成为更好的程序员需要改进什么很有用。
那么有没有办法知道你的工作做得如何?
【问题讨论】:
【参考方案1】:致电您以前的雇主,并与继承您所有旧代码的人交谈。他们会告诉你你是一个多么优秀的程序员。 ;)
【讨论】:
当然,这是假设他们足够了解,可以做出适当的评估。 我曾经有一个小子系统,它太复杂了——每个看到代码的人都在不停地赞美它,因为他们都没有理解它.... :$ (对我自己太公平了,复杂性是一个非常复杂的要求的结果,但仍然......) 他/她为什么要告诉你真相?对于一些我真的不喜欢的人,我没有告诉他们我的意见,而是告诉他们他们想听什么。这是个坏习惯,我知道。但是对于那些对反馈免疫的人,你应该告诉他什么?真相或让他认为是好的(并使他快乐?)。因此,如果您可以信任“继任者”,则此答案仅是一种选择。这甚至可能是常见的情况,但谁知道...... 当继承代码的人有“这里不写”综合症或太新手时,这不起作用。【参考方案2】:这是一个很难的问题。从纯粹内省的角度来看,我认为“优秀程序员”的最佳衡量标准之一是:你有多喜欢你的手艺?我遇到了很多开发人员,其中一些人非常出色,但我从来不知道任何人是一个朝九晚五的开发人员,并且管理的任何事情都比平庸的结果更好。
当然,向内看并不是衡量能力的最佳方式。我应该认为你的程序员同行能够给你一个相当可靠的答案。措辞这样的问题涉及社交礼仪,但潜力仍然存在。根据我的经验,与你一起工作的人会对你的表现有最好的了解,如果只是因为如果你犯了错误,他们是必须收拾残局的人。 :-)
最后的花絮:编程就是解决问题,纯粹而简单。想想你如何处理遇到的难题。首先,你在情绪上如何应对严峻的挑战?其次,你的代码会是什么样子?您是否只是盲目地在丛林中闯荡,直到获得某种种结果,还是您的方法有条不紊、经过精心衡量并且(最重要的是)经过大量研究?真正优秀的程序员不是什么都知道,或者可以用八种语言实现 Dijkstra 算法的人,他们是那些花费数小时翻阅教科书和晦涩难懂的博客来找到恰巧发生的想法的小块的人对手头的问题至关重要。如果您有耐心和热情地克服艰巨的挑战,并且谦虚地向他人寻求想法,那么您就可以顺利迈向“10”。
【讨论】:
【参考方案3】:10 - 你不知道你真的什么都不知道。
9 - 你只是在吹牛,而且你可能没有你想象的那么好。即使你真的这么好,你也缺乏政治技巧来了解选择“9”对你的评价。那个,或者你在这个行业里很有名/很受崇拜(比如你曾经写过一本书,它有一个像“The ______ Book”这样的昵称或大多数开发人员会立即认出的首字母缩略词),并且不怕扔你的名字。
8 - 你非常好,你知道,但你足够聪明,可以意识到选择 9 或 10 的耻辱。你最好能够支持它。
7 - 你很好,但你知道你有很多东西要学。
6 - 你很能干,有很多东西要学,但对自己的能力不是很自信。你确定你不是7?
5 - 体面的初级开发者。您刚从学校毕业,并且足够聪明地意识到您对现实世界的编程一无所知,但您知道如何编写代码。
4 - 平庸的初级开发者。您刚刚离开学校,但您的基本编码技能仍有待改进。您很难通过大部分编程课程,但出于某种原因决定您仍然想从事软件开发工作。你也不是真的相信自己,面试官又何必呢?
3 或以下 - 如果您对自己的编程能力没有信心,为什么要申请编程工作?
所以“正确”的答案可能是 5-7,具体取决于您面试的工作类型。 8 号有足够的经验,她不会问这个问题。
【讨论】:
太棒了(+1)。与 SO 代表(或 µSket 中的相对代表)的关系如何?【参考方案4】:这个面试问题实际上并不是关于你作为一名开发人员有多优秀。这是关于你有多少自我意识,以及你如何证明(对面试官)你提出的任何数字。
在面试中回答这个问题的正确方法(而不是哲学式的回答)是选择你最擅长的领域,并提供一些很好的证据来证明你在这些特定领域的开发人员中排名前 X%。
例如,您可能会说,在创建可靠的软件方面,您处于前 Y%,因为这是您的专长之一。那你可以举一些例子。或者,您可以说判断开发技能的合理方法是一个人赚了多少钱。
你不应该做的是从字面上理解这个问题。这通常不是面试官想要的。
【讨论】:
【参考方案5】:我认识一个多年来一直使用这个面试问题的人。他说,最优秀的程序员往往给自己打 7 分左右。尤其是给自己打 10 分的人,通常对自己的能力如此自信,因为他们从未遇到真正优秀的程序员。但是从来没有遇到过,他们会从谁那里学到任何真正的技能呢?当然也有例外。但如果您熟悉社区,您可能会知道谁是例外。
顺便说一句,这种现象不仅限于编程。我在很多事情上都发现了这一点。以满分 10 分给自己打分的人通常不是很好。非常擅长 X 的人之所以优秀,是因为他们找到了擅长 X 的其他人,因此会将自己与更难的同龄人进行比较,并且通常不会给自己打 10 分。我发现这是真的X 的值远至打乒乓球或国际象棋。
【讨论】:
即使 10 个 这么好,你真的希望团队中有一个如此自负的人吗?【参考方案6】:作为面试潜在开发人员的人,我会说 6 到 8 岁之间的任何地方都是该问题的最安全答案。我想平均反应是 7 左右。我认为淘汰无能(0-5)或无知(9-10)真的更重要。如果您决定回答 9+,请准备好证明这一点。
如果您真的想自己认真回答这个问题,我会说Programmer Competency Matrix 是一个很好的起点,可以让您了解此类评级应涵盖的领域。
【讨论】:
【参考方案7】:任何编程语言的熟练程度似乎都分为三个级别:
-
您可以立即修复语法错误,无需任何辛苦的脑力劳动
您可以阅读其他人的代码并了解他们的意图,而无需将代码“翻译”成自然语言(或其他某种编程语言)
一旦你理解了一个问题,你就可以用语言提供的结构自然地表达它(命令式、OO、函数式......)
我认为这将带您从 1 -> 10 开始
值得注意的是,对一种语言的深入了解可能会妨碍学习另一种语言。因为一旦你用语言'A'来思考,你必须重新连接你的大脑来学习语言'B'。显然,这仅适用于转移到完全不同类型的编程时,例如C->C++, C#->F#, Java->Scala 等等...所以我认为它不可能成为抽象的“完美程序员”。
【讨论】:
我不同意你的观点。多种语言的知识使学习其他语言更容易。【参考方案8】:您的项目欧拉评级可能会给出一个想法(不是您的技能,而是您对不放弃直到最后的热情):
http://projecteuler.net/index.php?section=problems
【讨论】:
您还需要考虑这些内容中的大部分只是关于数学理解并将其应用于编程而不是解决现实世界的问题。 我想我已经考虑过了。【参考方案9】:对于“从 1 到 10 给自己打分如何?”的一种完全有效的方法。就是指出inherent problem with self-assessment。总结那篇引人入胜的论文中的实验结果:
-
几乎每个人都认为自己高于平均水平。这些人中至少有 50% 不诚实或受骗。
实际上在前 25% 的人经常将自己推低到 50-75% 的范围内(即,他们人为地给自己打低分)。
50-75% 的人往往最准确地评估自己。
您可以合理地总结为 50% 的自我评估是谎言,另外 25% 是错误的。因此,您可以选择询问面试无人机他们是在浪费您的时间还是在对您进行心理评估......
【讨论】:
++2 :: 特别引用 Dunning 和 Kruger 的 Unskilled and Unaware of It 表示敬意,因为 effect 以他们的名字而闻名。 -- 或者如果你是一个铁杆反社会科学类型的你也可以包含psychometric一般测试的限制,以及“Scientific management”的失败(à la Frederick Winslow Taylor) 提出与当前心理学和经济学知识相一致的稳健理论。 @mctylr,谢谢 - 我没有使用作者的名字,因为“Dunning-Kruger”几乎成了陈词滥调。通过链接和总结,我希望有人可能会真正阅读这篇论文。这真的很迷人。【参考方案10】:此外,了解自己的表现将有助于了解您需要改进哪些方面才能成为一名更好的程序员。
真正了解自己需要改进的地方对于了解自己的表现非常重要。只需看看与您一起工作或互动的人,并尝试找出您希望看到自己做得更好的关于他们的哪些事情。这将慢慢帮助你成为一个更好的程序员。随着您的成长,请查看其他团队和源代码(其他开源项目),以帮助您进一步提高自己。
我认为可能回答给自己打分的更好方法是说我对自己的打分是 x 个百分位,与我共事过的所有其他人相比。
【讨论】:
我同意你的观点,但我认为开始给开发人员评分“wrt”是危险的。这是竞争性的正确方法,但它带来了通过引入精英主义和傲慢来破坏团队团结的威胁。 更重要的是,你可能有幸拥有出色的队友,相比之下,即使你自己还不够出色,你也很肤浅——或者你可能被所有读过的哑铃队友诅咒21 天学习 Java,并认为自己是专业人士。【参考方案11】:简短的回答是,您将自己与同龄人进行比较。也就是说,拿一个什么都不知道的人给0分,拿你个人认识的最好的程序员给10分——与这两个人相比,你如何看待自己?接近最佳?那将是一个8。中间?那将是 5。
不要回答 0 或 10,尽量保持客观。问题的重点不是评价你是一名程序员,而是评价你的自我评估技能。就是你的洞察力。
【讨论】:
【参考方案12】:衡量一个优秀程序员的标准只有一个:LOC/hr。其他所有指标都是多余的:p
【讨论】:
【参考方案13】:如果人们抱怨在您的多个软件系统处于生产状态时,您的盘子里没有任何东西,这仅仅意味着您的系统设计和编码都很好,而且与其他公司代码猴子不同,您没有6 个月的故障单队列让您忙个不停。
如果是这种情况,请拍拍自己的后背。你做得很好。
记住,软件在赚钱之前是没有完成的。
【讨论】:
我不同意;如果它很好,那么客户迟早会要求更多功能或更改。只是我的 2p (+:【参考方案14】:作为面试官,我会问这个问题,看看候选人在表达自己方面的能力如何。
此外,它还显示了他们的自我批评程度以及他们为自己和同事设定的标准。
它不仅告诉您他们对优秀/糟糕的编程了解多少,还告诉您他们与客户互动以提取需求的效果如何,以及他们与团队其他成员的匹配程度。
实际排名 0-10 的重要性要小得多。
【讨论】:
【参考方案15】:我认为不要高估语言知识的重要性。
程序员可以拥有的最伟大的技能是在解决问题和设计方面。当您开始实际使用您选择的语言时,几乎只是打字。 (接受你希望使用你的问题解决和设计技能的一个领域是你的代码布局,以解决可读性和维护问题)
因此,衡量程序员的标准是他们将各种不同的想法或问题结合在一起以解决特定问题的能力。 更多技能可能只是增加可以利用的知识领域。
当然,这些都不能作为衡量你自己技能的指标 - 但其他人已经说过,无论如何这都是一个无法衡量的问题。 :-)
【讨论】:
【参考方案16】:如果您想要一个声音字节作为答案:
当我开始专业工作时,我可能是 2,现在我会说我大约是 7,但我每天都在努力达到 10。
【讨论】:
【参考方案17】:每分钟字数。
【讨论】:
请告诉我这是个笑话!!【参考方案18】:在我看来,这是一个很难(在采访中甚至是不公平)的问题!到目前为止,我一直在三个不同的公司工作。我遇到的每一个地方都很少有优秀的程序员(比我好得多),很多优秀的程序员和一些应该变得更好的程序员。但不可能把它们归入从 0 到 10 的类别!
【讨论】:
【参考方案19】:成为一名程序员有许多“善良的维度”;评估过程会因您对哪一个感兴趣而有所不同。以下是一些想法:
-
技术熟练度:去买一本关于你主要使用的语言的“cookbook”式参考;对于书中讨论的每项任务,首先编写您自己的解决方案,然后将其与书中提供的解决方案进行比较。
开发速度:在TopCoder 注册并解决他们存储的问题或参加实时竞赛。
加入开发团队:为您信任的同事买午餐,请他/她诚实地评价您作为团队成员(例如“您认为我作为成员的主要优势和劣势是什么?我们团队的成员?你建议我做些什么来改进?”)[如果你的团队中没有人可以让你进行这样的讨论,他们可能告诉你一些关于这个问题的事情.]
沟通技巧:与非开发人员的同事坐下来,询问她/他对您当前项目的看法。注意;考虑她/他的看法与您的看法是否相符。
估算:每天早上记下(仅供您查看)您希望当天完成的工作以及您预计需要多长时间。在一天结束时,将该笔记与实际发生的事情进行比较,看看你离你有多远。要在这方面有所改进,请考虑造成差异的原因,以及您认为哪些因素会使您的猜测更加准确。
【讨论】:
【参考方案20】:您可以随时与其他程序员竞争,看看您的思维能力有多好。你可以试试 www.topcoder.com 或 www.spoj.pl 或 wwww.codechef.com 之类的网站 他们为您提供排名,您可以看到自己的表现。然而,这些纯粹是测试你的算法大脑,而不是你编码的方式。如果我被问到这个问题,我会说我是一个不断学习的人,并且相信犯错误和纠正错误,我不害怕自我批评我的代码,我也不愿意让别人指出我的错误,你可以决定它的规模。
【讨论】:
【参考方案21】:定义 100% 的比例。
确定自己保持在 100.0 分。
确定其他开发人员和 IT 知名人士的职位。
根据你的能力来计算。
【讨论】:
【参考方案22】:我被问过几次这个问题。当我刚从大学毕业时,我说 7/8。现在我已经工作了几年,我说 4,尽管我认为我现在好多了。
我不认为 0-10 是一条直线图。我更多地将其视为指数图。所以可以肯定的是,我仍然会说十分之四,但我相信我比 90% 的程序员要好。我看过他们的一些作品,这让我很害怕。我曾在银行软件 SSL 软件上工作过,但它确实有效,这很可怕。所以有 10% 的程序员比我好得多。我不确定我是否会赶上他们。在我看来,达到 4 很容易。很难达到 5。从 5 到 6 非常可怕。
值得 8、9 或 10 分的优秀程序员。
【讨论】:
【参考方案23】:经验。您获得的经验范围越广,您就“越好”。你只知道你经历过什么。
您已开发(或在其中成功工作且未损坏)的系统的规模和复杂性。
【讨论】:
【参考方案24】:这里的讨论很有价值。爱它。 作为被访者,我想就此作如下回答。
我想先分析一下这个问题。
分析依赖于一些事情,例如 语言,框架,问题的性质, (我是 PHP 和 Wordpress 的人,所以答案是在这种情况下) 1.插件补丁工作, 2. 从头开始构建, 3. api的使用
我的常用方法是(在大多数情况下) 1. 了解功能的给定(或已经构建的)范围(相对于当前的问题陈述) 2. 计算最好的解决方法之一(每次肯定不止一种方法……) 3. 编码 4. 实时场景测试(用于性能调优) 5. 在任何程序员的初始阶段,所有四个步骤都是递归的,直到得到最终解决方案,但随着经验的增长,1 2 步骤变得递归。
理解任何语言的基本哲学的能力都是小鬼。休息是解决问题的态度。
在 PHP 中,我想我是 6.5。
【讨论】:
以上是关于作为程序员,你如何衡量你的技能? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
菜鸟程序员如何逆袭?10个技巧,提高你的编程技能,成为更好的自己