目录

整洁代码的艺术

整洁代码的艺术的笔记。少即是多!


参考:




复杂性

选择语言、项目、库、技术、编辑器等等,都带来了复杂性,造成了巨大的混乱。我如何开始 成了初学者的常见问题。

最好的方式是找个实际代码项目,边做边学,而不是先学后做。不要给自己增加复杂性,让自己陷入了无穷无尽的混乱中。

复杂性无处不在,常常带来隐性成本,让人望而却步。在编程的各个阶段都追求简单和专注,来简化事项。

复杂性损坏生产力,降低注意力。


以下方法:

  • 梳理一天的工作,少做一些事,把精力集中在重要的任务上。
  • 对于单个项目,摒弃所有非必要特性,专注于最小可行产品。完成并发布它,高效、快速地验证。
  • 尽量编写简单精炼的代码。
  • 少花时间与精力在过早优化上。
  • 锁定用于编程的大块时间,避免分心。
  • 实践 Unix 哲学,代码功能只针对一个目标(做好一件事)。
  • 在设计方案中贯彻简化原则。



八二原则

80/20 原则,大部分效果出自少数起因。




最小可行产品

最小可行产品只做最必要的特性,剥离其他所有特性,快速测试和验证假设,而不会浪费大量时间来实现用户最终可能不会使用的特性。

少即是多,与其着急于动手实现每个特性,不如花时间想清楚要实现什么特性。

不写非必要的代码是写出整洁和简单代码的最牢靠手段。




编写整洁和简单的代码

整洁代码易于阅读、理解和修改。

程序员为了写新代码,得花费大部分时间阅读旧代码。如果旧代码易于阅读,则将大大加快阅读进程。

太长的代码会导致许多其他复杂性问题。

改进代码、减少复杂度就是所谓的 重构


一些原则:

  • 所有文件和模块都是必需的吗?能否做强其中一些,减少代码中的相互依赖关系?
  • 可以将巨大、复杂的文件切分为两个简单的文件吗?
  • 可以采用既有库,从而移除多行代码吗?
  • 可以利用缓存机制来避免重复计算同一个结果吗?
  • 站在巨人的肩膀上,避免重复造轮子。
  • 为人写代码,而不是为机器。
  • 正确命名。
  • 遵循标准。
  • 使用注释。
  • 避免非必要注释。
  • 避免编写重复的代码。
  • 单一权责原则,每个函数都应该承担一件主要工作。
  • 测试。
  • 小即是美。
  • 应当尽量减少代码对象之间的依赖关系。
  • 不需要的代码就应该删掉。
  • 不要使用太多的缩进层级。



避免过早优化

优化没有问题,但过早优化会将宝贵的资源(时间、精力、代码行)投入到非必要的代码优化上。




心流

心流体验是一种完全沉浸于手头工作的状态:专注。你忘记时间,进入超意识状态。




做好一件事

Unix 哲学:

  • 编写只做一件事,并且把那件事做好的程序;
  • 编写能一起工作的程序;
  • 编写处理文本流的程序,因为文本流是通用接口。

Unix 是一种设计哲学,它启发了包括 Linux 和 macOS 在内的流行操作系统。

只做一件事,做好这件事(do one thing and do it well)。

Unix 哲学的基本概念是打造易于扩展和维护的简明、精炼、模块化代码。

通过让每个函数聚焦于只实现一个目的,改进了代码的可维护性和可扩展性。

对然单个子程序看上去太小甚至太细碎,但你能将这些子程序组合起来,创建更为复杂却易于调试的程序。



有用的Unix原则

一些有用的 Unix 原则:

  • 每个函数做好一件事
  • 简单胜于复杂
  • 小即是美
    • 降低复杂度
    • 改进可维护性
    • 改进可测试性
  • 尽快打造原型
  • 可移植性胜于效率
  • 在纯文本中保存数据
    • 如常见的 CSV 文件
  • 使用软件杠杆获得优势
  • 避免使用强制式用户界面
  • 把每个程序都写成过滤器
  • 在有限资源限制的世界中,先发布差的一些东西,常常更有效率。
  • 整洁代码胜于机灵代码
  • 将程序设计成能与其他程序相连接
  • 编写健壮的代码:让代码不易被破坏。
    • 使用版本控制系统,保证能恢复之前的代码
    • 定期备份数据,使其可恢复
    • 使用分布式,避免单点故障
  • 尽量修复——但尽早暴露失败
  • 避免手工操作——尽量编写能写程序的程序



设计中的少即是多

如何实现极简设计:

  • 留白
  • 去除设计元素
  • 移除特性
  • 减少字体和颜色
  • 一以贯之



专注

熵在热力学和信息论等领域中广为人知。熵定义了系统中随机性、无序性和不确定性的程度。熵增意味着增加了随机性和混乱,熵减意味着秩序和可预测性。

热力学第二定律,系统的熵随时间推移而增加,从而导致高熵状态。