显示标签为“career coaching”的博文。显示所有博文
显示标签为“career coaching”的博文。显示所有博文

2022年9月25日星期日

帮助别人的正确姿势

大家晋升到一定级别后就会被要求带新人,怎样带新人才算是成功?绩效评价时是只看有还是没有带人,还是要看带人具体的效果?如果要看效果的话那如何衡量效果?这是我在 career coaching 的过程中时不时会遇到的问题,我觉得可以把我的框架写下来分享一下。

首先,带新人以及更广泛的 mentoring 和 coaching 肯定是可以根据结果来衡量做得好还是不好的,但刚刚开始上手这项工作时更应该看重的是效率而不是效果。这不是说完全不看结果,而是说在合理的难度上能及格地完成工作但不追求更好的效果。

这有点像程序员刚刚开始学习编程时写代码的目标:要能够通过编译,执行结果要符合预期,但不考虑执行性能,也不考虑代码是否优雅。首先要会写代码,接着要多写,写得越快就能在同样的时间里写得越多。练习多了以后,再考虑如何提升围绕着编程的其它指标。如果一开始写不出正确的代码,或者练习的数量不够,其它指标均无法优化。


在有机会带人之后,首先要保证别人确实能够从你这里得到帮助。简单地问一句「你觉得这对你有帮助吗?」就够了,绝大多数时候别人都会说「有帮助」。如果你发现对方迟疑一下才告诉你「有帮助」,你可以再追问一下「有哪些方面可以改进吗?」可能你分享了很多信息,但没有回答到点上;可能你提供了很多理论,但对方还是不知道接下来该做什么。多尝试直接或间接地获取反馈,做到对别人提供有效帮助并不难。

在确认别人能够获得帮助后,接着就需要提高效率。我们可以用一个数值来衡量效率:杠杆比例——如果你花 1 倍时间来帮助别人就能让别人省 n 倍时间的话,这个 n 是多少。效率最低时 n=1,这意味着对方需要获取帮助的事情你帮他做了,而且你做得还不比他快多少。(如果 n<1 你要认真考虑一下你是否应该带人。)带新人的话往往一开始就能做到 n=2 甚至 n=3,毕竟你比新人要更熟悉整个技术栈,就算你帮他把他的工作做了,你也应该比他亲自做要快不少。

我通常建议的目标是 n=8,也就是说如果一天工作 8 小时,那你花 1 个小时就能帮助别人省 1 天的时间。从 n=2 到 n=8 有一段距离,没有人可以瞬间做到 n=8,但要把这做为一个长远的目标,不停地想办法优化以提高 n 的数值。这时候有一种意识很重要:只帮对方必须要获得外界帮助的东西,他自己能够缓慢学习提高的东西不需要帮。

打一个比喻:想象一个倾斜的平面上有一个因为摩擦力而没有向低处滑动的物体。因为静摩擦比动摩擦要大很多,重力无法抵消静摩擦所以物体不会运动,但有可能重力比动摩擦要大,只要运动起来就可以加速。你需要做的就是提供一开始克服静摩擦的那个力。如果没有这个力,这个物体可以相对平面永久地静止,但一旦它运动起来了,无论初速度有多低都能逐渐加速。

这跟「授人以渔」是不冲突的。你教会一个人基本的捕鱼技巧之后你就可以让他自己通过训练来提高捕鱼的效率,他应该自己想要捕更多鱼,这样子他才能从饿肚子变成能吃饱,再到能够卖鱼赚钱。他开头的阶段体验可能不太好,自己捕的鱼自己都吃不饱,饿着肚子又要去捕鱼了。但你效率也很重要,你效率越高就可以越大规模地帮助其他还完全不会捕鱼的人,这些人因为完全不会捕鱼都快要饿死了。(前提是确实有很多人能从你的帮助获得价值,都等着从你那里获得帮助。)

为了实现这个目标,在帮助别人之后最好自己复盘一下,想想自己有哪里的效率做得不够高,如果再遇到类似情况的话怎样能够提高性价比。


效率上去之后,你就可以开始关注难题了。就好像你在能够熟练编程以后,你就会想要找难题来解决一样。难题之所以难,是因为你不能通过提供信息(包括知识、数据等)来解决问题,真正的障碍往往来自于你想要帮助的人的意识。可能在他价值观深处藏着一些他自己也不知道的东西,阻止了他达成他的目标。可能你能看出来他的目标在南面,但他的价值观会引导他向北走。

有时候你提供信息(一张地图)给他就行了,他能够从逻辑上分析出来:要么调整价值观,使得价值观能够允许自己往南走;要么放弃这个目标。有时候你会遇到很顽固的人,他觉得只要往北走足够远就能绕地球一圈抵达目标。你需要挖掘他此前怎样的人生经历塑造了他这样的价值观,然后才能确定你是否能做点什么。这些难题的共同点只存在于这个层面:你不可能用你的知识和逻辑去帮助他,你需要搞明白这个人是经历了什么才成为了今天这样子。


这篇文章首发于我的 Patreon,对同类文章感兴趣的话可以考虑在 Patreon 上支持我,付费订户可以提前至少一周阅读到我的最新文章。同时也欢迎大家通过邮件RSS/Atom 免费订阅我的博客。

2022年8月24日星期三

求助于别人的正确姿势

什么情况下应该求助于别人?求助于别人是否就是伸手党,就会被人鄙视?我在做 career coaching 的过程中发现这是个常见问题,决定拿出来专门写一篇文章。Facebook 的 Bootcamp 在这方面对新人做了很多意识方面的训练,非常值得参考。

在 Bootcamp,专门有一个区域是给 mentor 提供 office hour 的,目标类似于学校里的 office hour(课后问答),如果作为新人的 bootcamper 在工作过程中遇到了问题,可以去这个区域进行提问。新人当然会问:那我该什么时候去提问?标准答案是:如果你自己捣腾了一个小时还是毫无进展,你就该去提问了。

跟学校作业不太一样的是,Facebook 布置给 bootcamper 的任务并不是标准答案已知的练习题,而是实际项目中不紧急也不重要的任务,每一个任务都不一样,mentor 不会提前知道问题,也不一定总能找到正确答案。新人在 office hour 提出问题后,mentor 都会问「那你都尝试了哪些办法?」如果有人说不出来,那 mentor 都会说「你先回去自己捣腾一下,如果一个小时了都毫无进展再回来提问」。

在新人解释完自己尝试过的办法后,如果 mentor 知道答案,可能会直接告诉他答案,把相关文档的链接发给他;如果 mentor 也不知道答案,他会亲自动手,把新人写了一半的代码拿过来 debug,试着解决问题;如果 mentor 解决不了,但知道谁可能提供有效帮助,他会把新人介绍过去。

就这样简单地一个过程,它强调了几种在 Facebook 成功必要的意识:

  1. mentor 必须授人以渔,bootcamper 必须求学捕鱼,不可以伸手要鱼。之所以问你尝试过什么办法但不成功,是因为接下来 mentor 必须要告诉你或者示范给你看什么办法能成功。你不能说「我捕不到鱼,请给我一条鱼」,正确的提问方式是「我用这样的方式捕鱼,我试过了但什么鱼也捕不到,请教我正确的捕鱼方式」。
  2. 即使面对你完全不懂毫无经验的问题,动手开干是最好的学习方式。动手开干不一定是写代码,动手开干也可以是搜索和研究。这跟在学校课程遇到问题存在一个本质的区别:学校课程能遇到的问题,都有已知答案,已知答案都属于一个清晰明了的知识体系,教材总能站在一个对该领域无所不知的角度帮你讲清楚一切。实际工作上的问题,往往你只能获取到碎片化的相关信息,然后再加上你自己的捣腾,产出一个可用的结果。你必须拥抱「真相在一定程度上不可知」然后冲上去捣腾。
  3. 你能直接接触到的人不一定有你需要的信息,你需要学会找到正确的人来获取正确的信息。这也是跟学校成体系的知识和课程结构很不一样的。在学校,你可以假设教这一课程的人对课程知识范围无所不知,你去 office hour 提问肯定能得到答案。在工作上需要获取的信息,有可能需要经过多个节点才能获取到,这个人建议你问那个人,那个人建议你问另一个人。你虽然不确定要经过多少个节点才能获取到你需要的信息,但你最好有一套方法能够收敛你和目标的距离。

修炼好这几种意识,即使不在 Facebook 工作也能让你更好地在需要时求助别人。即使你做不好后面两点,你至少要把第一点做好。


我在 career coaching 时有时候会遇到客户这样的顾虑:我向比我资深这么多的人求助,会不会是很浪费他们的时间?面对这种自我怀疑,你必须调整心态,把自己放在一个能够双赢的角度来思考你们的处境。

首先,你要确定你想要求助的事情确实重要。如果是工作上遇到的问题,你要确定解决这类问题是符合公司利益的,站在公司的立场来看这类问题确实值得解决。这时候无论是你解决还是别人解决,这类问题都是要解决的,这奠定了双赢的基础。

接着,你求助的态度必须是「请教会我捕鱼。我也不想总是找你要鱼,所以教会我捕鱼是符合双方利益的双赢选择。」对于公司来说,这是个三赢的选择,公司解决了符合公司利益的问题,你学会了可以重复使用的技能,帮助你的人将来不需要反复地帮助你。

最后你当然要把这实践执行到底,不能在别人教你捕鱼时捕到一条鱼就走人。尽管这一条鱼满足你此时此刻的需求,但很可能你还没有扎实的学会捕鱼,下次又要劳烦别人。你表明了你想学,你就必须比教你的人更投入地学。


「求助于别人的正确姿势」应该有一个镜像话题「帮助别人的正确姿势」。这是新手 mentor 时常会遇到的问题:我觉得帮助我的 bootcamper 非常消耗时间,但我不帮他又不行,怎样把握这个度呢?我可以下次写一写这个话题。这个话题不仅仅对 mentor 有用,对 mentee 也有用,因为在知道 mentor 如何才能更高效地帮助你之后,你也能更高效地利用 mentor 的时间。

这篇文章首发于我的 Patreon,对同类文章感兴趣的话可以考虑在 Patreon 上支持我,付费订户可以提前至少一周阅读到我的最新文章。同时也欢迎大家通过邮件RSS/Atom 免费订阅我的博客。

2020年8月23日星期日

AlgoTogether 算法面试小班(第四期招生)

AlgoTogether 上周日宣布第三期招生,不到一周时间就全部报满了!一开始我们开放了 20 个名额,结果到周五晚上就全没了。周五一天之内有 8 个人报了名,把剩下的名额都抢光了。因为还有学生特别想要报名,周五没抢到名额就跟我联系,我周六悄悄加了 5 个名额上去,当天就消耗完了。

考虑到 AlgoTogether 如此热门,仍然有学生想要报名,我决定立即开放第四期的报名和支付。第四期预计 10 月 31 日开始,到明年 1 月 2 日结束。课程格式跟第三期相似,但会在第三期快要结束时根据第三期收到的反馈做轻微调整。如果你原本想要报名第三期但错过了,可以点击以下链接报名参加第四期:

https://techcareer.io/programs/algotogether

如果你还不是很了解 AlgoTogether,以下是第四期的详细信息如下:

这门课程适合什么人?

这门课程适合下定决心要在美国一流科技公司找一份软件工程是(Software Engineer)工作的人。这门课程对于首次找软件工程师工作的人来说价值最大,例如说应届生或从其它行业转专业过来的人。找全职实习都适用。对于有工作经验的软件工程师来说,如果最近一年没有做过面试的准备,通过这门课程来准备面试也是一个很好的选择。

这门课程的价值在哪里?

我们的核心价值是「授人以渔」,因此课程的价值如下:

  1. 学会以面试官的角度进行思考。在面试过程中,公司对你的评价不仅仅在于代码的正确性和性能优化。我们会向你解释面试官是如何评价面试者的,这是你不可能通过 LeetCode 学习和训练的技能,你学会这些技能后就可以用面试官的视角审视自己,找到自己应该提高的地方。
  2. 基于面试场景的训练模式。LeetCode 是训练对着机器做题,面试需要的是对着人解题。我们假设你对前者已经有一定的经验,着重训练后者。后者涉及的技能包括:如果通过提问理清面试官的需求、如何清晰地陈述自己的思路、如何接受面试官的反馈和提示。
  3. 给自己下一个破釜沉舟的决心。如果你想要下定决心,在限定时间内做完指定数量的题目,同时完成指定数量题目讲解和模拟面试,我们会保证你对你自己定下的目标负责任。
  4. 理解解题思路而非背诵面经和答案。一知半解就去大量做题的话会导致背诵面经和答案的现象。我们强调学习和理解解题思路,然后通过适量的练习来学会如何灵活运用。以不变的解题思路去应付不断变化的面试题目。

课程结构是怎么样的?

整个课程总共 9 个星期的时间。每个星期我们有 3 个天会进行 Zoom 视频会议,另外 4 天进行线下各自的练习和 Slack 上的交流。

每周教练挑一个主题,例如说动态规划(Dynamic Programming),然后围绕这个主题布置 15 道作业题。你有一周的时间来完成这些题目并且提交结果,你至少需要提交 10 道题目的代码和 1 道题目的详细解题思路。所有学生都完成提交后,助教会组织大家投票选出最优秀的解题思路,并且安排题目讲解(Presentation)和模拟面试(Mock Interview)的时间和人选。教练会在整个过程中针对学生表现提供反馈。

我们每周三、周六和周日晚上 7 点(Pacific Time)通过 Zoom 视频会议进行教学、答疑 、题目讲解和模拟面试。不进行 Zoom 视频会议的日子每天同样时间在 Slack 上进行专题讨论。

课程教练是什么人?

我们的教练都在一流科技公司拥有多年的工作经验和面试官经验。我们的首席教练曾多次获得 ACM/ICPC 竞赛奖牌,此外还培训其它学生参赛获奖。我们的助教团队都有一流科技公司的工作经验,且近期经历了面试找工作的流程,非常能理解正在经历这个过程的学生需要什么。

课程使用什么语言教学?

为了保证跟面试过程和工作环境一致,整个 AlgoTogether 采用全英语沟通。学生毕业后,可以加入微信校友群,使用中文沟通。

如何报名和支付?

请打开以下链接然后选择第四期(10 月 31 日到 1 月 2 日)进行报名和支付:

https://techcareer.io/programs/algotogether

如果你看到这篇文章时已经错过了第四期,可以打开链接然后选择你需要的那一期进行报名和支付。

2020年8月16日星期日

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

我开了一个叫做 AlgoTogether 的算法学习小组,面向在美国寻求软件工程师工作(实习或全职)的人。头两期学习小组的效果不错,第二期学生对项目打分 4.4/5.0 分,对老师打分 4.8/5.0 分(数据),所以我决定继续做第三期学习小组。针对头两期学生的反馈,我对第三期学习小组进行了调整,增加了提供标准化反馈的模拟面试环节,设立了学生共同维护的解题思路库。

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

以下是往期学生对 AlgoTogether 的评价:

SKY:作为第一期的学员,还是非常推荐这个项目的。教练很上心水平也很高,有问必答。每周的资料都很有针对性,涵盖面很广。最后一周还有教练自己收集总结的的最新大厂 OA 以及面试题,受益匪浅,在这里说一声谢谢。

罗凯:第一期学员发表一下感想。1.题目归纳的很有条理,基本上跟着项目走下来 leetcode 上大部分题目都有思路了。 2.教练业界经验很丰富,回答了很多关于实际工作的问题,也给出了很多代码风格如何优化的建议。3.同学都很认真,每周一次 mock 的时候听同学讲也收获挺多的。很多题目的想法是 leetcode discussion 里面也没有的。教练也非常有耐心,有一次周二晚上讲一个比较难的题目,一直讨论了快半小时,我这边东边都11点多了。4.项目每周大概十个题,要都弄懂还是要花点时间的。做 mock 对真实面试帮助挺大,需要自己思路清晰,代码能跑到把代码讲清楚这之间也是有距离的,需要练习一下。

为了保证跟面试和工作环境一致,整个 AlgoTogether 采用全英语沟通。以下是 AlgoTogether 的详细信息及报名链接。$800 的 early bird 价格到 8 月 29 日周六结束,之后将变为 $1,000 的正常价格。

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 commit, 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 9-week long. We meet in Zoom 3 times a week and practice together offline through other days.

Each week the coach picks a theme (e.g. dynamic programming) and assigns 10+ problems within this theme. You have one week to work on them. Then all students submit their solutions, share their thinking processes, vote on other students’ sharing, practice presenting solutions, and get mock interviews. The coach will provide support and feedback throughout the whole process.

We meet on Wednesday, Saturday, and Sunday 7 pm (Pacific Time) in Zoom to have lectures, office hours, solution presentations, and mock interviews. We convene on Slack on the other days at 7 pm (Pacific Time) to discuss a focus topic.

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?

Early Bird: $800. (Before 8/22 23:59 Pacific Time.)

Regular: $1,000. (After 8/23 00:00 Pacific Time.)

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

When does the program start?

We start on 8/29 Saturday and end on 11/1 Sunday. We plan to stop accepting signup and payment on 8/28 23:59 Pacific Time.

How do I sign up and pay?

Please open the following page and click the “purchase” button to start. We will contact you through email after successful payment:

https://chen.cat/algotogether

Update: Please open the link from above and check out the latest program’s date and price, and then signup.

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

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日星期五

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年9月14日星期六

Career Coaching 名额报满

Career Coaching 名额报满

我从 2018 年 4 月开始用 Patreon,一开始就设立了两档服务,包括 $100 一个小时的 career coaching 服务。我在 2018 年 6 月有了第一个学生,接下来花了一年多的时间,到 2019 年 9 月才把我的五个学生名额招满。我在 9 月 10 日晚上发了一条 tweet,说我又开了五个新的名额,只是打折少了,价格提高到 $150 一个小时。(我在知乎上也发了同一条消息。)

完全出乎我意料之外的是,在短短的 24 个小时之内,这五个名额就被报满了!这真的是让我非常的震惊,因为上一批的五个名额花了一年多才被报满,就算用户增长存在加速度,也应该要花好几个月才会被报满啊。我完全没有预料到用户增长的加速度会如何巨大!

超级感谢大家对我 career coaching 项目的支持,尤其是学生们对我的支持,这包括想报名但这次没有抢到名额的学生们。没有大家的支持,就没有这个项目的快速成长。在这个项目上,我有机会接触到大家在 career 不同阶段遇到的问题,然后尝试为跟大家一起解决这些问题,这其实是非常有意思。

接下来我会花一段时间来观察迅速增加无名学生对我时间开销的影响,然后再决定是否能够开放更多名额以及开放多少名额。如果你想报名但没抢到名额,欢迎你到 Patreon 上来 follow 我,保证我开放新名额是你能够第一时间获取到资讯。此外,通过邮件RSS/Atom 订阅我的博客也能收到消息。