首页 > 编程语言 >11月阅读笔记1《程序员修炼之道》

11月阅读笔记1《程序员修炼之道》

时间:2023-12-18 18:13:52浏览次数:31  
标签:11 重构 代码 编程 向导 程序员 算法 修炼 测试

《程序员修炼之道》第六章 当你编码时的阅读笔记

这一章的主题是如何在编码过程中保持思考和判断,避免靠巧合和运气来编程。作者提出了以下几个策略:

靠巧合编程:指的是依赖于不可靠的事物,如未文档化的行为、边界条件、语境假定等,来让代码看起来能工作,而不清楚代码为什么能工作或失败。这样的编程方式是危险和低效的,会导致难以发现和修复的错误。要避免靠巧合编程,要做到以下几点12:
总是意识到你在做什么,不要盲目地编程,试图构建你不完全理解的应用,或是使用你不熟悉的技术。
依靠可靠的事物,不要依靠巧合或假定。如果你无法说出各种特定情形的区别,就假定是最坏的。
为你假定建立文档,使用“按合约编程”来澄清你头脑中的假定,并且传达给别人。
不要只是测试你的代码,还要测试你的假定。使用断言或其他工具来检查你的假定是否正确。
为你的工作划分优先级,把时间花在重要的方面;很有可能,它们是最难的部分,如果你的基本原则或基础设施不正确,再花哨的铃声和口哨也是没用的。
不要做历史的奴隶,一旦你发现过去的代码有问题,请修改它,甚至是进行重构。
算法速率:指的是评估算法在不同规模的输入下执行所需时间和空间资源的方法。算法速率可以用大O表示法来表示,如O(1)、O(n)、O(n^2)、O(log n)等。算法速率可以帮助我们选择合适的算法,优化程序性能,避免性能瓶颈。要评估算法速率,要做到以下几点34:
理解大O表示法和常见的算法速率类别,如常数型、线性型、平方型、对数型、指数型等。
使用常识估算算法速率,如简单循环、嵌套循环、二分法、分而治之、组合等。
估算你算法的阶数,并尝试替换成阶数更低的算法。
不要过度追求理论上最快的算法,而要注重实效。理论上最快的不一定是实际最快的。因为不同的输入数据会导致更快的算法不同。
重构:指的是在不改变软件外部行为和功能的前提下,改善软件内部结构和质量的过程。重构可以提高代码可读性、可维护性、可扩展性和可测试性,也可以减少错误和缺陷。重构应该是一个持续进行并及时反馈结果的过程。要进行重构,要做到以下几点 :
在重构之前,确保你拥有良好且覆盖率高的测试,以便检查重构是否破坏了原有的功能。
采取小步骤进行重构,每次只修改一处代码,并运行测试。这样可以避免引入新的错误,也可以方便回退。
使用一些工具或技术来辅助重构,如IDE、版本控制、重构模式等。
在重构的同时,不要试图增加新的功能。这样可以保持重构的目的和范围清晰,也可以避免混淆重构和开发的责任。
易于测试的代码:指的是在编写代码时就考虑到测试的需求和方便性,使得代码能够被有效地测试和验证。易于测试的代码可以提高代码质量和可信度,也可以节省测试时间和成本。要编写易于测试的代码,要做到以下几点 :
遵循一些编码规范和原则,如单一职责、开闭原则、依赖倒置等,使得代码结构清晰,模块解耦,功能单一。
使用一些设计模式和技术来增加代码的可测试性,如工厂模式、依赖注入、模拟对象、测试驱动开发等。
使用一些工具或框架来编写和运行测试,如JUnit、TestNG、Selenium等。
在编写代码之前就设计好测试用例和测试计划,并根据实际情况进行调整和优化。
邪恶的向导:指的是那些帮助你快速生成大量代码的工具或功能,如IDE、框架、模板等。这些向导并不是完全没有用处,但是如果你不理解它们生成的代码是什么意思,或者不知道如何修改或维护它们,那么你就可能遇到很多问题。要小心使用那些邪恶的向导,要做到以下几点 :
不要盲目地信任向导生成的代码,而要仔细阅读和理解它们。如果有不明白或不合理的地方,要及时查阅文档或寻求帮助。
不要过度依赖向导生成的代码,而要根据自己的需求和风格进行修改或重写。如果向导生成的代码太复杂或太冗余,要考虑简化或删除它们。
不要让向导生成的代码成为你自己代码的一部分,而要把它们封装在整洁的接口后面。这样可以避免向导生成的代码和你自己编写的代码交织在一起,也可以方便地替换或更新它们。

标签:11,重构,代码,编程,向导,程序员,算法,修炼,测试
From: https://www.cnblogs.com/gyg1222/p/17800940.html

相关文章

  • 11月阅读笔记2《程序员修炼之道》
    《程序员修炼之道》第七章在项目开始之前的阅读笔记这一章讨论了在项目开始之前要面临的一些问题和挑战,以及如何应对和解决它们。作者提出了以下几个主题:不要搜集需求,而要挖掘需求。需求是用户想要解决的问题,而不是用户目前做事情的方式。要站在用户的角度,了解他们的真正需求和......
  • 读后感:《程序员修炼之道》第八部分 - 逐步提高
    第八部分的《程序员修炼之道》是这本书的压轴部分,它强调了不断学习和提高的重要性,以及如何在职业生涯中不断进步。以下是我从这一部分中得到的主要启示:首先,书中强调了永不停止学习的概念。编程领域变化迅速,新技术不断涌现。要保持竞争力,我们需要不断学习和适应新的工具和方法。这......
  • 11.28(读后感5)
    在阅读《程序员修炼之道》第六章后,我深感受益匪浅。这一章主要讲述了如何提高编程技能和效率,以及如何在团队中发挥更大的作用。以下是我从这一章中学到的一些重要观点和感悟:持续学习:作为一名程序员,我们需要不断地学习新的技术和知识,以适应不断变化的技术环境。这包括阅读书籍、参......
  • 1 K8S for Prometheus Dashboard 20211010 EN
    *[PrometheusTimeSeriesCollectionandProcessingServer](http://localhost:9090/targets?search=#pool-prometheus)*[Dashboards|GrafanaLabs](https://grafana.com/grafana/dashboards/?search=prometheus)*[Alertmanager|GrafanaLabs](https://grafana.com/g......
  • 12.11
    石家庄铁道大学图书管理系统1、项目需求:图书馆管理系统,能进图书管理系统软件图书管理系统软件行图书馆管理系统能实测国民经济和企业的各种运行情况;利用过去的数据预测未来;从企业全局出发辅助企业进行管理决策;利用信息控制企业的行为;帮助企业实现其规划目标。2.系统要求与功能......
  • 11.29
    今天实现选课系统石家庄铁道大学选课管理系统1、项目需求:本项目所开发的学生选课系统完成学校对学生的选课信息的统计与管理,减少数据漏掉的情况,同时也节约人力、物力和财力。告别以往的人工统计。2.系统要求与功能设计2.1页面要求(1)能够在Tomcat服务器中正确部署,并通过浏览......
  • 11.30
    今天实现后端代码UserControllerpackagecom.example.controller;importcom.example.pojo.Result;importcom.example.pojo.Student;importcom.example.pojo.Teacher;importcom.example.pojo.User;importcom.example.service.UserService;importorg.springframewor......
  • 11.22
    今天实现bean类Attendancepackagecom.example.pojo;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;@AllArgsConstructor@NoArgsConstructor@DatapublicclassAttendance{privateintid;privateStringattenda......
  • 11.23
    今天实现前端的主页登录和管理员代码index.HTML<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>用户登录</title><style>button{display:block;mar......
  • 11.24
    今天实现ROOT层root.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>管理员页面</title><style>.form{width:600px;margin:0auto......