热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

怎样的代码才是牛B的代码

第一次听说“写明显没有什么错误的代码”时,我觉得这个说法很新鲜,让我记忆深刻。其他的很多观点听得我耳朵生茧,基本都是左耳进右耳出。明显没有什么错了的代码肯定是思路清晰、很容易理解的。而要做到这点很难,牛人才能写出牛叉的代码,要做到这一点要有足够的阅历和实战。

1. 写不易出错的代码

第一次听说“写明显没有什么错误的代码”时,我觉得这个说法很新鲜,让我记忆深刻。其他的很多观点听得我耳朵生茧,基本都是左耳进右耳出。明显没有什么错了的代码肯定是思路清晰、很容易理解的。而要做到这点很难,牛人才能写出牛叉的代码,要做到这一点要有足够的阅历和实战,只能当做目标啦,哪天也和云风一样:今天完成了XX功能,代码明显没有什么错误。现在还不知道明显没有什么错误的代码是怎么样的,但我知道很多代码让我半天不知所云。如从类名和方法名看不出其职能;变量命名让人蛋疼;不对参数做任何验证;参数到处都是都是基本类型;方法参数十几个;一个方法几屏;不能适应半点变化的方法;要么没有注释,要么一堆废话;排版稀烂。这些都是不好理解,半天找不到问题的代码,也是容易出错的代码。

2. 写容易查错的代码

一直想写很干净的代码,代码除了功能没有多余的代码,但是代码必须有日志,如果代码没有日志,要是出错了,查错肯定很麻烦,有时候真的是无从下手,一个功能涉及到一堆的模块,要想很快的定位错误,就必须记好日志。越清楚越好,程序执行到哪一步,当前的状态最好都要记下来,日志不在多,清楚记录有效的日志非常重要,过多无效的日志不方便查看,而且对于快速定位错误的位置没有任何帮助。如果日志都记录在文本文件中,最好能写一个分析日志的工具。可能是我写的和维护的代码太容易出错了,个人觉得记好日志真他妈重要。一看到日志就能知道出了什么问题那不是一般的爽,当然听说又出问题了让人郁闷。我以前所在的一家公司记录日志的方式是在很多类中都定义一个int类型的成员变量,每隔几行让它自增1,将这个值记录起来,当出错了就能大致估计是哪几行出错了。这种方法虽然有点蹩脚,代码中到处是这个变量,但的确能帮助我们快速定位错误的位置,日志的作用就是保存案发现场,只有记录犯罪分子作案的过程才能更好的抓住它。

3. 写扩展性好的代码

“今天说要这样,明天说要那样,在上线的前一天说:还是觉得开始的做法是最好的”。而我们程序员总是为这种人2B的想法买单。写扩展性好的代码真的就是不仅要满足需求还要超越需求。我们到处可以听到这样的口号,当然很多情况下是这样的人自己都不知道需求是什么。最让人无语的是菜鸟提需求,我来实现。杀了我吧。但现实是杀了我之前我先要满足他的需求。当这种需求像滔滔江水绵延不绝的袭来时,我想到了四个字:生不如死。既然死不了,生活还得继续。代码还是要做到超越需求(你说这世界对程序员要求怎么就这么高呢),要做到这点难啊,我们是帮别人实现梦想的开拓者。前途是光明的,道路是坎坷的,现实是残酷的,代码必须是扩展性好的。当然这里所说都是人为因素。

还有就是项目的需求本来就是变化的,或者说你现在完成的是一期,还有二期,三期......,你在做的时候就必须考虑这些情况,不要把代码写死。我以前总是想:这个可能以后不会变化,可以写死,少一个参数,少一个变量性能会更好写。其实性能的提升相当于一个千万富翁突然多了几毛钱。但是要是以后需求变了,你就得改写代码,还得担心是否会出问题。有时候我就有点怕重构,就怕一个好的功能,被重构坏了,当然也和时间紧,测试不专业有关。写扩展性好的代码别在乎所谓的那点性能,那真的就是九牛一毛不值一提。一个项目维护时间久了,发现那些本来看是不变的很多都变了,而代码也被改了很多次,每一次修改就要做一堆本来没有必要的事情(修改代码,写测试说明,送测,协调上线,而这些沟通时间也不少,真叫一个低效浪费时间),如果能考虑到可能发生的变化,写好代码,效率会高很多,这一点就能体现高手和菜鸟的区别。

4. 写高性能的代码

这是我一直渴望的(我当然也会说是我还没有做到的)。我觉得要写出高效的代码首先要非常明白你要实现的功能,将功能分析得很透彻,你找到了解决方案,回想你的实现,如果你的思路非常清晰,你就大致知道每一步是否够好,大致知道你的代码是否高效,或者更进一步说,你确定这就是最优解;如果功能实现了,但是你对自己实现的功能不是很了解,记忆模糊,那肯定不是最优解,你肯定会对自己不是很清楚的代码不放心(我经常是这样),就别谈性能,是否正确都待定。很多高效的代码都很简洁,容易理解,而有些代码总让人看起来很郁闷,如一堆看起来类似的代码实现一个很简单的功能。用数组和一个循环经常能将这样的代码简化,让你轻松实现简洁容易理解的代码,或许它不是最高效的。82法则告诉我们,我们应该对影响系统性能的20%的代码进行优化,而不应对其他的80%的代码耿耿于怀。20%影响性能的代码应注重性能进行优化,而其他80%则更多应该考虑理解性,扩展性等。

高手的代码特点有很多,很多优点是并存的。上面只是我个人认为最重要的四点。

本文地址:http://www.nowamagic.net/librarys/veda/detail/1854,欢迎访问原出处。


推荐阅读
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Python版Protobuf的安装和使用方法,包括版本选择、编译配置、示例代码等内容。通过学习本教程,您将了解如何在Python中使用Protobuf进行数据序列化和反序列化操作,以及相关的注意事项和技巧。 ... [详细]
  • 本文介绍了程序员最美的情人节礼物,即使用JS渲染的3D玫瑰,通过在QQ空间和人人网上分享这个特殊的礼物,可以给情人带来惊喜和喜悦。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • 如何在跨函数中使用内存?
    本文介绍了在跨函数中使用内存的方法,包括使用指针变量、动态分配内存和静态分配内存的区别。通过示例代码说明了如何正确地在不同函数中使用内存,并提醒程序员在使用动态分配内存时要手动释放内存,以防止内存泄漏。 ... [详细]
  • 本文介绍了自动化测试专家Elfriede Dustin在2008年的文章中讨论了自动化测试项目失败的原因。同时,引用了IDT在2007年进行的一次软件自动化测试的研究调查结果,调查显示很多公司认为自动化测试很有用,但很少有公司成功实施。调查结果表明,缺乏资源是导致自动化测试失败的主要原因,其中37%的人认为缺乏时间。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 2022年的风口:你看不起的行业,真的很挣钱!
    本文介绍了2022年的风口,探讨了一份稳定的副业收入对于普通人增加收入的重要性,以及如何抓住风口来实现赚钱的目标。文章指出,拼命工作并不一定能让人有钱,而是需要顺应时代的方向。 ... [详细]
  • 从高级程序员到CTO的4次能力跃迁!如何选择适合的技术负责人?
    本文讲解了从高级程序员到CTO的4次能力跃迁,以及如何选择适合的技术负责人。在初创期、发展期、成熟期的每个阶段,创业公司需要不同级别的技术负责人来实现复杂功能、解决技术难题、提高交付效率和质量。高级程序员的职责是实现复杂功能、编写核心代码、处理线上bug、解决技术难题。而技术经理则需要提高交付效率和质量。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
author-avatar
叶晴琼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有