整洁代码之道|软件开发的那些真理,上大学时我怎么就没记住


整洁代码之道|软件开发的那些真理,上大学时我怎么就没记住文章插图
作者丨Ryland
很多开发者在编程多年以后 , 总是在实际工作的惨痛教训中学会了一些本该在大学时期就掌握的软件开发真理 。 我太难了 , 早干嘛去了……
1、不要太在意“代码行数”
整洁代码之道|软件开发的那些真理,上大学时我怎么就没记住文章插图
你可能听到过很多有关“代码行数”的疯狂理论 , 但请不要把它们当真 。 基于代码行数来做技术决策是一件很荒谬的事情 。 代码行数能够为我们提供的信息是很有限的 。 实际上 , 在大多数情况下 , 代码行数能够为我们提供的信息为零 。 基于代码行数来做技术决策无异于基于一本书的页数来判断书的质量 。
有人认为 , 项目的代码越少就越容易读懂 , 但这个观点只说对了一部分 。 我认为 , 具有可读性的代码应该具备以下这些特点:

  • 一致性;
  • 自描述;
  • 良好的文档;
  • 使用了稳定的特性;
  • 不会太复杂;
  • 性能不会太差 。
如果为了减少代码行数而破坏了这些原则 , 那才是问题 。 事实上 , 如果你尽量去遵循这些原则 , 代码行数自然会处在一个很完美的位置 , 根本不需要特意去计算究竟有多少行代码 。
2、不一定要把编程语言分出“好坏”
整洁代码之道|软件开发的那些真理,上大学时我怎么就没记住文章插图
人们经常会这样说:
C 语言比某某语言好 , 因为它的性能更好 。 Python 比某某语言好 , 因为它更简洁 。 Haskell 比某某语言好 , 因为它是异类 。 使用一句话来评判和比较一门编程语言是对语言本身的侮辱 。 它们是编程语言 , 可不是什么口袋精灵 。
编程语言之间确实存在差别 , 而且很少存在“没有用”的编程语言(除了那些过时或者已经死掉的语言) 。 每一门编程语言都在某些方面做出了权衡 , 它们就像工具箱里的工具 。 起子可以做锤子做不到的事情 , 但你能说起子比锤子更好吗?
在说出我的编程语言评判标准之前 , 需要先澄清一个问题 。 编程语言的选择很少会对一个项目起到实质性的作用 。 如果你写的是前端代码 , 选择不会太多 , 但通常来说 , 编程语言的选择只是决定项目成败的一个不那么重要的因素 。
以下是我认为在选择编程语言时需要考虑的一些因素(已经排好序了):
  • 是不是有很多相关教程;
  • 开发速度;
  • 出现 bug 的几率;
  • 库生态系统的质量和广度;
  • 性能;
  • 好不好招人 。
不过 , 有一些场景是你无法掌控的 。 例如 , 如果你是一名数据科学家 , 那可能就得用 Python、R 语言或 Scala 。 如果只是一个个人项目 , 那完全可以选择使用你喜欢的编程语言 。 我在选择编程语言时只有一条原则:如果 StackOverflow 上与这门语言相关的问题不多 , 我就不会使用这门语言 。 并不是说遇到问题自己解决不了 , 而是因为花太多时间在这些问题上面不值得 。
3、阅读别人的代码是个麻烦事
整洁代码之道|软件开发的那些真理,上大学时我怎么就没记住文章插图
阅读别人的代码其实并非易事 。 Robert Martin 在《整洁代码之道》里提到过这个问题:
事实上 , 人们花在阅读代码和花在写代码上的时间比率超过了 10 比 1 。 阅读旧代码是写新代码的一个组成部分……所以 , 容易读懂的代码会让写新代码的工作变得更容易些 。 有很长一段时间 , 我被阅读别人的代码这件事所困扰 。 后来发现 , 其实有很多人都跟我一样 , 每天都要面对这个问题 。 阅读别人的代码就像是在阅读一本用外文写的书 , 即使代码是用你熟悉的语言写的 , 代码的风格和架构仍然会不一样 。 这个问题不太好解决 , 不过我发现下面这些做法可能会对你有所帮助 。
评审别人的代码有助于提升阅读代码的能力 。 在过去两年中 , 我评审了很多 GitHub PR 。 每评审完一个 PR , 我就越能够适应阅读别人的代码 。 GitHub PR 很适合用来提升代码阅读能力 , 因为: