第18节:调试
这一节强调了调试的重要性以及一些有关调试的心理学和技巧。
1. 调试的目标是解决问题,而不是对问题提出攻击性的反应。遇到 bug 时,应以解决问题为导向,而不是责怪他人或自己。
2. 当你目睹 bug 的发生或看到 bug 报告时,不要急于表示“那不可能”。首要任务是思考为什么问题发生,而不是争辩是否真的存在问题。
3. 可视化数据可以帮助调试。可视化工具和技术可以帮助你更好地理解问题,特别是对于复杂的问题,如循环引用。
4. 使用跟踪日志(logging)对代码进行跟踪。跟踪日志记录代码执行过程中的信息,可帮助你了解程序的运行情况,特别是对于非崩溃类错误。
5. 尝试“橡皮鸭调试法”,通过向虚拟听众(如小黄鸭)解释代码和问题,你可能会在解释的过程中自己找到问题所在。
6. 不要急于指责操作系统、集成开发环境(IDE)或第三方库出现问题。首先应确认和排查自己的代码问题,然后再考虑其他可能性。
7. 对 bug 的原因进行复盘,不仅修复问题,还要思考问题出现的原因,以及如何避免类似问题的再次发生。
第19节:文本操纵
这一节介绍了文本操纵的重要性和如何利用文本操作语言来处理文本数据。
1. 学习一种文本操作语言,它对程序员来说就像木工的刳刨机一样,用于处理文本数据。
2. 文本操作的案例包括处理大批量测试数据、数据库 schema 维护、生成 web 文档等。工具如Perl、Python、Shell的awk和sed等可用于文本操作。
第20节:代码生成器
这一节讨论了代码生成器的概念以及为什么程序员可以使用代码生成器来生成代码和其他文本内容。
1. 代码生成器是编写能够生成代码或其他文本内容的程序,用于减少重复性工作。
2. 有两类代码生成器,分为被动代码生成器和主动代码生成器。被动代码生成器生成独立的文本,而主动代码生成器在需要时生成特定的代码。
3. 代码生成器不仅限于生成代码,还可以生成其他格式的文本内容,如HTML、XML、纯文本等。
4. 示例中使用Perl作为代码生成器的示例,但类似的工作也可以使用Python或Shell中的awk和sed来完成。
第21节:按合约设计
这一节介绍了“按合约设计”(Design By Contract,简写DBC)的概念,该概念强调在代码中明确定义模块的权利与责任,并进行校验。
1. "按合约设计"(DBC)是Bertrand Meyer为Eiffel语言开发的概念,它旨在通过前置检查和后置保证来确保程序的正确性。
2. DBC有三个关键概念:前条件、后条件和类不变项,用于明确定义模块的行为和约束。
3. 在支持DBC的编程语言中,你可以使用相应的语法或框架来声明前条件、后条件和类不变项,以便在编译时或运行时进行校验。
4. 尽管DBC的支持语言相对有限,但它强调了开发人员应明确定义和校验代码的权利和责任,从而提高了代码质量。
第22节:死程序不说谎
这一节强调了对待程序中可能的错误和异常情况的态度。
1. 避免对程序过于自信,要有警惕心。忽视潜在的问题可能会导致严重的后果。
2. 在异常情况下,应该及早崩溃,以强调问题的存在,而不是默默地继续执行,可能导致更严重的错误。
3. 在引发崩溃时,不要造成不可逆的破坏,例如,确保已申请的资源已经释放。
4. 死程序通常比有潜在问题的程序更容易处理,因为它们的问题被明确识别,而不是潜在的隐患。
这一节的核心思想是不要忽视可能的问题,要及早发现和解决它们,以确保代码的可靠性和稳定性。
标签:代码生成,18,DBC,2023.10,问题,文本,代码,调试 From: https://www.cnblogs.com/ztydebeishanglaojia/p/17781358.html