[Notes] Clean Agile

Hope is the project killer. Hope is what makes a software team mislead managers about their true progress.

The date was chosen for good business reasons, and those reasons still hold. So let’s try to add staff. Everyone knows we can go twice as fast by doubling the staff. Actually, this is exactly the opposite of the case. Brooks’ law states: Adding manpower to a late project makes it later.

Producing crap does not make you go faster. It makes you go slower. This is the lesson you learn after you’ve been a programmer for 20 or 30 years. There is no such thing as quick and dirty. Anything dirty is slow. The only way to go fast, is to go well.

We developers should celebrate change because that’s why we are here. Changing requirements is the name of the whole game. Those changes are the justification for our careers and our salaries. Our jobs depend on our ability to accept and engineer changing requirements and to make those changes relatively inexpensive.

Humans make things better with time. Painters improve their paintings, songwriters improve their songs, and homeowners improve their homes. The same should be true for software. The older a software system is, the better it should be.

Customers, users, and managers expect fearless competence. They expect that if you see something wrong or dirty, you will fix and clean it. They don’t expect you to allow problems to fester and grow; they expect you to stay on top of the code, keeping it as clean and clear as possible.

In short, we cannot agree to deliver fixed scopes on hard dates. Either the scopes or the dates must be soft. We represent that softness with probability curve. For example, we estimate that there is a 95% probability that we can get the first ten stories done by the date. A 50% chance that we can get the next five done by the date. And a 5% chance that the five after that might get done by the date.

Refactoring is never a story. Architecture is never a story. Code cleanup is never a story. A story is always something that the business values. Don’t worry, we will deal with refactoring, architecture, and cleanup—but not with stories.

After the midpoint, if all the acceptance tests are done, QA should be working on the tests for the next iteration. This is a bit speculative since the IPM hasn’t happened yet, but the stakeholders can offer guidance about the stories most likely to be chosen.

Remember, the only failing iteration is an iteration that fails to produce data.

Business analysts specify the happy paths. QA’s role is to write the unhappy paths.

These two disciplines, double-entry bookkeeping and TDD, are equivalent. They both serve the same function: to prevent errors in critically important documents where every symbol must be correct.

The only way you get good at using a debugger is by spending a lot of time debugging. Spending a lot of time debugging implies that there are always a lot of bugs. Test-Driven Developers are not skilled at operating the debugger because they simply don’t use a debugger that often; and when they do, it is typically for a very brief amount of time.

Test coverage is a team metric, not a management metric. Managers are unlikely to know what the metric actually means. Managers should not use this metric as a goal or a target. The team should use it solely to inform their testing strategy.

You cannot write a function that is hard to test. Since you are writing the test first, you will naturally design the function you are testing to be easy to test.

So again, the bottom line from my point of view is this: There is no such thing as Agile in the large. Agile was a necessary innovation for organizing small software teams. But once organized, those teams fit into the structure that large organizations have used for millennia.

[Notes] 高绩效教练

教练是一种源于教练气质的修炼方式——它是一种坚定的信念,相信自己和他人的能力、智慧和潜能,使教练能够专注于他人的优势、解决方案和未来的成功,而不是弱点、问题或过去的表现。

我们并不是说不需要专家的输入,但大多不太好的教练会倾向于过度使用专家知识,并因此减少了他作为教练的价值,因为每一次输入都是在减少教练对象的责任感。

许多低水平的教练常用引导性问题,这表明他们并不相信自己在做的事情。而教练对象会迅速意识到这一点,从而导致其对教练的信任度降低。教练宁可给教练对象直接建议,也不要试图操控他的前进方向。暗含批评的问题也同样应该避免,比如“你到底为什么要这样做?”

一个很少失败的有价值的现状问题是“到目前为止你已经采取了哪些行动?”以及“那个行动的结果怎样?”人们经常会想问题想得很久,但仅仅当被问及他们做了什么的时候才意识到他们实际没有采取任何行动。

[Notes] 《搜索的喜悦》

有人曾经拿奥数题问数学家丘成桐,丘成桐表示自己不会做,也不值得做。相对于巧妙技巧来说,数学家更需要的是勤奋、眼光和思想 —— 而后者是有迹可循的,甚至可以模仿别人。

真实的工作中“诡计”没啥大用,智慧主要体现在明智的选择和开阔的眼界,而到最后只有勤奋才能让你走得更远。

牛和鹿在吃草或休息的时候倾向于面朝磁北或磁南。

整个美国的土地都属于“北美板块”,它是从东往西运动。西海岸是北美板块的前沿,在这里北美板块和太平洋板块相遇,形成一个俯冲区。北美板块在这里比较低的部分直接就被太平洋板块给碾压了,所以海岸线看起来很界限分明。而东海岸则是北美板块的后缘,就好像一个尾巴一样,拖着一些东西,经过泥沙积累,就形成了各个屏障岛。

那篇博客是一个叫摩根·杰克逊(Morgan D. Jackson)的昆虫学研究生写的,专门讨论的就是这种苍蝇翅膀上为啥有蚂蚁的图像。

杰克逊的文章说,这个现象纯属巧合。你看那个图案像蚂蚁,那是因为你作为一个人,总爱在任何东西上寻找意义和规律。其实那个图案根本没有意义。

搜索者的好奇,是看到一个什么东西,想要更*多*地了解这个东西。关键词是“多”。不是赞叹,不是喜欢,不是想把这个东西据为己有 —— 是这个东西给他传递了一个信号:背后还有更多有意思的事情,你值得了解!

[Notes] 《与陌生人交谈》

一个人掌握的所谓关键信息,并不是土里埋着的一块金子,你只要使劲挖就能挖出来。关键信息是个很脆弱的东西,你用力过猛,就可能把它给破坏了。

如果你遇到有人要自杀千万要救,因为你救下这一次,他过后很可能就不想自杀了。如果你不幸想要自杀,千万要挺住!挺过这一关,你很可能就不想自杀了。

[Notes] 领导梯队

他们必须坚信,把时间用于帮助他人、制定计划、教练辅导和类似的工作,是他们的职责,而且他们必须把通过他人完成任务作为自己取得成功的关键。

例如,一位投资银行的经理,可能亲自组织一项复杂的交易,而不是支持下属去做,他喜欢向人们展示自己在这方面的专长。另一种情况是,当他们对下属的工作方法感到不满时,便亲自去做,这在无形中产生了与下属的竞争。

当然,沟通需要占用很多时间,很多一线经理习惯将时间用在“做事情”上面,而不愿意花时间与人沟通,这将导致由于缺乏充分的信息做出草率的工作布置。

领导力在第一个管理层级出现问题的明确信号是员工感到压力很大。当员工感到不知所措、抱怨上级没有足够的支持时,这表明经理缺乏这个岗位所需的关键技能。

不应该把下属提出的问题看成是障碍。

不应该补救下属的工作失误,而是教会他们如何正确去做。

[Notes] 《怪异经济学》

经济学上有个“科斯定理(Coase Theorem)”,用大白话来说,就是一件物品最初的物权在谁手里并不重要:只要是自由交易,它终究会落到对它的价值评估最高的那个人手里。

怪异不怪异,这不是一个好的观察角度 —— 正确的观察方法是看其中的激励机制:如果有这么多人愿意参与这件事,那就一定是各方都得到了自己想要的东西。

而吉普赛人的传统价值观,可以说是非常独特。
这个核心思想是要随时区分“污浊(marime)”和“纯净(vujo)”。基本原则是从人的身体来看,腰部以上的部位算纯净的;腰以下的部位,因为涉及到生殖器官和排泄器官,是污浊的。

还有研究统计了程序员社区 GitHub 上的项目合作情况,发现越是多人合作的编程项目,就呈现“定于一人”的局面 [6]:总是有一个人做了绝大部分工作,其他人只是起到辅助作用。这很可能是因为越是复杂的工作,越需要确保整个思路的一致性。

[Notes] 《模型思考者》

既然急诊变方便了,那些本来只有些小病,不需要看急诊的人,就也会来看急诊。你的急诊室将会再次拥挤。你的模型必须能够判断,方便不是均衡态,拥挤才是。

我们的确见过很多身高超过两米的人,但是可没见过身高 15 米的人。而在另一些领域中,的确就是存在特别极端的例子,比如世界上有些特别有钱的人。这二者的区别是啥呢?
区别是人的身高服从正态分布,而财富不是。

简单地说,关键要求有两个:“相加”和“独立” —— 凡是多个独立随机变量相加的事件,结果就会是正态分布 。
你的餐馆顾客满足这些条件。每个顾客来不来吃饭都是他自己的决定,是独立的;而你计算的是今天总共来了多少人,是这些人的和。

如果一个事件的结果不是由独立随机事件相加、而是由相乘决定的,它的分布将是“对数正态分布”。
它有一个比较长的尾巴。这意味着其中发生极端事件的可能性比正态分布高很多。
比如说涨工资吧。有个公司,本来员工之间工资相差不大。有一天老板宣布了一个涨工资计划,说以后每年业绩突出的员工,工资会增加 10%。

幂律分布是*不独立*的随机变量作用的结果。比如你去书店买书,那么多本书选哪本呢?你会优先关注那些上了排行榜的“畅销书”。明星的粉丝数量、公司的大小、城市的大小,都是幂律分布。

模型揭示了经济增长的秘密:长期看来,只有创新能带来真正的增长。

那为什么到了八十年代中期,苏联人突然连买个面包都得排队两小时了呢?为什么连个儿童服装都羡慕欧洲的呢?

因为苏联不创新。

创新意味着要淘汰掉旧的机器厂房、旧的工厂、甚至是旧的产业。

而且创新还是不可控的。想要真正的百花齐放式的创新,你就必须容忍市场上有一些你不能理解的、不能掌控的事物出现。

Markov Process 马尔可夫过程有一个固定的宿命。这不是巧合,这是数学定理。四个条件中只有第二个条件是关键,也就是状态之间切换的概率是固定的。

首先,骚乱是否发生,并不仅仅是由所有人的平均阈值决定的,而是由阈值的具体分布情况决定的。
所以第二个道理就是你很难预测一场骚乱是否会发生。骚乱具有偶然性。

提到路径依赖,人们最先想到的一个例子就是现在都在用的QWERTY键盘。

路径依赖则是说,这个东西能流行可以跟任何东西都没关系,纯粹是因为早期的偶然选择,导致了流行这个而不是那个。

[Notes] 怎样培养有主动性的孩子

很多家长都推崇睡前故事,我觉得睡前聊天更重要。因为听故事是单向的输入,而聊天是双向的沟通。

我会遵循“倾听、提问、少评论”这三个原则。

把亲子对话带入到夫妻、上下属这种非常熟悉的关系场景中,可以让父母切身体会到孩子的感受,以及弱势方的情绪。
其实,两方沟通时,弱势方并不都需要强势方给出解决方案。他们可能只想发出自己的声音,获得对方的关注和接纳。

我刚才介绍的《如何说小孩子才会听》,给了两个建议:
一是拟人化。充分发挥想象力,让孩子周围的事物都“活”起来。
第二,就是把生活中枯燥的日常事务趣味化,把它们包装成游戏或者挑战。
一句话,我们要——抛弃逻辑,和孩子一起玩!

首先,游戏里最好让孩子扮演掌控者。
无论是做照顾者、医生还是老师,都是生活中属于主导者的一方。让孩子主导,就能获得平时无法获得的体验,大大增强他们的自信心。同时,也让他们去换位思考,“主导者”是不是真的那么有力量,怎么和他们打交道。

哈里斯还发现,教养影响的主要是孩子在家庭的行为。而在外部社会,孩子自有一套不同的行为规范。

先说同伴。在我家,朵拉的同伴是爸爸。每天晚上自学数学时,朵拉爸都会陪着她。30分钟的时间,一般是朵拉看视频做题,爸爸看书。朵拉看不懂视频或做不出题的时候,爸爸才会给她讲解。

[Notes] 蔡钰·批判性思维

有一个段子意味深长。它说:大脑是人体最重要的器官,但你意识到没有,这可是大脑让你这么想的。

所以,旁观者身份,其实就是一种更清醒、更置身局外的洞察者身份。你也可以做自己的旁观者,第一个你在思考,第二个你在观察第一个你的思考。

你仔细想想,批判性思维的的确确是带有批判性的,只不过,它不是批判某个人,也不是断然否定某个观点, 它批判的其实是一个观点背后的思考和论证过程。

在面对一段思考的时候,你就需要判定一下,如果推理手法是演绎推理,结论就应该是肯定的。如果推理手法是归纳的,那么结论只能说“可能”或者“很可能”。如果错配了,那这个推理就没那么有效了。

她说,人们不知道为什么会坚信,凡事一押韵,就很有道理。
比方说,“冬吃萝卜夏吃姜,不用医生开药方”“老将出马,一个顶俩”。用“押韵”来挑动直觉感受的例子,你自己肯定也能想到很多。

这个观念遭到反对时,我有没有从内心深处产生抵触和愤怒?

你有没有意愿或者冲动,想要把这个观念变成所有人都认可和尊崇的原则?

你自己在遵照这个观念来行动,甚至作出重要的人生选择吗?

我们很多人都有的一个本能信念是:否定我这个信念就是否定我这个人。
那么,想要超越这种恐惧,最有效的办法其实是: 不要把你的个人认同建立在某个信念内容本身上,而是建立在这个信念的推导过程上。

你要是去问一个法学家,他会给你一个特别体现立场价值观的回答:在立法者看来,人们的生命权高于自由权。吸烟的自由权和不吸烟的自由权是对等的,但是被动吸二手烟的人,他的生命健康权应该受到保护,避免无端受到外部侵害。

这是第一种局限,时代局限。要破除思考框架里的时代局限,有一个问题比较好用,我前面已经提过了。你可以这么问自己:
这个结论,如果往前或往后放3年、30年,还会适用吗?

好,那么格局局限,无论发生在同一维度上还是其他维度上,我们有办法可以识破吗?很遗憾,没有直接解法。最有用的办法听起来非常鸡汤:多看世界、多接受信息,保持好奇,多学东西。
格局局限很难破除,除非你亲自经历了另一种格局,获得那种格局之下的体感。

哲学大师维特根斯坦的一个观点,他说:语言的边界就是思想的边界。我们的思维是靠语言来组织起来和推进下去的。那么, 一个语种对世界的描述能力不完备,肯定就会导致对应的思维体系的不完备。

我有一个评估麻烦事儿的金钱指标,叫“不折腾费”,意思是我在面对一件繁琐的事情的时候,我会想一想,花多少钱我宁愿把这件事外包出去,或者省多少钱我愿意把这个麻烦给担了。一旦明确了价格,我马上就能作出相对理性的判断。

如果你本来就是鸟儿,向你的本能学习飞行,其实已经是最优策略。飞行是你的本能,是一手的common sense,而知识专家们整理出来的飞行技术,其实是二手的knowledge。

[Notes] 《生活黑客》

创新阶层中的很多人就像是罗胖说的那种“U盘式生存”:自带信息、不装系统、随时插拔、自由协作。他们的工作非常独立,而且非常主动。

时间管理最根本的理论基础,是一个叫做“蔡格尼克效应(Zeigarnik effect)”的心理学效应。这个效应是说,没有完成的任务,会给我们带来精神压力。

要想真把效能提高十倍,你只有一个办法。那就是请别人帮你做事。
我看这才是“高效能人士”的真正习惯。

当意愿低的人还在安逸和内疚感之间挣扎的时候,意愿高的人可能已经都做完了。
意愿,由期望、价值、冲动和延期决定。

基于这一点,我认为所谓“最强大脑”都应该叫“最怪大脑”,比的不是实用的功夫,而是像什么金钟罩铁布衫之类的武术表演。
生活黑客们根本不追求这种功夫,因为完全可以用外部工具替代。黑客是以解决实际问题为目的,能用工具就用工具的人 —— 黑客不是打把势卖艺的人。

佛祖认为,极端的艰苦和极端的奢侈是一回事,都是执着。

有个生活黑客以住在房车里为荣,四海为家,还靠房车主题结交了好多女朋友。他分享了一条经验是这样的:告诉新女友你住房车这件事的时候,一定要给她讲个故事,让她明白这是你的主动选择,可不是因为没钱买房。

没有副作用、无需考虑剂量的药,那只能是鸡汤。
所以到底应不应该学习这些方法?当然应该学习 —— 但是你学归学,不一定真用。副作用也是知识,不用也是智慧。

你对工作的敏感度,到了在乎 10% 的水平了吗?专业选手会非常在乎。如果有什么装备能让职业运动员的成绩提高哪怕 1%,他们一定愿意多花几倍的价钱得到。