做个自我节制的好人

上一周没有更新blog,然后上个月的30 Days Challenge也没有达成,借口自然是很容易找的,就是橙汁同学满月了,于是从上周末开始生活的节奏就及其紧凑,睁开眼就上班,回到家就开始奶孩子,半夜里总也要起来一两趟。到了周末偶尔的闲暇时间,就睡觉补充一下体力。然而实际上也并不是没有时间,在橙汁同学回家之前,有几晚一个人回家睡觉,偷偷地把纸牌屋看完了。所以目标没完成,还是只能怪自己怠惰了。

本月学会Scala的目标没能完成,只能基本上熟悉了一下语法,在研究Twitter的Scala School过程中遇到无数坑,一方面是Scala School的信息非常过时了,并且本身Scala School中的很多代码也不是开箱可用。在Finagle的版本以及Scrooge上折腾了很长时间,最后还是靠自己研究代码和各个项目的文档把Searchbird的代码框架给架起来了。有空的时候,争取重新写一个scala-bootstrapper的gem或者教程吧。学习使用Scala的目标应该还会继续,但是不会再作为30 Days Chanllege的目标了。

在每日公车来回上班的路上,抽空把<富兰克林自传>给看完了,过去一段时间的读书体验也让自己有些小小后悔没有早一点入手KPW,导致不少书买在了多看平台上,导致管理起电子书多少显得有些麻烦。

<富兰克林自传>对我自己是颇有鼓舞,把这本书当成是美国开国者的传记,其实并不恰当,因为这本书其实只写到了富兰克林50岁的经历,而离美国革命爆发尚有20年。事实上,这本书就如同富兰克林的个人秘书本杰明-沃恩所说的,是适合青年人通过了解一个伟大人物的青年时代是如果度过,而让自己按照类似的生活原则,去学习和进步的材料。

富兰克林自己,出生于一个蜡烛匠的家庭,也没有太好的教育机会,没有读两年书,就开始了学徒生涯。基本上,是依靠自学,以及勤奋工作,开创了自己的生意,以及后来的政治事业。如果说这其中有一点点的幸运的因素,大概就是他是一个印刷业的学徒,使得他有了相对更多的读到一些书的机会。而更多的成就,则来自他的“品格”,或者说良好的自我约束和勤勉工作学习的习惯。就像他在书中有些极端地所说的“一个能力尚可的人可以在人类中促成大变革,成就大事业,只要他首先制定一个好计划,然后剪除一切娱乐活动或其他可以让他分心旁骛的事务,把推行这一计划当作他唯一的研究和事业”。

富兰克林重视基本的美德,他也将这些基本的美德,视为自己成就的根本来源。可惜我年青的时候不明白这些道理,这一两年开始,才发现“让自己变成一个更好的人”是解决很多问题,并且获得更加快乐美好生活的根本途径。况且年轻人多少容易有些傲慢,即使知道了这些道理也未必愿意遵守或者改变,而人性中的惰性又是如此之多,所以养成了不少恶习,比如不爱早起,不愿节制。于是只能到现在30多岁,重新去修正自己,尝试把这些恶习慢慢从自己的身上去除掉,实在是殊为不易。而据我自己的观察,周围那些更为杰出的人,通常都更加自律与自我节制,而其中环境的影响也会很大。很多时候,年青人的自我节制的习惯,并不是有着自我一是的,而是受家庭环境的影响。这也是为什么同样聪明优秀的人,从进入大学开始,发生了巨大的差别,通常,都是在自我管理上出现了很大的问题。而这一点,又使得富兰克林的成就显得格外突出,因为他并没有一个贵族,或者学者的家庭环境。

富兰克林的另一个成就来源,是来自他擅长社会交往。可以看到,他发起、组织了不少的社会组织,无论是从北美最早的图书馆,消防队,还是他和志同道合者组建的俱乐部,都可以看出他通过这些组织,发挥了远比他一个人更大的社会影响和社会作用。而这一点,其实是非常值得我们这些技术宅们去借鉴和学习的。

看完这本书,得说富兰克林让人敬重,据说他也是巴菲特的合伙人查理-芒格心目中的英雄,接下来,可以考虑也看看查理-芒格的作品。

最后,新的30 Days Challenge是乘着现在总要早睡然后半夜起来,养成早起的习惯,做到每天6:30之前起来吧。

时时思量——《公正》读后感

s4604609春节里还是没有忍住,入手了国行的Kindle PaperWhite,在这个上面看完的第一本就是<公正>。之前也看过这个对应的公开课的视频,也推荐给家里领导,但是书的好处就是随时随地都能看,而且整个的节奏会更快一些,所以公开课的视频我是没有看完,书却是没有花几天就看完了。

公开课出现的时候,最抓人眼球的部分是那些我们很难回应的道德困境,而精良的拍摄,以及桑德尔先生笔挺的西装更是为“公正”这样一个简洁却又恒久的主题加了不少附加分。而当我们回到这本书里的时候,不再收到精良制作带来的观感的时候,反而更容易让人关注到我们想要了解的核心主题——什么是迈向社会公正的道路?

作为一本政治哲学的入门之作,这本书并不高深复杂,而是从一些具体的事实和假想的案例,驱动你去时时反思,询问自己“这是正确的吗?”。他让你不再是根据简单的个人好恶,和直觉判断来确定事务的对和错,而是通过明确的,理性的政治哲学角度,重新去思考这个问题。而这些问题,的确是值得在每一个人开始承担完整的责任的时候,去时时思量的问题。所以,这门公开课原本是针对哈佛大学的新生的,然而,在你离开校园多年之后,回头来看这些问题的时候,反而更有些力量。

从大学开始,我们就倾向于专业主义,我们让自己去学习更好地写程序,更好地和团队合作,更好地完成商业上的目标。而当我们完成这些目标得到回报之后,我们开始思考买哪里的房子,和谁谈恋爱,和谁结婚,接下来应该做什么样的工作。然而当你回过头来去重新思量,什么样的社会是公正的时候,你会发现,曾经你觉得自己“应得的”,当你反思的时候,也许只是来自幸运或者家庭环境。你会发现,简单的专业主义,并不能达成你曾经有过,却早已淡忘的理想。

照此说来,过去几年,我从一个极端的“自由主义者”,重视选择权,信奉简单的市场竞争,其实慢慢变成了一个认为自己的所得更多是来自于幸运。虽然我仍然认为桑德尔先生在书里最后所要追求的“团结的公民美德”是非常危险的,尤其是在我们这个曾经因为“团队的公民美德”受到过很多伤害的国家,但简单的“无知之幕”也好,“最大化福利”也好,都已经不能简单地说服我了。

这个也许才是关于“公正”这个概念最终的归宿,我们通过政治哲学,反复思量,谨慎地做出判断。但是更重要的是,我们时时思量,反复地在实践中运用我们的道德,把自己变得更好,也尝试着,让这个世界更加公正。

Finagle里Future的flatMap

最近业余时间在学习Scala,最近的一个目标是用Finagle写一个简单和现有系统相关的查询服务。在看Finagle里面Future的flatMap的时候被绕了一下,所以简单做个记录。

flatMap是flatten和map两个函数的组合,先map,然后flatten,这个在collection类型的对象上很容易理解,这个对于写过Ruby或者Python这样的脚本语言的人应该很直观就能认识,好比下面的代码这样


val nestedNumbers = List(List(1, 2), List(3, 4))
nestedNumbers.flatMap(x => x.map(_ * 2))

然后返回的结果就是这样


res0: List[Int] = List(2, 4, 6, 8)

这个代码相当于这样


val nestedNumbers = List(List(1,2), List(3,4))
val mappedNestedNumbers = nestedNumber.map(x => x.map(_ * 2))
val flatMappedNumber = mappedNestedNumbers.flatten

但是当直接用flatMap来完成Future的组合和链式调用的时候我一开始一直没有理解,如果把一个Future作为一个Collection,不应该map之后可以是任意东西,然后flatten之后就不是一个Future了,而为什么实际的代码示例是返回的还是一个Future呢?比如来自Finagle的Guide里面下面这样的示例呢?


def fetchUrl(url: String): Future[Array[Byte]]
def findImageUrls(bytes: Array[Byte]): Seq[String]

val url = "http://www.google.com"

val f: Future[Array[Byte]] = fetchUrl(url) flatMap { bytes =>
  val images = findImageUrls(bytes)
  if (images.isEmpty)
    Future.exception(new Exception("no image"))
  else
    fetchUrl(images(0))
}

f onSuccess { image =>
  println("Found image of size "+image.size)
}

然后花了一点时间看了一下Effective Scala,发现之前理解错了。这个事情原来是这样的,首先,我们看一下Future的flatMap方法的函数签名和含义


def flatMap[B](f: A => Future[B]): Future[B] = {
   val mapped: Future[Future[B]] = this map f
   val flattened: Future[B] = mapped.flatten
   flattened
}

需要注意的是,实际Twitter Util库中flattenMap的实现不是这样的,这里只是为了说明语义。
这个函数签名,也就是说,对于当前的Future容器内的对象A(这里只有一个A,而不是List这样有一个List的A),接收一个函数,输入是A,map成为Future[B],然后map函数本身再回把他重新封装回容器Future,那么就编程了Future[Future[B]]。
然后flatten再去除外部的第一层容器,最终的返回值就变成了Future[B]。

这个解释了一个Future[A],以及一个针对A映射到Future[B]的函数g,通过flatMap组合之后,返回值就是第二个用于映射的函数返回的Future[B]。而Future[A]本身可以是一个函数f的计算结果。那么对于 f(g) 来说,就是两个函数通过flatMap组成了一个新函数。

这个机制在Twitter Util的Future以及2.10的官方库的Future的实现是类似的。

准备之后再研究一下Future和Future的实际flatMap的实现,看看这个异步Callback的机制是泽呢么实现的。

学习Scala小记

今年有一个计划就是在工作上推动用Scala慢慢替代掉Java的代码,以增加团队的生产力和乐趣。

所以春节,花了大概5-6天时间,看了一遍,为了实际感受一下语法,基本上把书里的代码都自己敲了一遍,花了不少时间。

应该说Scala是一门有自己特色的语言。traits和函数是一等公民两个特点有大量的动态语言也都支持,所以算不上太大的特点。而静态类型,类型推导和隐式转化也许对写语言和编译器的人来说很有价值,但是对于利用Scala来写应用的工程师来说,只算做简化的语法糖,很不错但是也没有什么新鲜的。然而模式匹配和以及Actor算是Scala特有的核心的特点,也基本上道出了这门语言设计的目的————尽量利用消息传递作为模块之间的沟通机制,使得多线程编程以及异步编程不再是库一级的功能而是语言一级的功能,非常吸引人。而这个独特的特点,加上前面的种种虽然常见,但是Java中缺失的语言特性,让你不得不承认他是替代“新时代的汇编语言”Java的最佳人选了。

最后这本书我不太推荐,一方面是有些过时了,不少代码在Scala 2.10下都编译不过,另一方面是Scala最重要的语言特性Actor这部分,一个是官方库也已经换成Akka的了,另一方面是这本书本身对于这个特性也讲得不够好。国内Scala圈的大拿@laogao推荐的是<快学Scala>以及The Neophyte's Guide to Scala。后者很有意思,自出版物,虽然有指导价,但是花多少钱买你随意,不知道作者实际收到了多少钱。

假日琐记

今年的节日,和往年不同的是电商们开始节日也送货了,尝试了一下京东和亚马逊,基本都能做到第二日送货,有些令人难以置信。特别是老二出生没几天,要去医院检查黄疸的时候缺个小小孩儿的婴儿座椅,结果在京东上上午下单晚上就送到了。亚马逊比较强大的一点是现在可以送货到全家的门店取货,解决了买东西要么从公司搬回去,要么得周末在家守着快递得大问题。就这么没有几年,我已经基本不去商场买东西了,"Software is Eating the world"来得是如此之快,好在我似乎还是站在可能会战胜得一方的。

这个假日,特别清净。因为老二在春节前出生,老婆坐月子又是找了个月子中心,整个节日除了偶尔跑出去吃个饭之外,基本上都处于在“宾馆”内坐牢。特别是基本不看电视,外加网速奇慢之外,反而一下子多出了很多看书的时间。短短几天,就翻完了Scala的语法,重新看了一遍Manning的Big Data,以及苹果。即便如此,其实也没有少刷微博浪费时间,这样得悠闲时光,大概会很长时间再不会有了吧。

前两天,和多年未见的老同学Z一起吃了顿晚饭,这种自己不够勤奋的内疚感更加强烈了。在学校的时候,写程序Debug就常常要找Z帮忙,现如今,Z在某互联网大厂工作,是做自然搜索的核心成员,级别不低,Z的爱人所在的互联网公司去年则是成功上市。两个在北京也已经靠自己买房子之后又换了更大的房子。然而即便是过年,Z同学还在研究算法,推导公式,吃饭的时候还拉着我看我们投出来的广告。

本来过年的时候基本了解了Scala的语法,觉得自己还挺努力的,结果这顿饭吃完,内疚感油然而生,觉得之前的日子实在还是过于懒散,日子都过到狗身上去了。

最好金龟换酒,相与醉沧州

望海潮 ———— 秦观

秦峰苍翠,耶溪潇洒,千岩万壑争流。
鸳瓦雉城,谯门画戟,蓬莱燕阁三休。
天际识归舟,泛五湖烟月。
西子同游,茂草台荒,苎萝村冷起闲愁.

何人览古凝眸,怅朱颜易失,翠被难留。
梅市旧书,兰亭古墨,依稀风韵生秋。
狂客鉴湖头,有百年台沼。
终日夷犹,最好金龟换酒,相与醉沧州.

在这一年的最后一天里,住在一个酒店的小房间,陪老婆孩子过新年。因为老二刚刚出生,今年的年注定会有些萧索和冷清,却反而合了我的胃口。在邮箱里收到网易云课堂的邮件,便拿来做了这篇文章的标题。

今年计划的第一个30 days challenge将将过去,如果算上这篇blog的话,指标也算将将及格。30天写了18篇Blog,虽然没有做到计划中的每日一篇,但也算过得去了,特别是孩子出生的前前后后那几天,觉都没得睡,写Blog更是一种奢望了。

当初设定说做30 days challenge,完全是抱着试试看的心态,不过这30天来尽力尝试去做一件事情,倒是有了很多体会。

具体到写Blog这件事情上来,天天写,对于不是以文谋生的我来说,有些困难。一方面是没有足够的料可以写,一个白天工作忙下来,回到家,常常发现无事可写。另一方面,则是坚持不容易,开头也不容易,搜肠刮肚想出来的一些主题,常常也写不出多少内容。所以其实这十几篇当中,不少只能算交差之作,凑合写完的。多少能够写出点内容的,大概也就一两篇。

不过即便是如此重量不重质,在艰难挣扎的一段时间之后,也有了很多收获。为了写Blog多看了多想了不少东西,让自己的思路开阔了不少,算是很大的一个收获,对生活和工作也有了更多的反思。这30天之后,应该不再会这么频繁的更新了,但是为了保持开放性的思考,会保障每周至少一篇吧。

从Blog回到30 days challenge,发现这的确是个很棒的逼迫自己拥抱变化,不断改善的方法。30天不短,做点什么坚持下来都不太容易,但是也不算太长,所以即使做的事情也许没什么意义,也不会浪费太多时间。并且积极地寻找新的挑战,让自己觉得生活有更多的可能性和更远大的目标。所以,今年应该都会持续这个30 days challenge计划,接下来的这30天,目标相对比较简单,学会Scala,准备30天时间内,用Scala写一个实际的线上服务,作为学会Scala的验收标准。

谈谈加班

overtime working对于互联网公司来说,加班是一个经久不衰的话题。最近在微博上传播的比较热的一个关于加班的事儿,是美丽说为了尽快和微信集成,过年给10倍加班工资让大家干活。而之前一段时间,阿里为了发力无线一度搞出的996(朝九晚九一周六天)工作制,也引起很多人的热议。在程序员这个圈子内部,一度认同加班编程似乎是一件政治不正确的事情,比如酷壳上就曾经就此写了一篇blog,但是博主去了搞出996的淘宝之后,也没见过再提相关的话题。

事实上,无论是来自本土的中国国情还是美国的国际惯例,大一些的互联网公司说从来没有要求过大家加班的,应该是没有的(如果有的话,欢迎来信详细描述一下具体情况)。而在美国人民中,无论是<Show Stopper>中微软为了发布NT那没日没夜的四年,还是Twitter为了应对大鲸鱼的不断重启服务器,看起来也都是有着大量的加班时间。然而,似乎也没有听说过哪个公司或者产品是靠加班来作为核心竞争力来战胜竞争对手的。

那么,加班到底是随着公司的快速成长和外部的激烈竞争,无可避免的?还是像很多工程师认为的是由于无能的管理层没有办法解决问题,只能靠看起来忙来给自己做心理安慰呢?

以我个人的工作经历来说,最近这几年,基本上一天快节奏地工作完8-9个小时,就已经累得不行了,长期“狼性”文化式的加班,我认为是扯淡,并不会提高产出。但是在特定的阶段,形势下,冲刺性地加班,不仅是难以避免的,某种程度上,对加班的个人来说,也是不乏好处的。

“狼性”文化的加班,一种是老大一发话,说要干一仗,那么下面的人没主意,不知道该怎么干,于是那就大家都来加班吧,事情很多,但是未必有效率或者做在点子上。更糟糕的一种是,整个公司文化提倡加班,下面的小朋友们不好意思走或者走了要挨批,虽然没有什么事情做,也天天耗在公司。

这种加班对于公司和个人,都是一种伤害。对于员工来说,精力有限,加班其实就是耗着,对公司没有产出,自己也不会因为这些工作时间得到个人的成长。对公司来说,实际整个公司的产出没有变多,只有工作时间变长了,导致的结果是员工工作满意度变低,成长也没有变快,优秀的人才更倾向于离开,是典型的自杀行为。

还有一种加班,是完全阶段性的,虽然并不有效,但是可能很难避免。我称之为“新人低效加班”模式,这种情况常见在刚毕业新进入公司的同学们身上。一方面是愿意努力工作表现自己,一方面也是单身汉回家也没事情做,所以天天在公司泡得很晚。遗憾的是,即使是带着热情的新人,实际在这种加班的情况下的产出也是不高的。根本原因在于,人的能量是有限的,当你每天都很晚走的时候,你不自觉地会在上班的时间刷刷微博,看看博客,而且这样做自己也很容易找到借口认为问题不大,“因为我今天会很晚走把问题搞定啊”。此外,由于每天很晚走,你通常会倾向于使用“体力”来解决问题而不是“脑力”来解决问题,因为对于问题的深思熟虑是需要非常集中的精力和能量的。所以,尽管可能你看起来每天都在努力工作,而实际的产出却并不那么高。这种低效的模式,我是深有体会,因为我刚毕业那会儿就是这么走过来的。而要摆脱这样的模式,需要的是好的导师来帮助你提高工作效率,教会你如何快速学习和成长。可惜的是,这样的事情,通常是可遇不可求的。

说了这么多无效的加班,最后谈谈我认为的,必不可少的“有效的加班”,我也称之为“阶段型冲刺式”加班。“阶段型冲刺式”加班,故名思意,阶段型,也就意味着不可能是连续的,只能是阶段的,间隔的;冲刺式,意味着连续加班的时间不能很长。除此之外,特别重要的一点是,“冲刺”的目标通常是非常明确的,对于产品,项目以及商业目标,都需要定义得非常清晰,并且需要尽量保障这个冲刺是有很高的成功把握的。阶段型冲刺,意味着团队是能够在这一小段时间内是有足够得能量的,而不是长时但是低效地工作。目标明确,意味着不会出现冲刺因为没有明确目标最后演变成死亡行军。而有很高的成功把握,会使得整个团队在冲刺之后的疲劳阶段,能够因为项目成功,得到足够的心理上的满足感和由成功经验带来的成长。

这种形式的加班,通常出现在新产品的第一个原型发布,有特色的单个Feature的上线等等。需要尽量控制项目的范围足够小,使得冲刺时间维系在1-2周之内,并且明确能够知道是否冲刺成功。而这样的加班的体验,会变成一个典型的正反馈——“我的努力,获得了成功,得到了回报”。对整个团队互相之间的信任和凝聚力,由于长时间泡在一起,包括会有一些聚餐,更多更直接的讨论,乃至特定的Launch仪式,也可以做到有正面的影响。

当然,第一是这样的冲刺,不能连续来,一年有个4-5次,还算OK,另一个是即使这样的冲刺,也不要搞成需要熬夜到深夜,或者周末连续不休息,因为这个和人的生理机制就是反着来的,996可能就是可以忍受的极致了。

最后,写“有效的加班”,恐怕会让不少人觉得政治不正确,只是互联网这个行业竞争和节奏的确很激烈,合理管理好团队的能量,能够在竞争条件下做出一些成果,让大家得到更多的经济回报和个人成长,才是一个好的技术领导者应该做的事情。

照猫画虎还是量身定制?

软件开发流程上,最早流行CMM,后来有一段时间流行敏捷和XP,然后最近一段时间流行的是Scrum和Kanban。除了这些流程,各个公司和团队也都有自己定制的流程,不过通常和这些也相去不远。比如我的老东家的T公司,有一套叫做FCT的流程,其实非常类似于Scrum,两周一个Milestone,讲究快速交付迭代。

目前看来,大部分互联网公司整体的开发流程思路,都是比较接近Scrum的。主要是通过短会交流信息,通过较短周期的Sprint进行功能交付。我是从来没有见过采用XP的团队,想来XP的确法如其名,非常"Extreme",测试先行和结对编程愿意尝试的公司不多。我个人也不太喜欢这两种方式,主观感受还是给的思考的空间太少了。当然,因为没有实际在某个擅长使用这个方式的团队内工作学习过,这个也很可能是我的一个偏见。

回到方法论,使用方法论通常有两种方式,一种是量身定制,一种是照猫画虎。量身定制讲究根据团队具体情况进行裁剪,Scrum里站会不错就拿过来用,估功能点还是喜欢按时间那就布照Scrum做。这种方法说道起来可以叫做“取其精华,去其糟粕”,觉得是针对当前环境的调整,实际却往往容易把好的方法论执行得走样,弄得不论不类,编程有着Scrum的皮子,但是里子还是原来那么乱糟糟一套。还有一种是照猫画虎,基本上照书来,先不管理解不理解接受不接受,先操作起来,“理解要执行,不理解更要执行”。对于方法论,我开始慢慢倾向于用这种方式了。一个是很多方法不自己体验,主观判断是好是坏缺少依据,这个就好像是我们做模型终究是要拿数据和结果说话,不能光靠猜。另一方面是,很多时候进行裁剪的原因并不是因为方法不好,而是偷懒和退缩,方法论的变更一个是有内部阻力,另一个是有效的执行需要长时间的坚持容易放弃。但是偷懒和退缩的过程中,也失去了让自己和团队变得更好的机会。

所以年后还是继续去做一些自己“觉得”不一定好的事情,有尝试,有坚持,才会有突破。

孵化Twitter——一个不完整的故事

hatching-twitter这本Hatching Twitter,是在老婆生产前的周末在手机和iPad上看完的。说实话有点小小的失望,全书浓墨重彩地都在写创始人和CEO更迭的过程,而对Twitter本身发展的很多外部环境变化,以及商业决策着墨不多。而Twitter创始人和CEO的更迭,虽然本身非常有戏剧色彩,但是因为不是小说,也不是创始人自己的回忆录,所以多少是有些隔靴搔痒,没办法把事情写清楚。

事实上,作为商业类传记,Twitter本身有很多值得书写的东西,在这本书里都一笔带过了,比如我就很关心这些内容:

  • Twitter早期的大鲸鱼问题非常著名,他们是怎么做到在这个糟糕的可用性下继续快速发展的?
  • 外界都说Twitter收购Summize是对于他们技术团队的一个重大的升格,而Summize的Greg Pass加入Twitter之后担任了Twitter的CTO。Summize为什么选择被收购?Greg Pass和Summize团队是如何帮助Twitter走上正轨的?
  • Jack Dorsey重回Twitter的原因是什么?如果说书里说第一次他离开的原因还比较具体,第二次Evan Williams离开,以及Jack Dorsey回归的真正原因却显得语焉不详。Dick Costolo成为了CEO,那Jack Dorsey这个时候到底是什么角色?
  • 作为Twitter主要收入来源的Sponsored Feeds一开始也是受到很多质疑的,这个产品本身后来是如何发展壮大的?
  • 在Twitter的发展历史上,他们没有受到过各种外部诱惑,变成一个复杂而失败的产品吗?(比如像我国的新浪微博)
  • Twitter对于各个客户端的收购,以及API功能的回收,是怎么样的一个决策过程?在之前开放API又是处于什么原因和目的?
  • Twitter是如何平衡网页端和移动端的资源的?在短信上他们究竟花了多少钱?

这些内容,其实是Twitter作为一个公司成长中,各个重要的节点,但是在这本书里基本没有提到,这也是我对这本书评价不高的一个主要原因————“过多关注了八卦,而不是商业产品本身”。

不过书里面还是有一些很有意思的内容的

  • 先是没想到Jack Dorsey一开始是一个穿鼻环,天天下班学裁剪相当设计师(或者说裁缝)这样的一个人。
  • Evan Williams是Blogger的创始人我是知道的,但是Dick Costolo是Feedburner的创始人之前一直没有关注到。
  • 都说Twitter技术烂,没想到一开始居然这么烂,有段时间每天都有不可用的时间。
  • Jack Dorsey从书里面后来的表现来看就是个让人讨厌的Jerk,这个和之前在Quora上看到的八卦非常匹配啊。
  • 个人非常喜欢书里描述的Evan Williams的风格,信任朋友,专注做好产品。

作者外出采风,本期休刊

标题是开个玩笑,话说富坚义博的<猎人>到现在还没复刊,不知道这次休刊是不是也要再来8年。

过去一周基本完全没有做任何更新,30 Days Challenge也被打断了,原因是又有了一个孩子,过去几天基本都在医院陪老婆,四五天里每天只睡4个小时。昨晚到月子中心安顿下来之后,终于第一次在床上度过整个晚上。可以开始重新回回邮件写写Blog了。

话说虽然老大已经四岁半了,但是老二诞生的时候还是手足无措,发现换尿布喂奶之类的技能都已经忘记了,不过老婆提醒了一下之后还是很快回忆起来了,接下来应该又是辛苦的一段没有好觉睡的时间了。