和大多数人一样,我认为自己在这个领域比平均水平高一点。我收入丰厚,获得晋升,而且从没有真正的问题获得良好的推荐信或找到工作。与我合作的程序员认为他们是最好的。被其他不良程序员包围的不良程序员似乎是最自欺欺人的。

我当然不是完美的。我确实会犯错。我确实错过了最后期限。但是我想我做出的动作与“其他优秀程序员”所做的动作相同。问题是我将“其他优秀的程序员”定义为“像我一样的人”。

所以,我想知道,程序员有什么办法可以进行某种合理的自我评估?

或者,如果诸如好与坏之类的术语定义不清,那么程序员如何诚实地确定自己的长处和短处,以便他们可以利用前者的优势并努力改善后者?

评论

你为什么想知道?没有人能定义什么是“好”。如果您按预期完成了工作并获得了不错的报酬,那就足够了。

#1 楼

一个好的程序员知道他们必须继续学习和成长。他们竭尽全力,承认失败并从失败中汲取教训。

他们具有非凡的沟通能力。他们不仅能够向外行人解释复杂的技术术语,而且会竭尽所能地扮演自己的想法的魔鬼代言人,以确保他们为客户提供最佳选择。

最好的程序员知道并接受,做事有不只一种方法,并不是每个问题都是钉子,而且因为总有比做自己打算不断学习的更好的方法来做某事新技术,新技术和新知识。

一个优秀的程序员喜欢编程,即使他们每周已经花费80多个小时进行编程,他们也会在业余时间这样做。

一个好的程序员知道她/他不是一个优秀的程序员。真正伟大的程序员并不存在,只有那些声称自己很棒的人,而那些知道自己不是伟大的人。

评论


你把这个钉在头上! IMO!

– Jose B.
08年9月9日在17:37

我认为,更普遍的推论是,当您关心自己的工作时,您会擅长于自己的工作。

–C Hogg
08年9月9日在21:32

说得好。关于自我/谦卑,我是70年代通过麻省理工学院AI实验室学习的。最好的编码人员有一定的谦虚信心。如果您认为自己在做重要的事情,那可能是错的,但是如果您不这样做,那可能是对的。

–迈克·邓拉维(Mike Dunlavey)
08年12月18日在21:44

我部分同意第2段,“他们不仅能够向非专业人士解释复杂的技术术语……”我认识一些优秀的程序员。但是他们无法向圈子外的任何人解释任何事情。他们也无法理解外行想说的话。他们俩都用“大灯鹿”的眼睛看着对方。我要说的是他们非常交流。对于您的其余观点,我将总结一下,说一个好的程序员要谦虚,并且愿意以他/她所知道的最佳方式分享他/她的知识。

– IAbstract
2010年1月31日在7:04

“即使他们每周已经花费80多个小时进行编程,他们也会在业余时间这样做。”摆脱这个愚蠢的说法,其余的我都会完全同意。真正的“优秀程序员”意识到,在每周工作80多个小时时,要进行除编程之外的其他工作(业余时间)对于身心健康以及工作效率至关重要。

–灰
2010-6-14 12:42

#2 楼

正如Paul Graham在此广告连播中雄辩地指出的那样,您不能这样做。只有您的同事可以告诉您。

评论


这个答案比公认的要好得多。。。

–康斯坦丁
08-09-29在19:03

您的同事无法判断您是否称职。他们只会认为您有奇怪的见解,并对无关紧要的话题进行激烈辩论。

– KeyserSoze
2009年6月9日19:22

同意,keyersoze。然后,没有人可以告诉您,您将永远不会知道,除非您找到一些新的同事。从长远来看,我认为与没有能力的人一起工作并不值得。

–马拉奇
09年9月9日在20:28

@keysersoze,但如果我实际上不称职,我的同事可能会很称职,但我太愚蠢而无法意识到;)

–灰
09年12月29日在13:35

保罗·格雷厄姆(Paul Graham)还写了一篇关于优秀程序员的文章,指出他对任命优秀程序员不知所措,因为他从未真正选择过显而易见的选择(例如Richard Stallman,Linus Torvalds等)。

– David Thornley
2010年1月12日17:58

#3 楼

我总是发现,通过做两件事来判断您的性能是最容易的。

当然,问题在于找到优秀的程序员,然后成为一名优秀的程序员也不只是编码。您需要能够在小组中良好地工作,但也要自己良好地工作。

现在,为了讨论这个话题,我将引用罗伯特·A·海因莱因及其对这个问题的看法: ]应该能够更换尿布,计划入侵,屠宰猪,连接船,
设计建筑物,写十四行诗,结清帐户,建造墙,设置
骨头,安抚垂死的人,接受命令,
发出命令,合作,单独行动,
解方程,分析新的问题,沥青肥料,编程
电脑,煮一顿美味的饭菜,有效地战斗,
英勇地死。
昆虫专长。” />

评论


有点让我想起了这样的话:“愚蠢的人包围着聪明的人。聪明的人包围着不同意他们的聪明的人。”

–山姆·哈斯勒
08年9月9日在21:21

我敢说这是Heinlein最好的报价。

–安东尼·波茨
08年10月2日在17:19

问题是其他程序员可能会或可能不会达到或超过您的水平,但他们可能不想侮辱您。我没有从与我合作的三个程序员那里得到太多反馈,而从另外两个程序员那里得到的反馈也很少,我认为这是“好”的。

–MetroidFan2002
09年2月15日在6:06

...虽然我们被定型为反社会,但其他程序员可能会通过不提供有关问题的反馈来抢先保护代码。实际上,它们可能会忽略代码实际问题,以免造成社会问题。

–MetroidFan2002
09年2月15日在6:07

#4 楼

这是适合您的程序员能力列表:http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm

评论


我在这些项目中占90%的情况下是3-4,而且我不能对狗屎编码。至少不太快。

– mannicken
09年2月15日在4:15

-1为购物清单。

–丹
09年2月15日在5:02

-1-有一定的算法知识,但是当有人采访您时,绝不会将所有这些东西存储在您的脑海中。那就是Wikipedia,Google和stackoverflow的目的。

–MetroidFan2002
09年2月15日在6:09

同意该清单几乎没有用;如果您正在寻找练习,这是一个很好的想法来源,但是对于确定您是“优秀程序员”而言,它并不是很有用。 “优秀程序员”比随意列出的态度更重要。

– cookiecaper
09年4月13日在13:54

+1。尽管我不同意上面所说的内容,但我仍然认为这是一个很好的清单。谢谢您的发布。这些绝对是我评估应聘程序员的标准。而@macnnicken,它只会进入第3级。:)

– EMP
2010年5月28日在7:10

#5 楼

Jeff有一个我最喜欢的关于该主题的博客文章...为什么我是世界上最好的程序员

“ ...要比其他人做得更好不是我们的工作;我们只需要比一年前更好。“

评论


我喜欢那句话,很好。它是关于编程的全部内容。 “做得更好,每天都知道。”

–法比奥·安特尼斯(FábioAntunes)
09-10-25在13:17

在过去的12年中,每年我都回头看一年前编写的代码,并认为它简直是垃圾。也许我做对了!没有什么比停滞不前的程序员更糟糕的了。

–安德鲁·赫奇斯(Andrew Hedges)
2010-2-8在19:08

#6 楼

我认为您所提问题的事实证明您不是一个糟糕的程序员,所以,我认为您只差一半。 :)

根据我的经验,糟糕的程序员总是认为自己是伟大的程序员。

评论


你有多少经验?

–最疯狂
08年9月19日在20:08

我的经验与您的经验一致,这就是为什么每当我开始认为自己很好时都会感到担心。

–克里斯托弗·约翰逊(Kristopher Johnson)
2010年1月12日17:37

#7 楼

@尼克(Dick Kruger Effect)解释了@Nick的陈述“错误的程序员总是认为自己是伟大的程序员...”,该结论概括说,对某个主题了解很少的人常常高估了他们实际知道的知识。

变得有点滑稽...您认为您所了解的越少,您就越可能会做....除非您当然是一个真正的自我意识白痴。倾向于认为您通常具有的更大影响力(而非控制力)是一个很好的指标。如果您看到别人效法您的领导,或者接手您的做法,那么您就走对了。

评论


邓宁-克鲁格效应令人震惊。每当我对所做的事情感到满意时,我都想尝试并牢记这一点!

–尼尔·威廉姆斯(Neil Williams)
08年10月2日在18:04

优秀的程序员不会提出问题,然后投票否决答案,因为他们不喜欢它们。他们的行为并不像他们知道新主题中的所有知识一样,当专家为他们回答问题时,他们不会投反对票,因为这不是他们想要的。

–Pickle抽水机
09年4月11日在7:16

我希望我早在大学时就有了D-K的线索,那时候我就是一个例子。

– DarenW
10年7月25日在21:26

#8 楼

获得最多票数的答案确实令人沮丧。基本上,它说您没有编程之外的生活。家人呢社区?爱好?我们必须从事什么工作才能沉迷于被视为“好”的痴迷点?我真的认为我们需要对此有所了解。

评论


我同意。在成为一名优秀的程序员之前,我们应该努力成为一名出色的人。

–iPhoney
2010-2-4在5:31

术语501程序员的好地方:hanselman.com/blog/…

–ChrisFletcher
2012年4月17日在21:34

#9 楼

您可以尝试参加TopCoder算法竞赛。

#10 楼


我并不完美。我犯错了。我错过了最后期限。但是我认为我做出的动作与“其他优秀程序员”所做的动作相同。

许多最糟糕的程序员倾向于认为他们已经知道所有要了解的内容,而没有意识到自己的局限性。结果,他们从不提高自己的技能。

#11 楼

如果您从一年前的代码中查看代码,然后想,老兄,我可以做得更好,那您可能还不错:)。

评论


我只是看着自己的世界程序,然后想着,现在它效率更高了,我好吗? ks

–沙丁鱼
09年4月12日在9:56

#12 楼

这是一些不良编程的现实例子。当然,在100个地方都复制/粘贴了类似的代码。盖伊被解雇了,但我听说他又得到了一份不错的工作。享受:

a)

if (! TableObject.loadList("sql condition").isEmpty()) {  
    List<TableObject> myList = TableObject.loadList("sql condition");  
    ...  
}


b)

public static Type getInstance() {  
    if (instance == null) {  
        return new Type();  
    }  
    return instance;  
}



getForeignKeyObjectProperty1() {  
    return ForeignKeyObject.loadByPrimaryKey(foreignId).getProperty1();  
}  

getForeignKeyObjectProperty2() {  
    return ForeignKeyObject.loadByPrimaryKey(foreignId).getProperty2();  
}  

...

getForeignKeyObjectPropertyN() {
    return ForeignKeyObject.loadByPrimaryKey(foreignId).getPropertyN();
}


d)

public boolean isHasImage() throws SQLException {
    StringBuilder query = new StringBuilder();
    query.append("select user_name");
    query.append(" from user");
    query.append(" where has_image = 1");
    query.append(" and user_name ='"+getUserName()+"' and user_image is not null");
    Connection c = Database.getInstance().getConnection();
    Statement st = c.createStatement();

    try {
        ResultSet rs = st.executeQuery(query.toString());
        if (rs.hasNext()) {
            return true;
        } else {
            return false;
        }
    } finally {
        st.close();
    }
}


如果您编写这种代码,请停止编程。如果您在此代码中看不到任何奇怪的地方,请停止编程。否则,你还不错,所以你甚至可能还不错:)我受雇后几个月,他被解雇了,所以我无法任教任何人。上面的例子只是我脑海中的一切-他所接触的所有代码和平都以各种富有想象力的方式存在缺陷。在他离开公司后,大多数东西都开始泛滥,因为只有那时其他人才能看到代码的某些部分。他通常是个好人,喜欢和其他人聊天。但是他永远不会成为一个好的程序员,就像我永远不会成为一个好的画家或作家之类。

例如,来代替他的那个人当时也是本科生。他攻读的大学以管理学和编程学闻名。从某种意义上来说,他并不是太怪异,他可以编写任何有趣的东西,或者可以坐在家里阅读有关Java或编程的知识,但是他做得很好。他迅速调整并开始生成有用且可维护的代码。有些人可以这样做,而其他人则不能,只需每天询问一下。

评论


任何人都可以发布任意代码,并声称不理解该代码的人是愚蠢的。我将站在哑巴行中。

– Ian P
09年2月15日在4:03

一个好的程序员本来会花时间(也许2分钟?)向他/她的同事解释这样的代码出了什么问题。

–窗帘狗
09年4月12日在11:33

同意,一个好的程序员会指出为什么这段代码“不好”,并且可以帮助他的同事变得更好而不是嘲笑他。

–凯尔·法里斯(KyleFarris)
09年4月13日在14:07

我希望那家伙找到一份工作,他的同事帮助他成长而不是责骂他。

– Robert S.
09年4月14日在14:36

@Morph:实例字段从未分配过Type实例,因此始终为null =)

–missingfaktor
2010年1月21日,下午5:12

#13 楼

您可以尝试一些方法,以更好地了解如何堆叠。


比较代码评论。看看谁的评论发现了更多问题。
问他们什么时候读的是与正常学习课程无关的书。然后问问自己同样的事情。
问问自己,谁将新想法带入公司(以及它们如何发挥作用)。
(至少),是否存在某种形式的公司认可? >
(我之所以放这最后一个,是因为在我的上一家公司中,一位程序员在三年中两次获得“年度开发人员”奖。他离开后,我们发现了至少20条值得TDWTF的代码片段。 ,但不一定很好。管理层只是不知道区别。)

评论


为“比较代码评论” +1。这似乎是一件新颖且非常实用的事情。

– j_random_hacker
09年5月27日13:14

#14 楼

允许您尊重的其他开发人员一起工作或查看您的代码。

让人们实际使用您喜欢的东西并查看他们的想法。

-Kevin Fairchild

#15 楼

您能理解吗?

if(rp->p_flag&SSWAP) {
	rp->p_flag =& ~SSWAP;
	aretu(u.u_ssav);
}


:-)

评论


改装下来??!?!!?!?!有人不知道他们的历史。 :-)

–伊恩持有人
08-10-2 15:52

您不应该理解这一点

–mike511
08年10月2日在17:07

这是对某事的引用吗?无论如何,如果是C / C ++代码,则可能在第二行中用“&=“代替“ =&”。 (我之所以说是“可能的”,是因为通过在C ++中重载operator〜(),您可以使上面的代码得以编译……但是我很确定那不是您想要的。)

– j_random_hacker
09年5月27日14:36

@j_random_hacker我怀疑=&是正确的,因为此代码是由Dennis Ritchie编写的。参见cm.bell-labs.com/who/dmr/odd.html

–伊恩持有人
2009年6月7日在22:07

@ IainMH,dmr也承认这是越野车。

–user1249
2011年3月19日在20:24

#16 楼

仅仅想到您需要自我评估就可以使您胜过其他人。技巧是找到合适的人。

#17 楼

谁是一个好的程序员总是主观的。我同意尼克的观点,即简单地提出问题是朝正确方向迈出的一步。我认为不断学习和改进的愿望才是一个好的程序员。

#18 楼

对我来说,最好的程序员从来没有在找工作。他们仅凭自己的声誉就可以提供新职位。因此,如果他们愿意的话,一个好的程序员可能会从先前的雇主那里得到回报。否则,一个好的程序员可能会向前同事询问是否要为他们在新公司工作。

就优点/缺点而言,您可能已经知道它们。如果没有,请向团队中的高级人员咨询。甚至不必成为开发人员。一个好的项目经理知道程序员的优势/劣势。此外,定义一个好的程序员的特征不仅限于代码。了解业务,沟通技巧,判断力等都是在IDE之外执行的。

评论


你可能是一个伟大的程序员,一个可怕的人。您是否愿意与一个可能不太了解但乐于学习的好人一起工作,或者总以各种方式都是出色的程序员呢?因此,您所描述的是好的员工,而不是好的程序员。 ;)

–Pickle抽水机
09年4月11日在10:57

我不知道此评论的来源。我要解决的两个主要问题是“如何知道自己是一名优秀的程序员?”和“我怎么知道我的长处/短处?”这些关于混蛋和可怕的人的话题是什么。我对这些事情有意见,但我认为它们与我的回应无关。

–马特
09年4月17日在17:37

获得声誉通常更多是关乎公关和信心,而不是实际能力。

– David Thornley
2010年1月12日在18:04

假设“能力”是技术能力,那么成为一个好的程序员比“实际能力”还重要。技术能力只是难题的一部分。

–马特
2010年1月12日19:56

#19 楼

我认为这就像想知道您如何才能知道自己是否是一个好人。我认为这不是您可以自己准确确定的东西(至少这很困难-但我认为这可能是不可能的)。

#20 楼

我只是说:如果您对自己的工作充满热情(我的意思是真的很热情),如果您很灵活(另一种语言,新技术,对旧项目的完全翻版-那就做吧!),如果您继续学习,并不断提高自己的技能,永远不要以为自己足够优秀就可以停下来-那么你就是一个优秀的程序员!

#21 楼

95%的程序员认为自己是5%的顶级程序员之一,另外5%是经理。因此,如果您是经理,那么您可能不是一个好的程序员,否则您可能不是。

评论


...并且25%知道他们在前1%;)

–Pickle抽水机
09年4月11日在8:18

#22 楼

我认为这与您的编程技能有关。成为一名优秀的程序员很好,但是如果您整天都在编写银行软件,那又有什么关系呢(没有冒犯性)。

要真正向自己证明自己是一名优秀的程序员,请执行一个有趣的困难的附带项目。这说明了几件事:您对自己的业余时间编程感兴趣并且真正地喜欢这个主题-这对于成为一名优秀的程序员至关重要。它显示出多功能性,因为您可以将自己的技能扩展到工作环境之外。它也显示了动力和创造力:您自己定义了一个问题,并正在采取措施解决。

所有这些方面对我来说都是一个好的程序员。

#23 楼

我的回答在政治上是错误的。但是,我实际上是一家初创企业的创始人,我的工作是雇用最好的程序员。 br /> 1个字:IQ。

IQ用于编程,而高度则用于篮筐球手。我的计算机科学老师告诉我,有一个标准可以正确预测谁将在编程课程中取得成功。高中数学成绩。无论如何,这些都是有效的智商。

这可能令人惊讶。我们被告知编程是大学学位的工作。猜猜是什么,我不在乎学位。我只关心3件事。


编程技能(可以测试)。聪明才智。
常识(不要太低)人们的技能。
不幸的是,智商只能衡量一件事。所以我做了一些测试。

我问人们一些问题。我希望小学生能回答一个简单的问题。

我问类似的问题: 7:35
如果我从雅加达去三宝垄,想保持60公里/小时的速度。然后在最初的2个小时,我以每小时100公里的速度行驶。在接下来的旅程中,我应该以多快的速度行驶,以使我的平均速度达到60公里/小时?只有常识。任何具有智商的小学生都可以回答。

MOST大学毕业生不能。现在想象一下,如果有人无法回答?他可以编程吗?想一想。您必须多久指定一次他应该做什么?

您也可以问一些像Microsoft这样的需要创新的问题。您可以提出有关如何在天平上称量8个球的问题,以了解哪个是最重的。这些问题的问题在于它涉及运气。但是,有些很简单,这应该是最低要求。聘请一名合法的程序员可以降低其他人的士气。好的程序员可以解决google jam代码,并可以预测哪些问题更容易。

#24 楼

恕我直言,如果您

-您具有良好的理论背景,那么您就是一名优秀的程序员。在大多数情况下,重新发明轮子以及算法或框架都是在浪费时间。

-有时可以从歪斜的角度看到事物和问题。这可能会带您找到创新的解决方案。

-您花费时间和精力来更新最佳工具和最佳技能。

-您的代码易于修改。如果您设计干净,优雅且易于理解的代码,则对其进行修改不会很麻烦。

-如果您的代码/错误率相当高。我知道这看似微不足道,但我知道许多富有创造力和技能的开发人员仍然很容易犯小错误。这极大地削弱了它们的有效性和实用性。

-您周围的人都知道,您可以帮助决定做哪些选择

-您可以使用不同的工具解决问题。糟糕的程序员会针对他们遇到的任何问题继续使用相同的工具(无论是语言,技术还是体系结构等)

-您不断学习,感到好奇。

-这些年来,您的编程很有趣

#25 楼


“先生,我经历过从阿尔法到奥马哈的那段时间,我告诉你,
一个人知道的越少,他发出的噪音就越大,
越高,
他命令的薪水。“
Mark Twain


...我的结论是,好的程序员命令的薪水低,噪音小...:)

#26 楼

最佳程序员:按时完成最少的代码语句即可完成任务。

#27 楼

每个度量标准中的代码有多少个bug? (即每行错误)
需要添加新功能时必须重新编码多少代码?
您的同事在修改代码时是否遇到问题?

最终,这些年来,“什么是质量代码”问题仍然是一个备受争议的话题。

#28 楼

我非常喜欢亚当五世的上述话。

除了其他人所说的以外,请查看您的工作的可维护性和支持历史。如果您的代码对维护的要求很高,并且一直在固定或难以更改,则可以指示它们的质量。但是这些也可能是需求不佳的指标。

评论


“但是这些也可能表明需求不佳。”很可能是我们这里的情况。糟糕的要求使我们重写了整个模块。

– jerbersoft
09-09-2 15:23

#29 楼

自我评估非常困难。不称职的人往往对自己的能力进行夸大的评估。

一个好的指标是您作为程序员自己尊敬的其他人是否想使用/使用您编写的代码。如果有机会直接与您合作,或者继承您编写的代码,那么您会拒绝吗?勉强同意?还是抓住机会学习您的工作?如果是同龄人,不是下属或认为自己使您感觉良好的人会从中受益的人,则该技术会更好。

#30 楼

如果您真的想找出答案,请向您的同行提交一些代码,并要求进行(建设性的)代码审查。在最坏的情况下,您会学到一些东西。您在此站点上寻求启发的事实已经使您与未受洗的群众区分开。 (除非您只是在这里自我抚摸。:-)