Masutangu

长风破浪会有时 直挂云帆济沧海

也許我這一生 始終在追逐那顆九號球


水滴石穿-第一期

不积跬步,无以至千里;不积小流,无以成江海

最近觉得自己需要开拓下视野,更多的了解外面的世界。之前看过湾区日报,觉得其形式很不错,简评+原文链接。所以我决定参考并扩展其形式,坚持读一些文章,听一些talk,并沉淀些笔记。

现在的想法是每个月出一期,每一期会推荐10-15篇文章/演讲/书籍等。如果大家有好的内容,非常欢迎推荐给我,一起探讨分享。主题不限,包括技术/产品/运营等等。

废话不多说,下面是第一期的内容:

Ten Entrepreneurship Rules for Building Massive Companies

原文链接已经失效了,这里是转载的链接。文章中列举了Reid Hoffman总结的创造伟大公司的十大定律,其中下面这几条对我触动挺大:

  • Maintain flexible persistence. 既要有所坚持,又要灵活变通。切忌一条道走到黑。工作中有时我也会因始终找不到一个完美的方案而陷入泥潭中。这时候需要跳出来看问题,有所取舍。

  • **Launch early enough that you are embarrassed by your first product release. ** Hoffman提出需要快速推出产品,不要等到你觉得你已经把这个产品做的非常完美的时候才发布。因为用户在意的点很有可能与你想像中的不一致。只有快速把产品推出,聆听用户的反馈,不断迭代,才能真正做出戳中用户痛点的产品。一开始看到这个观点我很惊讶,回想起我刚进项目组的时候,经常吐槽自家的app还不够好,看起来还不足以发布出去。现在终于明白当中缘由。

  • Aspire, but don’t drink your own Kool-Aid. 自信,但不要自负自high。保持激情的同时,记得跳出来看看自己是否处于正确的方向上。不要陷入自我的世界里。

  • Having a great product is important but having great product distribution is more important. 这句话我觉得,不仅做产品是这样的道理,做事情也是这样的道理。“是金子总会发光,酒香不怕巷子深”的道理可能已经过时了。应该学会去推广自己的产品,推广自己的品牌。一流的产品重要,一流的推广方式更重要。

How To Become a Better Programmer by Not Programming

Bill Gates认为,三四年的时间已经足以决定你是否是一名优秀的程序员。“The good developers always seem to have a natural knack for the stuff from the very beginning”。

既然更长的工作经验无法让你成为更好的程序员,是不是就没有机会了呢?当然不是: ) 作者提出: “The only way to become a better programmer is by not programming”. 如果你一心只对编码感兴趣,当然这是好事,但是一不小心就会陷入提高你已经很牛逼的技能的循环中。To truly become a better programmer, you have to to cultivate passion for everything else that goes on around the programming. 真正需要积累提高的,是围绕编程的那些知识。

工作的本质并不只是关起门来写代码,你需要能理解工程,能了解市场和用户,能和客户打交道。

原文最后一段话很有意义,摘抄下来:

You won’t — you cannot — become a better programmer through sheer force of programming alone. You can only complement and enhance your existing programming skills by branching out. Learn about your users. Learn about the industry. Learn about your business. The more things you are interested in, the better your work will be.

注:原文还引用了不少好文章,之后会继续研读。

One Googler’s take on managing your time

文章主要讲how to protect our make time

The maker’s day is different. They need to make, to create, to build. But, before that, they need to think. The most effective way for them to use time is in half-day or full-day blocks. Even a single 30 minute meeting in the middle of “Make Time” can be disruptive.

并提议一周的工作安排应该大致如下:

周一:刚刚度过周末,适合做一些不紧急的事情,例如设定目标/优化以及制定计划。

周二&周三:精力最充沛的阶段,适合挑战难题/头脑风暴,安排好自己的Make Time。

周四:精力开始下滑,适合安排一些会议,做些决策。

周五:精疲力尽,适合做一些开放性的工作,制定些长期规划以及维护人际关系。

Is it Time for You to Earn or to Learn?

文章主要讲面对不同的职业道路该如何选择。

You need to match your talents, age, skills, ambition and economic situation with your current reality. At a minimum be realistic about the outcomes. And make sure you ask yourself the question, “am I here to earn or to learn?”

How to Read an Entire Book in a Single Day

文章主要讲读书的技巧:

  • 找到安静不被打扰的地方。

  • 分段阅读,中途休息以保存活力。

  • 随时随地做笔记,中途休息或之后可以深挖自己的笔记,以达到更好的理解。

  • 远离手机。

  • 不便的时候可以听audiobook。(http://lifehacker.com/five-best-audiobook-services-1688572545)

Five Years of Building Instagram Five Years of Building Instagram

instragram创始人讲述了Instagram五年的历程。

We’ve stayed committed to our mantra of doing the simple thing first, and are keeping it at the core of how we continue to scale into the next five years.

五个里程碑:

  • 1 million users in 3 months 将服务迁移到AWS,借鉴优秀的架构进行优化(There were great conference videos from QCon and Velocity, and articles from Facebook, Netflix, Twitter, and others)。当初instagram只有两个工程师,Doing the simple thing first是宗旨,采用最简单的办法,优先解决最重要的问题。“By determining the most important problems to solve, and choosing the simplest solution, we were able to support our exponential growth.”

  • Launching Android 由于只有两名工程师,为了快速迭代,前期instagram只开发了iOS版本。

  • Virginia Storms 风暴引起的停电,让instagram意识到需要有更自动化的机制来维护后台服务:a. 零散脚本改造成完备的Chef系统(如何翻译?)。 b.不再依赖亚马逊的Elastic Block Storage,而是采用了WAL-E 和 Postgres’ WAL shipping replication。 c.构造一个跨数据中心,使instagram实现数据多地分布。

  • Instagration 整合facebook 的服务。“Don’t reinvent the wheel. By moving to Facebook’s servers we were able to give our infrastructure a faster, more efficient home, as well as take advantage of Facebook’s other tools like spam fighting, etc.”

  • InstagrationTrends on Instagram 优化搜索&发现,根据标签和地点,通过算法给用户推送个性化的精华内容。

Things Everyone Should Do: Code Review

文章主要讲code review的好处以及做code review的技巧。

code review最大的好处是social。当你知道你的代码会被cr的时候,你会更加注重代码风格,更好的组织代码结构。另外code review能让团队彼此熟悉各自的负责的模块。最后code review可以提前发现bug。

成为一个有经验的reviewer,需要注意以下几点:

  • review的最终目的是验证代码的正确性,而不是代码是否以你的期望中的方式来写。

  • 不要费尽心思的挑刺。

  • 花时间来做review,不要让你同事干等待。

In Silicon Valley Now, It’s Almost Always Winner Takes All

文章提了一个观点:互联网行业竞争激烈,普遍存在winner-takes-all的现象,做到行业第一往往就能形成垄断。而不像传统行业,百事能和可口可乐共存,各大航空公司/汽车厂商共存。

为什么互联网行业会造成垄断?作者提出了闭环的观点:“This loop of algorithms, infrastructure, and data is potent.” 并举了google和uber的例子。

google设计了搜索的算法,并拥有自己的设施:“The infrastructure — networks, storage, and computers — allowed Google to crawl the Web and rank the results cheaply.”,大大提高了搜索的速度,吸引了越来越多的用户。而当用户量越来越多,google收集到的用户数据就越多,借此有了更多的办法来优化算法。

uber和google非常类似。google着重于提升用户搜索的速度,uber着重于提升用户叫车的速度。uber砸了巨资在开拓市场上面,随着越来越多人用uber,就有越来越多的用户数据,uber就能够利用这部分数据来优化自己的算法(路线规划),同时uber还可以在此基础上扩展更多的类似服务( food delivery and courier services),可以看出,uber从原本的叫车软件已经逐渐演变成一家重新定义transportation的公司。

Evernote’s 5% problem offers a cautionary lesson to tech companies

evernote 的问题在于功能太杂,大部分用户只会用到其5%的功能,并且这5%的功能各不相同。就连evernote的ceo都很难描述evernote到底是一款什么样的产品。

做好一款产品或者开一家公司,一定要有核心点。snapchat在这一点就做的很好,他们砍到了绝大部分奇奇怪怪的新功能,一款功能明确的产品也赢得了用户的口碑。Apple虽然发布了一系列新产品:Apple TV, Apple Watch, Apple Music,但是这一切都是围绕着iPhone这个核心点铺展开的,iPhone是Apple生态系统的核心,这一系列新产品都能显著提升iPhone和iOS的用户体验,因此Apple公司在这方面也做的不错。

Why User Onboarding is the Most Important Part of the Customer

文章的主要观点:好的用户引导是提升用户留存率的关键。

当你发现你的产品留存率很低,此时不应该只一心打磨用户体验,尝试一些短期的产品变革。其实,留存率的决定性因素,在于产品带给用户的第一印象。当你把用户引导做得更好的时候,整个留存曲线会更上一层。

It’s surprising, but one of the biggest determinators of where your churn flattens out to in Week 10 is the first impression you make in Week 0, during user onboarding.

下面是文章的三小段:

  • The 3 Phases of Retention 留存可以划分为三个阶段:短期留存,中期留存,长期留存。 三个阶段的目标分别是:

    • 短期留存-第一周:让用户不只一次体验你的产品

    • 中期留存-第一到四周:让用户形成使用的习惯

    • 长期留存-第四周起:让你的产品成为用户生活中不可缺少的一部分

  • Predict Long-Term Retention with What Happens During User Onboarding 下面这个观点很有趣:

    long-term retention is so strongly related to what happens during the onboarding period, that you can often predict whether a customer will stay with you based on what actions they take or don’t take in their first week.

    In other words, they were able to predict a user’s future based on what happened within a very narrow time frame immediately after signing up.

    大体意思是从新用户短期内的操作可以预测出留存率。作者举了facebook的例子:“Engaged users had added at minimum 7 friends within the first 10 days of signing up。”

  • The WOW Moment 如果用户能在第一眼就清楚你的产品的核心价值,并且一使用你的app就能找到他们期望的东西(简洁,界面清晰,核心功能明确),那他们继续使用的可能性就会很高。而好的用户引导在这里起了很大的作用。

  • How to Analyze Your Retention Data to Find Your WOW Moment 如何分析留存数据,找到WOW Moment呢?下面这个观点在很多文章都反复提及过: How your customers see your product can be two very different things.

    • 定义衡量标准

    • 将用户引导期间用户的行为统计罗列出来

    • 通过回归算法进行分析

    干货满满,非常有指导意义。

  • Adjust Onboarding to Help Users Find That WOW Moment 当你通过分析找到产品可能的WOW Moment,你就能有目的的通过用户引导将其展示给用户。因此你可以作实验去验证你的观点,并做后续分析调整。

  • Emphasize Specific Actions to Get to WOW 最终你确定了产品的WOW Moment,你应该在用户引导中着重标注出来。 举例说明,无任何用户引导的网站:

    示例图1

    第一次打开,大部分用户会被功能繁多的界面所吓坏。当你分析出你产品被用户认可的核心价值,找到WOW Memont,你就可以加上如下的用户引导:

    示例图2

    Bad onboarding will flood those first screens with multiple cues, pointing out all the cool features to new users. They won’t have a clue what the important ones actually are.

  • Onboard Users with Retention in Mind

    Get the first few moments of your product right and your customers will stand by you, paying you through those weeks, months, and years.

    By increasing retention a couple of percentage points, you can double your revenue only a few weeks later — and the easiest way to get there is through better user onboarding.

总结一句:第一印象很重要,而要给用户良好的第一印象,请做出正确的用户引导。

注:附带资料http://cdn2.hubspot.net/hubfs/120299/SaaSFest_Presentations/SaaSFestPreso-Dan-RetentionIsKing.pdf?t=1450824188859

Take on Your Competition with These Lessons from Google Maps

文章主要讲Taylor关于行业后进者如何与领先者竞争的经验。

Taylor认为Ralph Waldo Emerson的观点:“Product quality leads directly to market success”并非完全正确,因为行业的领先者通常已经具备了成熟的推广渠道,并且用户对于产品品质上细微的差别通常没有我们想像中那么在意。

In many ways, your quietest, most steadfast competitor is indifference.

对于后进者来说,其实最大的敌人是用户的惰性。Taylor举了Google Map和MapQuest竞争的例子,即使他认为Google Map比MapQuest好上千万倍,然而Google Map还是花了三年的时候,才超越了MapQuest。本质原因在于,用户习惯了使用MapQuest,觉得使用MapQuest并没有什么损失,那为什么要换成使用Google Map呢?

Just being different isn’t enough. Your customers have to care.

因此,仅仅有区别是远远不够的,必须让用户意识到你的产品和竞品的区别。只做得比竞品好是不足以超越竞品的,因为用户看待的角度很大可能和我们不一样,你觉得你做得好的部分,用户可能并不怎么关心。Taylor举了Search by Location和Google Local这两个Google Map的前身产品作为例子,这两个产品在搜索质量完胜Yahoo黄页,但是用户其实对于搜索质量好坏并不是特别关心。

In entrenched markets, you’re not the one defining what a product does. Incumbents and competitors are actually telling customers what your product should be. You’re trying to differentiate against that story, and often your potential users won’t understand or discover your differences

直到Google推出了Google Map,改变了用户与搜索结果的交互,从干巴巴的地址信息,变成了在地图上展示搜索结果的地址位置。这个革命性的差异化终于引发了用户的兴趣。

By putting the local results on the map, it completely changed how you approached the search experience. The power of Google Maps wasn’t that it was better local search, it’s that it was completely different.

One of my biggest lessons from watching the early internal users of Google Maps was that we needed to present people with an unfamiliar experience to get them to change their behaviors.

The bottom-line is you have to build a lens to allow users to see a new world rather than features to help them see an old world better.

最后,以taylor的一段话作为总结:

“In the past, I was always trying to make products familiar first and then figure out where to deviate. Now, I try to start by thinking how to make a product as uncomfortable and as different as possible, but still maintain a path for people to go on that journey with me.”

Think Fast, Talk Smart: Communication Techniques

Standard商学院的talk,关于如何做好即兴演讲。

  • manage your anxiety.
    • greeting the anxiety
    • reframe as a conversation not a performance:
      • start with questions
      • use conversational language
    • be present-oriented
  • ground rules
    • get out of your own way

      Dare to be dull, and you will reach that greatness. It’s when you set greatness as your target, that it gets in the way of you ever getting there.

    • see things as an opportunity(非常有指导意义,举例来说,当别人提问的时候,不要觉得别人是在挑战你,而是将其当作向别人介绍你的观点的机会)

    • slow down and listen(同样很有指导意义)
    • tell a story, respond in a structured way: Structures help us remember.
      • problem->solution->benefit
      • what->so what->now what

几勺鸡汤

  • Eight hours of training is nothing compared to a second of losing.

  • When nothing seems to help, I go and look at a stonecutter hammering away at his rock, perhaps a hundred times without as much as a crack showing in it. Yet at the hundred and first blow it will split in two, and I know it was not that last blow that did it, but all that had gone before.”

  • Good judgment comes from experience, and experience comes from bad judgment.”

最近的文章

设计模式之控制反转

今天重新设计了Elric的logging模块,接触到了Inversion of Control设计模式,记录下分享给大家。注:本文定义介绍均取自wiki,代码样例取自Elric定义控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。”实现方法实现控制反转主要有两种方式:依赖注入和依赖查找。两者的区别在于,前者是被动的接收对象,在类A的实例创建过程中即创建了依赖的B对象,通过类型或名称来判断将不同的对象注入到...…

设计模式继续阅读
更早的文章

FFmpeg 浅析

最近在做和转码有关的项目,接触到ffmpeg这个神器。从一开始简单的写脚本直接调用ffmpeg的可执行文件做些转码的工作,到后来需要写程序调用ffmpeg的API。虽然上网搜了别人的demo稍微改改顺利完成了工作,但是对于ffmpeg这个黑盒子,还是有些好奇心和担心,于是抽空翻了翻ffmpeg的源码,整理成文章给大家分享分享。由于我并非做音频出身,对于音频一窍不通。ffmpeg整个也非常庞大,所以这篇文章从ffmpeg提供的转码的demo开始,侧重于讲清楚整个输入->转码->输...…

源码阅读继续阅读