什么时候可以将某人视为坏程序员?[关闭]


57

您如何看待程序员对自己所做的事情不好?

如果可能...他/她应该如何改善?


3
因为该人不接受与编程相关的网页上的答案。开玩笑:-)
丹尼尔(Daniel)

1
@EvanKroske:不,那是不对的。...社区Wiki的存在允许对帖子进行协作编辑。另请参阅:Our Meta-标签:community-wiki
Tamara Wijsman

在很多问题中,不可能接受一个答案。另请参阅:我们的元-搜索:接受
Tamara Wijsman 2010年

并非每个问题都能得到真正解决问题的答案。
罗伦·佩希特尔

Answers:


134

当他们无法从自己的错误和同行评议中吸取教训时。

在某个时候,我们都是绿色的。但是,如果您没有进步或试图变得更好,那么您就是一个糟糕的程序员。


4
同意-您必须有一个反馈循环,始终从错误中学习。
Marcel Lamothe

1
@PSU好说。就像其他手艺一样,程序员是商人,也不是完美的,总是学习,但是如果您不能从错误中学习,就不能提高手艺。
克里斯,2010年

2
这是一个非常宽泛的定义;它不仅限于程序员。它适用于科学家,厨师,运动员,翻译,门卫,摄影师以及任何行业。
RegDwight

13
每个人每周至少一次。
MIA 2010年

@RegDwight:你的意思是……?
SamB

125

一个不知道自己不知道并且根本不感兴趣的程序员。


16
如果我可以对此100倍投票,那我会。从长远来看,有点谦虚和渴望学习可以弥补很多。
威廉·皮耶特里

1
Ngu和William也是+1。这是一个糟糕的“程序员”的最典型标准。
fabrik 2010年

当您知道自己不了解很多商品并且尽力而为时,却永远不会了解其中的大部分内容,会发生什么?
史蒂文·埃弗斯

@snOrfus,您找到一位导师来教您……

75

一个很大的警告信号是他们是否是“货运狂热”程序员-意味着他们做事情但不知道为什么要做那些事情(这只是“魔术”)。埃里克·利珀特(Eric Lippert)的精彩帖子在这里

从文章:

理解代码功能但不了解代码功能的程序员。

3
*并且已经在该技术中编码了一段时间
Joe Phillips 2010年

5
这几乎适用于所有曾经使用Java / Spring或Ruby on Rails等框架进行过Web开发的程序员。这些框架充满了普通程序员通常不愿理解的黑魔法。
missingfaktor

3
@Missing Faktor-因此,说这样做的大多数程序员并不是优秀的程序员也不是那么不正确:)
seanmonstar

14
再说一次,假设程序员应该完全了解框架,虚拟机或正在构建代码的任何东西的内部是不现实的。(或者,实际上,是下面所有抽象层的详细信息,直到达到裸机为止。)即使您只知道最相关的部分,也可以成为一个完美的,高效的程序员。
Jonik 2010年

4
@Missing FAKTOR:他们可能不明白库的内部和框架,他们使用精确,但他们至少应该知道在每一件事情代码是:“以蛇鲨的frobber”,“因为文件说,这是需要维护时空连续体”等的完整性
桑布

45

对我来说,一个很大的提示是,当他们询问您或其他程序员的开发问题时,这些问题清楚地表明,他们自己花了绝对零的精力来解决这个问题。

一个必然的结果是,当他们多次问相同的编程问题时,表明他们没有内部化信息。


啊,是的,我和他一起工作。过去时,幸运的是。
Mike Woodhouse,2010年

1
有些甚至无法提出像样的问题,要求您“解决”
deltreme

21

当他们花很长时间解决FizzBu​​zz问题时。


1
我认为可能会有一些初学者有潜力成为优秀的程序员-他们对此有麻烦。
JD Isaacks 2010年

2
如果您正在寻找打算将其塑造和塑造成一个好的程序员的初级程序员,那么初学者很好。但是,这个问题是如此微不足道,完全不需要任何有经验的人来编写。
Matt DiTrolio

8
我认为,成功完成入门级编程课程的任何人都不应花费很多时间来解决这个问题。
EpsilonVector 2010年

4
如果初学者不能解决FizzBu​​zz,则他/他不应该申请编程工作。如果您声称能够编程(例如,通过申请编程工作),则应该能够解决FizzBu​​zz。
Chinmay Kanchi 2010年

1
FizzBu​​zz上的Stackoverflow问题非常值得一看。检出不使用除法或模数的python解决方案。stackoverflow.com/questions/437/...
戈登

21

拒绝学习新技术/新语言的程序员,坚持坚持自己已经知道的知识。


附录:(添加注释下面的破折号)

对此的扩展是那些了解某些技术功能子集但不希望进一步了解它的人。编程语言,编辑器,其他工具...


6
...并且没有充分的理由,我应该补充。
missingfaktor

18

当团队成员是负面的开发者

|# Lines Written| - |# Lines of bugs introduced| - |# Lines of rework required| < 0

意味着由于开发人员不佳,您团队的其他成员必须做更多的工作。 核电厂


1
我同意-这些人可能会对他们的团队造成极大伤害。
Marcel Lamothe

44
嗯...昨天我删除了500行冗余代码,并且没有引入bug。LOC指标被认为有害吗?
Piskvor 2010年

5
大多数指标都很糟糕,LOC指标通常更无用。这里的要点是,一个糟糕的程序员会为团队创造比他/她完成的工作更多的工作。
danivovich

5
LOC指标并非没有用。他们是有害的。此外,在大多数现代语言中,LOC计数非常困难。但是,指标并不是这里的重点。只是说|努力创造| -|工作有误| -|要修复的工作| ...即,如果您花了10个小时的时间花了6个小时来完成某些最终必须修复的事情,而又花了6个小时来完成,那么您就是-2个小时。无论如何,时间实际上就是你想要得到的。
MIA 2010年

1
LOC指标是衡量必须隐藏漏洞的地方的好方法
。– SamB


15

当他们知道有更好的做事方法时,即使时间允许,他们仍然拒绝这样做。


但是在“更好”方面可能存在专家分歧。
DarenW,2010年

@DarenW-我不会说某人是一个糟糕的程序员,因为他们站在一个有争议的话题上,但是当他们在自己的想法中有确定的选择时。
JeffO

15

我个人认为,任何可以查看自己前一段时间编写的代码但没有发现错误的程序员都不是好人。“一会儿”可以随着经验而扩展……我想说的是从几周到一年左右。


5
如果他们找不到任何错误并令他们担心,该怎么办?
SamB

1
更糟糕的是,他们找不到任何错误并尝试修复它。
Toon Krijthe


14

当我在一家小商店里担任团队负责人时,我不得不重新任命几个人(我或我的直接主管没有大量的繁文Tape节和一堆文件就没有解雇能力。)或没有合同续签在当前订婚结束时。列举的某些类型也适用于其他团队负责人,他们几乎持相同观点。在我的书中,将人们带入“不良程序员”类别的事情:

  1. 过去无法训练或僵化
    当“程序员”似乎无法吸收新系统,新工具或任何正在部署的东西时,无论如何进行培训/教育。必须经常重复上述培训。
    当“程序员”仅知道他们10或15年前使用的技术或编码范例时。那已经足够好了,那么为什么要改变它们呢?
  2. 牛仔编码
    员先编码的人,没有计划。“程序员”对生产代码和/或数据进行未经测试的更改,“因为我们现在必须对其进行修复”,然后当“修复”失败时会感到惊讶。
    牛仔绝对不是团队合作者。不需要没有臭气的团队。
  3. 该风向标
    这种“程序员”是迷恋“技术大谈特谈 ”,并认为每一个新的框架,语言,方法或什么是新的,
  4. “大脑子”
    这个“程序员”非常确定自己的才能和能力,以至于做的事情对项目没有多大意义。例如,重写标准库“因为它对我们的系统效率低下”或引入了不适合当前问题的工具和技术。例如在大型机环境中引入Lisp或Forth。
  5. LOC a。Sandbagger
    这个“程序员”使用混淆和错误定向来增加 a。LOC:获得付款的代码行。在这种情况下,我看到的代码是一个接一个的页面,一个又一个的屏幕具有重复的结构和逻辑,只有段落或控件变量名称被更改以增加行数。
  6. 不可或缺的专家
    拥有领域知识以解决当前问题的“程序员”,但是他们“知道”有关它的一切。事实上,如果要乘公共汽车撞他们,那么整个组织就会崩溃。{ 观察:那些认为自己不可或缺的人通常是。(有人知道这种格言的出处吗?)}
  7. Pasta Chef
    这名“程序员”专门研究意大利面条代码,加上没有语法实现的IDE很难遵循的标识符。例如 IndexI1O0,Index1I0O等。
  8. 暑期实习生-特别是步行灾难的亚型
    我的老店过去雇用了许多高中或大学年龄的实习生。有一次,一个部门需要一个小的数据库来跟踪某些设备的使用情况(现在已经过去了,它正在使用dBase III)。这个家伙整个夏天都在编码,但是秋天上大学时并没有完成。他延长了一个星期,然后延长了第二个星期。在第二个星期结束时,我被派去接管了他的项目,并将其带回系统开发部完成。他向我展示了他所做的事情,然后是未完成的部分。起作用的东西很好看,但是应用不完整。当我打开新盒格式化的软盘以获取副本时,他说:“请稍等一会,让我删除测试文件...”,在我无话可说之前,他已删除了一堆文件。
    由于是可疑的种类,当我回到自己的商店时,发现他的申请几乎不过是吸引人的东西,我回到部门并撤回了诺顿​​,并取消删除了他删除的文件,试图找到一些其他的逻辑,即使不完整
    我发现,不是不好的逻辑,而是不好的行为。连接到他正在使用的PC上的打印机是菊花轮打印机。通常安装的字符集是瑞士的变体。删除程序的输出将显示名称,地址,DOB,一些字母代码和某种类型的ID号。格式和布局困扰着我。多个人的所有出生日期都只有法定饮酒年龄。当我在纵横交错的目录中查找它们时,大多数地址都不在那里。当我向主管展示打印输出时,他看着我,说:“驾驶执照,你不觉得吗?” 我说我是这样做的。他说,这就是为什么他在Xerox旁边的垃圾桶中发现所有透明胶片都被切掉的原因。我们的坏男孩做了覆盖物,以调整他和他的朋友的驾驶执照年龄。我们已向当局报告。最近两周付款。

这些只是我不得不使用的一些坏角色。

/ s / BezantSoft


RE“那些认为他们通常不可或缺的人”使我想起了en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
DaveDev


10

除了明显的知识/能力不足之外,如果程序员的代码难以阅读和/或维护,那么它就是一个不好的程序员。


1
当程序员看不懂写得很好的代码时,程序员是一个非常糟糕的人:-)
Maniero 2010年

4
这不是几乎所有人吗?我的意思是,代码难道不是总是比应有的难读和/或难维护吗?
SamB

不。代码总是比编写起来容易阅读。但是我必须维护一些写得很好的代码,以尽可能减少这种痛苦。
Chinmay Kanchi 2010年

10

当没有其他人可以阅读他的代码时。你有多亮都没关系。没有程序员是孤岛。


好吧,如果他正在用Unlambda写作,那么没有人应该能够阅读它。
SamB

同样,当程序员最初花费很少的时间来做某事,然后花费大量的时间来对此进行一些自定义时。我经常看到这种情况的发生,是因为程序员主要复制粘贴代码(这就是为什么要在一开始就这么快),但是随后却要花费很多时间,因为由于缺乏意图,很难(即使对于优秀的程序员)也无法从那里更改代码在开始时编写可定制的代码。
Sandeepan Nath 2011年

7

一个不关注细节的人,总是处于“它起作用,所以我就不理会了。日志中的所有异常都无关紧要”模式。


7

对我来说,程序员分为两类-独奏和团队。

糟糕的独奏程序员是

  • 那些花费太长时间无法完成简单任务的人。
  • 那些无法自己研究自己所做的事情的人。
  • 那些会在几天之内忘记今天的代码并且不能很好地维护自己的代码库的人。
  • 那些不能适应需求变化的人。

糟糕的团队程序员是属于糟糕的单独程序员类别的人员,包括

  • 那些无法与其他团队成员协调的人。
  • 那些不欢迎批评的人。
  • 那些不知道如何对他人有用,以及如何从其他团队成员中受益的人。
  • 那些不会写可读代码的人。
  • 那些为了便于阅读而不发表评论的人。

8
我不记得我是如何实现上周编程的。这不常见吗?我的印象是使用有限的人类记忆只是编程的挑战之一。因此,结构化和记录代码的重要性使我无需记住细节。
詹姆斯

@詹姆斯,请原谅我的英语;)。我的意思是,如果程序员几天后回来查看他/她的代码,却一无所知,那是一个不好的信号。我也不记得几天前我做了什么以及到底做了什么,但是我确定当我查看自己的代码并说“我在想什么?”时,我不必费脑子。
TIA

@James:的确,他应该记录自己的代码,以便不要忘记它的一半有效
SamB 2010年

4

不愿意承认他们不知道答案和/或不愿意查找事物。

如果您不知道,请不要放弃-弄清楚并完成它。


4

在我的经历中,一个重要的警告信号是他们没有评论自己的黑客行为时...。

您知道我的意思:当您因为没有更好的方法而被迫做一些非常棘手的事情时。

优秀的程序员会讨厌这样做,并在行内发表评论,说他们讨厌被这种黑客攻击多少,但别无选择。糟糕的程序员只会加入骇客,而不会发表评论。


3

程序员编写大量代码时显然要安静。非常大的功能,可能是复制/粘贴行或代码块,如果需要则使用更多的方式,等等。这可能是因为程序员不知道标准功能可以做什么,但大部分时间都不是。



3

我将答案从一个封闭的重复主题移到了这里,该主题询问您是否认识到自己是否是一个糟糕的程序员? 在撰写回应时,另一个话题已经关闭。我的回答更直接地解决了另一个提问者提出的问题,如果您理解的话,它将读起来更好。

叹!我的一部分不想添加到这个已经很忙的话题,但是我的另一部分赢了!为什么赢了?为什么我还要在这个特定的多日志中添加更多的单词呢?好吧,因为在某种程度上,我对此的看法可能与以前的许多评论员略有不同。

二进制在计算机上的效果很好:它是“ 1”或“ 0”,“开”或“关”。我们可以使用那两个著名的状态来抽象和编码很多信息。但是,对于人类而言,它往往无法很好地发挥作用:“好”或“坏”,“理智”或“疯狂”,“好”或“邪恶”,“聪明”或“愚蠢”,“肥胖”还是“瘦”,“活着”或“死了?” 这些两极分化的评价总是使我这个充满爱心的人感到非常不满意。无论采用哪种测量方案,我通常都会发现,这种鲜明对比的答案实际上位于一个极点与另一个极点之间的连续区域中,而不是在任何一端。

现在,我已经朝着这种两极分化的趋势进行了斗争,而我个人的解决方案是,我发现对任何这样的评价使用三个词要有用得多:“ 到什么程度!”

因此,我对您的问题的回答是建议您重新表述并问自己:“我在多大程度上是一个糟糕的程序员?” 或者,甚至更好的是,从另一个方向问:“我在多大程度上是一个好的程序员?” 如果您追求真理,那么您可能会成为“坏”程序员和“好”程序员之间的连续体。然后,一旦您设法找到沿着这条路径的大致位置,就可以确定一个稍微接近“好”端的点,即您希望在不久的将来找到自己的点。

如果您没有将该点设置得太远,则可能会使您的后端挂入齿轮并开始朝该方向移动。如果您设法多次迭代这个相当简单的启发式算法,您可能很快就会发现自己太忙于编程而无需再次提出这个问题!哦,如果您尽可能快地,经常地开始敲打键盘上的代码,则可能会取得更快的进步。并且,如果您不时休息一下,请阅读同行编写的一些高质量代码!在当今动态的开源开发中,您可以免费学习精美的免费代码!

因此,我强烈建议您尝试使用我的三个小词,“达到什么程度”,并看看他们可以带您走多远!


2

有人说“这不可能完成”。

我认为这全都与解决问题有关,该工具的实用性应远低于实际完成工作。如果我必须使用MS-Access或汇编语言来解决它,那是时间和金钱的问题,而不是“这无法完成”的问题

警告标志过于注重学术和“适当”的做事方式,而没有过多地关注完成工作。


2
当他说为什么可以做到的时候?
Maniero

1
那么,如何解决停顿问题呢?能做到吗
P Shved

2
这是不好的解雇是不可能的事情,如果它不,反之亦然。
兰德尔·舒尔茨

2
@Randall Schulz:据我从craigslist得知,摇滚明星程序员是负责处理广告代理机构所有开发层(数据库,用户体验,部署,系统管理员和用户支持)的工作,其费用远低于正常水平。其中之一。他们之所以称它们为摇滚明星,是因为每周进行60个小时后,他们的饮食就类似于那些乘坐econoline面包车旅行并不得不以吉他当食物的人。
Dan Monego 2010年

1
是的,我做了一个概括性的概括:),但是..这是要指出一点。“我的专业意见是不应该这样做”更好。更好的“如何以不同的方式解决相同的问题”。我的观点是,好的程序员应该专注于解决方案。“无法完成”,而没有提供选择对客户来说是非常沮丧的。
丹·威廉姆斯




2

那些不懂SOLID,DRY,OOP等原理的人。重要的是要对编程原理和基础有充分的了解,而不是了解特定的技术。那些具有扎实基础的人将能够轻松学习新主题并产生更好的代码。


2

一个不了解中断的嵌入式程序员或执行多任务处理。另外,需要使用位域但不掌握其逻辑运算和移位的程序员。



2

让优秀程序员与新手程序员区别开来的一件事是,他们顽固地坚持以他们使用的任何语言和API来实现自己喜欢的系统。

我曾经继承过一个系统,以前的开发人员在Java中重新实现了在自定义dbf访问库之上分层的大量Ashton Tate DBase III + API。没有使用Java集合框架。

这样一来,他就可以编写外观和行为类似于DBase III +(或可能是Clipper)应用程序的Java / Swing应用程序。

他在此系统中编写的应用具有精简版菜单,当您将lite-bar导航到该选项时,它将打开一个完整的窗口窗体,底部带有一行按钮。就像回到1980年代的时间机器。

这个人显然是一个熟练的开发商。他非常了解自己能够在该项目的时间框架内编写整个系统。他还能够在其他一些内部系统上重用它。

但是他是一个糟糕的程序员,因为他的代码滥用了他工作的系统的功能。他比学习Java / Swing / SQL更愿意花3个月的时间来定制一个可疑收益库。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.