Window Vista 项目失控的秘密
本文是关于软件复杂度的好文章,Vista 是个失败的系统,十年之后,在后续的开发中,微软吸取了很多经验。
上千个工程师,测试,项目经理,安全,设计,销售跟进开发 Windows。Windows 内部有核心,服务器,客户端三个组,核心管内核供其它两组用,服务器管服务端市场,客户端管桌面系统。
操作系统三年发版,但只有其中六到九个月真正在开发新代码,剩下都在集成测试测试测试。有些比较耗时的项目写完后才合进来,那个时候主干仓库几乎就是半瘫痪不能运行。每个组都有自己的日程,进度不一搞得很多组不得不在最后时刻冲刺调试。作者认为三年一版这样做根本跑不赢市场。解决方案就是要加速!像 cloud service 那样更快的将特性推到市场去。
课后习题:文中的 Play schedule chicken 是啥意思?
read more相同内容 Python 字符串什么时候在内存中是同一个对象?
CPython 中字符串是不可变对象,解释器有可能会将一些字符串指向相同的对象以节省内存。这里有一些 intern 的规则:
- 长度为 0 或 1 的字符串是 interned 的。
- literal 的字符串是 interned 的,动态拼接的不是,例如 "WTF" 是,"".join(["W", "T", "F"]) 不是。
- 对于第二条规则,加一个特例,字符串中只能出现字母数字和下划线,否则就不是,例如 "WTF~" 就不是。
- 对于第三条规则,再加一个特例,在交互模式中,如果出现了
a,b="a!","a!"
, 这个字符串又是 interned,原因是解释器优化。
另外,文章提及了几个边界 case:
r …
做喜欢做的事情 | 工作注定痛苦?
小时候觉得长大比较好可以做各种好玩的事情,但很多人长大后发现要赚钱,不行,很多时候很痛苦一点也不好玩。但也有一些人工作地非常开心,不仅做的事情自己喜欢,成果也是同事们认可的。本文作者 Paul Graham 提出的观点是(也是借用别人的):做一件让同事朋友觉得你很厉害的事情,同时坚持实践下去。如果工作一开始就不是自己喜欢的,那就让自己能力变强,到最后就是你挑工作,而非工作挑你。
衍生思考:从心理学的角度考虑,正向反馈非常重要。也许财务自由并非是最快乐的事情,一直在做喜欢做的事情的那些人真是很羡慕。我的建议:搞清楚自己喜欢什么,然后一头扎进去做。就像我现在在做 Techshack 一样,做的很开心 :)
read moreAirbnb 如何保证全球数十个支付网关的集成和数据一致性?
Airbnb 家的支付系统遭遇的挑战是全球化服务面临多币种多支付网关,核心问题在异步的,分布式的系统里保障事务的一致性。这个流程中需要注意的地方是要做好追踪,一旦断掉一环,就很有可能出现错误和数据丢失。他们解决方案第一保障数据链完整,第二一旦检测到不一致立马自动修复。
整个交易流程中会遇到买卖方,银行,支付网关等等,每个实体都会往支付数据中注入自己的数据。支付系统需要保证的是帐要绝对算对。这里面遇到的支付方有些甚至奇葩到好几天才能帐目生效。也许网络不好,也许某方bug,也许其它原因,支付链条里只要有一方不响应或停止数据流动,整个事务就坏了(out-of-sync)。
好在这类型系统每一方都提供事务报告(transaction reports),我们可以根据事务报告,源头的帐目文件,以及银行流水。在排除掉重复文件后,我们是有办法检测到是不是有一个事务的链条断掉了。
Airbnb 还提供了一条流水线专门跟踪支付退款等数据,从监控的角度来看,他们基于支付的业务来监控整个系统的可用性。Operation 可以很容易将这种指标纳入监控从而进行快速事故响应。
read more