很好奇,编程中的哪些诱惑对您的项目确实有害?

例如,当您真正感到有做某事的冲动,并且相信它将使该项目受益时,或者您只是欺骗自己使其相信了,而一周后,您意识到您还没有解决任何问题真正的问题,但是创建了新的问题,或者在最佳情况下,它使您的内在野兽感到愉悦,而没有明显的影响。

个人而言,我很难不重构不良代码。我处理了很多不良的旧代码,并且当我没有测试证明重构不会破坏任何东西时,需要花一口气才能不碰它。

用户界面上的另一个恶魔,我可以花几个小时更改UI布局,因为我喜欢这样做。有时我告诉自己我正在研究可用性,但事实是我喜欢四处移动按钮。

您的编程恶魔是什么,如何避免它们?

评论

我很幽默,没人能回答您问题的第二部分-“ [以及如何避免它们?”。

有没有人注意到这一直是SE一整天的首要问题。

+1表示“ ...花费大量时间更改UI布局...”,我太经常陷入这个陷阱。

#1 楼

过早的概括是我的大错误。而不是先解决手头的问题并等到有实际需要解决一般情况时,我才总是着眼于一般情况并最后编写大量比所需复杂的代码。

更新:

有关详细说明,请参见“罪过#1-过早概括”。

评论


当建筑宇航员这样做时,我讨厌它!

– ozz
2011-2-24在18:19

哦,metafactoryfactories的快乐:(

–user1249
2011-02-25 8:43

+1“对优秀设计师的研究发现,他们都擅长预测变更”(代码完成2)。能够分辨出可能发生的变化是很好的。然后,您可以通过尽早解决更一般的情况来决定是否有任何收获-是否可以在以后节省时间。有时这是不值得的,以后修改代码也一样容易。

– MarkJ
2011-2-25在12:27

您是否听说过YAGNI(您不需要)原理?

–奥斯卡·梅德罗斯(Oscar Mederos)
2011-2-27在10:47



这个。我将责任归咎于创建漂亮的,通用的和可重用的代码非常令人满意,特别是如果问题本身不是非常具有挑战性和/或只是对您以前所做的事情的重新表述的话。例如,通用的CRUD数据库操作(UI,响应用户操作,对DB进行操作等)。

– cthulhu
2011年3月19日在21:23

#2 楼

“我们将回到此位置并稍后进行修复。我们只需要它现在就可以工作!”

评论


这是绝对的魔鬼。

– alesplin
2011-2-24在22:47

如果可以的话,我会给你+100。 “以后”再也不会发生。第一次做正确或根本不做。

–quickly_now
2011-2-25在2:27

这不是花费大量时间重构错误代码的补充吗?我们可以将世界划分为“稍后会修复”但不能修复的程序员,而第一次尝试将其修复的程序员则花费数小时“重构错误的代码”。

–́Мסž
2011-2-25在4:11

将其重新表述为“我们将返回并修复下一个迭代”,这听起来更加结构化

–克里斯S
2011-02-25 11:11



您必须这样做。如果您将所有时间都花在使它变得完美上,它将永远无法交付。完成该项目,然后对其进行抛光。

–赞·山猫
2011-2-25在21:54

#3 楼

截止日期很遥远,我有足够的时间去做,所以为什么不花一点时间在网上冲浪呢?

评论


将“ web”替换为“ programmers.stackexchange.com” :)

– davidhaskins
2011-02-24 15:38



网络上还有什么值得一读的吗?我忘了还有什么!

–詹姆斯·麦克劳德(James McLeod)
2011-2-24 15:45

亦称“该死,我的世界”

– Johnc
2011-2-25在0:08



@david,那只是网络上的起点-问题是您能走多远...

–user1249
2011-02-25 8:42

同上说,由于敏捷,这不再那么有效了。

–vartec
2011-2-25在10:04

#4 楼

“这只是扔掉的概念验证代码。一旦他们喜欢它,我就会把它做好。”

评论


这称为快速应用程序开发;而且它永远不会在商业环境中工作。 :)

–约翰·卡夫(John Kraft)
2011-2-24在15:40

有趣的是,对我来说却是另一回事—即使只是需要,我也无法让自己编写一次性代码。

–丹
2011-2-24在16:19

我从事金融工作,RAD仍然很强势,尤其是VBA / Excel之类的东西。不过有一个诀窍,RAD不必太草率。

–伊恩
2011-2-24在17:00

有时,您花了两年时间完善的应用程序最终变成了可丢弃的代码,因为更高级别的某个人决定“哦,我们不能这样做”或“别介意”的其他版本。

– PSU
2011-2-24在18:02

这个。我:“这只是我的概念证明。如果您喜欢,我们将编写生产版本。”管理员:“您的版本有效,请发货!”我:“嗯,这还不能涵盖所有使用范围……您已经发货了,不是吗?”

–user4051
2011-2-25在11:43

#5 楼



在发布的前几天重构部分代码。

互联网:所有功能中最大的干扰。

新技术:不能避免接触新技术。

优化:优化,优化。 ..和更多Optimize

完美:从未对代码感到满意。

TODO:缺乏时间的待办事项永远不会做。

时间估算:许多PM并不将其视为“估算”。他们以事实为依据。

承诺:承诺过多。


评论


曾经从事的项目有一个大房间里有100个人,只有2台共享PC可以上网。生产率很高。管理层为所有人提供了互联网,并想知道为什么工作量减少了一半。

–quickly_now
2011-2-25在2:29

关于时间估算...如此之多的经理将其作为谈判的起点(例如讨价还价)。误以为是事实但实际上高于平均水平的人...

–dbkk
2011-2-25在6:45

@quickly_now切断网络可能适用于日常工作,例如数据输入或例行修复,而您无需查找任何内容。对于许多非同寻常的事情(例如,查找API文档/示例代码),Google是您的朋友-花费5倍的时间自行解决。另外,如果人们没有动力并想要分心,他们会找到方法。

–dbkk
2011-2-26在1:12

@dbkk-是的。全部都在Ada中,没有要查找的API,它是在专用硬件上分类的,并且是国家安全级的。将未分类的互联网连接机器放入该环境也是一个安全噩梦。

–quickly_now
2011-2-26在4:17

#6 楼

在存在现有框架和库的情况下,尝试内部构建所有内容成为失败的牺牲品。

评论


有时,现有的框架和库在IT法律上以红色大写标记为Verboten。

–克里斯托弗·马汉(Christopher Mahan)
2011-2-24在17:09

当然,这是相反的想法:使用不熟悉的框架或库,并假定它将满足您的需求,并且一切都会顺利进行。

– Carson63000
2011-2-24在23:27

“但是编写只需要一周的时间,我们的框架将完全按照我们想要的去做,免费的在线版本可能充满了错误”

–́Мסž
2011-02-25 4:13



@Christopher:那将是重新实现(或找到具有可接受许可的其他库)的一个很好的理由。但是,重新实现的原因常常只是NIH。

–研究员
2011-2-25在10:10

@卡森:+1 :-)

– Macke
2011-2-26在17:05

#7 楼

我经常遇到的恶魔:过早的优化和过度设计。

我仍然无法避免他们100%...

评论


+1用于过度设计。我曾经为.ini文件,XML文件,数据库表和网络套接字编写了带有“配置参数适配器”的完整“配置框架”(因为每个人都希望托管配置Web服务,对吧?)

– TMN
2011-2-24在16:53

过早的工程?

–克里斯托弗·马汉(Christopher Mahan)
2011-2-24在17:07

@Chris“过早设计”也适用。其他答案中也提到了它。我知道那是我的宝贝。

–马修·沙利(Matthew Scharley)
2011-2-24在22:40

过早的过度优化的大型工程怎么样?

– Newtopian
2011-2-25在1:46

这是我的。我把责任归咎于管理,这给了我自由的统治/遥遥无期的期限,而不是给自己特定组件的期限。

– cthulhu
2011-2-25在10:06

#8 楼

过于乐观的估计值
当经理盯着你凝视时,你会感到比给你的直觉要低的那种强烈的感觉告诉你……不要这么做!
毕竟,直觉可能已经太低了!

评论


当他们问您是否真的需要那么长时间时,只需说“是”,然后静静地坐着直到他们感到尴尬...

– PeterAllenWebb
2011-2-25在0:39



我的大学教授曾经告诉我,“找出您的最佳估计,然后加倍。”到目前为止,它对我有用。

–zzzzBov
2011-2-25在1:39

或者,尝试使用SMBC方法。

–甜蜜地
2011-02-25 6:29



我的一位老老板将开发人员的估算提高了三倍,然后又与客户谈判达成双倍的价格。客户认为他们达成了交易,开发人员获得了所需的时间,即使他们不知道。双赢!

– DaveE
2011-2-26在1:11

基于证据的计划可能会解决此问题:joelonsoftware.com/items/2007/10/26.html

–宫阪丽
2011-2-26在11:43

#9 楼

纯粹由于您刚刚学过而在项目中使用技术/工具/语言。

试图证明您是一名优秀的开发人员。

考虑代码您写给你了。

评论


如果我每次都只能投票。幸运的是,一半的解决方案都还不错。一半没有。

–丹
2011-2-24 15:29

或者您还没有学过的一个。只是不要忘记束缚您的马刺,因为这将是一段漫长的旅程。

–伊文·普莱斯
2011-3-18在13:08



#10 楼

我休息一下,看看stackoverflow.com;)

评论


当堆栈溢出是这些问题之一的答案时,我总是很喜欢

– Bill Leeper
2011-2-26在16:30

#11 楼

最糟糕的诱惑是:



哦,好吧..我想一个肮脏的小把戏/ hack /修复不会受伤。



猜猜是什么,它确实很疼。 :)



评论


“网关修复”

– Mark C
2011-2-24 15:33

使用goto语句将导致猛禽攻击。

– Maxpm
2011-2-25在16:25

@Maxpm:好主意!包括在内。

– Goran Jovic
2011-2-25在16:32



@Mark C,什么是网关修复程序?我的gøøgle-fu还不够好。

–user1249
2011-2-25在16:59

@ThorbjørnRavn Andersen:en.wikipedia.org/wiki/Gateway_drug_theory

–吉米
2011-2-26在0:24

#12 楼

忘记编写代码是解决问题的最后手段。

评论


+1我以为在我阅读本文之前,您一直倾向于浏览轨道架构。好东西...

–伊文·普莱斯
2011年3月18日在13:16

#13 楼

Feature Creep

制定计划,坚持并部署。然后返回并添加人们要求的内容。

我已经一遍又一遍地看到了。您坐下来,进行设计,然后开始编码。用户听到一些关于他们最喜欢的功能“丢失”的胡说八道,然后开始游说它。您的老板要求您在第11个小时添加它,这会破坏部署,并在所有地方引入错误,而3个月后,每个人都安顿下来后,系统要求您删除它,因为没人知道为什么要放置首先是糟糕的复古功能!您能否说出其余的设计毫无意义?

评论


保留规范未冻结并开放作为优惠,因为第一位PM(现已被解雇)对软件开发一无所知,并设计了完全不切实际的发布时间表。有史以来最糟糕的想法。

–伊文·普莱斯
2011年3月18日在13:16

#14 楼


添加更多功能
比赛具有此功能。因此,这是必须具备的功能,因此比分析策略,定位等要多得多的编程。
竞争对手没有此功能。因此,这是一个与众不同的功能,因此比分析策略,定位等要多编程。
通过更多编程来解决业务问题。例如,无法通过对更多功能进行编程来获得更好的管理网站托管Linux服务器的专业知识。有时,您只需要学习如何解决问题,而不必将整个内容重新编码为C#.Net
,通过更多的编程解决营销问题。例如,滥用Seth Godin的“紫牛”概念,即您通过在产品中编程更多功能使其成为“紫牛”来间接解决营销问题。有时,它只是一个突变怪物。
通过更多编程来解决生产力问题,使您自己辩解说,编写此脚本所花的时间将在未来数小时内节省,而不是实际编程真正的重要内容
代码,但尚未编码,因为您想“正确处理”
编码一个肮脏的版本,并承诺您将“以后做得更好”,但是从不回过头来“做得更好”
样机或站点地图,因为它“太麻烦了”。我可以截取竞争对手的页面,以获取模型和徒手绘制的站点地图“以后”,这是从来没有的。然后直接进入我想像中的第一页进行编程。

自白:我个人犯了错误1、3、7、8。我也犯了2、4、5、6但是我经常对我自欺欺人。

我目前正在补救9.

编辑
没有意识到这个问题需要我们提出解决方案。

1)添加更多功能
不要这样做。与您的企业,市场营销,创始人,顾问等合作,将您的应用程序简化为一件事情。

阅读有关Twitter,Groupon等的内容,了解他们如何将事情分解为仅一件事,从而导致他们取得成功。

如果您认为只有在要建立大公司时才行,请再三考虑。此行的Ctrl + F“在软件中添加的功能越多,其销售情况就越差。(不用说,对于大多数软件开发人员来说,这是很不直观的。)”

2 )比赛具有此功能。因此,这是必须具有的功能

请参阅解决方案1 ​​

3)竞争对手没有此功能。所以这是一个与众不同的功能

请参阅解决方案1 ​​

4)通过更多编程来解决业务问题。

如果您需要雇用某人来教您,进行咨询或为您做咨询,然后记录下他的做法,以便下次可以自己进行。去做就对了!!不要重写代码,不要通过GO,不要收取200美元。

5)通过更多的编程解决营销问题。

如果人们不了解您的身份,销售,这是一个营销问题。返回解决方案1并进行透视。

6)通过更多编程解决生产力问题

等等。

等待,直到您感觉自己的生产率受到特定生产率问题的困扰超过2周,并且有可能再发生2周。

现在,评估一下编写脚本来解决此问题所花费的时间。请记住要用最差的估计值乘以2。

将您的估计值乘以小时费率。

现在查看备用解决方案:外包,现成的解决方案,不要对此做任何事情,等等。

选择最经济高效的解决方案。

坚持下去。

7)计划进行编码,但尚未进行编码,因为您想“正确处理”

去运动吧。您会感觉到内啡肽的涌动,这会激发您的屁股并让您计划采取行动。我知道这是因为我只是做了5x5卧推和5x5蹲坐。

8)编写一个脏版本,并保证您会“以后再做得更好”,但从不回过头来“把它做得更好”

在GTD中设置股票代码文件系统。并积极跟进。遵守对自己和他人的所有承诺。

9)不要做一个模型或站点地图,因为它“太麻烦了”。

花75美元在balsamiq模型桌面上版。我知道这是因为我3周前买了它。这使我重做了我的模型,因为即使我在现实世界中的绘画很糟糕,我也像一位艺术家,建筑师和有远见的设计师一样,一并成为了现实。 balsamiq中使用的字体不自觉地提醒您这只是一个模型,而不是固定在RAD中的石头。

结束编辑

评论


+1了这个答案,但我发现它有点难以阅读。我不太了解前9点的内容。您介意澄清吗?还是不错。

–user39685
13年1月17日在22:57

@MattFenwick嗨,谢谢您的+1。第1-5点通常适用于创建要销售的产品的场景,尽管您也可以将其应用于可能找到最佳答案的趋势导致您对现有技术进行广泛研究的场景。例如,在研究中。

– Kim Stacks
2013年1月19日1:00



第6-9点与程序员的神经质倾向有关。我在某处(找不到)发现设计师总是会遇到设计解决方案中的任何问题。具有营销解决方案的营销人员;和一个有代码解决方案的程序员。是的,可怕的是“当您拥有一把金锤时,您所看到的只是指甲综合症”。这在第6点中特别明显)通过更多编程来解决生产力问题

– Kim Stacks
2013年1月19日在1:02



@MattFenwick对不起,如果您对我的名字感到困惑。写下此答案后,我更改了昵称。我发现您的背景更多是在研究中。我的回答主要来自我开发销售解决方案的经验。但是我敢肯定,因为我们俩都从事编程工作,所以我和您的工作之间存在某些相似之处。

– Kim Stacks
13年1月19日,下午1:05

#15 楼

几杯啤酒将帮助我更好,更长时间地工作。

评论


等等...你的意思不是吗? (xkcd.com/323)

–攀爬
2011-2-24在16:15

@Craige:在21年的饮酒经验和20年的专业软件工程师经验之后,我仍在从事校准工作。

–亚当·克罗斯兰(Adam Crossland)
2011-2-24在16:17

@adam,您花了一年的时间才能成为一名工程师?

–user1249
2011-02-25 8:43

喝啤酒时编码可帮助您创建非常受欢迎的社交网络,这些社交网络将在几年内价值数十亿美元。是的,我在电影中看到了。

– janosrusiczki
2011-2-25在9:36

@Kitsched:是的!尤其是如果您要盗用别人的现有设计。

–梅森·惠勒
2011-02-25 22:39

#16 楼

“是的,我可以在一天内重构出这行2000行的意大利细面条……”

评论


另一种选择是:“新手[谁对软件或其代码的结构一无所知]什么也没做,他可以修复它”。奖励指向该家伙甚至从未使用过编写代码的语言。

–狂话
2011-2-24在16:15

#17 楼


“我可以不用测试就可以解决。
测试太难了。”


这是邪恶的兄弟,


“我必须对此进行测试,不管测试写或理解有多难。


评论


如果难以编写测试,则可能没有正确编写程序:)

– Merlyn Morgan-Graham
2011-02-25 6:39

@Merylyn Morgan-Graham,非常正确。但是,有些领域(例如并发性)很难测试。

–韦恩·康拉德
2011-2-25在13:21

@Merlyn:如果您发现自己编写了一个指令模拟器,以便可以在正确的位置强制进行上下文切换,那么您在并发测试中可能走得太远了。 :)

–赞·山猫
2011年9月30日21:11在

@Zan:我同意-在必要的时候,我会推迟开发人员并尝试让他们重构代码并让我插入模拟。我在研究Big-O的高级语言方面进行工作,优化了瓶颈,主要是为了数据的完整性而不是原始速度来考虑并发性,然后才进行并发(并且通常都不考虑并发性,因为它的运行速度足够快)框)。

– Merlyn Morgan-Graham
2011年11月6日18:39



#18 楼

拖延和乐观的任务估计是我最大的罪过。

第一个方法是拉伸,俯卧撑或引体向上(或其他体育锻炼),第二个方法则是悲观情绪。
/>

评论


澄清...通过“乐观的任务估计”,您的意思是“狗屎容易综合症”吧? :)

–伊文·普莱斯
2011-3-18在16:56

@Evan Plaice-完全是。就像“哦,太琐碎了”,然后在开始实际编码后对代码的每个字母进行谷歌搜索。

–尼基塔·巴苏科夫(Nikita Barsukov)
2011-3-18在20:43

#19 楼

“从头开始重新实现功能比理解现有代码要容易得多。”

评论


是的,c2.com / cgi / wiki?RewriteCodeFromScratch声称这是“您不应该做的事情”之一。

– David Cary
2011-2-26在22:54

在开源上工作有助于这种趋势。我亲眼目瞪口呆地盯着补丁,然后继续写自己的实现,只是意识到它与补丁几乎相同(即使在改进/重构我的代码之后)。有趣的是它是如何工作的。

–伊文·普莱斯
2011年3月18日在17:00

#20 楼

我所从事的项目遭受的一项极为有害的诱惑是“内部平台效应”。这是建筑师的一种方法,他们早已不复存在,他们凭借自己的无限智慧建立了一个项目,该项目每年产生约2000万美元,但更新和维护成本为6000万美元(显然,这是一个粗略的数字,问题)。

#21 楼


NIH-此处未发明
我很难给第三方解决方案一个公平的机会。每个人都应该自然而然地为不是为他们量身定制的第三方解决方案表示怀疑,但是我很难做到100%客观。
节省的时间是如此之大,即使9倍以上之三,应避免使用第三方解决方案,我需要有足够的客观性,以实现可行的解决方案。

评论


我明白您的观点,并且必须始终坚持下去。我有时会持相反的意见,以至于应该在您旁边回答。但是,我很难相信一个星期内我可以比在这件事上已经解决多年的专家小组做得更好。当然,您必须确保所说的第三方背后的人确实是专家。对组件周围环境的深入研究极大地帮助了在采用或编码之间进行正确的选择。

– Newtopian
2011-2-25在2:04

@Newtopian的“正确”方法肯定在中间。我与第三方图书馆的问题不在于我是否可以比一个专家小组在几个月或几周的时间里做得更好,而是我很少,甚至永远找不到一个真正需要的图书馆。总是有做事的适应能力,然后我常常发现自己和其他人花费大量的时间在做这些事情上,而不是编写我们所需要的解决方案。

–妮可
2011-2-25在2:07



来自光谱另一端的我自己很好奇,想知道您是如何设法实现这一“中等”的。对于什么让您不想使用第三方来试图了解让我过度使用它们的原因,我也感到好奇,因为我确信两者都同样对生产力有害。

– Newtopian
2011-2-25在3:39

@Newtopian我上面的解释对为什么有意义吗?我试图达到中间目标的尝试很简单,就是在评估和寻找第三方解决方案时更加客观。

–妮可
2011-2-25在3:43

#22 楼

针对提供的“样本数据”进行设计,编码和/或单元测试,而不是分析客户实际数据库的副本。截止日期很短,他们一直说即将到来,但从未成功。部署时,爆炸非常壮观。的确,谁会期望一个客户有3个父级客户。

我只有在拥有真实数据的副本后,才能再开始一个项目。

评论


如果还没有产品,是否有任何数据要复制?

–Svish
2011-02-26 12:10



如果没有数据,则总有纸张。公司记录也会在这里有所帮助。

–丹
2011-2-28 9:25

#23 楼

那里有一个可以在某处综合症的图书馆。



恋物癖紧密相关

评论


我似乎总是能够找到“做到这一点”的库。我的问题通常是让它们按广告宣传工作。 :(

– Ben L
2011-02-25 13:59

容易找到库-很难找到内置了良好单元测试的库

–丹
2011-2-28在9:27



#24 楼

完美主义会杀死人;可能是项目无法成功的最大原因。

评论


我想这可能是对的,但是由于这个原因,我从未参加过失败甚至迟到的项目。

– PeterAllenWebb
2011-2-25在0:45

取决于您如何定义完美以及您的目标水平。

–Svish
2011-2-26在12:11

#25 楼

好吧,有时候编程会把我带到瓶子里。

#26 楼

重写而不是重构。

评论


同意。如果您愿意承担重写所需的工作量,那么重构总是更好的选择。仍然需要比您想象的更长的时间,但是您正在逐步进行重构,对吧?您可以在“完美”之前停下来。

– PeterAllenWebb
2011-2-25在0:51

作为必然结果。...在其他地方重新编写而不是重构。我们的代码库对相同事物有如此多种不同的实现,因此无法实现任何类型的一致性。

– Newtopian
2011-2-25在2:07

#27 楼

认为必须有更好的方法来做到这一点。我不会满足于“足够好”的东西。我正在追求完美!通常,通过与可能对问题有不同看法或从不同角度看到解决方案的其他人交谈可以避免这种情况。

#28 楼

解决方案:与代码优化一样,首先要发现生产力瓶颈,只有在发现瓶颈后,才能通过一些良好的方法加以解决。自动化。

评论


原则上我可以同意这一点,但实际上我从未见过过度的自动化。不过,那可能只是我的经验。

– PeterAllenWebb
2011-2-25在0:52

#29 楼


您的编程恶魔是什么?


除了其他一些提到的内容。

优先级:忽略与项目相关的高优先级工作并首先在项目中进行其他工作,因为它们更有趣!


如何避免使用它们?


有更多的自律能力。认真地讲,做事正确的自律和自我动机有助于避免这些“恶魔”中的大多数。

#30 楼


我们还没有得到客户的批准,但是截止日期临近,因此这里有一些初步的建议,以便您可以开始使用...


以后,您之后已经完成了项目的构建以匹配组件...


哦,这是客户的修订,他们只想更改一些小事情*


(*主要功能完全不同)

然后,您将继续基于原始有缺陷的模型重构原始代码,而不仅仅是从头开始,因为您承受着短暂的压力截止日期,并假设这些是最新修订版。

我一直都很喜欢这个版本。作为Web开发人员,这是很难避免的。我最好的建议是增加时间,以便您以正确的方式进行更改。

评论


采取一项在获得客户签名之前才开始开发的策略。

– Ben L
2011-2-24在18:19

@本:如果那是我们的控制!

–sevenseacat
2011-2-25在1:15