如何编写更少的代码[关闭]


12

我要开发的质量是编写更简洁的代码。至少在我看来,随着编写得更加简洁,向代码中添加错误的机会更小了。阅读其他代码更容易。

我的问题是,这是随经验而来的,还是您可以明确地为提高质量而做的事情?


6
绘制趋势并查看何时横穿x轴...

1
强制性指向宏,宏,宏的指针:paulgraham.com/avg.html
vemv 2012年

通过采用无意义的编程风格,可以生成非常简洁易读的代码。无意义编程仅是通过应用功能进行编程。您可以识别它通过它的广泛使用的高阶功能,如地图,过滤器,CONCAT,折叠/缩小/注射/ [插入其他的名字列表catamorphism]等
dan_waterworth

2
-1:这似乎是在变相的自我祝贺。
Jim G.

我还没有看到可读的免费代码。不在任何重要的图书馆中。
西蒙·贝格

Answers:


12

我要说的是,总的来说,这是时间和经验所带来的,但是您可能会发现,如果您使用更简洁的语言来进行某些工作,则会将这种品质带回到您的常规工作语言中。

当然,在使用Ruby一两年后,我发现我的C#变得很乱。我想,如果我想更好地理解函数式编程(一个不断的雄心壮志),那么我可能会从中受益匪浅。

也有一些准则可以帮助您-例如,如果您多次编写相同的两行,则将它们分成自己的方法。这是一个简单的指导原则,但很快就减少了代码行并剪切和粘贴了编程,而我们大多数人都不时会感到内。

如果您了解继承,则可以通过为父类提供通用功能来节省重复代码的地方。原则上这是显而易见的,但实际上人们经常会错过一些东西。

可以有之间的差异更少的代码,并在你的应用程序-具有更少的代码,有时你可以使用代码生成,以避免重复自己,所以你只写几行代码,但那些然后生成一大堆的其他代码为你-可以给您很大的杠杆作用。看一下Rails或Entity Framework之类的工具在这方面做了什么,以了解其有用性。不过,请务必清楚它的需求,然后再三遍,三遍,再四遍考虑自己的代码生成,这会让您陷入YAGNI的地狱。

了解您的语言,API和工具。同样,这似乎很明显,但是多年来,我写了很多代码,后来我意识到是再现功能,我本可以从API继承来的,或者使用语言功能来简化我已经意识到花了几个小时来阅读与我一起使用的API文档将为我节省许多时间,以后再进行编码或调试。同样,与您合作的大多数平台都有自己的特色-学习按照他们期望的方式工作,您的生活会轻松很多。花一些时间为正在使用的平台找到阻力最小的方向,您会做得更好。

如果您想知道是否有更好的方法来做某事,那么可能存在,并且总是值得寻找如何做得更好的方法。


是的,在我看来,私有一线功能的唯一原因是DRY原理

由于我拥有更多的这些功能,因此类中的代码行数明显减少,并且看起来更加整洁和清晰。
glenatron

听起来有点矛盾,更多的功能但更少的行,但是也许我也可以在代码中看到相同的趋势..我必须考虑一下……

您还有其他可遵循的准则吗?听起来好像它们对像我这样的年轻开发者可能有用。
stuartmclark 2012年

@stuartmclark-我添加了一些,尽管我怀疑那里没有太多您不会在其他地方听到的声音。
glenatron 2012年

16

减少代码编写的一种好方法是,尝试避免重新发明轮子,并在可用时使用现有的软件组件。

当我问为什么人们做自己的ORM,自己的日志记录引擎,自己的UI组件或自己的​​所有事情时,我得到一个常见的答案:

但是我们更好

我相信这种说法在大多数情况下是正确的,但是在大多数情况下,对ROI的负面影响非常大。你妈妈做的最好的菜好吗?但是你不能要求你妈妈每天回家做准备。

这就是为什么我确实认为开发人员应该对他们选择的财务影响感兴趣。他们之中有一些是:

  • 构建组件所需的额外工作
  • 新手学习的额外工作
  • 进行大量额外的维护工作

我想认为这些组件供应商是您的扩展团队,只为您自己建立,维护和改进它而付出的一小部分。

对于整个公司而言,最好是最大程度地提高ROI,而不是致力于最大程度地提高我们的自我满意度;)公司获得的资金越多,您的工作条件和薪水增长的可能性就越大。


1
我也对此感到内,,几年前,我编写了自己的文件路径类,可以在Win,Unix和Apples格式之间转换文件路径。我们只使用窗户。也许这也是一条规则,永远不要让事情

有时是由于您缺乏对给定框架的了解所致。当我开始使用.NET时,我也确实编写了自己的路径类,然后在几天后发现了System.IO.Path类:-)

我更喜欢妈妈的意大利面,但罐子里的东西足够好。这实际上归结为负责需求的人。如果他们不满足于85%的解决方案,那么您别无选择。
JeffO

我妈妈比你做意大利面条要好得多。

1
+“避免重新发明轮子”的互联网。我开发的最关键的技能之一就是能够识别某人可能已经解决的问题。通过处理一堆我可能会忽略的附带情况,它几乎总是比我自己生产的解决方案更好,并且使我腾出更多精力来处理我实际上得到报酬的问题。
BlairHippo 2010年

5

我认为,可以通过以下几种方式来减少编写代码的次数:

  • 你不需要它。不要编写不需要的代码。仅对需求状态进行编码。这样,我们将减少编写代码。

  • 不要重复自己。我相信使用CMS,框架或第三方库是应用DRY原理的一种方法。

  • 抽象。最后但并非最不重要的一点是,抽象编程也可以大大减少代码。通过抽象化代码,重用代码的机会会更高,因为它减少了重复性。


3

除了理解编程语言之外,我认为人们对问题的理解以及提出一个好的解决方案也与之息息相关。大多数问题都有许多解决方案,但并非所有解决方案都是最佳的。您可以通过不同的道路从城市A到城市B行驶-一个可能要花两个小时,另一个可能要花一倍。在编程中是相同的想法。您可能非常了解一种语言,但是您可能会想出一种解决方案,该解决方案需要占用两页代码,而其他人会想出一种解决方案,该解决方案可以用一半的代码大小来实现。这些年来,我已经看到很多。

确保您对问题有很好的理解。分析一下,提出解决方案,权衡利弊(当然,“带有's'的解决方案”因问题而异-在这里一般来说就是这样。)然后就是所选解决方案的实现,是您对语言(和框架,如果适用)的理解将发挥作用的地方。


与编写解决方案相比,您花费多少时间准备解决方案?

当然,它取决于问题。我不在这里聊天。花一些时间在编码之前通常会有所收获。这与花时间无关,因为它提出了一个很好的解决方案,并且从长远来看可以理想地维护它。我可以为糟糕的解决方案生成糟糕的代码-任何人都可以做到。
MetalMikester,2010年

1

可以说整个编程艺术可以归结为这一点。

您可以学习传统上强调清晰度和简洁性的语言(例如Haskell,Scheme,Python),甚至可以使用诸如Factor和其他串联语言之类的范式,但是最终,您可以选择学习的所有内容最终都将有助于您缩短编写时间,减少冗余代码。


1

像其他所有苦难一样,如果您不承认有问题,就不会寻找解决方案。当您了解更少的代码后,经验便开始成为一个因素。当您重新访问代码时,是确定是否可以重用代码或重构为更少代码的好时机。Microsoft能够通过不假脱机两次来提高Windows 2000的打印速度(引用Microsoft员工的免费演示版中的一个)。


因此,我应该重新查看我的代码并对其进行重构,以获取如何减少编写代码的方式,或者像Piet所说的那样,简化代码?

2
@Gorgen-如果有时间,或者只看一个小时前编写的任何代码,就可以。有时在SO上找到一个示例可能会提示您返回并在您自己的代码中进行一些更改。
JeffO

0
  1. 返回您的旧代码,
  2. 将其置于版本控制之下
  3. 为其编写一些测试,以期有合理的希望不要引入新的错误,
  4. 改写。

随意重复。欢迎来到地狱。


-2

测试驱动开发可能会有所帮助。使用此方法,您仅编写通过该测试所需的最少代码。


在这种情况下,最小值是指特征,而不是长度。
vemv 2012年
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.