Chapter 1: A Pragmatic Philosophy
实用主义的编程源自于一种务实的哲学思想,这章为这些哲学思想奠定基础:
- The Cat Ate My Source Code :对你自己、你的职业规划、你的工以及具体的项目负责。除了尽最大的努力做好的你的本职工作,你还要考虑你没有考虑全面的会出错的场景【如果磁盘坏了,但你却没有备份代码,你的错;】。当错误发生时,不要说无用的借口,而是第一时间思考并提供解决方案;
- Software Entropt(熵):同理破窗效应,如果你的项目代码中只要有一处“破窗”,那么你的项目将会渐渐变烂。所以,不要容忍一处“破窗”【劣质的设计、错误的决定、代码等】。
- Stone Soup and Boiled Frogs:可能有一种情景:你有一个好的建议或想法,但是在这之前你需要一些列繁琐的请求步骤(获得批准以及流程冗长拖沓,预算等等),这可以定义为“启动疲劳(start-up fatigue)”。不要惰于踏出那一步,Be a Catalyst(催化剂) for Change。同时,工作的时候眼光不要太狭隘,Remember the Big Picture,不要闷头打代码,项目进度如何,需求是否准确等全局性问题要把握好,确保你在正确的方向上。
- Good-Enough Sothware:让你的用户参与到项目的协定中;原型开发模式给用户更多体会,用户才能给出更多的反馈。用户要的功能才是需求,不然功能写得多好也是画蛇添足。
- Your Knowledge Portfolio:软件行业,技术更新飞快,要想有一个成功的职业生涯,你必须管理好你的知识技术栈。
- 构建自己的知识技术栈:T型人才、不断完善填充自己的技术栈。
- 目标:每年学一门新语言、每季度看一本技术书、也要看非技术的书、参与到当地的一些群组中、体验不同的开发环境、保持对最新技术的关注等。
- 对你看到的听到的保持批判性思考。
- Communicate!:理解透彻你想说的、了解你的听众(你想他们知道什么,他们对什么感兴趣、他们能够接收怎么的复杂信息、他们想了解多深入、如何吸引他们了解你要说的......等)、选择合适时机、选择合适的方式、适度包装、让用户事前参与、懂得聆听、给予他人反馈
Chapter 2 : A Pragmatic Approach
在开发过程中谨记这些基本原则,你的代码将会变得更健壮、更快速,更简洁。
-
The Evils of Duplication:当同样的代码在你的程序中出现两次时,
如果你更改其中一个,以必须得记得更改另一个
,但问题就是,你通常都会忘记。
- Imposed Duplication
- Inadvertent Duplication
- Impatient Duplication:
shortcuts make for long delays
,有时候贪图方便直接复制黏贴,那你肯定有自食其果的一天。 - InterDeveloper Duplication
- Orthogonality(正交,即高内聚,低耦合):消除不相关代码模块之间的影响;以下是一些可以在你的工作中应用的规范:
- Project Teams:分工明确;
- Design:模块化;
- Toolkit and Libraries:当引入第三方工具包时,要小心保持系统的正交性;
- Coding:避免全局数据(多线程时数据的更改);避免类似的函数方法。
- Reversibility:
- Reversibility:在技术选择或者工具选择的时候,永远不能想当然地以为只有一种实现方式从而将代码写得耦合过高,随着未来项目技术的开展,很多工具都可能会被替换,例如数据库;因此,如果你在设计时谨记可逆转性原则,你就会将数据库抽象成提供一个持久化的服务,这样你就可以灵活的更换数据库而不需要做出过多不必要的修改;
There are no Final Decisions
。 - Flexible Architecture
-
Tracer Bullets:
Use Tracer Bullets to Find the Target
,其实跟迭代开发的思想;类似原型开发,却不是; -
Prototypes and post-it notes:
Prototype to Learn
。 - Domain Lanuages
-
Estimating:
Estimate to Avoid Surprises
。你要培养对你的工作量估算完成时间的能力。
- How Accurate Is Accurate Enough?
- Where Do Estimates Come From?
Chapter 3 The Basic Tools
-
The Power of Plain Text:
Keep Knowledge in Plain Text
。 -
Shell Games:
Use the Power of Command Shells
。 -
Power Editing:
Use a Single Editor Well
。 -
Source Code Control:
Always Use Source Code Control
。 -
Debugging:
Fix the Problem ,Not the Blame
。Don't Panic When Debugging
。 -
Text Manipulation:
Learn a Text Manipulation Language
。 -
Code Generators:
Write Code That Writes Code
。
Chapter 4 Pragmatic Paranoia
- Design by Contract:输入输出是否符合规范。
-
Dead Programs Tell No Lies:
Crash Early
。 -
Assertive Programming:
If It Can't Happen ,Use Assertions to Ensure That It Won't
。 -
When to Use Exceptions:
Use Exceptions for Exceptional Problems
,Error Handlers Are an Alternatve
。 -
How to Balance Resources:
Finish What You Start
。
Chapter 5 Bend or Break
-
Decoupling and the Law of Demeter:
Minimize Coupling Between Modules
。 -
Metaprogramming:
Configure,Don't Integrate
。Put Abstractions in Code,Details in Metadata
.。
Kotlin 开发者社区
国内第一Kotlin 开发者社区公众号,主要分享、交流 Kotlin 编程语言、Spring Boot、Android、React.js/Node.js、函数式编程、编程思想等相关主题。
越是喧嚣的世界,越需要宁静的思考。