如何编写可靠的代码

介绍 当你得到一个小older-my但你妻子说我不是老愤世嫉俗者。这是为什么许多老男人不要说(或写)那么多:我们知道没有人注意。当你获得AARP另一个问题是,你相信你知道什么是真理,其他的都是废话。 本着这一精神,我可以这篇文章题为“结对编程是输家,”“为什么你的代码很烂,”或“经理是白痴,”但我确信琼斯先生不会打印。我可以告诉你的是,我能写的就是我所相信的,不是你想听到的或者是受欢迎的。很多人想听或相信什么是错的。 978年我写了第一行代码。可能有人会说我在1988年第一次得到这样做,我没有做其他。,阅读数百万行代码之后,我可以告诉你的是,大多数是可怕的,可怕的,可怕的,痛苦的。这是为什么和如何解决这个问题。 固体是隐含在标题,所以让我们免除缩略词正确。如果你只知道每个字母缩略词和词指,毫无帮助。S.O.L.I.D.是单一责任协议,开放闭合,Liskov替换原则,控制反转,不要重复自己。如果你接受我,你需要知道一点关于芭芭拉Liskov得到,因为我不会问你关于依赖注入(IoC)。 如果不了解Liskov可能影响他们写的代码示例中,可能有问题什么正方形继承rectangle-then知道Liskov L是无用的。 如果你想写“固体”代码,你必须探索和调查罩下面。什么意思不重复自己呢?一个责任是什么样子?什么是代码反转?国际奥委会可以轻松完成Ninject或统一,但什么是国际奥委会和它解决的问题告诉你为什么以及何时使用IoC或依赖注入。更重要的是,理解告诉你当你可以打破规则。例如,法律DeMeter-or自然告诉母亲不要写这样的代码object1.property2.method3链(),但是这正是流畅代码的样子。 规则1:调查和探索事物的含义和起源。写代码不是使用助记设备卖给谁想成为一个gazillionaire获胜。 规则2:规则是用来被打破的。 代码结构 代码有一些结构。就像你不会有一个单片函数,称之为软件不会有一个类在一个项目在一个单一的文件。代码有一个明显的结构。结构是解决方案,而不是行代码。代码的结构将决定和,更重要的是,这代码应该是什么。结构促进了很多手和可测试性。 得到一个好的结构,你需要一个伟大的设计师或建筑师。程序员不是设计师或建筑师。写代码和描述结构是两个不同的工作需要不同类型的培训。使用OO代码不一样的生产OO代码。任何傻瓜都可以使用一个框架的代码,最不能产生一个框架。 规则3:你的代码需要结构,这意味着你的项目需要一个建筑师。 我见过每个人都认为自己建筑师一般都是傲慢的,想要得到尽可能多的高管们在每一个组织。好的架构师的每一分钱都是值得的,叫人傲慢就是骂人。得到一个伟大的建筑师或习惯于失败。 单元测试 测试驱动开发不是银弹。编写测试失败是浪费时间。为什么失败时您可以编写代码,编写代码不失败或几乎是对吗?重要的是,你写单元测试几乎在同一时间你写代码测试。更重要的是,你写的代码覆盖率,为每一行代码或测试和大部分的排列。有工具可以衡量你的代码覆盖率。 编写单元测试覆盖率是很重要的,因为你必须测试所有的代码或者你将有更多的bug和行没有测试可能会有严重的错误。单元测试代码覆盖率不保证,但它消除了事物应该跟踪bias-testing工作——自动化测试可以运行成千上万次。 此外,您将需要这些测试,因为代码不是神圣不可侵犯的;它是改变。代码覆盖率,你可以改变你的代码不受惩罚和编写固体代码需要写,重写,编辑、代码重构,重组,改变。 规则4:编写单元测试代码覆盖率。 规则5:警惕任何尖锐的经理认为你将只编写一次代码;这些人都是危险的。 规则6:那些认为手工测试是一个好主意也是危险的。 每次你Refactor-see重构以后你代码或修复一个缺陷,运行所有测试。每天运行你的测试。保持您的测试,不断为代码覆盖工作。我争取90%到95%的最低标准。 结对编程 结对编程是刑事实践。首先,大多数程序员不写代码不断在八个或更多小时的一天。支付两人,只有一个人写的代码行镀金莉莉;这是一个镀金马桶。 如果你有一个很致命的问题,得到一个第二组的眼睛。对程序的惯例是浪费时间和金钱。没有优秀的程序员正在产生一个键盘,你不想无用的程序员一起工作。 规则7:如果标准操作程序是对程序,聘请更好的程序员。 代码评审 代码评审是浪费时间和金钱。项目是一个机会的人他们的观点,这都是坏的和错误的。不参加。不参加,看在上帝的份上,不写一个编码标准文档。 这是你的编码标准:选择最好的程序员你和告诉每个人写自己的代码,是区别人的代码。(除非那个人使用缩写,突显出,不能重构或不能使用的设计模式,和一���所知的指标(见后面这些主题)。) 规则8:避免正式代码审查;他们是浪费时间。 非正式地你的高级技术人员应该密切关注每个人的代码一般课程实践,使小建议和私下修正。公共羞愧和耻辱不是很好。指导私人达到更好的结果。 规则9:人需要大量的指导不能在关键路径上。 你怎么知道如果个体贡献的代码有问题?你有标准和工具,测量每个人的工作产品,这将是下一个。 是有原则的 你不需要集团认为代码审查,因为你有标准。这些标准包括一个人,一个键盘,单元测试代码覆盖率,和指导人,但根据关键路径上的专业人士,他们知道他们的工作。 你的标准也必须包括伟大的度量标准,重构,设计模式,4 cs,童子军的行为,没有代码重复,避免代码味道,用词不缩写,避免那些躺在Ted克鲁兹评论。 规则10:建立标准定义质量和坚持下去。 评论的谎言 不要把时间花在写评论。评论的谎言。评论没有编译。评论不测试。没有评论,审查过程和确保他们没有任何价值或准确。 与小谎而不是丑陋的代码,编写高质量的重构代码与整个单词,好名字。例如,如果你有一个像是命名合理的方法,只有一个责任和良好的指标,评论是多余的。 规则11:评论撒谎和浪费时间。 阐述排除特定类型的作者评论评论像积木一样,这是一个由责任或注释工具提供的功能是不必要的。评论的谎言。如果你发现自己写的评论,你需要一个更好的名字,更好的度量标准,您将获得更好的度量重构和运行单元测试,直到你的指标是符合你的标准。而不是写评论。 4 cs质量 代码已经坚持4 cs质量。代码必须衔接、连贯、收敛和一致的。凝聚力是指代码一起工作得很好。你可以使用适配器等模式,但如果你的代码是所有映射和包装,你可能已经可怜的凝聚力。(良好的凝聚力感觉就像乐高玩具。)连贯指的是代码是有意义的。代码看起来是由醉酒猴子永远不会是固体。收敛收敛在一个实例的代码的代码每问题。你可以检查代码冗余消除非收敛(发散)代码。不同代码的代码相同的隐喻表现出不同的行为。一致的代码风格类似的代码;它是代码看起来起源于一个non-schizophrenic蜂群思维。 规则12:坚实的代码是有凝聚力,收敛,连贯和一致的。 好消息是,语无伦次,凝聚力差的不一致,不同代码会有糟糕的指标和闻起来像爱泼斯坦的橱柜(坏)。 指标 你不需要代码审查,因为指标。你不需要因为你有标准编码标准文档指定上限指标。指标测量。代码的度量包括行代码,圈复杂度,维护复杂性和计算复杂度。 行代码意味着更少的代码行。我的标准与少于10行代码的方法,最好是一行。虽然有实例构造函数,可能几行代码,通常长函数表明,单一责任原则(SRP)被侵犯。因为我们写的代码,是基于我们的价值观,我们不会违反SRP没有一个很好的理由。 说句题外话,人们常常反驳说,小功能意味着更多的功能,一个是交易行代码为多个功能。真实的。但是,函数是可组合性的最小单位,没有复制,可以重用。十个小函数可以很容易地理解和re-orchestrated解决其他问题。大,老了,臭长函数只能做一件事:品种bug。 圈复杂度(CC)是意大利面因素或通过路径数量的方法。每条路径进行测试,所以低圈数字更好。1是我的偏好的CC的上限5。5的圈复杂度意味着你需要至少5单元测试这个方法。5并不是目标;如果目标之一。五是mental-flagellation开始的地方。 维护的复杂性是拥有系统的总成本可能是共同应用于一个类。再一次,你想要一个低维护的复杂性。我的价值取向的上限是100,但超过50,我担心。 计算复杂度是衡量大0符号。把所有你的方法接近O(1)或O(log n)。O(1)和O(log n)是非常简单的,防弹的行为。如果你必须允许O(n log n),但从O(n ^ 2)O(n ^ k)和O(n)。 规则13:采用标准代码和标准衡量,衡量,衡量。 你不能得到良好的指标没有重构和设计模式。你不能使用设计模式和重构代码(或者至少不应该,你神风特攻队!)没有单元测试。这就是为什么所有这些元素是必要的;它们为彼此平衡的功能。 重构 重构是提高设计不改变行为。重构是非常具体的,你需要这本书。在重构之前,你需要单元测试。你重构几乎一切不满足您的度量标准或代码味道。 规则14:重构。 从不让尖端经理告诉你如果不是破不修复它。代码不符合客观度量标准坏了,而你的经理不知道,反正是不会理解的。 通过单元测试,您可以重构需要。是无所畏惧的。然而,你必须遵循的步骤定义的重构或使用工具,然后重构后运行单元测试。如果你犯了错误,撤销源代码控制的变化。(是的,认为自己特别敏锐的如果你需要推断源控制的最后一条语句)。 模式和反模式 你需要一本书GoF关于设计模式的书和一本好书反模式。你还会知道你如何使用(错误地)金锤或火炉管(反模式)或正确状态(模式)如果你不知道这些是什么。(如果你不知道模式和反模式,你不是架构师)。 规则15:老板叫人建筑师并不是为了省钱。便宜的说你有一个建筑师比雇佣但只有在开始。 当评估代码,寻找��繁和密集的设计模式。坚实的代码总是看起来像一个设计模式的关系。 抽查 还有其他元素我想当我想到干净代码。如果我看代码和皱纹我的鼻子,因为它的气味,和我有一个好鼻子。 你可以问一系列的问题在评估代码。这是童子军所写的代码吗?童子军的人把事情比他们发现他们。Anti-boy童子军不更改代码,因为他们不想被指责为破坏,或者是补丁garbagy程序员,出租汽车司机代码来“解决”一个bug和炸毁你的指标。这是乱丢垃圾。(添加注释解释出租汽车司机,garbagy代码也乱扔垃圾。)。 你也可以运行工具,寻找代码重复。有很多程序员认为复制粘贴编程是好的。它不是。从这些人或让他们远离你的代码。 有时,你可以举起一个打印页面,看看它的轮廓。如果它看起来像一架x翼fighter-nested ifs或者fors-then圈复杂度度量是坏的。 规则16:运行代码味道或创建它们的人。 你还需要运行分析和调优工具,因为他们将帮助指出问题实际存在而不是追逐预感。记住,QA不是你的测试团队。与单元测试覆盖率,你会提供更少的错误。最后,练习,练习,再练习。这个过程被称为髓鞘形成,你需要退出你的大脑的髓磷脂固体编写代码。 关于固体代码的更多信息,请参见“测试固体代码." 总结 我当然没有发明所有的这些想法。我不聪明,但我是一个收藏家的知识。业内一些最好的想法自40年代以来写这些东西。如果你想快速的捷径和伟大的读,涵盖了很多材料,阅读由Bob大叔干净代码。 什么是可靠的代码是主观的。错了。指标,设计模式,单元测试覆盖率,重构是客观的。代码展示本文中定义的特点是坚固的代码。如果有人跟你说在这一点上,翻转笨蛋(或咬另笨蛋),告诉他们把垃圾从你的办公室,当你昂首阔步穿过办公室像一个代码的纯爷们告诉杰克逊给你。 无论你做什么,一旦你坚实的代码突击队,不要让书呆子促进你管理。你会讨厌它。

原文发布于微信公众号 - Java学习网(javalearns)

原文发表时间:2016-08-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏牛客网

美团大零售事业群-闪购 一面(已通过)

以前以为坚持就是永不动摇,现在才明白,坚持是犹豫着退缩着心猿意马着,但还在继续往前走。——《意林》

931
来自专栏牛客网

新疆学子的腾讯后台开发的面经

4月26日收到了腾讯的offer,终于安心了,很多小伙伴们要我写面经介绍下,其实自己能拿到腾讯的offer 99%是运气~, 这里就介绍下自己的面经跟总结自己的...

4386
来自专栏逍遥剑客的游戏开发

面向对象vs面向数据

2754
来自专栏java达人

如何编写复杂sql

经常有人问我那非常复杂的sql是怎么写出来的,我一直不知道该怎么回答。 因为虽然我写这样的sql很顺手,可是我却不知道怎么告诉别人怎么写。很多人将这个问题...

6559
来自专栏斑斓

敏捷实践 | 代码是如何腐烂的

代码是如何腐烂的?这是一个很大的命题,因为这种腐化的代码样本可能会体现不同的特征。若要彻底总结,可能会又是一本《重构》。我自然没有这个能力和知识。好在有一个简便...

36410
来自专栏大数据挖掘DT机器学习

利用pthon爬虫和数据分析在618抢购Macbook pro

好久没玩点有意思的了,这次借618这个购物节,自己也要搞台mbp,顺便搞一波大新闻. 对某宝的其中四家店,再加上某东一家店,对比同一款机型,对价格进行监控...

5457
来自专栏杨建荣的学习笔记

从设计模式的设计原则感悟生活(r2笔记42天)

设计模式中的很多思想还是很有意思的,刚毕业的时候接触设计模式感觉有点高深,坐而论道,感觉还是有些虚,平时做的小练习还能自己捣鼓一番,自己使用一下设计模式,然后大...

3376
来自专栏程序人生

高效能程序员的七个习惯

昨天收到一个读者留言,问作为程序员,有什么学习和工作上的好习惯可以借鉴?想了想,干脆附庸风雅一下,总结个『高效能程序员的七个习惯』吧。Disclaimer:一家...

3619
来自专栏牛客网

这可能不只是一篇面经!2万字干货分享校招备战、笔试、面试的详细经验(下)

上接:http://www.jianshu.com/p/deae97625ea7 最后是面试中的技巧和经验。 1、好好对着自己写的简历一行一行看一遍,这都是你挖...

8566
来自专栏我的博客

面试和笔试汇总

最近忙着找工作,也没有更新博客,今天一个朋友让我赶紧把博客更新下,说说最近的面试情况也可以好给他们一个参考,这就整理出来给大家分享~~ 笔试题目公开 get和p...

4296

扫码关注云+社区

领取腾讯云代金券