精华内容
下载资源
问答
  • 编写python代码,可以自带的ide中,也可以使用第三方编辑器,下面介绍几款常见的python IDE1. VimVim 可以说是 Python 最好的 IDE。Vim 是高级文本编辑器,旨在提供实际的 Unix 编辑器"Vi’功能,支持更多...

    5da953331af39405.jpg

    编写python代码,可以在自带的ide中写,也可以使用第三方编辑器,下面介绍几款常见的python IDE

    1. Vim

    1563599150758503.png

    Vim 可以说是 Python 最好的 IDE。Vim 是高级文本编辑器,旨在提供实际的 Unix 编辑器"Vi’功能,支持更多更完善的特性集。Vim 不需要花费太多的学习时间,一旦你需要一个无缝的编程体验,那么就会把 Vim 集成到你的工作流中。

    2. Eclipse with PyDev

    1563599241334428.png

    Eclipse 是非常流行的 IDE,而且已经有了很久的历史。Eclipse with Pydev 允许开发者创建有用和交互式的 Web 应用。PyDev 是 Eclipse 开发 Python 的 IDE,支持 Python,Jython和 IronPython 的开发。

    3. Sublime Text

    1563599303880359.png

    Sublime Text 是开发者中最流行的编辑器之一,多功能,支持多种语言,而且在开发者社区非常受欢迎。Sublime 有自己的包管理器,开发者可以使用TA来安装组件,插件和额外的样式,所有这些都能提升你的编码体验。

    4. Emacs

    1563599352792694.png

    GNU Emacs 是可扩展,自定义的文本编辑器,甚至是更多的功能。Emacs 的核心是 Emacs Lisp 解析器,但是支持文本编辑。如果你已经使用过 Vim,可以尝试一下 Emacs。

    5. Komodo Edit

    1563599404541071.png

    Komodo Edit 是非常干净,专业的 Python IDE。

    6. PyCharm

    1563599470744773.png

    PyCharm 是 JetBrains 开发的 Python IDE。PyCharm用于一般IDE具备的功能,比如, 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制……另外,PyCharm还提供了一些很好的功能用于Django开发,同时支持Google App Engine,更酷的是,PyCharm支持IronPython!

    展开全文
  • 我一写代码的就瞌睡,晚上睡不着,只要想想代码肯定能睡着,这怎么破
  • 写代码心得

    千次阅读 2015-09-11 17:31:02
    写代码心得体会
          很高兴通过csdn这个平台分享一下自己的心得体会,我是有写博客的习惯的,把自己解决问题的经验分享出来,让遇到同类问题的程序员可以快速解决问题。其实对于程序员来说,入门是很重要的,但是正真的入门,不是仅仅简简单单的比着书本敲出"hello world",正真的入门是上路是可以自己判断并开始写优质的代码。下面分享一下我做公众微信号的经验,对于微信公众号开发,我也是最近做项目开始的,在公司一直做C#开发刚接到项目经理让我做微信公众号开发的时间,我就感觉终于可以接触新东西了,下面主要分享一下我做微型公众号项目的经验。
          刚做项目的期间,也是一头雾水,面临很多问题,给一直很自信的我也带来了压力。当时感觉真的压力好大,毕竟项目经理很看重这个项目,而且把这个任务交给我了。对于开发经验不是很丰富的我来说,既爱又恨,爱自己有这个机会,恨自己不会这种技能。开始就做好了挑灯夜战的准备(公司加班),并给自己做了各方面的计划。把项目分成3块。开始从网上了解开发所需要的知识,不断的学习,慢慢的开始进入了开发状态。进行环境搭建,编码。

          慢慢的项目就进入了状态,随之而来的是各种问题,我开始了解决问题的旅程,其实现实中我是很喜欢问题的,尤其喜欢新型问题。这里也分享一下自己解决问题的方法。在开发中难免遇到各式各样的问题,对于如何处理问题主要看程序员的心态和能力。我每当遇到问题,内心都是很高兴的,终于有来了个可以涨姿势(长知识)的机会,我一般遇到问题就会在网上搜答案,一般对于我喜欢在博客园和csdn上搜,当然有时间也在国外的网站随便看看。搜问题其实也讲究方法,对于搜索其实也算是一种经验。相同问题,有的能搜出解决方案,有的搜不到,差距其实就是上网的经验,这里不再过多说搜索问题。回到解决问题的话题,我一般搜过答案之后,如果有解决办法,我就解决了,但是我一般对于有价值的问题,会被记录的这里也想建议csdn,对于个体用户做个可以记录错题和保存解决办法的功能模块。记录错误,这是个好的学习习惯,也是我在实验室期间师兄教我的学习方法。对于自身提高确实起到了很好的作用。

          在做微信公众号开发期间问题多多,比如没有环境,没有有经验的人指点。面对这些问题我开始就心里想一定要解决这些问题,把成果拿出来。对于当时遇到的问题,我都认真分析了一篇,针对某个问题,我都自己预定出一个解决方案,对于微信服务器发送信息的环境,我当时几乎都是模拟的,后来要求项目组配置外网环境,再部署的。对于遇到问题根本没有人帮你,因为公司就我一个做微信公众号开发。所以遇到的问题几乎都是在网上找的答案。对于开发中,慢慢的就有感觉了,开始慢慢的会调用微信服务器接口,之后会看文档写一些必要的代码。比如推送消息,授权。之后就熟悉了这块内容,开始自己根据产品经理的需要加一些功能,这就慢慢的学会了微信公众号开发。其实开发的重点,主要是解决问题的能力,遇到问题要分析清楚试图找到最优的解决方案。

          其次是效率,我是比较注重工作效率的,所以我几乎不加班。因为效率决定了一个项目的进度,遇到问题,不要开始就找解决方案,首先分析问题,这也是很多程序员的通病,上来就搜答案,这样看着快,其实慢。因为遇到这个问题这次解决了,下次还会有,所以要做的是分析之后在早解决方案,然后记录解决方案。一定要养成记录错误的习惯,把自己在开发中遇到的问题和解决方案 记录到文档上,之后没事的话翻一翻。这种积累经验的办法,很有效。不仅可以提高自己的能力,而且也可以分享到博客,给遇到相同问题的人一种解决办法。

    展开全文
  • 代码整洁 vs 代码肮脏

    万次阅读 多人点赞 2019-09-16 12:05:12
    WTF/min是衡量代码质量的唯一标准,Uncle Bob书中称糟糕的代码为沼泽(wading),这只突出了我们是糟糕代码的受害者。国内有一个更适合的词汇:屎山,虽然不是很文雅但是更加客观,程序员既是受害者也是加害者。 ...

    写出整洁的代码,是每个程序员的追求。《clean code》指出,要想写出好的代码,首先得知道什么是肮脏代码、什么是整洁代码;然后通过大量的刻意练习,才能真正写出整洁的代码。

    WTF/min是衡量代码质量的唯一标准,Uncle Bob在书中称糟糕的代码为沼泽(wading),这只突出了我们是糟糕代码的受害者。国内有一个更适合的词汇:屎山,虽然不是很文雅但是更加客观,程序员既是受害者也是加害者。

    对于什么是整洁的代码,书中给出了大师们的总结:

    • Bjarne Stroustrup:优雅且高效;直截了当;减少依赖;只做好一件事
    • Grady booch:简单直接
    • Dave thomas:可读,可维护,单元测试
    • Ron Jeffries:不要重复、单一职责,表达力(Expressiveness)

    其中,我最喜欢的是表达力(Expressiveness)这个描述,这个词似乎道出了好代码的真谛:用简单直接的方式描绘出代码的功能,不多也不少。

    本文记录阅读《clean code》之后个人“深有同感”或者“醍醐灌顶”的一些观点。

    一、命名的艺术

    坦白的说,命名是一件困难的事情,要想出一个恰到好处的命名需要一番功夫,尤其我们的母语还不是编程语言所通用的英语。不过这一切都是值得了,好的命名让你的代码更直观,更有表达力。

    好的命名应该有下面的特征:

    1.1 名副其实

    好的变量名告诉你:是什么东西,为什么存在,该怎么使用

    如果需要通过注释来解释变量,那么就先得不那么名副其实了。

    下面是书中的一个示例代码,展示了命名对代码质量的提升

    # bad code
    def getItem(theList):
       ret = []
       for x in theList:
          if x[0] == 4:
             ret.append(x)
       return ret
    
    # good code
    def getFlaggedCell(gameBoard):
       '''扫雷游戏,flagged: 翻转'''
       flaggedCells = []
       for cell in gameBoard:
          if cell.IsFlagged():
             flaggedCells.append(cell)
       return flaggedCells
    

    1.2 避免误导

    • 不要挂羊头卖狗肉
    • 不要覆盖惯用缩略语

    这里不得不吐槽前两天才看到的一份代码,居然使用了 l 作为变量名;而且,user居然是一个list(单复数都没学好!!)

    1.3 有意义的区分

    代码是写给机器执行,也是给人阅读的,所以概念一定要有区分度。

    # bad
    def copy(a_list, b_list):
        pass
    
    # good
    def copy(source, destination):
        pass
    

    1.4 使用读的出来的单词

    如果名称读不出来,那么讨论的时候就会像个傻鸟

    1.5 使用方便搜索的命名

    名字长短应与其作用域大小相对应

    1.6 避免思维映射

    比如在代码中写一个temp,那么读者就得每次看到这个单词的时候翻译成其真正的意义

    二、注释

    有表达力的代码是无需注释的:The proper use of comments is to compensate for our failure to express ourself in code.

    注释的适当作用在于弥补我们用代码表达意图时遇到的失败,这听起来让人沮丧,但事实确实如此。The truth is in the code, 注释只是二手信息,二者的不同步或者不等价是注释的最大问题。

    书中给出了一个非常形象的例子来展示:用代码来阐述,而非注释

    bad
    // check to see if the employee is eligible for full benefit
    if ((employee.flags & HOURLY_FLAG) && (employee.age > 65))
    
    good
    if (employee.isEligibleForFullBenefits())
    

    因此,当想要添加注释的时候,可以想想是否可以通过修改命名,或者修改函数(代码)的抽象层级来展示代码的意图。

    当然,也不能因噎废食,书中指出了以下一些情况属于好的注释

    • 法务信息
    • 对意图的注释,为什么要这么做
    • 警示
    • TODO注释
    • 放大看似不合理之物的重要性

    其中个人最赞同的是第2点和第5点,做什么很容易通过命名表达,但为什么要这么做则并不直观,特别涉及到专业知识、算法的时候。另外,有些第一感觉“不那么优雅”的代码,也许有其特殊愿意,那么这样的代码就应该加上注释,说明为什么要这样,比如为了提升关键路径的性能,可能会牺牲部分代码的可读性。

    最坏的注释就是过时或者错误的注释,这对于代码的维护者(也许就是几个月后的自己)是巨大的伤害,可惜除了code review,并没有简单易行的方法来保证代码与注释的同步。

    三、函数

    3.1 函数的单一职责

    一个函数应该只做一件事,这件事应该能通过函数名就能清晰的展示。判断方法很简单:看看函数是否还能再拆出一个函数。

    函数要么做什么do_sth, 要么查询什么query_sth。最恶心的就是函数名表示只会query_sth, 但事实上却会do_sth, 这使得函数产生了副作用。比如书中的例子

    public class UserValidator {
        private Cryptographer cryptographer;
        public boolean checkPassword(String userName, String password) {
            User user = UserGateway.findByName(userName);
            if (user != User.NULL) {
                String codedPhrase = user.getPhraseEncodedByPassword();
                String phrase = cryptographer.decrypt(codedPhrase, password);
                if ("Valid Password".equals(phrase)) {
                    Session.initialize();
                    return true;
                }
            }
            return false;
        }
    }
    

    3.2 函数的抽象层级

    每个函数一个抽象层次,函数中的语句都要在同一个抽象层级,不同的抽象层级不能放在一起。比如我们想把大象放进冰箱,应该是这个样子的:

    def pushElephantIntoRefrige():
        openRefrige()
        pushElephant()
        closeRefrige()
    

    函数里面的三句代码在同一个层级(高度)描述了要完成把大象放进冰箱这件事顺序相关的三个步骤。显然,pushElephant这个步骤又可能包含很多子步骤,但是在pushElephantIntoRefrige这个层级,是无需知道太多细节的。

    当我们想通过阅读代码的方式来了解一个新的项目时,一般都是采取广度优先的策略,自上而下的阅读代码,先了解整体结构,然后再深入感兴趣的细节。如果没有对实现细节进行良好的抽象(并凝练出一个名副其实的函数),那么阅读者就容易迷失在细节的汪洋里。

    某种程度看来,这个跟金字塔原理也很像
    file

    每一个层级都是为了论证其上一层级的观点,同时也需要下一层级的支持;同一层级之间的多个论点又需要以某种逻辑关系排序。pushElephantIntoRefrige就是中心论点,需要多个子步骤的支持,同时这些子步骤之间也有逻辑先后顺序。

    3.3 函数参数

    函数的参数越多,组合出的输入情况就愈多,需要的测试用例也就越多,也就越容易出问题。

    输出参数相比返回值难以理解,这点深有同感,输出参数实在是很不直观。从函数调用者的角度,一眼就能看出返回值,而很难识别输出参数。输出参数通常逼迫调用者去检查函数签名,这个实在不友好。

    向函数传入Boolean(书中称之为 Flag Argument)通常不是好主意。尤其是传入True or False后的行为并不是一件事情的两面,而是两件不同的事情时。这很明显违背了函数的单一职责约束,解决办法很简单,那就是用两个函数。

    3.4 Dont repear yourself

    在函数这个层级,是最容易、最直观实现复用的,很多IDE也难帮助我们讲一段代码重构出一个函数。

    不过在实践中,也会出现这样一种情况:一段代码在多个方法中都有使用,但是又不完全一样,如果抽象成一个通用函数,那么就需要加参数、加if else区别。这样就有点尴尬,貌似可以重构,但又不是很完美。

    造成上述问题的某种情况是因为,这段代码也违背了单一职责原则,做了不只一件事情,这才导致不好复用,解决办法是进行方法的细分,才能更好复用。也可以考虑template method来处理差异的部分。

    四、测试

    非常惭愧的是,在我经历的项目中,测试(尤其是单元测试)一直都没有得到足够的重视,也没有试行过TDD。正因为缺失,才更感良好测试的珍贵。

    我们常说,好的代码需要有可读性、可维护性、可扩展性,好的代码、架构需要不停的重构、迭代,但自动化测试是保证这一切的基础,没有高覆盖率的、自动化的单元测试、回归测试,谁都不敢去修改代码,只能任其腐烂。

    即使针对核心模块写了单元测试,一般也很随意,认为这只是测试代码,配不上生产代码的地位,以为只要能跑通就行了。这就导致测试代码的可读性、可维护性非常差,然后导致测试代码很难跟随生产代码一起更新、演化,最后导致测试代码失效。所以说,脏测试 - 等同于 - 没测试。

    因此,测试代码的三要素:可读性,可读性,可读性。

    对于测试的原则、准则如下:

    • You are not allowed to write any production code unless it is to make a failing unit test pass. 没有测试之前不要写任何功能代码
    • You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures. 只编写恰好能够体现一个失败情况的测试代码
    • You are not allowed to write any more production code than is sufficient to pass the one failing unit test. 只编写恰好能通过测试的功能代码

    测试的FIRST准则:

    • 快速(Fast)测试应该够快,尽量自动化。
    • 独立(Independent) 测试应该应该独立。不要相互依赖
    • 可重复(Repeatable) 测试应该在任何环境上都能重复通过。
    • 自我验证(Self-Validating) 测试应该有bool输出。不要通过查看日志这种低效率方式来判断测试是否通过
    • 及时(Timely) 测试应该及时编写,在其对应的生产代码之前编写

    该文章通过 https://openwrite.cn/ 工具创造并群发。

    展开全文
  • 阿里写代码学会的六件事

    万次阅读 多人点赞 2020-08-17 13:34:45
    简介:从团队的角度来看,代码是一件非常有必要的事情。...其实我们每天的工作中真正用于写代码的时间不可能有 8 个小时,并且很多时候是完成任务,业务压力很大的时候,可能想要达到的目标是
    简介:从团队的角度来看,写好代码是一件非常有必要的事情。如何写出干净优雅的代码是个很困难的课题,我没有找到万能的 solution,更多的是一些 trade off,可以稍微讨论一下。

    8.14头图.png

    写了多年的代码,始终觉得如何写出干净优雅的代码并不是一件容易的事情。按 10000 小时刻意训练的定理,假设每天 8 小时,一个月 20 天,一年 12 个月,大概也需要 5 年左右的时间成为大师。其实我们每天的工作中真正用于写代码的时间不可能有 8 个小时,并且很多时候是在完成任务,在业务压力很大的时候,可能想要达到的目标是如何尽快的使得功能 work 起来,代码是否干净优雅非常可能没有能放在第一优先级上,而是怎么快怎么来。

    在这样的情况下是非常容易欠下技术债的,时间长了,这样的代码基本上无法维护,只能推倒重来,这个成本是非常高的。欠债要还,只是迟早的问题,并且等到要还的时候还要赔上额外的不菲的利息。还债的有可能是自己,也有可能是后来的继任者,但都是团队在还债。所以从团队的角度来看,写好代码是一件非常有必要的事情。如何写出干净优雅的代码是个很困难的课题,我没有找到万能的 solution,更多的是一些 trade off,可以稍微讨论一下。

    代码是写给人看的还是写给机器看的?

    在大部分的情况下我会认为代码是写给人看的。虽然代码最后的执行者是机器,但是实际上代码更多的时候是给人看的。我们来看看一段代码的生命周期:开发 --> 单元测试 --> Code Review --> 功能测试 --> 性能测试 --> 上线 --> 运维、Bug 修复 --> 测试上线 --> 退休下线。开发到上线的时间也许是几周或者几个月,但是线上运维、bug 修复的周期可以是几年。

    在这几年的时间里面,几乎不可能还是原来的作者在维护了。继任者如何能理解之前的代码逻辑是极其关键的,如果不能维护,只能自己重新做一套。所以在项目中我们经常能见到的情况就是,看到了前任的代码,都觉得这是什么垃圾,写的乱七八糟,还是我自己重写一遍吧。就算是在开发的过程中,需要别人来 Code  Review,如果他们都看不懂这个代码,怎么来做 Review 呢。还有你也不希望在休假的时候,因为其他人看不懂你的代码,只好打电话求助你。这个我印象极其深刻,记得我在工作不久的时候,一次回到了老家休假中,突然同事打电话来了,出现了一个问题,问我该如何解决,当时电话还要收漫游费的,非常贵,但是我还不得不支持直到耗光我的电话费。

    所以代码主要还是写给人看的,是我们的交流的途径。那些非常好的开源的项目虽然有文档,但是更多的我们其实还是看他的源码,如果开源项目里面的代码写的很难读,这个项目也基本上不会火。因为代码是我们开发人员交流的基本途径,甚至可能口头讨论不清楚的事情,我们可以通过代码来说清楚。代码的可读性我觉得是第一位的。各个公司估计都有自己的代码规范,遵循相关的规范保持代码风格的统一是第一步(推荐谷歌代码规范和微软代码规范)。规范里一般都包括了如何进行变量、类、函数的命名,函数要尽量短并且保持原子性,不要做多件事情,类的基本设计的原则等等。另外一个建议是可以多参考学习一下开源项目中的代码。

    KISS (Keep it simple and stupid)

    一般大脑工作记忆的容量就是 5-9 个,如果事情过多或者过于复杂,对于大部分人来说是无法直接理解和处理的。通常我们需要一些辅助手段来处理复杂的问题,比如做笔记、画图,有点类似于在内存不够用的情况下我们借用了外存。

    学 CS 的同学都知道,外存的访问速度肯定不如内存访问速度。另外一般来说在逻辑复杂的情况下出错的可能要远大于在简单的情况下,在复杂的情况下,代码的分支可能有很多,我们是否能够对每种情况都考虑到位,这些都有困难。为了使得代码更加可靠,并且容易理解,最好的办法还是保持代码的简单,在处理一个问题的时候尽量使用简单的逻辑,不要有过多的变量。

    但是现实的问题并不会总是那么简单,那么如何来处理复杂的问题呢?与其借用外存,我更加倾向于对复杂的问题进行分层抽象。网络的通信是一个非常复杂的事情,中间使用的设备可以有无数种(手机,各种 IOT 设备,台式机,laptop,路由器,交换机...), OSI 协议对各层做了抽象,每一层需要处理的情况就都大大地简化了。通过对复杂问题的分解、抽象,那么我们在每个层次上要解决处理的问题就简化了。其实也类似于算法中的 divide-and-conquer, 复杂的问题,要先拆解掉变成小的问题,从而来简化解决的方法。

    KISS 还有另外一层含义,“如无必要,勿增实体” (奥卡姆剃刀原理)。CS 中有一句 "All problems in computer science can be solved by another level of indirection", 为了系统的扩展性,支持将来的一些可能存在的变化,我们经常会引入一层间接层,或者增加中间的 interface。在做这些决定的时候,我们要多考虑一下是否真的有必要。增加额外的一层给我们的好处就是易于扩展,但是同时也增加了复杂度,使得系统变得更加不可理解。对于代码来说,很可能是我这里调用了一个 API,不知道实际的触发在哪里,对于理解和调试都可能增加困难。

    KISS 本身就是一个 trade off,要把复杂的问题通过抽象和分拆来简单化,但是是否需要为了保留变化做更多的 indirection 的抽象,这些都是需要仔细考虑的。

    DRY (Don't repeat yourself)

    为了快速地实现一个功能,知道之前有类似的,把代码 copy 过来修改一下就用,可能是最快的方法。但是 copy 代码经常是很多问题和 bug 的根源。有一类问题就是 copy 过来的代码包含了一些其他的逻辑,可能并不是这部分需要的,所以可能有冗余甚至一些额外的风险。

    另外一类问题就是在维护的时候,我们其实不知道修复了一个地方之后,还有多少其他的地方还需要修复。在我过去的项目中就出现过这样的问题,有个问题明明之前做了修复,过几天另外一个客户又提了类似的问题出现的另外的路径上。相同的逻辑要尽量只出现在一个地方,这样有问题的时候也就可以一次性地修复。这也是一种抽象,对于相同的逻辑,抽象到一个类或者一个函数中去,这样也有利于代码的可读性。

    是否要写注释

    个人的观点是大部分的代码尽量不要注释。代码本身就是一种交流语言,并且一般来说编程语言比我们日常使用的口语更加的精确。在保持代码逻辑简单的情况下,使用良好的命名规范,代码本身就很清晰并且可能读起来就已经是一篇良好的文章。特别是 OO 的语言的话,本身 object(名词)加 operation(一般用动词)就已经可以说明是在做什么了。重复一下把这个操作的名词放入注释并不会增加代码的可读性。并且在后续的维护中,会出现修改了代码,却并不修改注释的情况出现。在我做的很多 Code Review 中我都看到过这样的情况。尽量把代码写的可以理解,而不是通过注释来理解。

    当然我并不是反对所有的注释,在公开的 API 上是需要注释的,应该列出 API 的前置和后置条件,解释该如何使用这个 API,这样也可以用于自动产品 API 的文档。在一些特殊优化逻辑和负责算法的地方加上这些逻辑和算法的解释还是非常有必要的。

    一次做对,不要相信以后会 Refactoring

    通常来说在代码中写上 TODO,等着以后再来 refactoring 或者改进,基本上就不会再有以后了。我们可以去我们的代码库里面搜索一下 TODO,看看有多少,并且有多少是多少年前的,我相信这个结果会让你很惊讶(欢迎大家留言分享你查找之后的结果)。

    尽量一次就做对,不要相信以后还会回来把代码 refactoring 好。人都是有惰性的,一旦完成了当前的事情,move on 之后再回来处理这些概率就非常小了,除非下次真的需要修改这些代码。如果说不会再回来,那么这个 TODO 也没有什么意义。如果真的需要,就不要留下这个问题。我见过有的人留下了一个 TODO,throw 了一个 not implemented 的 exception,然后几天之后其他同学把这个代码带上线了,直接挂掉的情况。尽量不要 TODO, 一次做好。

    是否要写单元测试?

    个人的观点是必须,除非你只是做 prototype 或者快速迭代扔掉的代码。

    Unit tests are typically automated tests written and run by software developers to ensure that a section of an application (known as the "unit") meets its design and behaves as intended. In procedural programming, a unit could be an entire module, but it is more commonly an individual function or procedure. In object-oriented programming, a unit is often an entire interface, such as a class, but could be an individual method. 

     From Wikipedia

    单元测试是为了保证我们写出的代码确实是我们想要表达的逻辑。当我们的代码被集成到大项目中的时候,之后的集成测试、功能测试甚至 e2e 的测试,都不可能覆盖到每一行的代码了。如果单元测试做的不够,其实就是在代码里面留下一些自己都不知道的黑洞,哪天调用方改了一些东西,走到了一个不常用的分支可能就挂掉了。我之前带的项目中就出现过类似的情况,代码已经上线几年了,有一次稍微改了一下调用方的参数,觉得是个小改动,但是上线就挂了,就是因为遇到了之前根本没有人测试过的分支。单元测试就是要保证我们自己写的代码是按照我们希望的逻辑实现的,需要尽量的做到比较高的覆盖,确保我们自己的代码里面没有留下什么黑洞。关于测试,我想单独开一篇讨论,所以就先简单聊到这里。

    要写好代码确实是已经非常不容易的事情,需要考虑正确性、可读性、鲁棒性、可测试性、可以扩展性、可以移植性、性能。前面讨论的只是个人觉得比较重要的入门的一些点,想要写好代码需要经过刻意地考虑和练习才能真正达到目标!

    首届云原生微服务大会

    首届云原生微服务大会 PC 端地址:https://developer.aliyun.com/topic/microservices2020#/

    阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的公众号。”

    原文链接:https://developer.aliyun.com/article/770523?

    版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
    展开全文
  • 怎么MIP中Javascript代码?怎么MIP中Javascript代码?怎么MIP中Javascript代码
  • 初识CSS-CSS代码应该写在哪里

    千次阅读 2018-10-29 21:48:27
    1,写在元素标签的style属性中,仅对当前元素有效; 2,写在当前页面头部的标签中,仅对当前页面所有元素有效; 3,写在独立的CSS文件中,对所有引入该文件的页面均有效。 下面我们用例子来一一说明: 写在元素...
  • 程序员网吧写代码被暴打一顿!

    万次阅读 多人点赞 2018-02-06 00:00:00
    近期网上看到一个新闻,程序员网吧写代码被人暴打一顿!事情是这样子的,那位程序员家里电脑坏了,又有一个很急的项目要赶,就小区楼下的网吧去写代码!由于时间很急,项目有很大,程序员的思路必须非常清晰,...
  • 如何在写CSDN博客时插入代码

    万次阅读 多人点赞 2018-01-09 16:31:57
    一、富文本编辑器插入高亮代码步骤如下: 1、CSDN博客时,富文本编辑器中有个代码块图标可以点击插入代码,并可下拉框中选择编程语言: 2、插入代码后的效果如下,这只是编辑框中暂时的样式,显然有点丑,...
  • 作为一个小白,用别人给的YUM包代码把LNMP的环境装好后,却不知道应该把代码写在哪里很是尴尬。把找的过程整理了一下。其实就是找NGINX的配置下面的ROOT地址。1.查找nginx目录 ps -ef | grep nginx 2.查看nginx配置
  • php中怎么样jsphp中怎么样jsphp中怎么样jsphp中怎么样jsphp中怎么样jsphp中怎么样jsphp中怎么样jsphp中怎么样js
  • 代码规范、如何出好代码

    万次阅读 2016-08-08 15:41:14
    代码规范、如何出好代码 上大学以来,每当看到好的文章,第一反应都是使用浏览器的收藏功能,收藏下来,久而久之,收藏的网址越来越多。虽然浏览器收藏夹也有文件夹的功能可以分门别类,但是终究没有博客的Tag...
  • 关于如何写代码和学习代码

    万次阅读 2017-05-20 08:55:40
    1.0当完一大代码以后,编译程序时是一大堆的错误(原因:语法不熟悉) --这个时候需要很大的耐心以及细心,对每一行代码仔细阅读和更改。改动代码的过程中能够极大的培养自己对代码的理解能力。常常读程序并且推算...
  • 写代码代码直播网站

    千次阅读 2016-12-20 10:23:25
    浏览网页时,惊奇的发现了这个直播代码的网站,真心感觉不错,接下来你也看看这些网站吧 1. www.livecoding.tv 2.Watch people code
  • so easy! 10行代码写个"狗屁不通"文章生成器

    万次阅读 多人点赞 2019-11-20 17:35:00
    前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。 ...背后实现代码一定很复杂吧,里面...当然啦,原作者也说了,这个代码也是无聊中诞生的,平时撸码是不中文变量名的, 中文...
  • 代码注释怎么

    千次阅读 2017-05-15 00:20:33
    和伪代码一样的作用,为接下来要实现的功能出一个指导性的算法思路。只是没有伪代码详细。但是也指出了完成此功能的大体算法思路。 2.给看代码的人一个解释性说明。注意看代码的人包括你自己。让看你代码的人...
  • 如何好优质代码

    千次阅读 多人点赞 2019-01-23 11:01:43
    现阶段我们过不少代码,但是大部分代码质量都不高,一方面是缺乏编程方面的经验,在写代码时考虑的不够全面,另一方面也有可能是需求的更改导致代码的变动,这些都能影响代码的质量,而代码的质量会影响到产品的...
  • 避免在代码注释

    千次阅读 多人点赞 2013-03-14 14:21:45
    如果用很多注释来“装饰”代码是件好事的话,那么在代码中加入大片大片的注释便是锦上添花了。是这样吗?事实上不完全是这样的。过犹不及,好心也会办坏事。 '************************************************* ' ...
  • 如何jsp里面java代码

    万次阅读 2016-10-27 10:55:49
    那么如何jsp中java代码呢! jsp中java代码有如下三种方式: ,这里面可以申明变量或方法,注意:这里面申明的变量是全局的 ,与上面的方法相比,这个方法的局部的 ,用于输出表达式到浏览器,注意:这里面的...
  • 如何word中代码

    千次阅读 2020-10-21 14:50:06
    如何word中代码 1.下载texlive 参考https://blog.csdn.net/Mikchy/article/details/94448707 2.下载Aurora 下载链接 链接: https://pan.baidu.com/s/1GpTaSq_XG6Jm9WHTcZYkwQ 提取码: 2fxc 复制这段内容后打开...
  • 写代码的最高境界----就是不写代码

    千次阅读 2015-11-24 23:27:20
    写代码的最高境界 就是不用写代码  大家都知道软件就是靠代码执行的,不写代码 啥?不是不写代码 而是最高境界是不写代码。 要达到最高境界 就需要不断磨练,积累; 大家都知道工业制造业领域,如飞机、汽车等...
  • 记事本里面写代码

    千次阅读 2018-03-19 21:43:41
     执行编译后的代码: java 类名(不需要扩展名)---->如 java First 例如: ----First.java文件里有两个类---- class First {  public static void main(String[] args){  System.out.print("Hello First");  } }...
  • windows下linux代码直接编译

    万次阅读 2018-01-15 17:59:16
    大多数人都习惯于windows下用source insight编辑代码,然后用xftp拷贝到linux下进行编译,如果有小的改动,就直接linux下用vim进行编辑修改。至于为什么是vim,工作这么多年,还没有一家公司的服务器是带界面的...
  • 什么位置js代码

    千次阅读 2019-05-04 22:23:03
    一:介绍 1.DOM   2.节点分类  节点及其类型:  1). 元素节点  2). 属性节点: 元素的属性, 可以直接通过属性的方式来操作.  3). 文本节点: 是元素节点的...  body 节点之前编写 js 代码, 但需要利用 wi...
  • Android文件到SDCard的一般过程和代码 Java代码: package zhangphil.io; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android...
  • IntelliJ IDEA 2019.3 代码提示忽略大小(IDEA 2019版本如何设置代码提示不分大小?)最近使用IDEA,发现每次只能进行完全匹配,且区分大小,界面变了IDEA 2019.3 忽略大小设置跟之前的版本稍微有点不同,...
  • 菜鸡程序员都是怎样写代码的?

    万次阅读 多人点赞 2021-03-26 13:22:22
    可能不少程序员都会有这样的经历,写代码时灵光乍现,为了保证灵感消逝前敲出更多代码,敲代码速度飞快,当然命名就显得很随意了。 什么样奇奇怪怪的命名都有:xiaonaigou,ergouzi,xxxx,j1,llst等等,可能...
  • 如何mfc中写代码使相对应的按钮实现代码的功能
  • 如何锻炼写代码能力

    千次阅读 2013-09-13 16:41:37
    最近一直看侯捷的《STL源码剖析》,看到第二张的空间配置器的时候,对于次级空间配置器中的obj这个结构体以及对它的运用不是很清楚,然后自己就了一个简化的obj以及测试代码在写这些代码之前,我抄写了alloc....
  • 代码注释应该怎么

    千次阅读 2016-02-28 20:28:19
    前两天有同事向我抱怨不会写代码注释,不知道些什么,明明很简单的功能啊,一看就懂了,还怎么注释?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,006,656
精华内容 2,402,662
关键字:

代码一般在哪里写