程序员是如何思考的-笔记
如何思考
以始为终点
践行“以终为始”就是在做事之前,先考虑结果,根据结果来确定要做的事情。
能够为别人带来价值,自己的价值才能体现出来
亚马逊如何开发一项产品的:
- 写新闻稿;
- 写FAQ(常见问题解答);
- 写用户文档;
- 写代码。
DoD 是一个的思维模式,是一种尽可能消除不确定性,达成共识的方式。
user story:
As a (Role), I want to (Activity), so that (Business Value)
持续集成
git flow
多问几个为什么,交流一下是不是可以换个做法,许多困惑可能就烟消云散了。而能想到问这样的问题,前提就是要跳出程序员角色思维,扩大自己工作的上下文。
当扩大了自己工作的上下文时,我们的目标就不再局限于一个单点,而是会站在更高的维度去思考,解决问题还有没有更简单的方案。许多在低一级难以解决的问题,放到更大的上下文里,根本就不是问题。
“最后一公里”,这个说法指的是完成一件事,在最后也是最关键的步骤。
负责人就是站在“最后一公里”的角度来看要发生的事情。
实际上,早就有人在熟练运用这种思想了。在军事上,人们将其称为沙盘推演,或沙盘模拟。军队通过沙盘模拟军事双方的对战过程,发现战略战术上存在的问题。这一思想也被商界借鉴过来,用来培训各级管理者。
今天谈到人工智能,人们主要会谈三件事:算法、算力和数据。算法几乎是行业共有的,而算力在云计算普及的今天也不再是稀缺资源,所以,数据几乎成了兵家必争之“物”。
迭代0
有一个关于程序员的经典段子:这个工作已经做完了80%,剩下的20%还要用和前面的一样时间。
怎么衡量测试是否做好了呢?有一个标准:A-TRIP,这是五个单词的缩写,分别是Automatic(自动化)、Thorough(全面)、Repeatable(可重复的)、Independent(独立的)和 Professional(专业的)。
想要管理好需求,先把需求拆小。
一个有效的时间管理策略是艾森豪威尔矩阵
当时间有限时,我们需要学会找到一条可行的路径,在完整用户体验和完整系统之间,找到一个平衡。
Minimum Viable Product,MVP
通过沟通反馈,不断升级自己的编解码能力。
任何人都能写出计算机能够理解的代码,只有好程序员才能写出人能够理解的代码。
—— Martin Fowler
晨会:
所以,在总长固定的情况下,每个人发言的时间一定是有限的。在有限的时间内,你能说什么呢?我建议你只说三件事:
- 我昨天做了什么?
- 我今天打算做什么?
- 我在过程中遇到了什么问题,需要请求帮助。
技术雷达
https://www.thoughtworks.com/radar
技术雷达用来追踪技术,在雷达图的术语里,每一项技术表示为一个 blip,也就是雷达上的一个光点。
然后用两个分类元素组织这些 blip:象限(quadrant)和圆环(ring),其中,象限表示一个 blip 的种类,目前有四个种类:技术、平台、工具,还有语言与框架。
圆环表示技术一个 blip 在技术采纳生命周期中所处的阶段,目前这个生命周期包含四个阶段:采用(Adopt)、试验(Trial)、评估(Assess)和暂缓(Hold)。
看板
这种把过程还原,进行研讨与分析的方式,就是复盘。
Eat your own dog food
和产品经理没有“共同语言”
因为他们说的通常是业务语言,而我们的口中基本上是计算机语言。这是两个领域的东西,很难互通。前面在讨论代码的时候,我提到要用业务的语言写代码,实际上,这种做法就是领域驱动设计中的通用语言(Ubiquitous Language)。
遇到问题,最好的解决方案是尽早把问题暴露出来。
Perl 语言的发明人 Larry Wall 曾经说过,优秀程序员应该有三大美德:懒惰、急躁和傲慢(Laziness, Impatience and hubris)。想要成为一个优秀的程序员,就要让机器为自己很好地工作,而这需要对自动化有着很好地理解。
追变的东西,永远追不完,追不变的东西,就那么点东西。
DevOps技术栈
https://chaifeng.com/devops-tech-stack/
运维:
https://www.infoq.cn/article/detail-analysis-of-devops
Martin 提出的面向对象设计原则:SOLID
- 单一职责原则(Single responsibility principle,SRP)
- 开放封闭原则(Open–closed principle,OCP)
- Liskov 替换原则(Liskov substitution principle,LSP)
- 接口隔离原则(Interface segregation principle,ISP)
- 依赖倒置原则(Dependency inversion principle,DIP)
六边形架构
分层,更关键的是,提供抽象。这种分层抽象在计算机领域无处不在,无论是编程语言,还是网络协议,都体现着分层抽象的价值。有了分层抽象,人们才能更好地在抽象的基础上构建更复杂的东西。
你的领域层只依赖于你的领域对象,第三方发过来的内容先做一次转换,转换成你的领域对象。这种做法称为防腐层。
《卓有成效的管理者》