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 的算法学习小组,面向在美国寻求软件工程师工作(实习或全职)的人。第一期学习小组的效果不错,学生对项目打分 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.

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 的算法学习小组,面向在美国寻求软件工程师工作(实习或全职)的人。我知道仅仅通过 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.

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 订阅我的博客。