🚀 Seven Ineffective Coding Habits of Many Programmers (Kevlin Henney)

DevTernity Conference
22 Dec 201654:27

Summary

TLDR这段演讲深入探讨了面向对象编程、测试驱动开发(TDD)以及代码设计中的最佳实践。演讲者强调了清晰的命名、避免不必要的暴露内部模型以及使用领域语言来提高代码的可读性与可维护性。同时,他提醒程序员避免使用模糊的‘get’和‘set’方法,提倡通过描述行为而非单纯的方法测试来更好地表达代码的意图。最终,演讲强调了通过有意图的代码来简化开发过程,减少不必要的猜测与错误。

Takeaways

  • 😀 编程中应避免将内部对象模型暴露出去,避免像邀请吸血鬼那样让它们进入我们的系统。
  • 😀 使用领域特定语言,而非通用的 'get' 和 'set',以更好地表达程序的意图和功能。
  • 😀 'get' 和 'set' 一词通常误导开发者,尤其是 'get' 这个词,它意味着改变对象状态而非仅仅获取数据。
  • 😀 'get' 和 'set' 的组合不应作为默认模式,它们的配对通常是虚假的,并可能导致代码设计不清晰。
  • 😀 在测试驱动开发(TDD)中,测试应该更专注于清晰地表达代码的功能意图,而不仅仅是验证代码是否能正常工作。
  • 😀 测试不应仅仅是方法的逐一验证,而应当描述系统在不同情境下的预期行为。
  • 😀 使用 IDE 自动生成的测试通常过于基础,不能有效表达功能的目的或意图,应该改进测试用例的设计。
  • 😀 通过明确的测试用例来描述栈(Stack)等数据结构的行为,而不仅仅是测试其方法的执行。
  • 😀 编写测试时,应注重描述系统应对特定情况时的行为,而非仅仅验证方法的执行成功与否。
  • 😀 最终目标是写出能直接、清晰地表达意图的代码,以便减少理解代码所需的时间,增加有效编码的时间。

Q & A

  • 在本视频中,讲者提到的“Holy Ground”概念与代码设计有什么关系?

    -讲者通过提到“Holy Ground”来类比代码中的私密空间。他表示,就像吸血鬼不能随便进入私人住所一样,代码中也应该限制不必要的公开访问,尤其是对内部对象模型的暴露。保护私密性,避免过度公开是良好代码设计的关键。

  • 为什么‘get’和‘set’方法经常被误用,导致代码设计不清晰?

    -‘get’和‘set’方法往往过于通用,缺乏对操作意图的明确表达。它们被频繁使用,是因为习惯或IDE自动生成,但这往往会导致代码缺乏明确的业务语言,进而影响代码的可读性和维护性。

  • 讲者提到的‘getter’和‘setter’与‘get’和‘set’在语言学中的区别是什么?

    -讲者指出,‘get’在英语中意味着改变某种状态,而不仅仅是获取数据。因此,‘get’和‘set’应避免过度使用,应该使用更具业务语义的方法名称,清晰地表达操作的意图,而不是单纯地获取或设置数据。

  • 代码中的‘get’和‘set’应该如何被替代?

    -讲者建议使用更具业务意义的术语,例如在金融应用中,应使用‘withdraw’和‘deposit’来表示资金操作,而不是仅仅使用‘get’和‘set’。这种方式能够更清晰地表达操作的真正意图。

  • 如何才能让代码在意图表达上更清晰?

    -为了使代码更具意图表达性,开发者应该尽量使用能够反映业务领域语言的方法名称,避免使用过于通用的术语。通过测试用例来明确功能要求,而不仅仅是验证代码是否正常工作。

  • 测试驱动开发(TDD)中的关键是什么?

    -TDD的关键是测试不仅要验证代码的功能是否正常,更要明确测试用例中所描述的功能需求。测试应当清楚地表达功能的期望,而不仅仅是测试某个方法的输出结果。

  • 为什么讲者认为使用IDE生成的代码可能导致‘错误的做法’?

    -讲者认为IDE生成的代码可能让开发者习惯性地加入‘getter’和‘setter’,而没有真正理解它们的意义。这种做法让代码看起来像是完成了工作,实际上可能导致过度复杂化并忽视了业务需求的清晰表达。

  • 为什么‘get’是一个有‘副作用’的操作?

    -讲者解释到,‘get’不只是获取数据,它通常会导致状态的变化。例如,从银行自动取款机取款时,账户余额发生了变化,这就体现了‘get’操作的副作用。

  • 在测试栈(Stack)类时,讲者强调了哪些测试设计要点?

    -讲者强调,测试栈类时应避免仅仅进行方法对方法的简单测试。应该写出具有明确描述的测试用例,表述栈的预期行为,如空栈的‘top’方法会抛出异常,‘pop’操作也应考虑空栈的情况。

  • 测试用例的作用是什么,为什么它们应该描述行为而不仅仅是功能?

    -测试用例的作用是清晰地表达代码的行为,而不仅仅是验证功能是否正确。通过描述行为,测试用例能够明确地说明代码的预期效果,帮助开发者理解代码应如何运作,并且能够更容易地发现问题。

Outlines

plate

此内容仅限付费用户访问。 请升级后访问。

立即升级

Mindmap

plate

此内容仅限付费用户访问。 请升级后访问。

立即升级

Keywords

plate

此内容仅限付费用户访问。 请升级后访问。

立即升级

Highlights

plate

此内容仅限付费用户访问。 请升级后访问。

立即升级

Transcripts

plate

此内容仅限付费用户访问。 请升级后访问。

立即升级
Rate This

5.0 / 5 (0 votes)

相关标签
编程清晰沟通意图驱动代码维护测试驱动开发效率软件设计测试案例软件开发领域语言功能行为