和大多数人一样,我认为自己在这个领域比平均水平高一点。我收入丰厚,获得晋升,而且从没有真正的问题获得良好的推荐信或找到工作。与我合作的程序员认为他们是最好的。被其他不良程序员包围的不良程序员似乎是最自欺欺人的。
我当然不是完美的。我确实会犯错。我确实错过了最后期限。但是我想我做出的动作与“其他优秀程序员”所做的动作相同。问题是我将“其他优秀的程序员”定义为“像我一样的人”。
所以,我想知道,程序员有什么办法可以进行某种合理的自我评估?
或者,如果诸如好与坏之类的术语定义不清,那么程序员如何诚实地确定自己的长处和短处,以便他们可以利用前者的优势并努力改善后者?
#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 楼
自我评估非常困难。不称职的人往往对自己的能力进行夸大的评估。一个好的指标是您作为程序员自己尊敬的其他人是否想使用/使用您编写的代码。如果有机会直接与您合作,或者继承您编写的代码,那么您会拒绝吗?勉强同意?还是抓住机会学习您的工作?如果是同龄人,不是下属或认为自己使您感觉良好的人会从中受益的人,则该技术会更好。
评论
你为什么想知道?没有人能定义什么是“好”。如果您按预期完成了工作并获得了不错的报酬,那就足够了。