Skip to content

Instantly share code, notes, and snippets.

View mondaychen's full-sized avatar

Mengdi Chen mondaychen

View GitHub Profile
@mondaychen
mondaychen / 关于开发者效率和裁员的闲聊.md
Last active January 21, 2024 13:36
关于开发者效率和裁员的闲聊

关于开发者效率和裁员的闲聊

前一阵,我写了一篇文章,其中聊到了 React 团队在 Meta 不受重视、难以得到资源的问题。这篇文章引起了很多同行的共鸣。今天,我有一些新的想法想要聊聊。

开发者效率的价值多在成长期的业务中体现

其实,这个问题不仅限于 React,很多开发者工具、框架、编程语言等,都符合这个规律。这些工程团队在公司快速发展时是被认为对公司发展很有意义的,但随着时间的推移,公司对这些团队的重视程度似乎在逐渐减少。

这类团队的工作内容大致可以分为两类:一类是必须有他们才能实现的某些产品的重要功能;另一类是通过他们的工作,可以使公司用更少的开发者完成本需要更多人手才能完成的产品。这两者有一个重要的共同点,那就是“新”:新产品、新功能、新内容。显然,在一家公司的业务高速发展的时候,会有很多这样的需求。但当业务进入成熟的业务阶段时,对这类工作的需求就会减少。

在那篇文章中,我提到这类团队的工作往往难以量化。现在想来,无法量化只是表面的原因。实际上,很多很难量化其效果的工作,如广告投放,仍然会得到公司巨量的资源投入。另一方面,很多平台工程团队都尝试过各种方法来量化他们的工作产出,比如说,他们会声称原先每年需要30个工程师的研发工作,现在只需要15个人,为公司节省了相当于每年15个工程师的成本。

@mondaychen
mondaychen / 对 React 团队工作经历的思考.md
Last active April 30, 2024 05:12
对 React 团队工作经历的思考

对 React 团队工作经历的思考

今天在写2023的年终总结,再额外聊两句在 React Core team 的经历和反思吧,也算是正式画上句号了。

我在2022 年加入了 React,算是某种程度上实现了自己的梦想:加入这个在前端领域最有影响力的团队,真的很令人骄傲。可惜加入没多久,公司就开始 hire freeze,我在的 Dev Tooling 组原先说好5个 headcount 变成了两个,工作量却一点也没少。开会讨论我们组要做什么的时候,来了二三十个人,提了五六十个想法,个个都说要做行业标杆。而现实是作为 DevTools 最主要载体的 Chrome 扩展 API 和几个 moible 工具都在不断更新,光跟进维护和解决 bug 都够忙的了。我觍着脸开口问谁能贡献一部分时间来帮我们做一个项目,人人都面露难色。 大家也能感受到,工程师们都很希望自己使用的工具能变好,但是这个东西在 Meta 这家公司里是真的排不上优先级。其实不只 React DevTools,整个 React 组都是如此。只有跟公司重视的 VR 有关系的项目才能得到资源。团队里一些想重点发展 web 方向的核心成员,即使是 Seb 和 Andrew 这种级别,也只能另谋出路,跳槽去了 Vercel。

为什么 React 在 Meta 得不到资源

我和不少同样做前端的朋友都有这样的困惑:React 在 Meta 到处都用,在业界也为 Meta 带来了巨大的名望,这么重要的项目,为什么不能多投入一点资源呢?

@mondaychen
mondaychen / 2023年终总结.md
Last active December 31, 2023 00:20
2023年终总结


2023:不可思议的幸运之年

写在最前面

我一直很佩服能坚持写作的人。我自己写东西的时候八成都是这样的三部曲:产生强烈的表达冲动——越写越觉得自己的想法和表达有缺失——把半成品忘在草稿箱里。
今年我下决心无论如何都要把年终总结写出来,因为在生活的方方面面都发生了太多重要的事了。但是写着写着又开始自我怀疑:说了这么多事,好像每个都有点感悟,又每个都没写清楚,这算个什么哪门子的文章?正这么想的时候在推特上看到了 Rick Rubin 的一个视频叫作《How to deal with a creative block》。他鼓励内容创作者写东西就当作写日记,只为自己一个人写,认真写,不用为别人负责。
谢谢 Rubin,谢谢宇宙。这篇总结我就为了自己写。

@mondaychen
mondaychen / .vimrc
Last active April 24, 2023 04:16 — forked from simonista/.vimrc
A basic .vimrc file that will serve as a good template on which to build.
" Don't try to be vi compatible
set nocompatible
" Helps force plugins to load correctly when it is turned back on below
filetype off
" TODO: Load plugins here (pathogen or vundle)
" Turn on syntax highlighting
syntax on
@mondaychen
mondaychen / K10.js
Last active November 16, 2020 14:40 — forked from rsalzer/RandomWikimediaPicture.js
Scriptable-Script to open zoom link for my daughter
function runScriptable() {
const [title, link] = getZoomInfo(new Date());
const widget = createWidget(title, null, link);
if (config.runsInWidget) {
Script.setWidget(widget);
Script.complete();
} else {
widget.presentSmall();
}
const lodash = require('lodash');
const { random } = lodash;
const online = []
const offline = []
const afk = []
function addPlayer(set, fixPower) {
set.push({
power: fixPower || random(1, 1000, true),
@mondaychen
mondaychen / sparks-from-redux.md
Last active June 4, 2022 03:16
Sparks from Redux

Sparks from Redux

##Intro to Redux

###Some important concepts of Redux

Reference: Three Principles, Basics

  • A single Store to maintain the state tree
@mondaychen
mondaychen / page-scroll-blog.js
Created February 11, 2016 00:10
Page Scroll Workaround for Single-Page Apps
var $container = $('#container');
...
// when some route is matched
var view = new AnotherPage();
$container.html(view.render().el);
window.scrollTo(0, 0);
$container.html(el)
// jump to top if needed
import math
def kthPrime(k):
# k is non-negative
if k < 0:
return None
# an array to store primes
primes = []
# use an array of booleans `isPrime` to indicate whether a number is a prime
# e.g. isPrime[2] is True means 2 is a prime
# upperLimit is the size of the array. We start from a small number
@mondaychen
mondaychen / Stacking_rectangles.py
Last active August 29, 2015 14:17
Stacking rectangles
def lcs(x, y):
n = len(x)
m = len(y)
table = dict() # a hashtable, but we'll use it as a 2D array here
for i in range(n+1): # i=0,1,...,n
for j in range(m+1): # j=0,1,...,m
if i == 0 or j == 0:
table[i, j] = 0
elif x[i-1] == y[j-1]: