在之前的一次采访中,我被问到了一个问题:'从0到10,你如何评价自己是程序员?'
我发现这是一个非常难以回答的问题,因为我不知道衡量我的技能有多好的指标.此外,了解您的表现如何有助于理解您需要改进哪些才能成为更好的程序员.
那么有没有办法知道你的工作有多好?
打电话给你以前的雇主,并与继承你所有旧代码的人交谈.他们会告诉你程序员有多好.;)
这是一个很难的问题.从纯粹内省的角度来看,我认为"良好的程序员"的最佳指标之一就是:你对自己的手艺有多大享受?我见过很多的开发者,他们中的一些很不错的,但我从来没有听说过任何人谁是9-5的开发商和管理什么比平庸的结果更好.
当然,向内看并不是衡量胜任力的最佳方式.我认为你的同事程序员能够给你一个相当可靠的答案.在描述这样一个问题时涉及社交礼仪,但潜力仍然存在.根据我的经验,与你合作的人将会对你的表现有最好的理解,只要因为他们是那些如果你犯了错误就必须清理乱七八糟的人.:-)
最后的花絮:编程解决问题,纯粹而简单.想想你如何解决困难问题.首先,您如何在艰难的挑战中做出情绪反应?第二,你的代码会是什么样子?你是否只是盲目地穿过丛林,直到你到达一些地方某种结果,或者您的方法是否有条不紊,测量良好且(最重要的是)进行了大量研究?真正优秀的程序员不是那些知道一切或者能够用八种语言实现Dijkstra算法的人,他们是那些花费数小时时间倾注在教科书和模糊博客上的人,他们找到了这样一个想法的微小金块.对手头的问题至关重要.如果你有耐心和热情通过深刻的挑战,以及谦虚地寻找他人的想法,那么你就可以顺利通往"10".
10 - 你不知道你什么都不知道.
9 - 你只是吹牛,你可能没有你想象的那么好.即使你真的很好,你也缺乏政治技巧,无法看出选择"9"的人对你说的是什么.那个,或者你在业界非常有名/崇拜(即你曾经写过一本书,它有一个绰号,如"______ Book"或大多数开发人员会立刻认出的缩写),并且不怕扔你的名字.
8 - 你真好,而且你知道,但是你很聪明地意识到挑选9或10的耻辱.你最好能够支持它.
7 - 你很好,但是你知道你有很多需要学习的东西.
6 - 你很有能力,有很多东西需要学习,但对你的能力不太自信.你确定你不是7岁吗?
5 - 体面的初级开发.你刚刚离开学校,并且足够聪明地意识到你并不真正了解真实世界的编程,但是你知道如何破解代码.
4 - Mediocre junior dev.你刚刚离开学校,但你的基本编码技能还有待改进.你很难通过大部分的编程课程,但出于某种原因决定你仍然希望从事软件开发的职业.你也不相信自己,为什么面试官呢?
3或以下 - 如果您对编程能力缺乏信心,为什么要申请编程工作?
所以"正确"答案可能是5-7,这取决于你面试的工作类型.8有足够的经验,她不会问这个问题.
这个面试问题实际上并不是关于你作为开发人员有多好.这是关于你有多少自我意识,以及你(对面试官)你提出的任何数字的合理性.
在面试中回答这个问题的正确方法(与哲学答案相反)是选择最强大的领域并提供一些好的证据来表明你在这些特定领域的开发人员中排名前X%.
例如,您可能会说在创建可靠的软件时,您处于最高Y%,因为这是您的专业之一.然后你可以举一些例子.或者你可以说,判断发展技能的合理方法是赚多少钱.
你不应该做的就是从字面上理解这个问题.这通常不是面试官想要的.
我认识多年来一直使用这个面试问题的人.他说,最优秀的程序员倾向于给自己评分为7分.特别是那些将自己评为10分的人通常对自己的能力充满信心,因为他们从未遇到过一个非常优秀的程序员.但是从未见过一个人,他们会从谁那里学到任何真正的技能?当然也有例外.但如果你已经调整到社区,你可能会知道例外是谁.
顺便提一下,这种现象不仅限于编程.我发现它在许多方面都是正确的.自我评价为10分的人通常不是很好.非常擅长X的人很好,因为他们找到了其他擅长X的人,所以他们会把自己比作一个更难对付的同龄人,而且一般不会自我评分为10.我发现这是真的对于像乒乓球或国际象棋一样远的X值.
作为采访潜在开发者的人,我会说6-8之间的任何地方都是这个问题最安全的答案.我想平均反应大约是7.我认为除掉无能(0-5)或无知(9-10)之外真的更多.如果您决定回答9岁以上,请准备好证明.
如果您真的希望自己认真回答这个问题,我会说程序员能力矩阵是评级应该包含的领域的一个很好的起点.
任何编程语言似乎都有三个级别的熟练程度:
您可以立即修复语法错误,而无需任何艰苦的努力
您可以阅读其他人的代码并计算他们的意图,而无需将代码"翻译"为自然语言(或其他一些编程语言)
一旦你理解了一个问题,你就可以在语言提供的结构中自然地表达它(命令式,OO,功能......)
我认为这会带你从1 - > 10开始
值得注意的是,对一种语言的深入了解可能妨碍学习另一种语言.因为一旦你从语言'A'的角度思考,你必须重新学习你的大脑来学习语言'B'.显然这仅适用于转换为完全不同类型的编程,例如C-> C++,C# - > F#,Java-> Scala等...所以我不认为它可能成为抽象中的"完美程序员".
您的项目euler评级可能会给出一个想法(不是您的技能,而是您对直到最后不放弃的热情):
http://projecteuler.net/index.php?section=problems