我给自己设立了每月 $20 的开源捐赠预算

Babel 官方最近发布了一篇博客 称 Babel 团队的 funding 已经不够了。一直以来我零碎地捐赠过一些开源项目和个人,在卖贴纸和 T 恤的时候也把大部分的利润捐赠给了 Vue. Babel 这件事让我有了固定每月捐赠一些开源项目的想法。

目前设定的是每月至少 $20 (约 130 多元人民币) 的预算,这样平均至少可以捐赠 4 个不同的项目。我可以在这个预算内根据我的技术栈灵活地选择我对哪些项目进行捐赠。

我个人会选择一些这样的项目进行捐赠:

我在做 side-project 的时候经常会用的项目
项目没有融资背景(例如我非常喜欢 Prisma, 可是它已经有了 $12M 的 A 轮融资)
做了一些我用到的工具的个人开发者

目前我捐赠的项目和个人

EGOIST 在全职做开源的好朋友
chakra-ui 我用 React 写 side-project 必用的 UI component 库
dayjs 我经常会用的 moment.js alternative
react-query 我经常会用的 React 请求库
next-auth 非常好用的 Next.js OAuth 库
Logseq 开源的 Roam Research alternative

你可以在 OpenCollectiveGitHub Sponsor 看到我对哪些项目和个人进行了捐赠。

国内用户捐赠的方法

国内用户捐赠只要具有以下其中一个条件即可:

注册 Paypal 账号和国内银行卡绑定
持有一张 Visa 信用卡

OpenCollective 支持 Paypal 和信用卡,甚至支持银联的信用卡,因此一般国内用户都能很容易通过 OpenCollective 进行捐赠。GitHub sponsor 不支持 Paypal, 需要 Visa.

除了每月固定的捐助,还可以选择一次性的捐助。

我对开源的看法

我从开放的源代码学到了非常宝贵的知识,这些知识帮助我成为了更好的程序员。功利一些来说,我通过使用这些开源项目得到了可以谋生的岗位,这些开源项目竟然是开放和免费的。

有些人认为,做了一个成功开源项目,即使没有钱,也收获了名气。对我个人来说,我确实也通过做开源项目得到了非常多的机会,但是正是自己做过开源项目,才深知维护一个开源项目的成本不是靠「名气」就可以支撑起来的。

关于这个话题,强烈建议收听牛油果烤面包的这一集 Podcast: 《#70. 和Vue.js的创造者尤雨溪聊开源软件》

也可以读一读这本 Working in Public: The Making and Maintenance of Open Source Software, 里面有很多开源软件维护者面临的问题。

我们可以为开源做什么?

根据自己的经济情况,设立一个捐赠预算($1 也很不错),给自己生活中、工作中用到的开源工具进行捐赠。
和我一样写一篇文章介绍你对哪些项目进行了捐赠,鼓励更多的开发者对开源项目捐赠。
贡献有意义的 PR,即使只是文案的修改。

via Randy's Blog
做这个世界的生产者

偶尔看到这篇名叫 Consume less, create more 的文章,是作者从「消费者」转变为「生产者」的心路历程。他每天在巴士上面用 iPhone 写点什么,最终写出了这篇文章。

我从懂事开始就一直觉得自己在这个世界上与众不同,觉得自己的出生一定是背负了某个特殊的使命。后来发现原来每个人年轻的时候都是这么想的,随着年纪渐长,大多数人开始接受自己只是个普通人的事实。我也不例外。

但唯一没有变过的是我没有因为意识到了自己的平凡而停止了试图变得不平凡。其中的一个表现就是我希望在这个世界上,我是作为一个生产者存在的,而不只是一个消费者。

写博客、编程、做音乐都是我的生产,即使我写的博客没有让我成为几十万粉丝的 KOL, 我写的代码没有几万的 star, 唱的歌的观看数只是几百,我还是保持生产,因为对于这个世界,能让我有那么一点与众不同的是我的生产,而不是我的消费。

我讨厌抖音,不是因为它的内容,是因为它默默地把人驯化成了贪婪的信息消费者。如果我什么都不创造,那么我每天看 Hacker News 和别人每天刷抖音没有任何区别。

这个世界的每个人都是消费者,但不是每个人都是生产者。如果你也希望为这个世界留下点什么,就去创造,别担心你创造的是不是垃圾,只要创造了,是一定会有收获的。

via Randy's Blog
这个月我将离开阿里巴巴,结束至今 4 年的阿里生涯。

在阿里的 4 年我体验到非常多的东西,了解到了作为一个「职业程序员」的工作状态,认识了很多很靠谱的同事。尝试了一些东西,创造了一些东西,也吸收了一些东西。

我很幸运,这几年我遇到的老板都对我非常好。在 UC, 甄子给了我很大的自由度,让我得以在技术上做很多的探索 。在花呗,完颜和我一起做了很多次难忘的乐队演出。我很喜欢 花呗前端团队 ,这里的同事很有趣,在一起工作非常快乐,他们在面对复杂且繁忙的业务时展现的专业性是我难以企及的。

Why leave?

在大公司,成为一个优秀的业务型程序员要做的更不仅仅是理解业务需求。而我更擅长的是用技术解决效率问题、通过设计降低软件复杂度(Programming complexity)。但在业务 deadline 面前,这些仿佛是次要的。很少人有精力在 deadline 和加班面前能保持追求代码质量和软件设计,但这却是保证软件稳定和快速迭代的基础。为了快速上线而忽视代码质量的代价是很沉重的,但没人会指出这些技术债的根本原因就是太着急了,整个环节都太着急了。

我也不擅长画大图,把事情说得很宏大。阿里是一个很大的公司,有很多内部系统(所谓的「中台」)已经很完善,不是每个人都有机会遇到「大」问题。但是如果不做点什么大事,在阿里的仕途不会很顺利。所以我目睹了许多因为 KPI 和职级晋升产生的内耗。它潜移默化地使人做事变得功利,它就像一把声音在你做事的时候默默地提醒你:要把事情做大。

我从 Apple 和乔布斯身上理解到了在做同一件事时,不同的目的会导致做出来的东西天差地别。钱很重要,但如果乔布斯做产品的目的是钱而不是用户体验,那么 Apple 不会是今天的这个 Apple. 我认为做技术产品也是一样的道理,「做好」应该是目的。但能遇到适合「做大」的技术产品的场景是很靠运气的,在这样的情况下,绩效和晋升的压力会让人不得不把「做大」变成了目的,这就导致了:

简单的事情复杂化,增加使用者的理解成本( Cognitive Load
能使用现有的技术,偏要自己再做一套。由于「做大 -> 晋升」是目的,这样的产品有很大的机率在达成了目的后被放弃。
做事态度变成「能用就行」,不关心用户体验。

这样的做事方式不适合我,也违背了我做技术的理念。

What’s next

我还没有一个很确切的计划,但我希望能去一个地方,定义我价值的不仅仅是因为我用了多牛逼的技术,做了一个多大的「平台」,而是我用技术的手段,给用户创造了什么他们觉得有价值的东西,如何改进了用户体验。又或者我用技术解决了哪些效率问题。

更具体的目标是成为 Tech Lead 的角色。同时我对 Growth Hacking 有很大的兴趣,希望可以结合技术和数据找出产品增长的瓶颈、把产品做得更好,帮助产品实现增长。

我会回到广东,离开杭州。

Conclusion

离职不是什么苦大仇深的事,我对阿里没有任何的怨念,阿里有很多很好的地方,只不过不属于这篇文章要讨论的范围。无论在哪个地方,我想要的都是和一群有想法的人一起打磨一个有价值的产品,而不是不同职能的团队都只做对自己 KPI 有利的事。每个公司都有其独特的生存法则,但这个生存法则也应该让那些务实和纯粹的人能很好地生存下去。也许这就是我作为一个技术人的理想主义吧。

via Randy's Blog

Invalid media: image
说说 React 和 Vue

争论框架是个无聊的事情,有一天在开车的时候我突然想到选框架和选车是一样的。

React 就像手动挡,Vue 就像自动挡。你不能因为你会开手动挡就看不起开自动挡的,我想正常的驾驶员在城市代步都会选择开自动挡。我只想代个步,为什么不把复杂的事情交给变速箱呢。

当你要下赛道,你可能要选择手动档。因为你相信你的人脑比变速箱要聪明得多。你需要由你自己的大脑控制最重要的事 —— 赛车里是速度,软件开发是性能。useMemo 或者shouldComponentUpdate 就是你车里面的那根档棍。

用手动档的没有必要看不起用自动档的,人家根本不在意这车能不能开到极速,只想安心开开车顺便摸摸副驾驶的大腿;用自动档的也没必要在路上看到别人开手动档的就骂别人傻逼,人家一个老司机开手动档多年,可能从心智上开手动档开得跟你开自动档一样轻松,自己也享受手动档的乐趣。也有可能是因为他想开的车只有手动档的 —— 比如他因为想用 Ant.Design 所以选了 React.

就像选择自动 GC 和手动 GC 的语言,作为一个成年人,应该知道什么是 trade-off.

作为专业的程序员,更重要的是知道你面对的是赛道还是公路,你的伙伴到底会不会开手动档。

最怕的是硬要让只会开自动档的人开手动档的车,轻则红绿灯起步死火被疯狂按喇叭,重则…

via Randy's Blog
好产品帮助用户变得更好 - 读 Badass: Making Users Awesome

如何让用户愿意花钱购买你的软件 / 服务 ?

如果你也在思考这个问题,那么你一定要读一读 Kathy Sierra 写的 Badass: Making Users Awesome (中文译作《 用户思维+ 好产品让用户为自己尖叫 》)

想象一下,有一天,你看到有人在网上写了一篇如何记账和理财的文章,读罢,备受鼓舞,文章的作者在里面提到了如何用一个 App 高效做记账,于是你买下了这个 App.

背后驱使你买这个 App 的原因是什么?是因为你觉得这个 App 很不错?不,是因为你想成为那个善于理财的人。

这就是这本书的观点 —— 用户购买你的产品,他在意的是用了你的产品,他成为了什么样的人。所以,如何打造一个可以持续获得用户的产品,秘诀在于如何让用户通过你的产品成为他想成为的人。

这个观点让我耳目一新,我可以从自己或者从别人的购买行为看出这样的本质。我忽然发现,以往在思考如何打造一个用户觉得有价值的产品,我太专注在思考工具本身的功能应该怎么做,完全忽略了我的产品如何帮助我的目标用户变得更好。

例如,我总是在想着做一个博客平台,读完 Kathy 的这本书,我发现,我太过于思考从功能上,我要提供给用户什么。我想,我要提供 Podcast 托管,我要提供最快的 CDN, 我要支持自定义域名。但是,整个互联网,博客平台已经有很多,这些功能,别的平台可以提供。用户为什么选择我?

读完这本书,我会这样去思考:我如果做一个新的博客平台,用户可以因为我的平台,成为一个什么样的人?这样一来,问题就变成了:我的博客平台如何让用户成为一个优秀的独立博客主?我的博客平台如何让用户成为一个成功的 Podcast 节目主?

我们总是提供工具,但是往往忽略了如何让用户用好我们的工具,使他们变得 Awesome.

让用户用好我们的工具,是零经济成本但最有效的宣传工具。因为这一些 Badass User (通俗来说就是「玩得溜」的那些用户,我姑且称为「用家」),他们自己会帮你宣传。

当一个玩摄影的朋友告诉你,「这个镜头太牛逼了,你看我用它拍的这些照片,太好看了。」你可能会对这个镜头心动,晚上就回家搜一搜这个镜头,然后下单。

这位朋友嘴上说的是「这个 xx 太牛逼了,我用它 xxx」,事实上他想表达的是「我太牛逼了,我用它 xxx」。

只要你帮助你的用户通过你的产品变得更「牛逼」,就会有越来越多这些「用家」帮你宣传,就会有更多人购买你的产品,希望自己变得「牛逼」。也就是常说的「种草」。

然而他们宣传的方式不一定是直接跟身边的人说这个工具有多好,而是自己如何使用这个工具,做出了什么样的事。如果你有关注「少数派」这个媒体,少数派是这种案例的典型。你会发现上面几乎所有的文章,比如关于 Ulysses 这个 App 的文章,这些作者不会单纯去写这个工具怎么样,而是:

《为什么我选择用 Ulysses 写了一本小说》(我如何用 Ulysses 写了一本小说)
《搭建 Ulysses 学术写作之公式输入》(我如何用 Ulysses 学术写作)

越来越多的人会因为看到这些分享,希望自己可以用 Ulysses 也成为像他们这样成为一个写作者。

简单地来说,就是想一想,你的产品如何让你的用户在和朋友聊天的时候体现自己的 Awesome.

这本书也提到了在帮助用户成为「用家」的过程中遇到的问题以及解法,还从如果成为某个领域的专家作了一些科学上的分析(但我觉得这一部分的知识可以通过读 Atomic Habits 学到更多)。

我知道这本书是在翻 Egghead.io 的创始人 John Lindquist 的这条 Retweet无意中看到的,我觉得一定是本很好的书,他才会给每一个 Egghead 讲师送这本书。

我早在读 Egghead 的讲师指南的时候就发现 Egghead 会直接给每个讲师一套完整的录音设备(因为做 screencast 录音质量很重要)。我当时震惊于 Egghead 的阔绰。读完这本书,我就明白,即使需要成本,一套好的录音设备可以让这些用户(讲师)录制高质量的 screencast. 创始人就在践行这本书的理念。

注:本书的作者 Kathy Sierra 也是 Head First Java 的作者。

《 用户思维+ 好产品让用户为自己尖叫 》购买链接

via Randy's Blog
2019 年终总结:慢慢变成别人眼中「食古不化」的「怪人」

总结

2019 年 3 月我来到杭州,在蚂蚁金服开始了新的工作。这是我第一次在广东省外的地方生活。

新的环境,新的工作,对我来说是一个很大的挑战。挑战不在于如何适应一个新的环境,而在于在一个技术基建完备的环境里,如果业务难关不是技术可以解决的,那我的价值在哪里?在这个方面,我让很多对我抱有期望的人失望了。

「我的价值是什么」是我不断寻找答案的命题,我不满足只作为一个消费者活在世上。只有作为生产者创造自己独特的价值,才让我觉得自己是这个世界的一员。

我创造了很多,但好像只有写博客算是对别人来说稍微有价值的东西。现代的人又不怎么喜欢认真地看文字了,写好一篇文章的阅读量也不比同样内容的一个视频高。就连我一个关注了很久的独立博客博主,也转了型做视频。

「写博客」似乎已经是一件看上去「食古不化」的事,而我竟然越来越「食古不化」了。有时候到一家餐厅,被告知没有餐牌,只能扫码点餐,我会反问,「如果我没有手机呢?」。

我想,如果旁边正好有一位比我年轻十岁的客人听到我这样问,他心中也许会暗想,「x, 这个食古不化的傻x」。

今年下半年我又因为不能忍受国内社交网络的反智内容和评论,微信和微博都变成了只写的状态,除非收到消息,微信几乎不怎么打开。此举极大地改善了我的心理健康。但在别人眼里,就是一个不合群的怪人。

告别 2019,我就 25 岁了。这是一个不算年轻,也不算不年轻的岁数。如果开始「食古不化」是变老的征兆,那么我已经开始变老了。但如果不懒惰、不犬儒、不圆滑、不反智就是年轻,那么我将会永远年轻下去。

音乐

今年做了 6 首翻唱,上传在 YouTubeBilibili:

播放量最高的是《奉献》和《黄昏》。

阅读

今年读的书里有以下几本想推荐给大家:

《学会提问:批判式思维指南》(豆瓣 | 购买

《非暴力沟通》(豆瓣 | 购买

《颓废与沉默》(豆瓣 | 购买

消费

● Kindle Oasis ( 购买 ) 替换了我的 Kindle Paperwhite. 手感很好,放裤袋很轻松。是我今年买得最值的产品。
● 黑卡 3 ( 购买 ) 替换了我的黑卡 1, 有可以旋转的屏幕,自己拍视频的时候轻松多了。
● iPad Pro ( 我的评测 ) 替换了我的 iPad mini 2. 主要用来看微信读书,睡前浏览各个咨询网站。最后悔是没有买蜂窝版。

每天都看的内容

V2EX
Hacker News
端传媒
Podcast (睡前听)
Feedly (只订阅一些独立博客)
YouTube
Twitter
Instagram

放空的时候看的内容

少数派
数字尾巴

关于 2020

创造更多价值吧。

via Randy's Blog

Invalid media:
image
image
来自 2014 年给未来的我的一封信

这是一封 2014 年我写给未来的自己的信。当时在上大一,是上职业规划课时老师布置给我们的一个作业,写完我们就交给老师保存,他会在我们大学毕业后返还。

老师通过微信联系我说有封信在他那里,并拍了这张照片(图为我用 Office Lens 处理后)。我早已忘掉我曾写过这封信,看完后我就全记起来了。

记起来刚上大学时对未知的憧憬,记起来在教室听无聊的网页设计课,记起来退学那天给宿舍阿姨还了钥匙后坐上中巴回广州市区的时候听的那首《一路向北》。

via Randy's Blog

Invalid media: image
为什么无法坚持写博客

如果你被本文的标题吸引,那么你应该已经试过很多次雄心勃勃地开始选择你喜欢的静态网站生成器 (Static Site Generator), 然后精心挑选或者自行手写一个你钟意的主题,写下一篇题为 “Hello World” 的博客,宣称从今天起重新开始写博客。几个月后就再也不更新了。

为什么你总是无法坚持写博客?和很多「为什么无法坚持做某事」的问题一样,我们得先弄清楚为什么要写博客。

我听过很多人想建博客的理由是想把博客当成笔记本,记录自己学到的东西、遇到的问题和解决方法。这是一个让博客最终走向荒废的理由,因为你在笔记本就可以做到类似的事,除非你记录的问题有你自己独到的思考,否则网友们更愿意去看 StackOverflow.

写博客的第一个意义是让陌生人通过博客了解到你是什么人、你在想什么、你做了什么。不妨试想一下,如果你正准备找工作,一位素不相识的 HR 如果要了解你,光是一份简历就能让 HR 知道你的价值吗?如果你有一个精彩的博客,HR 也许能通过你的博客了解你对技术的属于自己的思考、你在业余时间在想的事情是什么。这比简历本身更像一份立体的简历。

以下是一些你可以选择的题材:

你对某个技术的看法
你读了某本书的书评
你职业之外的一些生活感悟和记录
你的对于生活、职业的哲学思考

这些题材的共同点是它们都是属于你的独特的内容。

当然,这一切的前提是你本身需要有一定的表达欲,你才会想不断地去写博客。博客只是其中一个表达渠道。我自己是一个很有表达欲的人,我乐意分享我的想法,我的生活。然而,试图通过建立博客去培养表达欲不是一个行之有效的方法,这就像很多本身不喜欢读书的人试图通过 Kindle 培养自己的读书习惯,大多数都是失败收场。你应该是因为喜欢读书所以买 Kindle, 正如你应该是想表达你的东西所以你写博客。

不是每个人都有表达欲,但很多有表达欲的人不敢表达,因为在担心一些不应该担心的问题。

文章没有深度

除非你的博客的定位就是追求思想深度,否则不必苛求每篇文章都有所谓的深度,有时候即使是日常生活的小记也有其价值,读者能从中发现很多自己不知道的东西。例如 JustZht一些生活小记 .

记得多年前我刚开始写博客的时候知道了罗磊和 罗磊的博客。虽然当时罗磊是一个前端工程师,但博客大多数文章都不是技术,而是一些数码产品和生活方式,例如 他跑马拉松的记录

这些内容没有所谓的「深度」,但让我看到了不同的生活方式。每个人都有自己独特的生活方式,不妨把它分享出来让更多人从中获得借鉴。

文章写不长

并非写长文章才叫写博客,李如一的 一天世界 也不见得每篇文章的篇幅都长,但内容有其独特的思维方式,也能引发思考。这就够了。

没什么人看

写独立博客和写公众号不同,你不必追求「十万加」。你要追求的是一个陌生人只要进入一个网站就能知道你是什么人。你不靠写博客吃饭。人们总说 You are what you read, 当人们无法得知你在读什么的情况下,那么我更要说: You are what you write.

文章写完,分享给你喜欢的圈子,论坛,回复一些评论。慢慢地就会在你的圈子积累一些读者。

做不到一直更新

JerryQu 的博客 已经两年没有更新,但两年后的现在依然可以说这是一个很好的博客。

你的博客不是资讯网站,不必在意更新频率。

希望本文可以引导各位潜在的博客作者决心建立自己的独立博客。独立博客有免于献媚的自由,有排版自由,有修改删除自己说了算的自由。维护一个有意义的博客不是一件难事,用现成的平台或用框架,在网站主页写上你的个人简介,然后保有分享生活和想法的习惯,不限篇幅,不限频率(即使是一年一篇),按时续费域名,保持网站正常访问,

记住,一个博客的死掉不是不再更新,而是无法访问。

延伸链接

中文独立博客列表

via Randy's Blog
我在 UC 做的前端工程化探索

我在 2016 年初加入 UC 的国际业务部,负责为 UC News 搭建运营后台。随着前端团队人数越来越多,我开始推动团队的前端技术栈统一以及前端工程化,开发了一个叫 Cans 用于快速搭建中后台前端应用的框架。直到了 2019 年我离开 UC, Cans 仍然服务于 UC 的国际业务。

本文主要记录了我如何从 UC News 运营后台孵化出这个内部框架,以及其背后的设计理念。虽然 Cans 没有开放源代码。但我认为相比这些工具的源码,那些我在开发这些工具背后的理念、思考,更有被分享的价值。也算作是对我在 UC 工作的一个总结。遂有此文。

----------------------

我们在做 UC News 运营后台的时候,面临的最大问题是:当有新的业务需要我们团队支撑开发一个新运营后台的时候,我们应该怎么做?

这种情况在不断地发生。2017 年我们的 UC News 运营后台趋于成熟,业务需求响应的速度在不断提高。越来越多业务方问我们同一个问题:「我们 xxx 业务想有一个运营后台,我们可以快速接入吗?」

如何让 UC News 运营后台的开发经验可以被快速地复制出去,帮助更多业务?在回答这个问题之前,我想先说说我是怎么设计 UC News 运营后台的前端工程以提高需求响应速度的。

第一点是保证业务开发尽量不被构建环节干扰,只须关注业务逻辑本身。这一点很好保证,因为构建配置基本是不需要更改的。

第二点是降低新页面接入的成本。所谓的成本指的是:

页面绑定对应的路由
在左侧菜单栏添加菜单项并指向对应的路由

我把这两点变成配置项,可以直接在项目里的 routes 文件配置。这样新页面接入只需配置菜单项的标题和路由,以及对应的页面组件即可。

第三点是规范项目目录结构。这一点我在 Egg 上受到很大的启发。在内部,我们的 Node.js 系统都使用 Egg. 我借鉴 Egg 把项目配置、路由配置、应用启动代码等作了规范:

要用这一套模式赋能更多不断冒出的新业务,首先要做的是统一。

在社区上做开源软件和做公司内部的软件不同,前者通常需要考虑兼容性。处理兼容性的代价是越来越复杂的配置项。但做内部软件,则可以通过「统一」简化配置(甚至无需配置)。例如,两个业务如果分别使用 less 和 sass, 那么在新建项目时,两个业务都要各自配置。相反,如果早已约定所有业务都使用 less, 那么 less 的配置可以固化到统一的工具里,两个业务都不需配置。

首先是技术栈的统一:

React
组件库:Ant.Design
构建工具:Webpack
语言:TypeScript
css 预编译:Less

技术栈的选型背后没有什么高深的思量,不过是这一套在 UC News 运营后台经过了考验:Ant.Design 的组件覆盖了 90% 的需求;纯 EcmaScript 写运营后台这种复杂应用是灾难,尤其在新人接手的时候;

技术栈的统一带来的是构建配置可以全部收敛,当然除了技术相关的工具,还有业务层面的工具可以统一收敛:

构建产物发布到 cdn
打点、错误监控的封装
网络请求库统一
i18n 方案统一

做好了这些统一的准备,我开始开发一个叫 Cans 的前端解决方案,它的宗旨是快速搭建中后台类的项目。

框架设计

「开箱即用,没有多余的东西」是我从 zeit.co 领会到的软件设计哲学。如果说一个框架设计得美,那么其实是说它用最简单且符合直觉的接口封装了最复杂的逻辑

和 next.js 一样,我希望开发者只要用 cans start 这一条命令,就能开始开发一个页面。

在最基本的应用,cans start 的背后会做这样的工作:

也就是收集所有运行时将要用到的数据,然后生成一个入口 js 文件。

另外,在构建中还引入了 tree shaking, code splitting (with react-loadable) 等等优化手段。

构建时分析的应用数据,可以在运行时、页面中通过 import app 实例来获取:

这种注入机制是为了提供扩展性,为了通过这种扩展性建立「生态」,Cans 引入了 addon 机制,以一个打点 addon 为例:

开发者可以在 npm 发布以 cans-addon- 为前缀的库贡献生态。

Cans 自带了一些业务常用的 addon:

cans-addon-cookies 通过app.cookies.getapp.cookies.set 读写 cookies
cans-addon-storage 通过app.storage 做离线数据持久化(如本地数据缓存)
cans-addon-http http 请求方法封闭

虽然中后台的布局千篇一律,但为了尽量覆盖所有定制化的需求,Cans 也开放了 theme, 开发者可以定制自己的主题,用 app.theme() 引入。也可以在 npm 上贡献主题。像我们最常用的运营后台 theme:

而在业务层,尽可能将可复用的业务组件封装出去,让更多业务可以使用。如 antd-data-table 这个业务组件,就是从 UC News 运营后台独立出来的。

以上是 Cans 这个框架的大概模样, 或有其它细节,但不是本文的重点。

在设计这个框架的时候,我无时无刻在考虑的是如何使开发者要写的代码越来越少,同时开放的接口是要符合开发者直觉的。就像「建立一个页面就是创建一个页面文件然后运行 cans start 一样简单。

几年前我读了《乔布斯传》,使我对用户体验有了极致的追求,也把这种追求带到了软件开发。这种体验不是一句 Simple is better 就可以说明的。你在同时面对一堆电路板和一台 Macintosh 的时候可能才会体会到所谓的「科技与人文的十字路口」,但,软件设计同样有这样的十字路口,它可能出现在一份完整、漂亮的文档(像 Vue), 可能出现在一个屏蔽了所有复杂细节 (and it just works!) 的命令(像 next.js), 可能出现在它的小而美,可以接入到任何地方。

后来蚂蚁金服发布了 Umi, 比 Cans 做得更全面,但两者的思路都如出一辙。我想这证明了这套模式背后的价值所在。最近看到《Umi 架构、生态和未来》 ,让我更确信当初的想法和 Umi 在做的是契合的。推荐各位在下一个项目可以试试 Umi.

记得有一次面试的时候,我提到我主要是做一些前端基建的工作,面试官问我,觉得什么样的前端基建是做得好的基建?我回答说,如果我做的基建可以让同事少加班,那么我做的基建就是好的

via Randy's Blog

Invalid media:
image
image
image
image
image
image
image
image
image
image
image
Back to Top