我的代码闻起来应该怎么办?


13

我是一个新手程序员,通常当我在自己的项目上工作时,我总是感到我的代码设计不是最好的,我讨厌这种感觉。我最终花时间查找事物,但是随后我却很容易被很多细节所淹没,例如可供选择的设计模式以及何时使用抽象类或接口。我是否应该尝试一次学习所有内容?


15
使用除臭剂;)
Pemdas 2011年

6
也许还有一种消毒剂/杀虫剂来消除虫子:-)
Stephen C

3
吃大蒜 人们可能会更多地注意到您的口臭。
Mateen Ulhaq 2011年

4
现在您有了:codereview.stackexchange.com,可以在其中获取有关代码特定示例的帮助。
LRE

1
打开窗户...哦,等等...
Mchl 2011年

Answers:


18

一些建议:

  1. 使用封装通过将功能划分为不同的构建块来管理复杂性。证明每个块都有效(通过单元测试),并且您可以使用它而不必担心其内部细节。

  2. 学习和研究软件模式。软件模式是经过实践检验的可靠方法,可以执行某些常见的众所周知的任务。

  3. 学习和理解数据结构。 了解每种数据结构类型的适当用途和性能特征。

  4. 充分了解您的编程语言,优缺点,以及如何最好地利用其功能。

您不必一次全部了解所有内容,但是您应该随着时间的流逝研究所有这些内容。


12

我的建议是:别担心。

经验是最好的老师,如果不编写代码,就不会获得经验。同样,设计糟糕的代码写入比伟大的设计是更好不是

因此,编写更多代码。完成您的项目。认为代码不理想的感觉可能是正确的。您可能会在这段代码中遇到问题。而当你有这些问题,然后你会了解到底为什么这是不好的。您将从第一手经验中学到的方法比从“查找事物”中学习的方法更多。

另外,不要希望这种“代码气味”的感觉会消失。随着您变得越来越好,您将解决一些问题,但是开始注意到新的,更晦涩/高级的问题。


+1设计错误的书面代码要比未编写的优质代码好!
GrandmasterB

听起来像是在说实话,但事实并非如此。设计不良的代码可以实现其意图,比设计良好的未编写代码更好。但是,如果代码设计不当,它将按预期执行的可能性有多大?
马特·艾伦

我们在这里谈论个人项目。当然,如果我们考虑使用核导弹控制软件,没有代码比坏代码更好。
没关系

@Matt-取决于它的真实写法。IMO几乎所有的现实世界代码都在一定程度上散发出臭味,象牙塔对更改的反应不佳(这是隐藏太多数据和太多抽象层的问题之一)。经验确实是唯一的解决方案,尽管当然有充分的理由讲授标准规则。主要的经验是较少了解规则,而更多地了解何时以及如何打破规则。至于学习规则-我已经成为程序员近30年了,其中包括儿童兴趣爱好,而且我一直都在学习新知识。
Steve314 2011年

@ Steve314:是的,我同意,因此我对做应做的事情提出了警告。正如您所指出的那样,您必须先编写代码,然后才能学习编码;在从事个人项目以了解基础知识或更高级的主题时,我认为考虑要实现的目标很重要。 ,而不是立即着手开始编码。一点点设计就可以走很长的路,因为,正如我确定的那样,因为编程不仅仅与编码有关。
马特·艾伦

3

对于初学者来说,这是一个普遍的问题。不要以为一切都必须是完美的而使自己瘫痪。那是永不完成项目的最可靠方法。作为开发人员要学习的最重要技能之一就是完美足够好之间的区别。接受您创建的每个系统都可以得到改进的条件。专注于完成您的项目。完成后,您可以返回并对其进行改进。毕竟,这就是我们拥有2.0版的原因。


好决定!知道本来可以更好的是一个好的开始。
ozz 2011年

2

我是否应该尝试一次学习所有内容?

我希望不是。另一方面,您应该一直在学习和改进。

阅读书籍,参加课程,取得资格,从事其中的工作,您应该有所提高。


2

我最好的建议是专注于罗伯特·哈维(Robert Harvey)建议的基础知识。软件开发是一个复杂的庞然大物,要花费大量时间甚至无法远程掌握,尤其是在良好的界面设计方面。如果没有先体验一下软件开发的许多方面,确实很难。即使是最基本的注释代码,也可以得到赞赏。从第一天开始,我们就教您编写有据可查的代码。我承认,直到我真正地尝试理解几个月前写的代码后,我才真正意识到好的注释的价值。许多编程概念都可以这样说。例如,数据封装,低耦合模块和清晰的接口。

我遇到的最有价值的资源是我的同事。你会写不好代码。接受。您要做的是确保随着时间的推移编写出更好的代码,从而将您定义为程序员。例如,当我刚开始工作时,我的公司没有任何形式的正式代码或设计审查程序。我承担了自己的工作,使自己的工作受到我更资深的同事的批评,老实说,我觉得我在第一年工作的大部分时间都是白痴。

软件开发是一种持续的学习经验。提出大量问题,审查代码,了解更多资深人士提出的建议的原因,不要害怕质疑资深开发商提出的建议的有效性,最重要的是不要害怕犯错。最终,刺激因素或不知所措的感觉。为了记录...学习曲线很烂。


2
  • 首先:重构(它仍然会闻起来,但会更有条理)
  • 第二:看看您是否可以使用某些“设计模式”使重构的部分与您的逻辑相符。
  • 第三:当情况开始好转时,请记住您花在第一步和第二步上的时间。这样,当您编写一些新功能时,您会在进行操作时考虑一下,而不是将其视为另一个过程。


2

实用的程序员是一个很好的资源。“ Windows破损”一章描述了您看到自己的位置。简短而明智的反应是解决问题。

当您开始修改设计时,有助于了解您不满意的地方。很容易得出模糊的答案,例如“到处都是”或“我为什么在那里做?”。但是,请花点时间查看您是否使用了任何常用模式。

  • 好的设计将在整个代码库中重用少量概念(理想的情况是一个概念,但实际上您可能还需要几个概念)
  • 良好的设计可以轻松找出问题所在(DRY原则,SRP原则)
  • 好的设计将具有良好的错误报告(与上述要点相关,但由于经常被忽略,因此被称为单独的项)

一旦确定了要去的地方,就采取小而容易可逆的步骤到达那里(即,这就是重构的目的)。每次改进代码时,请考虑对其余代码的影响。您使事情变得更好还是更糟?至少这是我使秩序混乱的方法。


1

如果您已经有一些编程经验,那么为什么不学习一些包含干净代码的开源项目呢?您可以从SO中查询问题,问题具有一些相关链接。

同样,设计模式是必须知道的-考虑一下,拥有模式的整个想法是解决已知问题,而无需重新发明轮子或编写错误的代码。

最后,看起来您需要进行一些功能编程才能清除头脑。开始研究Haskell或Ocaml。


0

如果您不是危险的怪物,则应该找到一个可以查看您的代码的所谓朋友,反之亦然。同样,如果您制作的东西会被重新审视,或者只是被别人监督,那么做一个更好的方法是一个很好的压力。

别忘了,编程是编码之前开始的,始终要重新审视您的想法,计划。如果您的计划很糟糕,那么将其扔掉是一种快乐的举动:您刚刚节省了根据一个糟糕的计划扔掉一堆代码(以及创建时间)的烦恼。


0

我的建议是认真对待每种气味,并尝试对其进行修复。有很多关于该主题的好书(清洁代码和GOOS是最好的恕我直言)。但是,参加会议以听取其他人意见并与他人以及在线社区(邮件列表,群组)进行讨论的书籍不止于此。最好尝试加入本地xxug(dotnetug,jug,xpug等)或找到一个。

与其他程序员讨论是我真正提高的唯一途径(除非您很幸运地可以与其他专门的程序员一起工作)。

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.