程序员是如何思考的-笔记

如何思考

 

 

以始为终点

践行“以终为始”就是在做事之前,先考虑结果,根据结果来确定要做的事情。

能够为别人带来价值,自己的价值才能体现出来

 

亚马逊如何开发一项产品的:

  1. 写新闻稿;
  2. 写FAQ(常见问题解答);
  3. 写用户文档;
  4. 写代码。

 

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)

 

 六边形架构

 

分层,更关键的是,提供抽象。这种分层抽象在计算机领域无处不在,无论是编程语言,还是网络协议,都体现着分层抽象的价值。有了分层抽象,人们才能更好地在抽象的基础上构建更复杂的东西。

 

你的领域层只依赖于你的领域对象,第三方发过来的内容先做一次转换,转换成你的领域对象。这种做法称为防腐层。

 

《卓有成效的管理者》

 

posted @ 2019-08-25 16:21  人在江湖之诗和远方  阅读(674)  评论(0编辑  收藏  举报