在本书的前几章中,“提问”就被高度重视,这让我感到非常高兴。向同事提问和学习是快速成长和习得新技能的有效方式。为你的工作成果感到自豪通常是件好事,但当自己在持续改进和交付中比以前做得更好时,你应该优先感到自豪。
https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way
提问的艺术,感兴趣的可以看一看
重点并不是要写一份完美的文档,而是要写得足够多,以引发讨论,充实细节。这是坎宁安定律的一个应用,该定律认为:“在互联网上获得正确答案的最好方法并不是提出问题,而是发布错误的答案。”
马丁·M.布罗德威尔在其文章《为学而教》(“Teaching for Learning”)中定义了能力的4个阶段:“无意识的无能力”(unconscious incompetence)、“有意识的无能力”(conscious incompetence),“有意识的有能力”(conscious competence)和“无意识的有能力”(unconscious competence)。
限制你研究一个问题时预期花费的时间。
及时止损需要自律和练习,因为你要对自己负责。
大多数新手工程师在开始工作时处于“有意识的无能力”阶段。有很多东西需要学习,而其他人似乎早已遥遥领先。你可能会担心你不属于这个行业,或者找到工作只是运气好。对自己苛责很容易,我们也有过这样的经历。无论我们多么频繁地告诉工程师他们做得很好,有些人就是不相信。即使他们升职了,还是不信!这让他们感到很不舒服。他们说他们只是很幸运,他们不值得别人认可,或者是升职标准太宽松了。这就是冒充者综合征。
冒充者综合征会自我强化。每一个错误都会被看作能力匮乏的证明,而每一项成功都是优秀“冒充者”冒充的证据。一旦某个人进入了这个循环,就很难摆脱它。
邓宁-克鲁格效应。这是一种认知偏见,人们认为自己比实际情况更有能力。处于“无意识的无能力”阶段的工程师不知道自己不知道什么,所以他们不能准确地评估自己和他人的表现。他们太自信了。他们总是到处批判公司的技术栈,抱怨代码的质量,贬低设计。他们确信自己的想法是正确的。他们的默认模式是直接回绝或无视反馈。拒绝所有的建议会亮起一盏巨大的红灯:完全自信标志着盲点。
编写可维护的代码:
一、防御式编程
· 避免空值
· 保持变量不可变
· 使用类型提示和静态类型检查器
· 验证输入
· 善用异常
· 异常要有精确含义
· 早抛晚捕
“早抛”意味着在尽可能接近错误的地方引发异常,这样开发人员就能迅速地定位相关的代码。
“晚捕”意味着在调用的堆栈上传播这个异常,直到你到达能够处理异常的程序的层级。
· 智能重试
面对一个错误时,适当反应往往是简单地再试一次就好。在调用远程系统时,正常的计划就应该是偶尔要多尝试几次。重试一个操作听起来很简单:捕捉异常并重试该操作。但在实践中,决定何时重试以及重试的频率都需要一些技巧。比如退避策略
· 构建幂等系统
处理重试的最好方法是构建幂等系统。一个幂等的操作是可以被进行多次并且仍然产生相同结果的操作。将一个值添加到一个集合中就是一个幂等操作。无论该值被添加了多少次,只要它被添加过,它就在集合中存在。通过允许客户端单独为每个请求提供一个唯一ID的方式,远程API就可以变为幂等API。当客户端重试时,它提供的唯一ID与失败时的相同。如果该请求已经被处理过了,服务器可以移除重复的请求。让你的所有操作都成为幂等操作,这可大大简化系统的交互,同时也可消除一大类潜在的错误。
· 及时释放资源
二、关于日志的使用
· 给日志分级
· 日志的原子性
· 关注日志性能
· 不要记录敏感数据
截止到第四章第二节