2020年6月29日星期一

《牛油果烤面包》回顾(Part 5 - 中国)

我在这个系列的第一篇文章里面就说到过,当初为了用最低的成本和最短的时间把节目推上线,我们选择了使用 Anchor 这个平台做发布。它如同 YouTube 一样免费和易用,当然也如同 YouTube 一样无法在中国访问。在节目上线后我们很快就意识到这个问题,于是费了很大功夫进行调整。


喜马拉雅是我们的第一个尝试,因为它是国内的平台所以它有义务保证内容可以在国内访问到。在得知 Anchor 在中国无法访问时,我们第一时间去注册了喜马拉雅,并且把我们的节目同步发布到喜马拉雅。之后斯图亚特还去注册了企鹅 FM 和荔枝 FM,但因为手工多平台发布的成本高,但又收获不了多少收听次数,最终放弃了。现在国内的平台就只做喜马拉雅。

提到喜马拉雅就不得不提一下 Apple Podcasts 在中国那一套心照不宣的特殊做法。如果你正常地使用 Podcasts Connect 提交一个播客的 RSS,默认这个节目不会出现在中国区。Apple 通知你节目通过审核时,这仅仅是意味着节目通过了 RSS 格式审核,但这跟中国一点关系都没有。之后 Apple 会默默地审核你的内容,决定你是否能发布到中国区,整个过程不会有任何的沟通,审核不通过也无法上诉。因为我们一开始使用的是 Anchor,它的 RSS 在中国根本无法访问,自然 Apple 不会把我们的节目发布到中国区。

想要把节目发布到 Apple Podcasts 的中国区,民间有一个办法,那就是用喜马拉雅导出的 RSS。因为喜马拉雅本身在中国,所以 Apple 乐意发布任何来自喜马拉雅的 RSS。为此我们专门在喜马拉雅后台申请了导出 RSS,然后把 RSS 添加到 Podcasts Connect。为了避免听众看到我们的 Apple Podcasts 上有两个节目分不清哪个是哪个,我们把喜马拉雅导出的那个叫做牛油果烤面包中国版


考虑到喜马拉雅不是一个泛用型播客平台,为了方便中国的听众使用 Overcast、Pocket Casts、Castro 等泛用型播客应用收听,我们又花钱购买了 Typlog 的服务并且把每一集的内容同步发布到 Typlog。作为付费平台,Typlog 的灵活性比 Anchor 和喜马拉雅都要好很多,而且大多数时候能在中国访问到,不过也有极少数时候用户会报告不能访问。

Typlog 值得一提的是节目文本内容的编辑灵活性。Anchor 和喜马拉雅对内容都是有限制的:Anchor 不允许多层套叠的 bullet points,如果我们写了多层的就必须手工改为一层的。喜马拉雅连 bullet points 都不支持,只能人手在每一行文本前加个星号表示这几行是个 bullet points。Typlog 完全没有这些限制,而且可以用 Markdown 语法来写,非常符合我的编辑习惯。

在建立好 Typlog 发布后,我们就逐步把各个平台收录的 RSS 地址从 Anchor 改为 Typlog 了。这样做是为了保证中国听众就算是通过 Overcast、Pocket Casts、Castro 等平台搜索到我们节目后能正常收听。可惜最近发生了一系列事情,使得很多这些泛用型播客应用被 Apple 中国区下架了,估计这些应用的中国用户将来只会变得越来越少。


最后,为了保证我们的品牌、域名和链接掌握在我们手上,不受任何一个发布平台的干预和限制,我选择了建立我们自己的网站。我们的域名 avocadotoast.live 最初只是简单地指向到我们的 Anchor 页面或喜马拉雅页面(根据访问来源国家智能指向),但这样子我们得不到任何网站分析数据,不知道有多少来自中国的用户因为指向错误而打不开 Anchor。为此我决定利用静态网站生成器编写我们自己的网站,每一集节目都要能在我们的网站上打开和播放。

网站的主体是我一个周末连夜赶工做出来的,之后花了不少时间打磨和提升自动化程度。现在只要我们发布到 Typlog、喜马拉雅或 Anchor,我们的网站就会自动更新,保证最新一集总能在我们自己的网站上看到。为了兼容中国和非中国用户的体验,我们的网站还设计为从多个音频来源进行播放,如果其中一个音频来源播放失败就自动切换到下一个音频来源。这样就算中国听众无法访问某些音频来源,最终还是会切换到喜马拉雅的音频来源从而保证播放。

制作这个网站的详细技术抉择我觉得可以单独写一个系列,就不在这里详细展开。有兴趣了解这个项目背后细节的话,请通过邮件RSS/Atom 进行订阅。如果我接下来还有时间继续写这个系列的话,我会写一写我们进行远程录音的经验。尽管我之前已经写过录音剪辑经验,但现在大家不能面对面录音了所以我们又摸索了一套新方法来做远程录音。这个话题我们下次再聊。

2020年6月28日星期日

《牛油果烤面包》回顾(Part 4 - 选题)

之前写了 3 篇《牛油果烤面包》的满月回顾(1 2 3),现在准备继续写下去。当然满月早就过了,甚至连半年都不止了,然而又没到一周年,所以文章标题就不再提及时间啦。上次我们说到了我们从个大平台都能获取到什么样的收听数据,那这次我们就说一说我们是怎么做选题的吧。

要说选题,那必须先说一下我们的受众定位。这在我们几位主播之间其实没有非常统一的观点,我们有人更在乎在美国的中文听众,也有人更在乎来自中国的听众。来自中国的听众又可以细分为更多的类型:有些是已经接触到比较多英文信息和海外信息的,那就比较类似在美国的中文听众;有些技术研究得很深入但只熟悉中文的术语,遇到英文的就比较难听进去;有些技术了解不深,希望多听听浅显易懂的科普内容,对深入话题不感兴趣。因为我们在这方面没有统一,所以选题时也没有刻意针对哪一种中文听众类型来做,每一期的受众会略微不一样。


我们选题一般会有两种风格:一种是侧重专业性的,一种是侧重娱乐性的。前者的目标是让听众爽,后者更多是主播和嘉宾自己爽。

我们先说说前者吧,我们在做这类选题时一般优先从我们身边的朋友里找专业人士,想想他们熟悉的专业内容如何能够塑造成相对科普一点的话题,保证讲述过程中的趣味性和故事性。然后我们就会跟这些朋友说,希望找他们来录一期节目,问一下他们是否愿意,然后再协商什么能说什么不能说。因为他们工作领域和公司的限制,可能有些事情他们能多说,有些事情他们不能说,这些都是要提前说好的。

因为我们强调自己是一个科技性的节目,所以我们找的很多专业人士都是自己的同行,也就是科技行业的从业人员。推荐系统人工智能硬件加速人工智能在传统行业的落地搜索引擎计算机视觉激光雷达都属于这种类型的节目。当然我们身边也有不少朋友在非科技领域有非常深入的见解,我们也会请他们来介绍他们的专业。私人飞行执照美国公务员美国个税疾控中心Airbnb 短租房东桌游电子游戏都属于这种类型的节目,因为作为主播我们自己也不是很懂,所以录制节目的过程也是我们自己学习的过程。

至于娱乐性节目,主要就是我们自己想要说,说完了还想要分享给大家听,所以我们就录了。这方面的选题是非常随性的,总之有主播想要录,我们有档期就录。这类型的节目包括互联网信息获取在家办公台北旅游托斯卡纳旅游伊朗旅游。此外还有一些选题是介于专业性和娱乐性之间的,我们做不到非常有深度的专业内容,但我们觉得嘉宾有独到的经历和见解非常值得分享,于是我们就会去录:中美互联网公司异同美国裁员冻卵硅谷春晚

最后还有一类特殊的选题,叫做蹭热点。我们还是希望我们的节目能够获得快速增长的,而蹭热点有时候是个很有效的办法,虽然不一定能成功。(这是我在知乎回答问题的经验啦,回顾了一下得票最多的答案,有一部分是蹭热点而来的。)这部分选题的时效性非常强,某个事件发生后必须尽快完成录音、制作和发布。我们的第一期节目iPhone 11 发布会就是这种类型,后面还有BlizzCon、CES(1 2)以及下周马上要发布的 WWDC。


回顾我们的选题,从播放量来看最可靠的是专业性题材的节目。这些节目我们可以持续做,只要我们能够一直找到新的专业话题,在一定程度上来说我们可以「量产」这种类型的节目,而且每一集都会有比较高的播放次数,但并不是最高的播放次数。那最高的播放次数来自什么呢?这需要的不是专业见解,而是情绪上的刺激。要让听众一看到题目就能产生情绪上的反应,以下是一些例子:

  • 美国裁员这一集刺激的是大家恐惧的情绪。在美国拿着工作签证的人都知道,一旦被裁员那就有可能被迫离开美国,之前那么多年投资在留学和工作上,就差那么一点拿不到绿卡是一个巨大的损失。这一集的播放次数非常高。
  • 中美互联网公司差异成功的刺激到了中国程序员对行业内卷的负面情绪,大家都想了解一下其它国家的互联网行业从业体验是怎样的,所以播放次数也很好。
  • 搜索引擎通过在标题中提及百度的没落而刺激到了中国网民对百度的厌恶情绪,很多人不仅仅收听了这一集的节目,还在评论种表达了对百度的不满。

有意思的是,人类确实更容易受负面情绪的驱动,在收听播客时也如此。这是现代市场推广所才去的一个常见手段,当然最终会导致民众两极分化,这又是一个新的问题。我们在选题时不会刻意的去选择挑起负面情绪的话题,但从结果上来看确实这样的话题效果更好。

2020年6月22日星期一

为什么美国网银转账那么慢:ACH 详解

我刚刚来到美国时就发现美国网银的转账速度很慢,往往中国网银一天甚至实时能完成的转账,在美国需要三天甚至更久,不过后来习惯了也就没再仔细思考这件事情。我最近加入了 Robinhood 的 Funding 团队,我们团队负责用户资金转进、转出 Robinhood 账户,为此我好好学习了一下美国网银转账背后所使用的 ACH Transfer 机制。现在终于可以来向大家解释一下为什么美国银行的转账速度那么慢了。

我这篇文章主要参考了 Gusto 关于 ACH 的系列博客(1 2 3 4 5),大家喜欢看原文的话可以去看看。在开始之前,我们来解释一下下文要用到的概念:

  • ACH:Automatic Clearing House。这是一套自动清算系统,是金融机构之间使用计算机进行自动清算的协议。
  • NACHA:National Automated Clearing House Association。这是一个制订 ACH 标准协议的机构,并且负责管理 ACH 网络。
  • Federal Reserve。美联储,实际运营 ACH 网络的机构。
  • ODFI:Originating Depository Financial Institution。这是代表发起 ACH 操作一方的发起方银行。
  • RDFI:Receiving Depository Financial Institution。这是代表 ACH 操作接受一方的接受方银行。

在美国的金融机构之间进行金额不是很大的转账,往往使用的都是 ACH。一个 ACH 操作中通常会涉及到 5 个参与者,他们分别是:发起方、发起方银行(ODFI)、美联储(Federal Reserve)、接受方银行(RDFI)、接受方。举个例子,Alice 是 Bob 的雇主,Alice 要发工资给 Bob,那么 Alice 就是发起方,Alice 的银行就是发起方银行,Bob 的银行就是接受方银行,Bob 就是接受方。

假设 Alice 发工资给 Bob 的那天算作第 1 天,Alice 的银行会要求 Alice 在特定时间(假设是 7:00 PM)之前发起这个操作,超过这个时间就算是下一个工作日的操作了。为此 Alice 必须在第一天的 7:00 PM 前发起一笔 ACH 操作转出 Bob 的工资,与此同时 Alice 的银行会在 Alic 的账户余额上减去 Bob 的工资。这是第一步。

Alice 的银行(也就是发起方银行)会在午夜把记录了这一笔 ACH 操作的 ACH 文件发给美联储,然后美联储把这个 ACH 文件转发给 Bob 的银行(也就是接受方银行)。这是第二步。

Bob 的银行会在第 2 天清早(假设是 5:00 AM)处理这一笔 ACH 操作,把工资加到 Bob 的账户余额上。这是第三步。如果一切顺利的话,事情到这里也就结束了,工资成功从 Alice 的账户转到 Bob 的账户上。但是如果发生异常的话,那就还有两步要走。

什么情况可能导致异常呢?Bob 可能填错账户号码了,Bob 可能把 checking account 错误标记为 savings account 了,Bob 还可能注销账户了,有各种原因可能导致异常。这些都叫做 ACH Return,会导致一笔 ACH 操作失败。值得注意的是,跟中国的网银不一样,Alice 作为发起方不仅仅可以转钱给 Bob,只要 Bob 签署了正确的 ACH 授权,Alice 还可以要求从 Bob 那里收钱回来。这时候 Bob 余额不足或者是 Bob 撤销授权等等的情况,都会导致异常。

在第三步里,Bob 的银行在第 2 天清早会处理这一笔 ACH 操作,如果它发现有异常的话它可以把 ACH Return 发给美联储,但这个 ACH Return 最晚可以在第 3 天结束之前发出。按照最坏的情况考虑,ACH Return 会在第 3 天和第 4 天之间的午夜由 Bob 的银行经过美联储发送给 Alice 的银行。这是第四步。

Alice 的银行会在第 4 天清早(再次假设是 5:00 AM)处理这一笔 ACH Return,然后把 Bob 的工资归还到 Alice 的账户余额上。这是第五步。整个过程耗费了 3 天的时间,准确来说是 3 个银行工作日(bank day)的时间。

一般来说,Alice 发工资给 Bob,如果 Bob 的银行没发生异常,Bob 是不会提出异议的,毕竟钱是多了而不是少了。但如果 Alice 发起的 ACH 操作是从 Bob 那里收钱,Bob 的银行没有遇到异常不代表 Bob 不会提出异议。跟 Bob 的银行不一样,Bob 本人有 60 天的时间提出异议(dispute),然后就会导致 ACH Return。Alice 的银行收到 ACH Return 之后,就要把已经给了 Alice 的钱拿回去。如果 Alice 的账户已经没有那么多钱了,Alice 的银行就赔钱了。

因此 Alice 的银行进行 ACH 操作向 Bob 收钱后,收回来的钱该不该给 Alice,是全额个 Alice 还是部分给 Alice,具体什么时候给,这些都是开放性问题,不同的银行会做不同的策略。有些银行会等到第 4 天才把钱给 Alice,因为第 3 天结束后 Bob 的银行就不再可能因为异常(如 Bob 账户余额不足)而返回 ACH Return 了。

有些银行会因为 Alice 长期的良好表现而信任 Alice,在第 2 天就提前把全额或部分给 Alice。如果金额比较大,Alice 的银行担心 Bob 在第 3 天结束后提出异议,那 Alice 的银行还可能要进行更多的沟通协调,向 Bob 的银行确认这真的是 Bob 授权了的,那就会拖更长的时间。


希望上述信息能够解释清楚为什么美国的网银转账这么慢。

如果大家对 ACH 文件的格式感兴趣的话,可以读一读这篇文章,里面做了简单介绍。实际的文件格式,请以 NACHA 官方手册为准,那是一本几厘米厚的砖头书籍,我们 Funding 团队就有一本今年最新版本的。

2020年4月30日星期四

Real Dev 测评

Real Dev 是一个我称之为「实战项目的 LeetCode 平台」。跟 LeetCode 相似的地方是,Real Dev 也是一个 OJ (Online Judge);跟 LeetCode 不同的是,Real Dev 不需要大家解决算法难题,但要大家解决工业界常见的实战问题。举个例子,Real Dev 的 Hello World 问题要求大家做一个最简单的 web 服务器,打开 /hello 页面的话服务器要返回 "REAL WORLD"

以下一些是 Real Dev 的问题:自动完成组件(Autocomplete/Typeahead)、短地址生成服务、数据分页 API、响应式配色、JavaScript 到 TypeScript 迁移、克隆 Yelp。这些项目比 LeetCode 的算法题更贴近工业界,更像是软件工程师日常工作需要做的事情。做这些项目时需要用到的技术框架也是工业界所用的:Node.js + Express 或者是 Python + Django。

优点

  • 解题过程更像是软件工程师日常工作。
  • 能够练习使用常见框架,例如 Express 和 Django。
  • 有官方的问题讨论板块

缺点

  • 题目数量不够多。
  • 每道题都要从头开始搭架子。

这次的测评不附送任何折扣链接。Real Dev 是我以前在 Facebook 的同事离开 Facebook 之后做的,他们现在正在做全站打折,由每个月 $20 打折到 $10,这已经是非常便宜的价钱了。大家想要试用的话,直接打开 https://real.dev/ 就可以了,有一部分题目是免费也能访问的。

2020年4月24日星期五

AlgoTogether 算法学习小组(第二期招生)

更新:请访问 AlgoTogether 新版网站,了解最新一期的时间和价格,并进行报名。

我开了一个叫做 AlgoTogether 的算法学习小组,面向在美国寻求软件工程师工作(实习或全职)的人。第一期学习小组的效果不错,学生对项目打分 4.3/5.0 分,对老师打分 4.7/5.0 分(数据),所以我决定开第二期学习小组。针对第一期学生的反馈,我对第二期学习小组进行了调整,最主要的区别是增加了模拟面试的环节。

我知道仅仅通过 LeetCode 准备算法面试是不够的,因为面试并不以题解的优劣来衡量你。你需要让面试官想要和你共事,这需要说服他你能跟他一起通过编程解决难题。AlgoTogether 是一个有教练指导的学习小组,帮助你训练多方面的面试能力,让你在面试时成为面试官的最佳未来同事。在这个学习小组中,你不仅仅需要解题和编码,你还需要练习沟通你的解题思路、接受模拟面试和倾听来自别人的反馈。我们的教练是 ACM/ICPC 奖牌得主,也曾带队其它学生参赛获奖,此外还是大型科技公司中富有经验的面试官。我们保证你投入到面试准备的每一滴汗水都能有充分的回报。

为了保证跟面试和工作环境一致,整个 AlgoTogether 采用全英语沟通。以下是 AlgoTogether 的详细信息及报名链接:

What is this program?

AlgoTogether is an algorithmic problem study group with a coach. The program focuses on all necessary skills for coding interviews: problem-solving, coding, debugging, articulating solutions, taking feedback. The coach leads the meetings and mock interviews and makes sure that students learn these skills in a way that they can reapply to new problems in real interviews.

What is the value of this program?

  1. Understand how an interviewer evaluates you. You are evaluated beyond correctness and optimality. If a company only evaluates these two it will replace human interviewers with LeetCode to save money. You should learn what’s missing beyond your LeetCode practice.
  2. Practice like you are in an interview. You will practice articulating your solution to an interviewer and taking hint or feedback from an interviewer. That’s what you don’t experience if you simply practice with LeetCode.
  3. Hold yourself accountable. Are you willing to commit to finishing a certain amount of problems within a specific time frame? If you can make the commitment, we will hold you accountable and prevent you from slacking.

Who is this program for?

People who are highly committed to getting a software engineer job at one of the well-established tech companies. It’s best for people who are seeking a software engineer job for the first time, for example, newly graduated students. It’s also good for experienced software engineers who haven’t done interview preparation for more than a year.

What is the structure of the program?

The program is 8-week long. Each week the coach picks a theme and assigns problems within this theme. Students have one week to work on them. Then they present their solutions and get mock interviews at the weekend meeting. If they need help they can join the mid-week meeting to discuss. The coach will lead both meetings.

Who is the coach?

Our coach has many years of experience working and interviewing candidates at well-established tech companies. He is also an ACM/ICPC algorithm competition medalist and has coached other students for the competition.

How much does it cost?

$800. We think it’s the right price to identify committed students and hold everybody accountable. You will be able to pay us through a credit card. It’s non-refundable once the payment goes through.

How do I sign up and pay?

Please fill out the information in the following signup form:

https://chen.cat/algotogether–2020q2

We might not be able to accommodate everybody. We will contact you through email with payment instructions if you are selected.

Update: Please visit AlgoTogether’s new website for the latest program’s date and price, and then signup.

2020年2月11日星期二

System Deep Dive 系统设计小班

System Deep Dive 系统设计小班

我开了一个叫做 System Deep Dive 的系统设计小班,面向在美国寻求软件工程师工作的人。系统设计面试跟算法编码面试有相似的地方也有不一样的地方。相似的地方是,你都需要让面试官想要和你共事,这需要说服他你能跟他一起解决复杂系统的设计难题。不一样的地方在于,系统设计问题没有标准答案,不存在 LeetCode 这样的系统为你的训练提供实时反馈。

System Deep Dive 采用教练带领学生探索复杂系统的小班教学模式,帮助你接触常见的系统设计面试题,模拟真实面试过程——鼓励你多提问题了解系统需求,引导你把问题分解成子问题,给机会你独立解决具体子问题。教练会对你的解题过程提供反馈,最后还会展示部分系统代码,帮助你加深对设计难点的理解。

我们的教练曾在大型科技公司中担任 tech lead,有丰富的系统设计经验和面试经验。此外他还创办了自己的 startup,帮助其它科技公司通过实战项目筛选候选人。我们保证你投入到面试准备的每一滴汗水都能有充分的回报。

为了保证跟面试和工作环境一致,整个 System Deep Dive 采用全英语沟通。以下是 System Deep Dive 的详细信息及报名链接:

What is this program?

System Deep Dive is a system design practice group with a coach. The program not only teaches you all the necessary skills to excel at a system design interview but also practices designing complex systems together. In each session, the coach would lead the students to dive deep into a complex system problem and explore different design choices together. Students are encouraged to ask questions and deliberate trade-offs because that’s the best way to learn.

What is the value of this program?

  • Get a feel for the real system design questions asked in interviews. We’ll pick the most popular system design questions asked in industry and elaborate on different paths they lead to. You will learn how to design a real system. We’ll explain in-depth about the usual structure to answer such design questions.
  • You will ask questions and lead discussions like in a real interview. System design interviews are open-ended by nature. In a real interview, candidates will do most of the talks. We will tackle the problem together as a team and you will ask questions and get answers from the coach or other students. In this way, you can understand deeply and learn the trade-offs better among different design choices.
  • You can see how a complex system works in real life. Interviewers often dive deep into the system design to see whether you were actually involved in the project. You might get stuck if you haven’t seen the real thing. We will demo some code and configuration of different system components. In this way, you will understand better, for example, what load balancer does and how the cache is built.

Who is the program for?

People who are committed to getting a software engineer job, have coding experience but lack the experience of designing a complex system.

What is the structure of the program?

This program is structured session by session. Each session will take 2 hours talking about one or two similar system design questions in depth. There will be 4 parts in a session:

  1. In the first part, you’ll be asked to discuss and walk your thoughts out for the question just like in an interview.
  2. In the second part, the coach would challenge you and guide you through different directions of the problem. Students are also encouraged to discuss and it’s a perfect time to explore the pros and cons of design choices.
  3. In the third part, the coach will talk about the common strategy to tackle such a design problem so you can learn the framework tackling it yourself.
  4. Lastly, the coach will demo with real code to illustrate different parts of the system in real life.

Who is the coach?

Our coach has many years of experience designing complex systems and interviewing candidates at well-established tech companies. He’s also the CEO and founder of a startup specialized in helping tech companies hire engineers through practical projects.

How much does it cost?

We’ll be running a series of sessions as a pilot program and charge by each session. A session will cost $200 with a limit of 8 students. Once a session is full, we’ll stop accepting registration and move candidates to the same session of a later date.

What sessions are available?

We will offer the following sessions in the pilot program:

  1. System Design Interview Skills: understanding the problem, breaking it down, exploring each subproblem, deliberating trade-offs and articulating decisions. (3/4 7pm–9pm Pacific Time)
  2. Design an Autocomplete. (3/11 7pm–9pm Pacific Time)
  3. Design a Facebook/Instagram/Twitter Newsfeed. (3/18 7pm–9pm Pacific Time)
  4. Design a Customer Service Center. (3/25 7pm–9pm Pacific Time)

We plan to offer each session once in the pilot program. We will adjust them based on feedback and repeat these sessions after the pilot program.

How do I sign up?

Use the following link to sign up for the pilot program and pick the sessions you are interested in:

https://chen.cat/system-deep-dive-pilot-program-signup

If you are interested in the sessions after the pilot program (or if you are reading this after the pilot program signup is closed), sign up for the wait list with the following link:

https://mailchimp.catchen.me/system-deep-dive-wait-list

We will contact you through email after you signed up.

2020年2月1日星期六

CoderPro 测评

CoderProAlgoExpert 的竞争对手,既然我写了《AlgoExpert 测评》,那就让我再写一篇 CoderPro 的测评吧。先说结论:我不推荐大家独立去购买 CoderPro,因为其价格跟 AlgoExpert 差不多但功能远没有 AlgoExpert 那么多。如果你原本就购买了或打算购买 Tech Interview Pro,免费赠送的 CoderPro 倒可以看一看。

优点

  • 视频容易消化。(每道题的视频控制在 15 分钟内且有些小幽默。)
  • 只用 Python 来做讲解。

缺点

  • 只有视频讲解,缺乏自己做题和测试的过程。
  • 只用 Python 来做讲解。

因为我个人认为练习和反馈的过程十分重要,所以我不建议大家买来通过看视频来学习。如果你已经通过 LeetCode 进行练习,只是有时候有些题目解不出来,那往往你能在网上找到别人的答案,包括 YouTube 上的视频解答。


CoderPro 背后的八卦估计比产品本身更有趣。原本 Tech Lead 是 AlgoExpert 的一个 affiliate,通过自己的 66 万粉丝的 YouTube 频道推荐 AlgoExpert 并从中赚取售价的 50%。后来做 AlgoExpert 的把 affiliate 的费用从 50% 降低到了 40%,然后 Tech Lead 就不干了。

Tech Lead 做了 AlgoPro 这样一个竞品,也就是现在的 CoderPro。然后他注册了 AlgoExpert.com 并指向自己的 AlgoPro。(AlgoExpert 用的是 AlgoExpert.io。)这导致 AlgoExpert 的 Clement 在自己的 YouTube 频道跟 Tech Lead 怼了起来。

Tech Lead 回应说,这都是因为 Clement 贪心,把 affiliate 的费用从 50% 降低到了 40%。Clement 说 AlgoExpert 的题目数量增加后售价也涨了,新售价的 40% 并不比原售价的 50% 少。Tech Lead 悄悄把 AlgoExpert.com 指回去 AlgoExpert.io,但 Clement 仍然不满意,表示不欢迎一个别人的域名指向自己的产品。

现状就是,AlgoPro 不再叫 AlgoPro,改名为 CoderPro,不再跟 AlgoExpert 的名字有重合的部分,事情告一段落。作为吃瓜群众,想要去了解当时的八卦的话可以看那时候的视频。

既然我在这里提到了 Tech Interview Pro,接下来我也会写一写测评,想要关注的话欢迎通过邮件RSS/Atom 订阅我的博客。

2020年1月29日星期三

AlgoExpert 测评

AlgoExpert 是一个我称之为「LeetCode 精选」的服务,因为 LeetCode 现在的题目实在是太多了,但解答、提示等内容的质量又参差不齐。AlgoExpert 解决了这些问题:首先,它提供不到 100 道算法题,覆盖不同难度和不同知识点;其次,每道题都有一系列循序渐进的提示,使得你可以从毫无头绪开始一步一步做到最优解;最后,每道题最后都有视频讲解,从最笨的解法开始一步一步讲解如何优化,最后达成最优解。

因为我不需要通过刷题来准备面试,所以我买了之后并没有真的去做题,只是打开题目想想自己会怎么做,然后看看提示验证一下自己的想法。我有测试过用它的界面来写代码,感觉还不错。以下是我试用后的评价:

优点

  • 模拟面试过程中的提示,而且是每一道题都有提示,不像 LeetCode 那样有些题目没有提示。我觉得提示是模拟真实面试的总要环节,因为在真实的面试过程中你也可能会卡住,但一旦获得一个小提示后你就能解决剩余的部分。
  • 内置编码环境,支持常见的语言(C#、C++、Go、Java、JavaScript、Python、Switch)。
  • 内置测试环境,可以跑自己的测试数据,也可以查看官方的测试数据。
  • 视频讲解多种解法并对比它们的时间、空间复杂度。

缺点

  • 视频讲解比较慢。(不过内置视频播放器可以用 1.5x 或 2x 速度播放视频。)
  • 支持的语言不如 LeetCode 多(缺了 C、Ruby、Scala、Kotlin、Rust、PHP)。

如果是为了找工作而刷题,我觉得 AlgoExpert 是一个比 LeetCode Premium 更好的选择。AlgoExpert 是 $85 一年,但 LeetCode Premium 需要 $159 一年。尽管 LeetCode Premium 提供的内容更多,但如果你不准备花时间做那么多题其实没用。而且我觉得通过 LeetCode 把各大公司常见面试题死记硬背一遍不是正确的做法,我更倾向于 AlgoExpert 这样子的,用少量题把不同的知识点覆盖到了,然后学会在面试时灵活变通更重要。

如果你想要买 AlgoExpert,你可以考虑用我的折扣码。点击以下链接打开 AlgoExpert,然后记得在付费前在「promo code」一栏输入「catchen」,然后就可以享受八五折。请记得一定要输入「catchen」这个折扣码,单纯使用链接打开是不会自动打折的。

https://chen.cat/algoexpert-referral

2020年1月17日星期五

AlgoTogether 算法学习小组

更新:请访问 AlgoTogether 新版网站,了解最新一期的时间和价格,并进行报名。

我开了一个叫做 AlgoTogether 的算法学习小组,面向在美国寻求软件工程师工作(实习或全职)的人。我知道仅仅通过 LeetCode 准备算法面试是不够的,因为面试并不以题解的优劣来衡量你。你需要让面试官想要和你共事,这需要说服他你能跟他一起通过编程解决难题。

AlgoTogether 是一个有教练指导的学习小组,帮助你训练多方面的面试能力,让你在面试时成为面试官的最佳未来同事。在这个学习小组中,你不仅仅需要解题和编码,你还需要练习沟通你的解题思路和接受来自别人的反馈。我们的教练是 ACM/ICPC 奖牌得主,也曾带队其它学生参赛获奖,此外还是大型科技公司中富有经验的面试官。我们保证你投入到面试准备的每一滴汗水都能有充分的回报。

为了保证跟面试和工作环境一致,整个 AlgoTogether 采用全英语沟通。以下是 AlgoTogether 的详细信息及报名链接:

What is this program?

AlgoTogether is an algorithmic problem study group with a coach. The program focuses on all necessary skills for coding interviews: problem-solving, coding, debugging, articulating solutions, taking feedback. The coach leads the meeting and makes sure that students learn these skills in a way that they can reapply to new problems in real interviews.

What is the value of this program?

  1. Understand how an interviewer evaluates you. You are evaluated beyond correctness and optimality. If a company only evaluates these two it will replace human interviewers with LeetCode to save money. You should learn what’s missing beyond your LeetCode practice.
  2. Practice like you are in an interview. You will practice articulating your solution to an interviewer and taking hint or feedback from an interviewer. That’s what you don’t experience if you simply practice with LeetCode.
  3. Hold yourself accountable. Are you willing to commit to finishing certain amount of problems within a specific time frame? If you can make the commitment, we will hold you accountable and prevent you from slacking.

Who is this program for?

People who are highly committed to getting a software engineer job at one of the well-established tech companies. It’s best for people who are seeking a software engineer job for the first time, for example, newly graduated students. It’s also good for existing software engineers who haven’t done interview preparation for more than a year.

What is the structure of the program?

The program is 8-week long. Each week the coach assigns a set of problems. Students have one week to work on them. Then they present their solutions at the weekend meeting. If they need help they can join the mid-week meeting to discuss. The coach will lead both meetings.

Who is the coach?

Our coach has many years of experience working and interviewing candidates at well-established tech companies. He is also an ACM/ICPC algorithm competition medalist and has coached other students for the competition.

How much does it cost?

It’s FREE! We are going to run our free pilot program in 2020Q1. However, we will ask for a $500 deposit and we will refund it when you finish the program. If you fail to finish the program you will forfeit this $500. It’s our way of identifying committed students and hold everybody accountable.

How do I sign up?

Please fill out the information in the following form:

https://chen.cat/algotogether-pilot-program-signup

We might not be able to accommodate everybody. We will contact you through email if you are selected.

Update: Please visit AlgoTogether’s new website for the latest program’s date and price, and then signup.

2020年1月7日星期二

Career Coaching 市场的思考

我在上一篇文章(《Career Coaching 价值的思考》)里说到了我对 coaching 价值的思考,接下来我想说说我对 coaching 服务市场的思考。我可以从我的定价策略开始聊。


基于市场订价

我设置每小时 $300 的价位,基本上就是比行业底线稍微高一点。还在 Facebook 工作的时候,我就跟公司的学习与发展中心(Learning & Development Center)聊过,了解到了为员工采购外部 coach 的价格。最高端的 executive coach 可以高达每小时 $1000 左右,最便宜但仅提供远程视频服务的 career coach 也要每小时 $200。基于这个信息,我觉得我把自己定价为每小时 $300 是合理的。

我可以理解为什么有人觉得这个价格太高(或者是认为总体上 career coaching 就是太贵)。我经常遇到的观点有以下几种:

  • 你教的知识我可以免费在网上获得,为什么我要付费买你的服务?我在《Career Coaching 价值的思考》里面说到了,知识获取的成本确实趋近于零,但复杂的知识不容易消化,所以真正值钱的服务在于帮助别人把知识变得容易消化,保证最后知识能被吸收。
  • 如果你真的那么擅长做你教的事情,你怎么会愿意花时间来教别人?最好的教练往往不是最好的球员,最好的球员往往也不是最好的教练。球员专注于把自己发挥到极限,经验主要来源于自己踩过的坑;教练需要帮助多名球员发挥得更好,经验来自对多名球员踩坑的观察。这两个角色是不一样的。我对于我教的事情擅长到一个程度,但我更喜欢去教别人,观察别人在学习过程中会遇到什么问题,然后创造性地去解决那些问题。
  • 跟你有类似资历的人其实不少,凭什么你可以收那么贵?跟上一条说到的类似:优秀的球员不一定想要成为教练,优秀的球员也不一定有能力成为优秀的教练。因为想要做教练并且有能力做教练的人不多,所以教练市场的供应由教练数量决定而不由球员数量决定,不能用球员的数量来估算教练的价值。跟我有类似资历的人大部分要么不想做教练要么做不好教练,暂时来说市场还是供不应求地,所以价格并不便宜。

如果大家能够站在宏观的角度看待整个 coaching 市场,就会发现教练暂时还是稀缺资源,所以定价不会便宜。我自己有一个愿景,是希望 coaching 这个市场能越做越大,教练越来越多,同时也有越来越多的学生消费得起。


定价的主观因素

除去上述市场供需的客观因素,coaching 的定价也有主观因素在内,也就是消费者主观地认为服务值多少钱。

据我观察,coaching 的定价非常难跟效果挂钩。因为 coaching 是针对每个人定制的,无法形成对比,所以也就无法对效果进行定量分析。(定量分析是指:如果这位学生获得了 coaching 服务将会得到结果 X,如果他没有获得 coaching 服务将会得到结果 Y,所以 X - Y 就是 coaching 创造的价值。)我们只能对 coaching 进行定性分析,也就是调查学生本人和身边的人是否觉得 coaching 让学生变得更好了。这个「更好」值多少钱,是消费者主观进行的评估。

这使得 coaching 的价值有点像是艺术品的价值,我把这称之为「主观的为才是用(subjective meritocracy)」。一方面,这个市场具备为才是用的性质,也就是越优秀的人能够获得越高的回报。另一方面,因为「优秀」是一个主观定义,所以参与者获得的回报高低也就受它人主观评价的影响。举个例子,两个画家各自画了一幅油画,他们分别能把自己的油画卖到什么价钱要看买家的主观评价,这不是由他们客观的绘画技能高低决定。

这意味着不同的人有着不同的 career coaching 心理价位。我的定价就像是一个过滤器:心理价位比我定价高的会选择购买,心理价位比我定价低的不会购买。这样的过滤器会帮我筛选出那些理解并认同 coaching 价值的学生,这些学生会以更积极和更开放的心态拥抱 coaching,结果当然是 coaching 效果更好。

如果我纯粹只是想要优化收入的话,我应该根据我能接收的学生数量来定价,使得愿意购买的人数正好等于我愿意接收的学生数量。实现手段可能就像艺术品拍卖一样,在一个时间段内拍卖一批名额,按照拍中的最低价格对所有拍中的学生收费。当然,这只是个虚无的构想(thought experiment),我并没有真的打算这样做,因为收入还不是我的主要目标。


价格对学生的反向激励

不仅仅消费者对 career coaching 的定价存在主观因素,反过来 career coaching 的定价也会影响学生主观能动性,这是非常有意思的一件事情。因为定价是主观的,所以定价偏高的话会让学生觉得这应该是物有所值的,因而更努力的吸收知识和练习技能;定价偏低的话反而会让学生觉得就算花了钱没学到也没浪费多少钱,因为有时候会松懈,并且更容易中途放弃。

我自己有花钱参加游泳教练的小班训练,至今已经两年多了。我已经游了二十多年的自由泳,但仍然觉得教练能给我带来比我自己摸索更高效的提升。然而因为一节课的价格不到 $20,有时候天气太冷了我就会选择逃课,因为感觉浪费 $20 也就是在湾区吃一顿放的价格,而且真有需要的话我可以再去插班补课。(我实际补课的次数肯定少于逃课的次数。)我觉得这就是价格偏低的问题,让人觉得错过了损失不大。

据我所知,有一些高端的健身房和健身教练收取较高的费用就是为了让消费者狠下决心,既然花了钱就必须把应有的价值给赚回来,所以健身才会更努力,结果自然也会更好。从这个角度来看,越贵的 coaching 越有效果在一定程度上是自证预言(self-fulfilling prophecy)——因为贵,所以学生更投入,所以效果更好。我在跟我的学生讨论价格上调时说到这个观点,有一个学生开玩笑地跟我说「那你应该尽早的涨价啊,那样子我会更加投入」。


总结一下,career coaching 并不是一个完全竞争的、由边际成本决定价格的市场,因为供应还是远小于需求。(在我看来,人人都可以从 coaching 获益,因为效率比自学更高,所以需求理论上是非常之大的。)价格跟成本的关联性很弱,更多的是看消费者主观的心理价位。现在 career coaching 的价格都不低,但高价在一定程度上更能激发学生的主观能动性。

我的愿景是让更多人获得 coaching。我暂时没有一个清晰的思路如何能达成这个目标,但我会去尝试。我此时此刻的想法是学习 Tesla 的模式——先做只有少数人买得起的电动跑车 Roadster,只需要有小规模的成功就能赚到足够钱做高端豪华车 Model S,在 Model S 能够获得大规模成功并验证市场后再用赚到的钱做低端豪华车 Model 3,最终通过 Model 3 把电车普及给大众。只做 Roadster 无法改变世界,但一开始就做 Model 3 也不切实际,所以这必须是一个分多阶段来实施的计划。

最后,如果你喜欢我的文章,欢迎通过邮件RSS/Atom 订阅我的博客。

2020年1月2日星期四

把我的个人网站推倒重来(Part 9 - 精简 Bootstrap 编译)

我在很久之前一篇文章里讲述了我为何选择 Bootstrap 作为样式框架,在那篇文章的结尾我提到了一个我当时没做的优化:去掉我不使用的 Bootstrap 模块。

我现在终于有时间把这项优化做了,我可以先说说做好的效果:Bootstrap 全部的 CSS 共 152kb,在优化后变为 72kb,节省了一半的体积。(压缩后的网络传输体积由 23kb 优化到了 11kb。)这个优化的效果还是很明显的,接下来我说说我具体做了什么吧。(具体代码可以参考我的 pull request。)

引用 Bootstrap 源代码

我们要去掉了不需要的 Bootstrap 模块,就要手工选择 Bootstrap 的 SCSS 文件,然后只编译和引用我们需要的。我们当然可以下载 Bootstrap 的 SCSS 文件,不过更好的做法是直接用 Git 的 submodule 概念引用 Bootstrap 源代码。在我的源代码目录下执行以下的命令就可以添加指向 Bootstrap 官方 GitHub 的 submodule:

git submodule add https://github.com/twbs/bootstrap.git

不过官方 GitHub 的 master 分支并不总能通过编译,这是我后来才发现的。修复的办法也很简单,就是强迫 submodule 指向特定 Bootstrap 版本的 commit。在 Bootstrap 源代码我们可以找到 v4.4.1 tag,然后定位到它的 commit 是 dca1ab7

接下来进入 bootstrap 子目录,里面就如同另外一个 Git 仓库一样,我可以用 git reset v4.4.1 --hard 把它的 HEAD 从 master 上最新的 commit 指向到 v4.4.1 的 dca1ab7。因为这个子目录是个 submodule,改变它的当前 commit 会修改我项目源代码的状态,这个改变在本地 commit 和 push 后就能在别处 pull 出来。这保证了 Netlify 在编译我的项目时使用的是同样的 Bootstrap v.4.4.1。

导入 Bootstrap 模块

Harp 内置了对 SCSS 的支持,所以我们不需要自己安装任何工具来编译 SCSS。现在 Bootstrap 已经以子目录的形式存在了,如何在我的项目中引用呢?我删除了原来直接引用的 bootstrap.min.css,然后添加了一个 bootstrap-custom.scss,并在页面里引用 bootstrap-custom.css。Harp 会发现这个 CSS 文件不存在但存在同名的 SCSS 文件,然后就编译同名 SCSS 文件并把输出结果保存到同名 CSS 文件。

bootstrap-custom.scss 件里,我直接复制粘贴了 Bootstrap 自己的 bootstrap.scss。这个文件本身不包含任何 CSS 规则,它只通过一大堆 @import 指令引用 Bootstrap 的所有模块。在我更新所有 @import 指令的路径后,引用 bootstrap-custom.css 的效果就跟引用完整的 Bootstrap 一样,包含了所有的模块。只不过这次我们不是用 Bootstrap 编译好的文件,而是让 Harp 从源代码开始进行编译。

精简 Bootstrap 模块

接下来要精简 Bootstrap 模块就很简单了,我可以一个一个地剔除我不需要 @import 的模块,只留下我需要的。精简后的 bootstrap-custom.scss 只用到不到原来一半的模块,体积自然下来了。

很可惜的是,这些模块不能进一步地分拆和精简了。例如说 _variables.scss 这个文件,其实它为大量我用不到的模块提供了常量定义,但就算我用不到这些常量我也无法把它们剔除。只要我用到的模块依赖于其中某些常量,我就必须把所有的常量带上。因此,尽管精简后 CSS 体积减半,但仍然有大量不需要用到的 CSS 被打包进去了。

配置 Autoprefixer

尽管 Harp 能够编译 Bootstrap 的 SCSS 文件,但还有一件事情是 Bootstrap 官方编译做了但 Harp 不会做的,那就是 Autoprefixer,这个工具会为 CSS 规则加上浏览器厂商前缀,保证 CSS 的兼容性。例如说,如果我们手写了 user-select: none,Autoprefixer 会自动添加 -webkit-user-select: none-moz-user-select: none 等等。

Autoprefixer 自己不能直接在命令行里使用,必须通过 PostCSS 调用。也就是说,调用 PostCSS 处理 CSS 文件,然后指定使用 Autoprefixer 插件。为此我们需要安装 PostCSS 和 Autoprefixer,这强迫我把我的项目变为一个 NPM 模块,这样我才有 package.json 文件,然后才能安装我所需的 NPM 模块。

需要注意的是,Autoprefixer 必须在 Harp 编译之后调用。Harp 编译先把 SCSS 编译为 CSS,然后再把输出的 CSS 交给 Autoprefixer 处理一遍。Harp 把项目目录里面的 public/ 编译后输出到 www/,然后我让 Autoprefixer 编译 www/css/ 并原地覆盖就好了。最后我写出来的编译命令如下:

harp compile .
npx postcss www/css/*.css --use autoprefixer -d www/css/

配置 Netlify 执行上述命令进行编译,我们的工作也就完成了。如果你对这类技术文章感兴趣,欢迎通过邮件RSS/Atom 订阅我的博客。

2019年12月19日星期四

Career Coaching 价值的思考

我是从 2018 年开始做 career coaching 服务的,从深度打折的每小时 $100 开始做起到现在每小时 $300 的行业价位。我在做这件事情的过程中学习到了不少东西,也深入思考过一些问题,可以拿来分享一下。


首先,大多数人最想知道的估计是我的 career coaching 适合哪类人群。从我现在的学生群体来看,主要有两个大的类别,但也有少数学生是在这两大类别之外的。

第一大类别是大公司里面的 junior 到 senior 的群体,也就是 Facebook 或 Google 的 IC3 到 IC5 级别。他们已经有很好的工作和很好的收入,技术往往不是他们晋升的瓶颈,他们也有很强大的意志力来完成高强度的工作。他们需要的更多是软技能方面的培训:

  • Communication:如何保证对方确实理解了自己的意思。如果保证对方对自己承诺的事情有一个正确的期望值,不会因为期望过高而最终失望。中国人比较常见的一种问题是在无法理解对方意思时一路 yes 到底,就希望尽快结束这个对话,结果连自己答应了对方什么承诺都不知道。
  • Alignment:如果一件事情需要多方合作才能完成,如何保证大家能达成共识。如果大家已经存在明显分歧,各自想要的事情各不不同,甚至是有你就就没我的零和博弈,那该如何解决。
  • Planning & Execution:如何做规划和如何执行。我经常说:IC3 和 IC4 做的项目是可以用贪心算法的,但从 IC5 开始就要以动态规划的方式去做,有时候往前走是为了获得新的信息,获得新的信息后有可能最佳的选择是倒回来再往另外一个方向走。
  • Product & Business:技术是服务于产品和商业的,解决错误的问题就算问题很难也无法产生价值,所以大家必须理解背后的产品和商业价值是什么。
  • Mentorship:如何掌握辅导别人的度。一方面,你不希望帮得太多,导致你帮别人把事情都做了。另一方面,你不希望帮得太少,别人自己折腾很久都没有多少进展,拖累团队进度。

这方面软技能的培训跟我之前在 Facebook 时为其它人提供的培训很类似。Facebook 内部有一个面向工程师的 coaching program,叫做 Good to Great。在这个 program 里,学生提出的问题 80% 是软技能相关的,只有 20% 是技术相关的。这个状况很容易理解,因为 Facebook 招来的人已经非常优秀,技术上的事情绝大部分都可以自学,更需要的是在自己原来的盲点进行一些点拨。

第二大类是一流高校里在读的学生,例如 Stanford 和 University of California 系列的学生,他们希望优化他们找工作的战略。

假设目标就是大公司软件工程师职位,学生找工作为什么不直接刷题解决?因为刷题只触及了这个问题最浅层的一面,如果我们再深入一些我们可以把这个问题分解为多个阶段:

  1. 熟练地编写代码:只要想得到的逻辑,都能转化为正确和高质量的代码。
  2. 熟练地运用常见算法:见到难度相当于 LeetCode Medium 的问题,都能够想出来正确的算法,并且条例清晰地描述该算法。(然后再利用上一个阶段的能力编写代码。)
  3. 参与团队合作:能够跟一两个人合作完成一个编程项目,互相协调分工,交叉 code review,解决一些意见上的分歧。这是很多学校都不教也不提供实践机会的技能,就算课程项目要求多人合作学校也不强调合作过程的质量只考察最终结果。如果拥有同等的算法和编码能力,简历上能展现出团队合作能力甚至是团队领导能力的人在求职上更有优势。
  4. 展现自己:在简历上和面试过程中展现自己的上述能力,表现出自己最优秀的一面。有些人并不是能力不行,但因为展现出来时打了折扣,别人就会低估他的能力。拥有实力是根本,没有实力就没有东西可以展现的,但展现自己本身也是一项重要的能力。
  5. 向上管理:在实习阶段向上管理自己的经理(包括 intern manager 和 team manager),确保他们理解实习项目的进度和最终结果的价值。如果有幸拿到实习,并且所在公司通过实习表现决定全职 offer 的话,实习期间展现自己的能力就很重要,但这跟简历和面试时的表现又不完全一样,因为这是跨度几个月的汇报关系。
  6. 职业战略规划:明白自己毕业两三年后想要成为怎么样的人,让毕业后的第一份工作服务于这个目标。有很多人没有想过这个问题,有些人想了也暂时没有答案,但有些人其实是有明确的答案的。对于有明确答案的人来说,就应该做战略规划,避免走弯路。就算是没有答案的人,也应该避免用贪心算法往前走掉坑里,至少要大致知道坑在哪里。

刷题本身非常重要,但我们应该意识到刷题只覆盖了头两个阶段应该掌握的技能,后面的几个阶段需要用到完全不一样的能力,仅仅靠刷题是不够的。我做 career coaching 往往会从学生最终想要的长远目标出发,也就是毕业几年后想要成为怎么样的人,然后再反向规划路线,最终决定接下来立即需要优化的能力是什么。


上面说了我做 career coaching 的主要两大类学生,接下来我可以说说我对 career coaching 价值的思考。这里包括我之前做 manager 时深入思考过的一些问题,也包括现在跟 coaching 和 training 同行交流时获得的心得。

根据我过去做 manager 的经验,我觉得 coaching 的第一步是教练和学生一起找到学生的职业愿景(career vision),也就是学生几年之后那个「更好的自己」是长什么样子的。学生可以说说这个世界上什么事情是自己最在乎的、什么事情是自己擅长做的、什么事情是自己喜欢反复做的、手上有多少资源可以动用来追求自己的目标。教练可以根据自己过去对其它人的观察提供参考信息,告诉学生什么样的目标是前人已经抵达过的并有已知的可靠路线,什么样的目标从来没有人做成过所以风险较高,如果学生给自己订的目标太低教练还可以提出一个更高但切实可行的目标。

双方把各自的信息摆到一起来,然后找到一个学生能下决心执行的长远目标,这其实是 coaching 的核心价值。这跟传统的传道受业解惑不完全一样,不是简单地把知识和技能从一个人身上转移到另外一个人身上,而是帮助一个人变成他想要变成的更好的样子。在这个过程中,知识和技能的转移只是其中的一部分,但不是全部。教练和学生都必须真心相信这个愿景可以达成而且值得达成,然后共同发力来帮助学生达成这个愿景。如果中途遇到了障碍,两个人应该共同想办法解决,学生不能被动地等待教练传授知识解决难题,教练也不能假设学生获得知识后就能自行解决所有难题。

既然说到了解决难题,我就想说一下教练对学生在情绪上提供支持(emotional support)的价值。其实做 coach(或者是 manager)一段时间后你就会发现,有时候学生做不成一件事情并不是能力问题,而是心理上有一道坎没办法迈过去。心理上这道坎,往往是对未知的恐惧,害怕自己失败,而不敢踏出自己的舒适感区域(comfort zone)。这时候教练的角色非常重要,既需要有同理心(empathy)理解学生为什么没办法迈出这一步并且关怀学生的情绪,又要在恰当的时机下得了狠心强迫学生走出这一步。学生走出这一步的过程可能会相当地痛苦,但抵达彼岸时他会想明白为什么这是必须的,同时也会感谢教练。

如果人类好像机器一样没有情绪永不倦怠,其实学习能够变得高效很多。机器学习的算法你想跑就能跑,机器永远不会说「我今天学累了,明天继续吧」。但正因为我们不是机器,一个好的教练要能帮助学生避免倦怠的情绪。通过对同行的观察,我发现保持教学内容简短和有趣非常重要,这也是现在短视频(10 分钟左右)教学的趋势。我之前在《牛油果烤面包》播客节目上采访过飞行员教练 Simon,他告诉我 FAA(美国联邦航空管理局)沉甸甸的手册上有丰富的知识,但大家很难看得进去,于是纷纷上网购买其它飞行员教练录制的视频课程,因为视频里的各种冷笑话让学生保持兴趣。在获取知识的成本无限趋近于零的今天,所谓「知识付费」并不是付费给知识本身,真正的附加价值存在于对知识的加工,使得知识变得容易消化。

总结一下,career coaching 的价值往往不在于知识本身,而在于帮助学生变成更好的自己。在这个过程里,知识很重要,但往往并不是价钱的主要部分,因为现在网上无数成本接近于零的知识。真正值钱的是如何保证学生能够消化和吸收正确的知识,最终达成自己的目标。


最后,我对于 career coaching 在经济学和社会学的大环境下还有一些思考吧。接下来我会再写一篇《Career Coaching 消费的思考》来跟大家聊聊。如果你不想错过下一篇文章,欢迎通过邮件RSS/Atom 订阅我的博客。

2019年11月15日星期五

Early Reader 2020 调整

我在 Patreon 上开放 Early Reader 这一档有一年多了,感谢大家长期的支持,让我来聊聊这一年的通过经营 Patreon 学到的东西吧。

Early Reader 这一档每个月收 $1 的费用,对应的好处是提前一周阅读我最新发布的文章。(事实上我推迟了文章在其它平台发布的时间,同时在 Patreon 上设置了解锁时间。)在这一年内我获得了 9 位朋友的支持,现在仍然活跃的有 5 位。

我觉得 Early Reader 这一档并没有达到我原来的预期。我原本设想这一档能够通过足够低的价格获得尽可能多的读者支持,但实际上没有足够多的人愿意为「提前一周」这个福利而付费。我在跟 Joma 聊天时他提醒了我一件事情,「你不应该根据『你需要付出多少』来定价,而要根据『别人能获得多少』来定价,提前一周阅读对读者来说其实不值钱」。我觉得这个视角是对的,所以我准备对 Early Reader 这一档作出调整。

我从读者的角度来思考什么有价值,我觉得主要是两方面吧:

  1. 获得我不对外公开的独家内容。
  2. 能够真正的激励我创作更多的内容。

为此我新开了两档,分别叫做 Coffee Supporter ($5) 和 Sushi Supporter ($30)。这两档的价格比原来的更高,但请我吃饭(尤其是吃寿司)这件事情确确实实能够激励我干活。我有一个猜想,很透明地分享一下吧:如果我的读者觉得他们给我的是看得着摸得到的实物(食物),那会比原来虚无地付 $1 但不知道这 $1 有什么具体含义更乐意付费。(你们可以在评论区告诉我这个猜想对不对。)

此外我会开始做不对外公开的独家内容,专门给付费读者看。一开始主要还是文章,之后我会探索音频和视频。这些内容如果是长篇的话,我可能会免费发布其中一部分在公开的博客上,但不会发布全部。

最后说一下现在 Patreon 上的 Early Reader 这一档会如何迁移。我现在已经对新读者关闭了这一档,并且计划在 2020 年 1 月完全终止这一档,那意味着如果你到时候仍然使用这一档的话 Patreon 就会把你的付费订阅取消掉。如果你愿意升级到 Coffee Supporter 或 Sushi Supporter 的话,你可以在那之前进行升级。升级后会保留原有的福利,同时获得上述新增福利(不对外公开的独家内容)。

如果你是在我 Patreon 以外的博客上看到这篇文章,欢迎来 Patreon 付费支持我。如果你觉得美元付费对你来说并不方便,请在评论区留言告诉我,我正在努力开通支持人民币支付的对应版本。

Career Coaching 2020 新价格

我的 Career Coaching 将在 2020 年初开放更多名额,同时进行年度价格调整。新学生的价格为每小时 $300。2019 年内或更早加入的学生将能继续获得优惠,优惠价将在 2020 年 1 月统一调整到每小时 $200。

对于已经在 Patreon 上进行付费的现有学生,我会在 12 月开放新的一档 $200 的服务,请你们把自己的帐号从现在的 $100 或 $150 一档调整到 $200 一档,然后我会在 1 月删除 $100 和 $150 这两档。(我到时候会发消息逐一通知你们。)

对于等待新名额的学生,我将会在 12 月放出 $300 这一档。如果你 12 月就在 Patreon 上加入的话,系统会在 1 月头扣钱,我会在 12 月跟你约好 1 月份开始的 bi-weekly 30 minutes 1:1。

2019年11月12日星期二

《牛油果烤面包》满月回顾(Part 3 - 统计数据)

Apple Podcasts Connect

上一篇文章里我讲述了《牛油果烤面包》的录音和剪辑过程,接下来我们看看听众订阅和收听的数据如何。


我在第一篇文章里面提到我们用 Anchor 把播客自动发布到多个平台,同时我们手动发布到喜马拉雅和企鹅 FM。如果我们要看数据,我们就必须一个一个平台地看。

  • Anchor:Anchor 提供「播放数」和估算的「听众数」,同时提供听众的国家、播放平台和设备分布。Anchor 会统计每一集每一天的播放次数。(参考截图
  • Apple Podcasts:Apple Podcasts Connect 不提供「订阅数」只提供「设备数」,所以无法知道有多少人订阅了。Apple 强调的是总收听时间,我们在过去的 60 天内有 96 个小时的收听时间,这样就可以推算出来每台设备 85 分钟的收听时间。此外这 96 个小时里 84% 来自于订阅听众,但这还是无法推算出订阅数。具体到每一集,Apple 同样提供设备数和总收听时间,同时提供节目内的留存率,也就是用户听到第几分钟第几秒钟就流失了。(参考截图:1 2
  • Spotify:Spotify 提供「播放次数」、「播放超过 60 秒次数」、「听众数」和「订阅数」。后面两个都是根据 Spotify 注册用户进行计算的,所以不存在多次在不同设备播放导致的重复计算。我们现在有 153 个订阅用户,但每期节目只有不到 20 次播放,意味着 Spotify 的用户经常订阅但不收听。Spotify 为每一集提供留存率,以及听众的性别和年龄分布。(参考截图)
  • Google Podcasts:Google Podcasts 本身并不提供任何的数据,只要 RSS 被 Google 抓取了就会显示在 Google Podcasts 里。有意思的是,Google Play Music Podcast Portal 可以认领 podcasts,但我认领后还没能看到任何数据,不知道这个产品现在到底是否还活着,还是因为不会有人在 Google Play Music 里面听 podcasts。暂时来说,我们无法从 Google 获得任何数据。
  • Castbox:Castbox Creator Studio 提供节目的订阅数、播放数和每一集的播放次数。(此外,因为 Castbox 提供了评论系统,所以作为管理员可以管理用户评论。)
  • Breaker:Breaker 自动收录第三方的 RSS,对于不是在 Breaker 上创建的 podcasts 无法认领也无法获取数据。
  • Overcast:Overcast 自动收录 Apple Podcasts 已经收录的 RSS,并且不提供认领。有意思的是,Overcast 在抓取 RSS 时通过 user agent 来上报订阅数,但由于我们使用 Anchor 提供 RSS 所以无法截获 user agent 获取订阅数。
  • Pocket Casts:Pocket Casts 接受 podcasts 提交,但不提供认领和数据。
  • RadioPublic:RadioPublic 自身不提供任何的数据分析,但可以使用 Google Analytics 收集数据。不过只有付费用户才能使用这项功能,所以我并不知道 RadioPublic 会向 Google Analytics 汇报什么数据。
  • Stitcher:Stitcher Partners 提供播放数、播放时间和听完率。
  • 喜马拉雅:喜马拉雅提供「订阅数」和「播放数」,以及每周新增听众的留存率。喜马拉雅不提供节目内的「留存率」但提供「跳出率」,虽然本质上是一样的数据但呈现出来的曲线就完全不一样的。(「跳出率」是「留存率」的倒数。)此外喜马拉雅提供听众的省份、城市和性别分布。

总结一下:这些平台提供的数据各不一样,有些平台基本上不提供什么数据。这就导致我们无法轻易地整合数据,分析听众喜好,然后优化将来的节目。现阶段我们能做的是,尽量把用户带往几个提供数据分析的平台,然后依靠这几个大平台的数据做决策。

长远来说,我觉得我们可以做自己的平台入口,让用户可以直接在我们自己的网站上播放甚至是订阅,这样我们就可以自己收集一部分的统计数据了。当然,如果用户喜欢用其它平台的 app 进行订阅和播放我们依然无法收集到那部分的数据,但至少我们能收集多少是多少吧,这对我们优化选题和节目内容很重要。


说完数据之后,我们接下来可以说说选题。如果你想知道我们是如何进行选题的,欢迎通过邮件RSS/Atom 订阅我的博客,保证你不会错过下一次关于选题的文章。

2019年11月9日星期六

追踪短地址的小工具:Trace URL

我写了一个追踪短地址的小工具,输入任何短地址(或普通带重定向的地址),它就能找到原地址显示给你看。我把它叫做 Trace URL,欢迎大家来使用。这是一个 PWA (Progressive Web App),所以 Android 用户可以把它添加到首屏,添加后就可以把短地址「分享」给 Trace URL 进行追踪。

这个项目是完全开源的,不过源代码分布在多个 GitHub 项目当中。traceurl-web 包含了 PWA 客户端代码。这个项目使用 Create React App 创建,然后使用 Material UI 做样式模板,最后手工编辑了一堆 metadata 使它成为一个好用的 PWA。在这里我分享一个比较小众的 PWA 知识吧,也就是如何让 PWA 接受来自 Android 分享的数据,这需要在 manifest.json 里面添加一个叫做 share_target 的信息,例如说:

{
  "share_target": {
    "action": "/",
    "method": "GET",
    "enctype": "application/x-www-form-urlencoded",
    "params": {
      "title": "title",
      "text": "text",
      "url": "url"
    }
  }
}

添加 share_target 信息后,只要 PWA 被添加到首屏,它就能成为 Android 系统的分享目标。需要注意的是,Chrome for Android 有个已知的 bug,分享地址时会把地址传输给 text 参数而非 url 参数。所以在处理传入参数时我们需要同时看 texturl,哪个有值就处理哪个。

这个 PWA 背后实际调用的 API 在 traceurl-api 项目里。这个 API 其实只是对 traceurl 库做了个简单的封装,这个库才是真正负责跟踪短地址的。这样层层封装只是为了好玩,让我能够尝试一些新技术,学习新知识。例如说,traceurl 其实是一个 package,我原本把它发布到 NPM Registry 了,后来 GitHub 发布测试版的 GitHub Package Registry 时我就试用了一下,把 traceurl 发布到那里去然后在 traceurl-api 里面引用。这就让我理解到了到底为什么 GitHub 要做自己的 Registry。(到底是为什么?我另外写一篇文章解释。)

这次就先说这么多吧,大家记得来试用一下 Trace URL 哦,好用的话记得添加到 Android 首屏哦!下次我再写文章讲述 GitHub Package Registry,感兴趣的话请记得通过邮件RSS/Atom 订阅本博客。

2019年10月18日星期五

Career Coaching 小组交流群

我在做 career coaching 的过程中听到了大家的建议,希望能建立小组帮助目标一致的学生沟通。在我的学生当中,有两个主流的目标群体,为此我专门在我的 Discord 服务器上开了两个 channel 用作交流:

  • 第一个是求职小组(#students-job-seeking),主要针对想要找 Software Engineer 职位的在校学生,有计划换工作的 Software Engineer 也可以加入讨论。这个小组主要用来讨论笔试题目、面试题目、公司招聘流程、寻求内部推荐、了解公司口碑和职位信息等。
  • 第二个是职业成长小组(#students-career-growth),主要针对在职 Software Engineer 提升技能和探索新领域,同时也可以用作交换各大公司的职场经验。我预期这个小组的话题更宽广一些,包括一些类似 case study 的个人经历讨论。

如果你还没有加入我的 Discord 服务器,请使用邀请连接 加入。(如果你不想使用 Discord,欢迎通过评论推荐别的平台。)只要你是我的 Patreon 上的学生,你应该会自动获得对应的权限,保证你能够进入这两个小组。如果你在 Patreon 外跟我 ad-hoc 约时间,你可以在加入我的 Discord 服务器后告诉我你的用户名,我可以手动把你添加进去。

《牛油果烤面包》满月回顾(Part 2 - 录音剪辑)

我们继续回顾一下录制播客《牛油果烤面包》过程中学习到的东西。在上一篇文章里我说了一下使用 Anchor、喜马拉雅和企鹅 FM 作为平台发布的经验,这次我们说说录音和剪辑的过程。


我们录音使用的是一支 Sony 录音笔,这是我看着 TheWireCutter 的推荐买的。为什么选择录音笔?这跟我选择 Anchor 作为第一个发布平台的原则是一致的,就是找投入成本最低最快能起步的方式先把节目做起来,如果节目做得好,听众越来越多,我们可以投入更多把节目做得更好,否则我们停掉节目损失也不大。

一个人录音的话其实很方便,直接用手机连接麦克风录就可以了。这其实也是 Anchor 推荐的办法,Anchor 说很多个人播客都是一个人躲在棉被下面录音的,因为棉被可以隔音。不过我们有两位主持人,一个麦克风无论是连接手机还是电脑都不能解决问题,但要两个麦克风一起录的话就需要特殊设备支持。用电脑录的话,可以用 mixer,把多路麦克风输入合并到一起再输入给电脑。后来我发现原来录音笔也是有内置支持多路输入的,例如这个价格是上述 Sony 录音笔四五倍的 Zoom H6

我们现在使用双声道的 Sony 录音笔,两个主持人一起录通常没什么问题,大家坐在桌子的两旁,录音笔放中间。只要录音笔离两个人的举例相当,大家保持相当的音量说话,录出来的效果也不错。当我们开始邀请嘉宾时,事情就变得有点复杂了。要让三个人到录音笔的举例一致比较难,我们往往是把位置安排好后先试录一段,然后再听一听感觉效果没问题了再正式开始录。


录音之后的剪辑我用 Audacity,免费开源的好工具。我在剪辑方面不是很有经验,往往就是看看哪里有废话就剪哪里。我们在录音过程中有时候聊着聊着就把话题给聊死了,于是我们会停下来讨论一下接下来聊什么,这样的部分就会被完全删掉。除此之外,我们还有很多「嗯」、「啊」之类的 fillers,也就是想不到说什么时会无意识说的字,在合理的情况下这些也会被删掉。在内容剪辑好之后,我们会在录音前后加上 intro 和 outro 的音乐,然后调节一下整个节目的音量大小。

这项工作说起来简单,实际上做起来非常耗时。之前剪辑都是另外一位主持人斯图亚特做的,后来我听说 Acquired 这个两位 VC 做的播客使用网上专业的剪辑服务,每周节省数个小时的剪辑时间,于是就产生了类似的想法。很可惜他们使用的服务仅支持英语播客,不适用于我们的中文节目。为此我在 Twitter 上问我的 followers 有没有人愿意收费帮我们剪辑,最终找到了 @icewlb 来跟我们合作,帮我们完成剪辑这一项艰巨的任务。


这次文章就写到这里,下次我们来聊聊我们节目的用户收听数据如何,根据这些数据我们会如何安排接下来的节目。如果你想要看我们的数据,欢迎通过邮件RSS/Atom 订阅我的播客,保证不会错过下一篇文章。

2019年10月17日星期四

《牛油果烤面包》满月回顾(Part 1 - 发布平台)

我们做《牛油果烤面包》这个播客满一个月了,总结一下这个月以来的经验吧。

我在之前的文章里面说到为什么我选择使用 Anchor 这个平台来发布播客,因为它像是播客业界的 YouTube,能够让你免费并且迅速地起步。这对于我们这个不知道能不能做起来的播客来说很重要,因为我们当时还不知道会坚持做多久,所以前期投资越低越好。


用 Anchor 发布我们后发现的第一个问题就是中国国内不能访问。这其实很要命,因为我们做这个节目的一个初衷是为了让国内的听众更好地了解美国加州和湾区,如果国内不能访问的话这一个目标就实现不了。我第一时间尝试研究 Anchor 支持的第三方平台有没有能在国内收听的,例如说 Spotify。我发现 Spotify 的收费用户是能在国内收听的,但因为 Spotify 没有正式在国内提供服务,所以能注册到的帐号必然是其它国家的帐号,不付费就不能「漫游」到中国使用。(我暂时还没有找到一个能让国内用户正常订阅和下载 Anchor 节目的方案。)

在我紧张地想办法解决 Anchor 不能访问的问题时,我们的另外一位主持斯图亚特直接注册了一个喜马拉雅的帐号来解决问题。这需要他进行身份证验证,这还需要我们接下来持续维护两个帐号同步发布,不过为了能让国内的听众正常收听到我们的节目,这也是值得的。

这个问题看起来解决了,但后来我在网上搜索了一下国内播客平台的市场份额,发现没有最新的数据但几年前的数据表明喜马拉雅并没有完全占据这个市场,企鹅 FM 和荔枝 FM 也占据了不小的市场份额。于是斯图亚特又去注册了一个企鹅 FM 的帐号在那边同步发布。


我们遇到的第二个问题是如何修改已发布内容。博客文章发布后要修改很简单,编辑文本就可以了。播客的话,我们可以在本地编辑音频文件,但平台是否支持上传覆盖呢?

Anchor 在这方面是很容易的,编辑一集节目时除了可以修改文本信息,还有一个编辑音频的功能。编辑环境跟发布前的创作环境一样,可以随意切割音频文件,然后重新排列多段音频顺序,或者是插入听众留言和过渡音效。因为我们不使用 Anchor 的编辑环境,所以我们把本地编辑好的新文件上传就好了。

喜马拉雅的这个功能找了很久才找到。在编辑某一集节目的界面里只能修改文本信息,不能重新上传音频。最终我在研究专辑编辑时找到了这个功能——在专辑的节目列表里,可以选择任何一集节目然后重新上传音频文件。当然作为一个国内的平台,上传当然不仅仅是上传,先审后发是必须的,不过审阅超级快(不知道是不是用算法侦测出我们只是微调了音频)。

至于企鹅 FM,因为我们比较晚才登陆,所以没试过需要发布后编辑的,仍然不确定它是否支持发布后编辑……


在这篇文章里我就先说这么多,我会在下一篇文章中聊聊我们录音和剪辑的经验。最后送上我们这一个月里除首发外热度最好的一集,里面讲述了我们两位主持人移民美国的体验。

2019年10月10日星期四

《Secrets of Sand Hill Road》书摘(Part - 1)

我最近读完了《Secrets of Sand Hill Road: Venture Capital and How to Get It》,觉得这本书对于 VC 及其运作方式的解释很清晰。如果你想要创业但还没有跟 VC 打交道的经验,这是一本非常好的入门书。如果你只是好奇 VC 和创业者之间的合作和博弈,那也不妨读一读。以下是我读完这本书以后我觉得有意思值得摘录的点。

VC 是什么?

  • 在你无法通过其它更传统的金融手段(例如债券)获得资金时,VC 是一种获取资金的手段。但在选择 VC 之前,你必须先先思考一下哪种获取资金的手段更适合你。
  • 债券还是股权?债券是要偿还的,所以更适合于那些短期内能够产生利润的公司。股权则没有这方面的限制,但你就不能够保持对公司的 100% 控制权了。
  • VC 作为一种资产类别来说,其回报中位数并不比 S&P 500 好多少,只有顶级 VC 能产生超额回报。研究表明,能够产生超额回报的 VC 会持续产生超额回报,因此品牌效应明显。
  • VC 的品牌效应会覆盖到创业公司:被顶级 VC 投资的创业公司,更可能是这一领域的顶级公司,更有可能吸引顶级人才,更有可能吸引到顶级 VC 投资下一轮。
  • VC 的投资结果分布:约 50% 是亏本的,甚至血本无归;约 20% 到 30% 能产生几倍(不到 10 倍)的回报;约 10% 能产生 10 倍甚至 100 倍回报。VC 只在乎增加 10 倍或以上回报的概率,10 倍以下和亏本无区别。

VC 如何选择投资?

  • VC 主要考虑三个类别:人、产品、市场
    • Founder-Market Fit:有什么特定技能、背景或经历导致创始团队想要做这个 idea?
    • 基本问题:对于同一个 idea,为什么选择押注在这个团队上,而不是等待另外一个更适合做这个 idea 的团队出现?(背后的逻辑:一家 VC 投资一家公司就是认定这家公司能够赢得这个市场,投资这家公司的机会成本就是将来不能再投资这家公司在这个市场的竞争对手。)
    • 创始人的领导力:他们能否围绕公司使命说一个很动听的故事,吸引优秀人才加入,吸引顾客购买,并且为将来的融资吸引其它投资人。
    • 「You have to be partly delusional to start a company given the prospects of success and the need to keep pushing forward in the wake of the constant stream of doubters.」
  • 产品
    • 假设产品在寻找 product-market fit 时会改变许多次,如同探索迷宫一样探索 idea 的流程比实际的产品 idea 能更好地预测创始人的成功。
    • 维生素和阿司匹林:如果你忘记吃维生素,你不会放下手上的活赶回家吃。如果你觉得头痛,无论如何你都会想弄一片阿司匹林来吃。VC 喜欢投资阿司匹林一样的产品。
  • 市场规模
    • 如果 VC 投资到一个不成规模的市场里,就算公司表现优异,股票价值也不会太高。因为 VC 需要 10 倍或以上的回报,所以不能投不成规模的市场。
    • 平庸的团队能在伟大的市场里获得成功,优秀的团队在不好的市场里总会失败。

LP 是什么?

  • VC 靠 LP 的投资来生存。LP 需要 VC 维跑赢市场指数来维持他们的投资组合。
  • 常见的 LP 类型:大学的捐赠基金、慈善基金会、企业和政府退休金、超高净值家庭的财富管理公司、国有财富基金、保险公司、小额基金组合而成的基金。
  • LP 的三大投资类别:grwoth assets(公开股票、私募股权、对冲基金)、inflation hedges(房地产、商品、自然资源)、delationary hedges(债券、现金)。
  • 大学的捐赠基金需要向学校提供稳定的资金来源,Yale 是这些基金的典范。Yale 基金有一半放在非流动性资产里。为了保证学校的正常运作,Yale 基金需要每年从非流动性的 VC 投资里获得 18% 的回报。这个对回报的需求驱使 VC 把投资转化为利润,投资的公司要么上市要么出售。
  • 创业者必须有对 VC 基金周期的敏感性,知道投资自己的基金处于周期的哪里。(大多数 VC 基金的生命周期都是十年。)如果你在基金的第三、四年拿钱,这个基金有充裕的时间和可用资本跟你共同成长。
  • VC 的基金一般都会预留一定的资本,用来追加更晚轮次的投资给之前这个基金投资过的公司。你从一个基金首次获得投资的时间越晚,这个基金就越有可能没留下足够的预留资本继续投资你将来的轮次。
  • 在预留资本不足时,VC 可以用第二个基金追加更晚轮次的投资,但这比从同一个基金出资要难。因为第二个基金有不同的一组 LP,可能会导致跟第一个基金产生利益冲突。

书摘的第一部分就写到这里,下一篇从「LP 如何和 VC 组队」开始继续写。想要关注这个系列的话,欢迎通过邮件RSS/Atom 订阅。