每年少吸?[关闭]


10

每年吸吮更少-杰夫·阿特伍德

我看过这篇有见地的文章,直接从帖子中引用

我经常认为,每年吸吮更少是程序员谦虚的进步。您应该对一年前编写的代码不满意。如果不是,则意味着A)一年没有学到任何东西,B)您的代码无法改进,或C)您从不重访旧代码。所有这些对于软件开发人员来说都是垂死的吻。

  1. 这种情况多久发生一次或不发生在您身上?
  2. 您需要多长时间才能看到编码方面的实际改进?月,年?
  3. 您是否曾经浏览过您的旧代码?
  4. 您的旧代码多久困扰您一次?或者您必须多久处理一次技术债务。

修复旧的错误和肮脏的代码(这可能是很痛苦的),我们可能会为了快速地按时完成任务而执行这些快速修复,在某些情况下,我们可能不得不重写大多数应用程序/代码。没有争论。

我遇到的一些开发人员争辩说,他们已经处在进化阶段,他们的编码不需要改进或无法得到改进。

  • 这会发生吗?
  • 如果是这样,那么人们期望这种情况会发生多少年?

有关:

是否曾经回头看过您的某些旧代码和痛苦中的鬼脸?

代码中的 星球大战时刻”:“卢克!我是你的代码!” “不!不可能!不可能!”


3
恕我直言的人认为自己是完美的,认为自己不需要改进是正确的。他们无法改善。任何有理智的人都知道他们永远不可能是完美的,总会有改进/学习新东西的空间。如果发现自己无法提高自己,我会感到恐惧-我不想以为自己有上限。
MAK

我喜欢回到我刚上手时所做的项目,并查看对我来说很难编写的代码。很多时候,代码是如此简单。这使我发笑。
松饼人

Answers:


6
  > Sucking Less Every Year ?

没有,但吸吮不同的每年 :-)

多年前我的第一次评论后,我遭受了缺少命名约定的痛苦。

然后,我遭受了我的编码被(不必要地)实现为尽可能通用的痛苦,但这使代码难以理解和维护。

然后,我租用了测试驱动的开发,InversionOfControl,什么是点网泛型以及更多内容。

结论

旧的坏习惯的痛苦减少了,但由于我学到了更多的东西,我被新的痛苦所弥补。


19

有趣的是,我曾经与之合作的所有“摇滚明星”程序员都非常谦虚,热衷于学习,并愿意承认他们并不了解所有东西。哎呀,至少在轻松的时刻,许多人实际上是自嘲的。

我认为我从未见过一个开发人员认为他们的编码“无法改进”,但是有消息告诉我,这些人离摇滚明星远了-要说得通一点。


2
我同意100%。他们是沉默的刺客!哦,真棒的用户名,xkcd?:)
jamiebarrow

@jamiebarrow:当然可以。:)
Bobby Tables

另一个失败的案例是说“所有软件都是坏软件,所有软件都是骇客,您的改进想法无关紧要”。有点沮丧地使用这些类型。
Doug T.

13

以下几点不是建议,而是个人日志:

  • 使用更少的全局变量
  • 不要对变量或函数名使用缩写
  • 编写[一些]测试代码
  • 在没有基准测试的情况下,不要将代码判断为慢速(或快速)
  • 了解如何对应用进行负载测试
  • 如果它还没有破裂,请不要修复
  • 使用源代码管理工具(git / hg)
  • 重构很酷,不要低估它带来的测试成本
  • 安全是很难的,所以要提防这一点
  • 修补一些开源项目错误
  • 博客新事物
  • 可用性可能不是功能要求,但很重要

我一年之内没有学到所有东西,所有事情都需要时间...


我喜欢您所说的“编写[某些]测试代码”。我相信没有人能达到完美,他们永远不会犯错,因为他们都是程序员,我们都是人,而且会不时犯错误。单元测试和集成测试可以减少我们的错误。我注意到您说的是“一些”测试,这一点很重要,因为有时我会花很多时间编写并不真正有用的测试。
jamiebarrow

实际上,我认为在“如果没有损坏,请不要修复”下面添加“如果
损坏

2
我可以加一些吗?如果是API,请不要公开比您更多的内部细节,如果您隐藏了它,则可以稍后进行更改。始终使用常量代替幻数,因为它们更易于记录和更改。不变性非常有用,尤其是在涉及并发的地方。在他人的代码库上工作,当您必须向他人证明自己的编码风格时,这是一个非常有价值的过程。将规范冻结(如果可能的话),因为很难达到移动目标。
Evan Plaice

如果是在现场或在客户附近工作,请打包您的无权和更高功率的卡。如果他们要求您更改规格以外的内容,请拉出(我有)无权限卡,然后拉出(引荐)更高功率的卡(最好是可以处理请求的PM异地)。最好的情况是,它将使您腾出精力专注于开发;最坏的情况是,它将减少路过功能请求的数量。(有争议的)提早返回并经常返回,如果要在代码块的末尾执行返回,则不会有关键字。希望我每年继续减少吸吮。
Evan Plaice

4

通常,人们认为好的代码只是突然发生的,但是对于我们大多数人来说,凡事都是好的代码在我们的代码库中增长。我的意思是,从一开始就很难编写出完美的软件,因为需求在不断变化,而且我们也不是完美的程序员,因此管理者和程序员也经常做出愚蠢的决定。然后,我看到每个需求都改变了一个很好的机会,可以将一些旧代码重构为更好的代码(并为此付费!)并偿还了一些技术债务。正如他们所说:“每次提交代码时,都要使代码存储库更好”。然后,您的系统将演变为更接近理想的系统。

我绝对不知道有哪个程序员为他的软件感到骄傲,但这很好。比意味着程序员已经在过程中学习了。

另外,如果您读过“清洁代码”这本书,那么您将多次增加自己的代码“吸引因子”。:D


1
我在某一点上与您不同意,我相信您可以为其中的一些代码感到骄傲。具有讽刺意味的是,您可以让一个项目进行得非常好,并为此感到自豪,也许会有一些烦恼。然后下一个项目,您每小时的WTF很高……对于您自己的代码!:D
jamiebarrow

1
也许取决于您现在所处的步骤。现在,我找到了我一年前编写的代码,甚至发现一些名称或某些方法的用途也很难理解。我也发现测试和类似的东西都没有发现代码。随着我不断改进,类似的事情往往是例外而不是规范,我开始为以前似乎不重要的问题感到尴尬……
Rafa de Castro

+1为Clean代码,尽管它始终与您自己进行比较。
Aditya P

4

实际上,我对此两面都有。

一方面,您查看旧代码,发现其中充满了错误和复杂的处理方式,这些处理方式只是通过利用您当时不了解的技术和语言功能而轻松完成的。

另一方面,您发现了一个特别优雅的问题解决方案,并且不由自主地对自己当时的聪明程度笑了笑。

然后,由于在C语言中使用了GOTO,因此惊恐地向下滚动了几行,做出了鬼脸的准备。


3

嗯...我的很多旧代码常常令我感到惊喜。

如果我今天要做的话,我经常会写不同的话,但是如果我不得不忍受时间的限制,我不确定会不会。当您可以指望至少具有几GB RAM的典型机器时,与大型硬盘驱动器为100兆字节时相比,您可以(通常应该)编写代码略有不同。


3
  1. 这种情况多久发生一次或不发生在您身上?

  2. 您需要多长时间才能看到编码方面的实际改进?月,年?

  3. 您是否曾经浏览过您的旧代码?

  4. 您的旧代码多久困扰您一次?或者您必须多久处理一次技术债务。

  1. 每次我学习新东西时,希望那是每天。

  2. 如果我要实现所学知识,则从实现之时起立即执行。

  3. 是的,仅适用于(1)新功能,(2)错误修复,(3)怀旧之情,(4)看看我如何解决问题,才有用。

  4. 与1.相关,当我学习如何做得更好时,我知道一些“可以”做得更好的旧项目。我离开他们。只要确保下一个项目以更好的方式完成即可。我不担心,除非它是一个实际的错误。


3

另一个问题中,主题是关于评估自己代码质量的方法。我的建议之一是在几年内进行复习,那时您的经验比编写代码时要高得多。我对另一个问题的回答的一句话与您的问题直接相关:

“在我的情况下,寿命为一年:这意味着我可以修改六个月前编写的代码,但是如果代码是两年前编写的,则很有可能被抛出,然后被完全重写,因为太烂了。”

因此,是的,实际上,从一年的角度来看,我编写的每段代码都变得难以忍受。我说的不是一次性的代码,而是我在编写代码时就牢记的质量,可维护性和可读性。目前,没有例外。

要回答有关寿命的第二个问题,它有很大的不同。一次性代码的寿命为零秒编写代码后即会烂掉,但这并不重要。一些代码片段我已经写了可以承受的两年后,但需要一些化妆品的变化:有点重构的,强制执行的规则了StyleCop等。平均而言,我的准确情况下,寿命变化八个月至一年的C#,PHP则需要两个六个月。

我会重新查看旧代码吗?是的,当然,作为每个开发人员,除非您不关心DRY并一次又一次地重新发明自己的轮子。如果您有在许多项目中使用通用代码库,也有机会非常频繁地检查和改进代码。另一点是,如果您从事大型项目,有些项目可能会花费您数年时间,因此您将不得不重新查看旧代码。

我遇到的一些开发人员争辩说,他们已经处在进化阶段,他们的编码不需要改进或无法得到改进。

当一个人说她是如此完美,以至于不需要学习任何东西时,这意味着她甚至无法理解自己的愚蠢程度。

即使您在计算机/编程方面拥有二十年的经验,但事情变化太快,因此总会有新的东西需要学习,并且需要新的技术来改进代码。例如,使用.NET Framework 3.0编写的C#代码很可能可以通过我们今天拥有的新内容(包括Linq,代码合同等)来提高可读性和更好性,即使旧代码也是如此。由最聪明的开发人员编写。


它更像是如果您这样问,您就有可能看起来像一个不知道如何编写好的代码的人。
Aditya P

@AdityaGameProgrammer:越野车,丑陋的代码和好的代码之间会有区别,一年或更短的时间之后,它们可能会以更优雅的方式编写。(1.)没有人可以编写完美的代码,这些代码将永远保持完美,因此我们必须承认,随着时间的推移,我们的代码可以得到改进。(2.)随着时间的推移,我们获得了经验和知识,这也是改进旧代码的源泉。
2011年

1

当我查看代码并想知道“编写此代码时我在想什么?”时,它经常发生。

通常总是会有改进,因为有时会出现组织代码,样式化代码或其他内容的新想法,尽管这可能不是一个很大的改进,但每件事都可以有所帮助。

根据工作环境的不同,我可能会在几年前看到代码,因为我继续在同一代码库中工作,并且对其中的内容和要管理的东西非常熟悉。

旧代码几乎总是困扰我,因为通常我是在更改现有系统或更换系统。无论哪种情况,我都必须了解现有系统的怪癖,以确保它们在新的怪癖中存在。

虽然我敢肯定像Jon Skeet这样的人可以思考出完美的代码,但其他大多数人却说他们的代码无法改进,他们说的是,从自我角度来看,这很可能没有吸引力。同时,就每次发现重大改进而言,情况并非总是如此。


1

1.这种情况多久发生一次?

我多久对旧代码感到不满意?几乎总是。我有令我引以为豪的代码的情况很少见,但是同样,它们很少见。有人告诉我,我几年前编写的代码很好。我畏缩了一下,以为“您这个可怜的穷人,因为看到的情况比我编写的垃圾还糟。”

2.您需要多长时间才能看到编码上的实际改进?月,年?

它通常是分阶段进行的……我真的很喜欢一种样式或方法(例如,流利的界面……因为那是我为之付出巨大努力的最后一种样式),然后花了我一个月或四个月的所有时间。然后它开始看起来更好。

3.您是否曾经浏览过旧代码?

不像我想要的那样频繁。我的大部分旧代码是以前的雇主所有的。个人代码经常被粉刷。

4.您的旧代码多久困扰您一次?或者您必须多久处理一次技术债务。

由于以前的雇主拥有我的大部分旧密码,而我却粉刷了我的大部分个人密码……一点也不经常。


白洗=重构?您指的是项目代码还是您的个人代码库。
Aditya P

1
@AdityaGameProgrammer:洗净=扔掉所有东西并从头开始重新编写。我说的是我的个人密码。
史蒂文·埃弗斯
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.