说说 React 和 Vue
争论框架是个无聊的事情,有一天在开车的时候我突然想到选框架和选车是一样的。
React 就像手动挡,Vue 就像自动挡。你不能因为你会开手动挡就看不起开自动挡的,我想正常的驾驶员在城市代步都会选择开自动挡。我只想代个步,为什么不把复杂的事情交给变速箱呢。
当你要下赛道,你可能要选择手动档。因为你相信你的人脑比变速箱要聪明得多。你需要由你自己的大脑控制最重要的事 —— 赛车里是速度,软件开发是性能。useMemo 或者shouldComponentUpdate 就是你车里面的那根档棍。
用手动档的没有必要看不起用自动档的,人家根本不在意这车能不能开到极速,只想安心开开车顺便摸摸副驾驶的大腿;用自动档的也没必要在路上看到别人开手动档的就骂别人傻逼,人家一个老司机开手动档多年,可能从心智上开手动档开得跟你开自动档一样轻松,自己也享受手动档的乐趣。也有可能是因为他想开的车只有手动档的 —— 比如他因为想用 Ant.Design 所以选了 React.
就像选择自动 GC 和手动 GC 的语言,作为一个成年人,应该知道什么是 trade-off.
作为专业的程序员,更重要的是知道你面对的是赛道还是公路,你的伙伴到底会不会开手动档。
最怕的是硬要让只会开自动档的人开手动档的车,轻则红绿灯起步死火被疯狂按喇叭,重则…
via Randy's Blog
争论框架是个无聊的事情,有一天在开车的时候我突然想到选框架和选车是一样的。
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
如何让用户愿意花钱购买你的软件 / 服务 ?
如果你也在思考这个问题,那么你一定要读一读 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 首翻唱,上传在 YouTube 和 Bilibili:
播放量最高的是《奉献》和《黄昏》。
阅读
今年读的书里有以下几本想推荐给大家:
《学会提问:批判式思维指南》(豆瓣 | 购买)
《非暴力沟通》(豆瓣 | 购买)
《颓废与沉默》(豆瓣 | 购买)
消费
● 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
总结
2019 年 3 月我来到杭州,在蚂蚁金服开始了新的工作。这是我第一次在广东省外的地方生活。
新的环境,新的工作,对我来说是一个很大的挑战。挑战不在于如何适应一个新的环境,而在于在一个技术基建完备的环境里,如果业务难关不是技术可以解决的,那我的价值在哪里?在这个方面,我让很多对我抱有期望的人失望了。
「我的价值是什么」是我不断寻找答案的命题,我不满足只作为一个消费者活在世上。只有作为生产者创造自己独特的价值,才让我觉得自己是这个世界的一员。
我创造了很多,但好像只有写博客算是对别人来说稍微有价值的东西。现代的人又不怎么喜欢认真地看文字了,写好一篇文章的阅读量也不比同样内容的一个视频高。就连我一个关注了很久的独立博客博主,也转了型做视频。
「写博客」似乎已经是一件看上去「食古不化」的事,而我竟然越来越「食古不化」了。有时候到一家餐厅,被告知没有餐牌,只能扫码点餐,我会反问,「如果我没有手机呢?」。
我想,如果旁边正好有一位比我年轻十岁的客人听到我这样问,他心中也许会暗想,「x, 这个食古不化的傻x」。
今年下半年我又因为不能忍受国内社交网络的反智内容和评论,微信和微博都变成了只写的状态,除非收到消息,微信几乎不怎么打开。此举极大地改善了我的心理健康。但在别人眼里,就是一个不合群的怪人。
告别 2019,我就 25 岁了。这是一个不算年轻,也不算不年轻的岁数。如果开始「食古不化」是变老的征兆,那么我已经开始变老了。但如果不懒惰、不犬儒、不圆滑、不反智就是年轻,那么我将会永远年轻下去。
音乐
今年做了 6 首翻唱,上传在 YouTube 和 Bilibili:
播放量最高的是《奉献》和《黄昏》。
阅读
今年读的书里有以下几本想推荐给大家:
《学会提问:批判式思维指南》(豆瓣 | 购买)
《非暴力沟通》(豆瓣 | 购买)
《颓废与沉默》(豆瓣 | 购买)
消费
● Kindle Oasis ( 购买 ) 替换了我的 Kindle Paperwhite. 手感很好,放裤袋很轻松。是我今年买得最值的产品。
● 黑卡 3 ( 购买 ) 替换了我的黑卡 1, 有可以旋转的屏幕,自己拍视频的时候轻松多了。
● iPad Pro ( 我的评测 ) 替换了我的 iPad mini 2. 主要用来看微信读书,睡前浏览各个咨询网站。最后悔是没有买蜂窝版。
每天都看的内容
● V2EX
● Hacker News
● 端传媒
● Podcast (睡前听)
● Feedly (只订阅一些独立博客)
● YouTube
放空的时候看的内容
● 少数派
● 数字尾巴
关于 2020
创造更多价值吧。
via Randy's Blog
Invalid media:
image
image
来自 2014 年给未来的我的一封信
这是一封 2014 年我写给未来的自己的信。当时在上大一,是上职业规划课时老师布置给我们的一个作业,写完我们就交给老师保存,他会在我们大学毕业后返还。
老师通过微信联系我说有封信在他那里,并拍了这张照片(图为我用 Office Lens 处理后)。我早已忘掉我曾写过这封信,看完后我就全记起来了。
记起来刚上大学时对未知的憧憬,记起来在教室听无聊的网页设计课,记起来退学那天给宿舍阿姨还了钥匙后坐上中巴回广州市区的时候听的那首《一路向北》。
via Randy's Blog
Invalid media: image
这是一封 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
如果你被本文的标题吸引,那么你应该已经试过很多次雄心勃勃地开始选择你喜欢的静态网站生成器 (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 一样,我希望开发者只要用
在最基本的应用,
也就是收集所有运行时将要用到的数据,然后生成一个入口 js 文件。
另外,在构建中还引入了 tree shaking, code splitting (with react-loadable) 等等优化手段。
构建时分析的应用数据,可以在运行时、页面中通过 import app 实例来获取:
这种注入机制是为了提供扩展性,为了通过这种扩展性建立「生态」,Cans 引入了 addon 机制,以一个打点 addon 为例:
开发者可以在 npm 发布以
Cans 自带了一些业务常用的 addon:
● cans-addon-cookies ● 通过
● cans-addon-storage ● 通过
● cans-addon-http ● http 请求方法封闭
虽然中后台的布局千篇一律,但为了尽量覆盖所有定制化的需求,Cans 也开放了 theme, 开发者可以定制自己的主题,用
而在业务层,尽可能将可复用的业务组件封装出去,让更多业务可以使用。如 antd-data-table 这个业务组件,就是从 UC News 运营后台独立出来的。
以上是 Cans 这个框架的大概模样, 或有其它细节,但不是本文的重点。
在设计这个框架的时候,我无时无刻在考虑的是如何使开发者要写的代码越来越少,同时开放的接口是要符合开发者直觉的。就像「建立一个页面就是创建一个页面文件然后运行
几年前我读了《乔布斯传》,使我对用户体验有了极致的追求,也把这种追求带到了软件开发。这种体验不是一句 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
我在 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.get
和 app.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
未来属于声明式编程
声明式编程 (Declarative Programming)是一种编程范式。现实世界中,我们大部分编码都是命令式的。
举个最常见的例子,对于用 JavaScript 来构建 UI, React 是声明式的。
所有的 DSL (HTML, XML, SQL) 都是声明式的,你写出一条 SQL 语句,只是为了告诉数据库你要什么,然后数据库就会给你对应的数据,而不是通过数据库的 API 去取。
Apple 在今年 (2019 年) 也推出了 Swift UI, 在 WWDC 的 Swift UI 相关的 Session 里也多次提到声明式 UI 开发的威力。
声明式编程的潜力在于:
解放人力成本,你只要「声明」你要做什么,具体怎么做,由运行时解决。
函数式编程就是声明式编程的一种,在函数式编程里的尾递归性能,就取决于运行时,而不是靠程序员去手动优化。React 里你只要描述你的 UI, 接下来状态变化后 UI 如何更新,是 React 在运行时帮你处理的,而不是靠程序员优化 diff 算法。
我们可以认为 Serverless (尤其是函数计算) 在运维领域获得了声明式的好处 —— 我们定义好了函数,我们只要告诉平台我们需要调用这个函数,那么如何进行计算资源分配、如何对代码做分布式部署,都不需要程序员考虑。
运行时帮你完成工作,除了可以节省人力成本外,还降低了程序员出错的概率 —— 因为写的代码越少,出错的概率就越小。人是最不可靠的,我们应该尽量把工作交给计算机。
「声明」是「描述」而不是真正「执行」
在纯函数式编程语言里面,一切都是声明式的,是纯 (Pure) 的,没有副作用(Side Effect)的。
Haskell 是一个纯函数式的语言,像在控制台输出文本这种方法(
Elm 和 Haskell 一样,副作用也只是返回一种类似 Haskell 中的 IO 类型。在 Elm 中叫做 Cmd.
以上说的这些,可能太过抽象。所以我用前端的同学们应该都知道的 redux-saga 对此作更具象的解释。也可以解答为什么我虽然不喜欢 Redux, 但认为 redux-saga 是一个的很不错的库。因为他利用 redux 的 middleware 机制和 generator 巧妙地实现了类似 Haskell 的 IO.
下面我将用 官方文档的例子 做解释。
比如,以下是一个有副作用的函数:
显然,
所以,事实上这个函数没有被命令式地被执行,而是由 redux-saga 决定如何执行。
如果你在外部直接调用
也就是说,你要测试的是「你有没有告诉程序你要执行的副作用,以及执行的参数是什么」。和命令式编程不同,因为命令式的程序在你执行函数时会真实地执行这个
所以,声明式的编程是非常易于测试的。
可视化编程是一种声明式编程
我们探索可视化编程,是因为我们一直期望通过拖拽就能完成开发,其实就是期望我们完成任务仅仅需要通过声明,而不是写命令式的代码。当然这是一种理想的状态。
DSL 是最常见的声明式编程形式。我一直在布道 GraphQL, 因为它把网络请求变得声明式了:
把网络请求变成声明式的好处有很多,其中一个就是它可以被放到各种各样的环境被执行。想象一下,我们可以打造一个可视化的应用搭建工具,在命令式编程的场景下,我们如果要做出如「点击按钮发送请求,得到响应后触发另一个 UI 更新」,就需要编写命令式的代码:
如果是 GraphQL, 我们可以把每一条 GraphQL 语句单独看作一个对象,他可以被任何组件触发,它的结果也可以被任何组件订阅。这样一来,在可视化的搭建工具里,程序员要做的是:
1. (声明式地)编写 GraphQL 查询语句
2. (声明式地)为组件(比如某个按钮)绑定 onClick 事件为触发某条查询语句
3. (声明式地)为组件(比如某个表格)绑定某条查询语句的响应值对应哪些组件的属性值
当然现实世界的应用不是那么简单,但已经是跨出了很大一步。
Conclusion
未来为什么属于声明式编程,因为我们在不断地努力提高开发效率,声明式编程显然是提效的最佳手段。React, Flutter, SwiftUI, GraphQL 的出现是最好的证明。最近听到内网太多人在提 Serverless, 我想说,提升开发效率,我们应该去想如何尽量让开发者声明式地编写代码,而不是只去想我们在 Serverless 上能做什么。
via Randy's Blog
Invalid media: image
声明式编程 (Declarative Programming)是一种编程范式。现实世界中,我们大部分编码都是命令式的。
举个最常见的例子,对于用 JavaScript 来构建 UI, React 是声明式的。
// 普通的 DOM API 构建 UI
const div = document.createElement('div')
const p = document.createElement('p')
p.textContent = 'hello world'
const UI = div.append(p)
// React 构建 UI
const h = React.craeteElement
const UI = h('div', null, h('p', null, 'hello world'))
所有的 DSL (HTML, XML, SQL) 都是声明式的,你写出一条 SQL 语句,只是为了告诉数据库你要什么,然后数据库就会给你对应的数据,而不是通过数据库的 API 去取。
SELECT * FROM Products WHERE name='Alipay'
Apple 在今年 (2019 年) 也推出了 Swift UI, 在 WWDC 的 Swift UI 相关的 Session 里也多次提到声明式 UI 开发的威力。
声明式编程的潜力在于:
解放人力成本,你只要「声明」你要做什么,具体怎么做,由运行时解决。
函数式编程就是声明式编程的一种,在函数式编程里的尾递归性能,就取决于运行时,而不是靠程序员去手动优化。React 里你只要描述你的 UI, 接下来状态变化后 UI 如何更新,是 React 在运行时帮你处理的,而不是靠程序员优化 diff 算法。
我们可以认为 Serverless (尤其是函数计算) 在运维领域获得了声明式的好处 —— 我们定义好了函数,我们只要告诉平台我们需要调用这个函数,那么如何进行计算资源分配、如何对代码做分布式部署,都不需要程序员考虑。
运行时帮你完成工作,除了可以节省人力成本外,还降低了程序员出错的概率 —— 因为写的代码越少,出错的概率就越小。人是最不可靠的,我们应该尽量把工作交给计算机。
「声明」是「描述」而不是真正「执行」
在纯函数式编程语言里面,一切都是声明式的,是纯 (Pure) 的,没有副作用(Side Effect)的。
Haskell 是一个纯函数式的语言,像在控制台输出文本这种方法(
putStrLn
)就是一种副作用。在 Haskell 里 putStrLn "Hello World"
本身不会真正地输出 “Hello World“, 而是返回一个 IO 类型,来说明他是一个副作用。但它如何被执行,取决于运行时。Elm 和 Haskell 一样,副作用也只是返回一种类似 Haskell 中的 IO 类型。在 Elm 中叫做 Cmd.
以上说的这些,可能太过抽象。所以我用前端的同学们应该都知道的 redux-saga 对此作更具象的解释。也可以解答为什么我虽然不喜欢 Redux, 但认为 redux-saga 是一个的很不错的库。因为他利用 redux 的 middleware 机制和 generator 巧妙地实现了类似 Haskell 的 IO.
下面我将用 官方文档的例子 做解释。
比如,以下是一个有副作用的函数:
import { call } from 'redux-saga/effects'
function* fetchProducts() {
const products = yield call(Api.fetch, '/products')
// ...
}
显然,
Api.fetch()
是副作用,它会发送网络请求。但是,在 redux-saga 里面,你不应该直接执行这个函数,而是使用 call
告诉 redux-saga —— 你要执行 Api.fetch
, 参数为 /products
.所以,事实上这个函数没有被命令式地被执行,而是由 redux-saga 决定如何执行。
如果你在外部直接调用
fetchProducts()
, 你会得到一个 Generator Iterator. 然后通过 next()
得到你 yield 的值。所以你可以这样去测试你的程序:const iterator = fetchProducts()
// expects a call instruction
assert.deepEqual(
iterator.next().value,
call(Api.fetch, '/products'),
"fetchProducts should yield an Effect call(Api.fetch, './products')"
)
也就是说,你要测试的是「你有没有告诉程序你要执行的副作用,以及执行的参数是什么」。和命令式编程不同,因为命令式的程序在你执行函数时会真实地执行这个
Api.fetch
,你必须用测试框架里类似 mockFn
的手段去 mock 这个函数进行测试。fetchProducts()
只有在 Redux 环境里,才会真正地执行副作用(在这里就是 Api.fetch 发送的网络请求)。所以,声明式的编程是非常易于测试的。
可视化编程是一种声明式编程
我们探索可视化编程,是因为我们一直期望通过拖拽就能完成开发,其实就是期望我们完成任务仅仅需要通过声明,而不是写命令式的代码。当然这是一种理想的状态。
DSL 是最常见的声明式编程形式。我一直在布道 GraphQL, 因为它把网络请求变得声明式了:
query {
posts {
id, title, content
}
}
把网络请求变成声明式的好处有很多,其中一个就是它可以被放到各种各样的环境被执行。想象一下,我们可以打造一个可视化的应用搭建工具,在命令式编程的场景下,我们如果要做出如「点击按钮发送请求,得到响应后触发另一个 UI 更新」,就需要编写命令式的代码:
async function onClickButton() {
// 手动发送请求
const result = await fetch('/api')
// 手动更新 UI
table.dataSource = result
}
如果是 GraphQL, 我们可以把每一条 GraphQL 语句单独看作一个对象,他可以被任何组件触发,它的结果也可以被任何组件订阅。这样一来,在可视化的搭建工具里,程序员要做的是:
1. (声明式地)编写 GraphQL 查询语句
2. (声明式地)为组件(比如某个按钮)绑定 onClick 事件为触发某条查询语句
3. (声明式地)为组件(比如某个表格)绑定某条查询语句的响应值对应哪些组件的属性值
当然现实世界的应用不是那么简单,但已经是跨出了很大一步。
Conclusion
未来为什么属于声明式编程,因为我们在不断地努力提高开发效率,声明式编程显然是提效的最佳手段。React, Flutter, SwiftUI, GraphQL 的出现是最好的证明。最近听到内网太多人在提 Serverless, 我想说,提升开发效率,我们应该去想如何尽量让开发者声明式地编写代码,而不是只去想我们在 Serverless 上能做什么。
via Randy's Blog
Invalid media: image
井底之蛙的一片天空
有次和朋友提到移民的想法,他说,为什么不考虑日本呢?我的回答是,我对日本没有特别的情感。朋友说他正相反。然后他问道:难道你的童年没有看日本动画吗?
我的童年除了阅读,大部分信息的获取来源于电视机。我从电视机看过的日本动画不少 —— 在 CCTV 少儿频道看《四驱兄弟》,在 TVS (南方卫视) 看《哆啦 A 梦》,在华娱卫视《通灵王》、《军曹》,在本港台看《游戏王》,在翡翠台又看了不计其数的,就不一一列举。
我从这些动画片里感受不出日本文化,一是因为都是中文的配音,二是基本上我看的都是虚构类作品,无法从中了解到日本的文化生活。只有翡翠台偶尔播出一些配音的日本真人电视节目,让我了解到日本的街道和风景是如此模样,但仅此而已。
不过我却很能理解我的那位朋友,因为我对另一片土地 —— 香港 —— 有一样的感受。
电视机把我和香港的距离拉得很近。白天有「卡通片」,傍晚有儿童节目,每晚六点半,可以看《六点半新闻报道》,知道香港、国际在发生的事。7点半后,有《东张西望》看娱乐新闻。紧接下来就是八点档和九点档的电视剧。
我是看香港电视剧和电影、听「广东歌」长大的。聊起亚视的「柒事」,我们一样会大笑。现在不看电视,但还有 YouTube. 走在香港街头,我一个广东人,和香港人又有什么太大的区别呢。
最大的区别可能是,我很羡慕香港人。香港人可以有不同的政见,可以自由表达自己的观点,有权发声争取自己(或别人)应有的权利,可以大声对别人讲:「香港系有言论自由咖」!不用担心「讲错嘢」。而我不能。
香港不能失去这些。我愿意在这样的地方生活。香港是我的精神家园。
撇开身份认同,在政治上,香港回归早已经是国际社会公认的。我自己作为中国人,一直为中国有这样的香港感到庆幸。因为这代表中国人还能有另一种作为中国人的方式。
而我,很惭愧,虽同讲广东话,但在内地,也只不过是一只知道自己是井底之蛙的井底之蛙罢了。
王小波说「井底之蛙也拥有一片天空」,对我来说,这片天空就是香港。
衷心祝福香港。
via Randy's Blog
有次和朋友提到移民的想法,他说,为什么不考虑日本呢?我的回答是,我对日本没有特别的情感。朋友说他正相反。然后他问道:难道你的童年没有看日本动画吗?
我的童年除了阅读,大部分信息的获取来源于电视机。我从电视机看过的日本动画不少 —— 在 CCTV 少儿频道看《四驱兄弟》,在 TVS (南方卫视) 看《哆啦 A 梦》,在华娱卫视《通灵王》、《军曹》,在本港台看《游戏王》,在翡翠台又看了不计其数的,就不一一列举。
我从这些动画片里感受不出日本文化,一是因为都是中文的配音,二是基本上我看的都是虚构类作品,无法从中了解到日本的文化生活。只有翡翠台偶尔播出一些配音的日本真人电视节目,让我了解到日本的街道和风景是如此模样,但仅此而已。
不过我却很能理解我的那位朋友,因为我对另一片土地 —— 香港 —— 有一样的感受。
电视机把我和香港的距离拉得很近。白天有「卡通片」,傍晚有儿童节目,每晚六点半,可以看《六点半新闻报道》,知道香港、国际在发生的事。7点半后,有《东张西望》看娱乐新闻。紧接下来就是八点档和九点档的电视剧。
我是看香港电视剧和电影、听「广东歌」长大的。聊起亚视的「柒事」,我们一样会大笑。现在不看电视,但还有 YouTube. 走在香港街头,我一个广东人,和香港人又有什么太大的区别呢。
最大的区别可能是,我很羡慕香港人。香港人可以有不同的政见,可以自由表达自己的观点,有权发声争取自己(或别人)应有的权利,可以大声对别人讲:「香港系有言论自由咖」!不用担心「讲错嘢」。而我不能。
香港不能失去这些。我愿意在这样的地方生活。香港是我的精神家园。
撇开身份认同,在政治上,香港回归早已经是国际社会公认的。我自己作为中国人,一直为中国有这样的香港感到庆幸。因为这代表中国人还能有另一种作为中国人的方式。
而我,很惭愧,虽同讲广东话,但在内地,也只不过是一只知道自己是井底之蛙的井底之蛙罢了。
王小波说「井底之蛙也拥有一片天空」,对我来说,这片天空就是香港。
衷心祝福香港。
via Randy's Blog
人生是不断取舍的过程
如果问工作以来我悟出的最重要的观念是什么,那就是,人生是一个不断取舍的过程。
我们总是在作自己未来的规划和目标的时候说,我想要什么,而忽略了问自己一个问题,「我愿意为此舍弃点什么」。我们逃避了残酷的事实 —— 我们每天只有 24 小时,我们什么都想要,但这是不可能的。
意识到这一点,有利于我们做很多的决策,而且对很多让你感到可惜的事都释怀了。
有人总是会在年初列下自己的读书清单,但直到年底,发现自己一本都没有读完。这是很多人懊恼和焦虑的来源 —— 为什么我总是无法履行自己的规划?
过去我总会把原因归咎于没有做好时间管理,但后来我顿悟了,在列下读书清单时,并没有问自己这样的问题 —— 你愿意为读书带来的精神收益,而舍弃点什么?
如果你在制定任何规划时都这样问自己,那么,你就会在每一次决策前明确这一点:这件事于你而言到底有多重要?如果阅读于你而言比看美剧重要,你就要作出取舍:把你看美剧的时间,花在阅读上。
如果你认为做得到,那么就让它正式成为你的规划。如果你做不到,那么就不要让它成为你的规划。何必为自己制定一个无法完成的计划呢?它除了为你带来无意义的焦虑,无一用处。
宁愿看美剧而放弃阅读并不可耻,活得明白是最重要的。只要这是你权衡后作出的取舍,那么你就不会为此而感到焦虑。
我在《健身一年》里提到,一年前我下定决心开始健身,当时我问自己:我能为健身舍弃什么?
健身需要耗费每周四天每次 2 小时的时间,这些时间我可以用来写代码,做音乐,阅读。我愿意舍弃他们吗?
经过权衡后,我决定舍弃他们。于是我获得了一些健身的成果,同时我再也不为放弃了大量的阅读、写代码、做音乐的时间而焦虑。因为我早就知道,如果我想要获得健身的成果,这些是必须放弃的。
不必为「我没有时间 xxx」而感到可惜,因为你没时间做的事,不过是在为你更想做的事让路而已。(除非你把时间都花在偷懒上)
每个人有不同的活法,对待事件的优先级也不尽相同。只要认识到「吾生也有涯」的局限,你就可以从每一年底的「责怪自己没有做到什么」转变成「为自己做到了什么而感到高兴」。人生因此也变得简单得多 —— 你只要保证自己不是在虚度光阴即可。
就像即使我现在惧怕婚姻,若是将来某一天也选择了婚姻,那一定是比起婚姻让我失去的,我更想得到婚姻给我带来的。
via Randy's Blog
如果问工作以来我悟出的最重要的观念是什么,那就是,人生是一个不断取舍的过程。
我们总是在作自己未来的规划和目标的时候说,我想要什么,而忽略了问自己一个问题,「我愿意为此舍弃点什么」。我们逃避了残酷的事实 —— 我们每天只有 24 小时,我们什么都想要,但这是不可能的。
意识到这一点,有利于我们做很多的决策,而且对很多让你感到可惜的事都释怀了。
有人总是会在年初列下自己的读书清单,但直到年底,发现自己一本都没有读完。这是很多人懊恼和焦虑的来源 —— 为什么我总是无法履行自己的规划?
过去我总会把原因归咎于没有做好时间管理,但后来我顿悟了,在列下读书清单时,并没有问自己这样的问题 —— 你愿意为读书带来的精神收益,而舍弃点什么?
如果你在制定任何规划时都这样问自己,那么,你就会在每一次决策前明确这一点:这件事于你而言到底有多重要?如果阅读于你而言比看美剧重要,你就要作出取舍:把你看美剧的时间,花在阅读上。
如果你认为做得到,那么就让它正式成为你的规划。如果你做不到,那么就不要让它成为你的规划。何必为自己制定一个无法完成的计划呢?它除了为你带来无意义的焦虑,无一用处。
宁愿看美剧而放弃阅读并不可耻,活得明白是最重要的。只要这是你权衡后作出的取舍,那么你就不会为此而感到焦虑。
我在《健身一年》里提到,一年前我下定决心开始健身,当时我问自己:我能为健身舍弃什么?
健身需要耗费每周四天每次 2 小时的时间,这些时间我可以用来写代码,做音乐,阅读。我愿意舍弃他们吗?
经过权衡后,我决定舍弃他们。于是我获得了一些健身的成果,同时我再也不为放弃了大量的阅读、写代码、做音乐的时间而焦虑。因为我早就知道,如果我想要获得健身的成果,这些是必须放弃的。
不必为「我没有时间 xxx」而感到可惜,因为你没时间做的事,不过是在为你更想做的事让路而已。(除非你把时间都花在偷懒上)
每个人有不同的活法,对待事件的优先级也不尽相同。只要认识到「吾生也有涯」的局限,你就可以从每一年底的「责怪自己没有做到什么」转变成「为自己做到了什么而感到高兴」。人生因此也变得简单得多 —— 你只要保证自己不是在虚度光阴即可。
就像即使我现在惧怕婚姻,若是将来某一天也选择了婚姻,那一定是比起婚姻让我失去的,我更想得到婚姻给我带来的。
via Randy's Blog
我在学校学到的东西
今年身边的朋友陆陆续续毕业出来工作了,偶尔有机会的时候会聚在一起聊聊,然后谈到各自的就业情况。我发现有很多朋友还不知道自己想从事的职业是什么,因此也不知道自己未来会怎么样,先做着现在能做的。
因为我的经历特殊,有人也会对我开玩笑说真不知道读书有什么用,还不如早点出来工作。我知道以我朋友的受教育程度来说,这肯定只是玩笑,他们不可能是「读书无用论」者,所以我也会附和着笑。
虽然这只是句玩笑话,但是确实令我回顾了一下我从我的在校生涯中得到了什么东西。
我首先想到的是英语。我的小学是从一年级开始就有英语的课程,所以我接触英语的时间很早。我自认小学四年级以前我还是个很乖的学生,上课认真听讲,作业按时完成。所以我的语数英成绩都很不错。从小培养了「语感」,使得我一直以来可以低障碍地读写英文。这对我的编程学习、职业生涯都有很大的意义。懂英文让我可以亲自融入整个开源社区、技术社区,可以直接在 YouTube 听别人在 Conference 的 Talks, 吸取别人的思想。而不是等别人翻译过来。我认为能低障碍地读写英语是技术人成长很重要的条件。
尽管我对现阶段的英语教育方式仍然存疑,我还是认为在基础教育里,英语是必不可少的。
我的价值观和人生观,是我于在校生涯之中建立的。不过不要误会,这些都不是学校的课程直接赋予我的,而是学校这个「象牙塔」,让我可以有充分的时间去读书、学习和思考。我虽然在班上是「差生」,但我敢说我是最爱学习和读书的。这句话要是被我当年的老师看到,估计他要笑个半死,但这是事实,不可否认。我在学校不用供车供房工作赚钱,我可以把一整天的时间花在读书上,我在我读的所有书里懂得了我应该成为一个什么样的人、我应该努力让自己拥有什么样的品格才能算是一个「好人」。
另外,我很多技术书籍都是在学校读的,比如《JavaScript 高级程序设计》,我读了很多遍。不是我自己想读那么多遍,而是当时我带回学校的就只有这一本书,我一个月才回家一次。那一个月我只能天天都读他。这本书我每读一遍都有新的发现。
出来工作以后我还能像这样把一本好书读这么多遍又读这么认真吗?可以,但是很难了。
我高中的时候,最喜欢上语文课。语文课本选的文章其实挺好的,比如说有《棋王》,以及很多《古文观止》里面的文言散文。偶尔发个新试卷,我也很开心,因为一张语文试卷有两篇阅读理解。我高中读的很多书,都是在试卷里和练习册里发现的,新的练习册一发下来,我就把所有的阅读理解都看一遍,看到哪篇我觉得不错的,我就看是节选哪本书,然后就去图书馆借回来。另外,写作文大概是我在学校里唯一的思考输出的方式了,因此我很珍惜每次写作文的机会,我把自己的所思所想全写进文章,以至于每次都很低分,因为离题万里。我的语文老师对我很包容,他知道我想什么,我很感谢他。
有人会说,你把学校说得那么好,你自己怎么就辍学了呢。
我认为,一个人在结束学校生涯以前,必须先弄清楚两个问题。一个是,**在离开学校以后,你在社会上是以一个什么样的角色存在?**另一个是,**你是否已经为迎接这个角色做好了充分准备?**学校的意义就是给你时间想清楚问题一,然后给你条件完成问题二。
我在学校里,早已弄明白了这两个终极问题。我在社会上,将会以软件工程师的角色存在,并且我已经有能力胜任这个职位。往小的说,我能为我所在的公司创造价值,往大的说,我要为整个社区作出贡献。所以(在一所不怎么样的)大学对我来说已经不那么重要了,我希望早点投身社会创造价值。
很多人就是因为在学校的时候从来不思考这两个问题,所以是「光着身」离开学校的。你是想创造价值,还是想做着不喜欢的工作然后满足于 奶头乐 ,其实都由你自己决定。
以上,就是我在学校学到的东西。
延伸阅读
● 《科学的方法, 公正的态度,果断的决心》--- 竺可桢
via Randy's Blog
今年身边的朋友陆陆续续毕业出来工作了,偶尔有机会的时候会聚在一起聊聊,然后谈到各自的就业情况。我发现有很多朋友还不知道自己想从事的职业是什么,因此也不知道自己未来会怎么样,先做着现在能做的。
因为我的经历特殊,有人也会对我开玩笑说真不知道读书有什么用,还不如早点出来工作。我知道以我朋友的受教育程度来说,这肯定只是玩笑,他们不可能是「读书无用论」者,所以我也会附和着笑。
虽然这只是句玩笑话,但是确实令我回顾了一下我从我的在校生涯中得到了什么东西。
我首先想到的是英语。我的小学是从一年级开始就有英语的课程,所以我接触英语的时间很早。我自认小学四年级以前我还是个很乖的学生,上课认真听讲,作业按时完成。所以我的语数英成绩都很不错。从小培养了「语感」,使得我一直以来可以低障碍地读写英文。这对我的编程学习、职业生涯都有很大的意义。懂英文让我可以亲自融入整个开源社区、技术社区,可以直接在 YouTube 听别人在 Conference 的 Talks, 吸取别人的思想。而不是等别人翻译过来。我认为能低障碍地读写英语是技术人成长很重要的条件。
尽管我对现阶段的英语教育方式仍然存疑,我还是认为在基础教育里,英语是必不可少的。
我的价值观和人生观,是我于在校生涯之中建立的。不过不要误会,这些都不是学校的课程直接赋予我的,而是学校这个「象牙塔」,让我可以有充分的时间去读书、学习和思考。我虽然在班上是「差生」,但我敢说我是最爱学习和读书的。这句话要是被我当年的老师看到,估计他要笑个半死,但这是事实,不可否认。我在学校不用供车供房工作赚钱,我可以把一整天的时间花在读书上,我在我读的所有书里懂得了我应该成为一个什么样的人、我应该努力让自己拥有什么样的品格才能算是一个「好人」。
另外,我很多技术书籍都是在学校读的,比如《JavaScript 高级程序设计》,我读了很多遍。不是我自己想读那么多遍,而是当时我带回学校的就只有这一本书,我一个月才回家一次。那一个月我只能天天都读他。这本书我每读一遍都有新的发现。
出来工作以后我还能像这样把一本好书读这么多遍又读这么认真吗?可以,但是很难了。
我高中的时候,最喜欢上语文课。语文课本选的文章其实挺好的,比如说有《棋王》,以及很多《古文观止》里面的文言散文。偶尔发个新试卷,我也很开心,因为一张语文试卷有两篇阅读理解。我高中读的很多书,都是在试卷里和练习册里发现的,新的练习册一发下来,我就把所有的阅读理解都看一遍,看到哪篇我觉得不错的,我就看是节选哪本书,然后就去图书馆借回来。另外,写作文大概是我在学校里唯一的思考输出的方式了,因此我很珍惜每次写作文的机会,我把自己的所思所想全写进文章,以至于每次都很低分,因为离题万里。我的语文老师对我很包容,他知道我想什么,我很感谢他。
有人会说,你把学校说得那么好,你自己怎么就辍学了呢。
我认为,一个人在结束学校生涯以前,必须先弄清楚两个问题。一个是,**在离开学校以后,你在社会上是以一个什么样的角色存在?**另一个是,**你是否已经为迎接这个角色做好了充分准备?**学校的意义就是给你时间想清楚问题一,然后给你条件完成问题二。
我在学校里,早已弄明白了这两个终极问题。我在社会上,将会以软件工程师的角色存在,并且我已经有能力胜任这个职位。往小的说,我能为我所在的公司创造价值,往大的说,我要为整个社区作出贡献。所以(在一所不怎么样的)大学对我来说已经不那么重要了,我希望早点投身社会创造价值。
很多人就是因为在学校的时候从来不思考这两个问题,所以是「光着身」离开学校的。你是想创造价值,还是想做着不喜欢的工作然后满足于 奶头乐 ,其实都由你自己决定。
以上,就是我在学校学到的东西。
延伸阅读
● 《科学的方法, 公正的态度,果断的决心》--- 竺可桢
via Randy's Blog
多研究些问题,少谈些框架
当我问应聘者「你有什么问题想问」的时候,大多数应聘者会问我前端应该怎么学。我每次都会很真诚地按照面试过程对他们的了解尝试给他们一些建议。从多次的交流当中,我倒是慢慢地了解到了前端领域里很多普遍的问题。
前端有很多不同的框架和库。 我上大一的时候,有一门课叫网页设计,前几个课时教 HTML, 又教一个课时 CSS, 再教一个课时 JavaScript. 然后是 jQuery. 当时我很气愤,学生连 DOM 是什么都还没搞清楚,就要他们用 jQuery,这不是误人子弟吗。我后来想明白,学校大概已经把 jQuery 看作是饭碗了。
把库和框架看作饭碗是无可厚非的, 我们不能苛刻地要求所有程序员都对软件开发抱有发自内心的热爱。但是急功近利地学习框架,绝对是举步维艰的。胡适说「多研究些问题,少谈些主义」,在编程上,我认为需要多研究些问题,少谈些框架。
框架是我们达到目的的便捷手段,我们使用 React, 更要知道为什么使用它?它的本质是什么?它解决了什么问题?所谓「格物致知」,不「格物」,如何「致知」呢?
via Randy's Blog
当我问应聘者「你有什么问题想问」的时候,大多数应聘者会问我前端应该怎么学。我每次都会很真诚地按照面试过程对他们的了解尝试给他们一些建议。从多次的交流当中,我倒是慢慢地了解到了前端领域里很多普遍的问题。
前端有很多不同的框架和库。 我上大一的时候,有一门课叫网页设计,前几个课时教 HTML, 又教一个课时 CSS, 再教一个课时 JavaScript. 然后是 jQuery. 当时我很气愤,学生连 DOM 是什么都还没搞清楚,就要他们用 jQuery,这不是误人子弟吗。我后来想明白,学校大概已经把 jQuery 看作是饭碗了。
把库和框架看作饭碗是无可厚非的, 我们不能苛刻地要求所有程序员都对软件开发抱有发自内心的热爱。但是急功近利地学习框架,绝对是举步维艰的。胡适说「多研究些问题,少谈些主义」,在编程上,我认为需要多研究些问题,少谈些框架。
框架是我们达到目的的便捷手段,我们使用 React, 更要知道为什么使用它?它的本质是什么?它解决了什么问题?所谓「格物致知」,不「格物」,如何「致知」呢?
via Randy's Blog
2017 年终总结
Preface
我的 2017 过得很平淡,可能是因为出来工作已经是第二年了。
今年比较特别的是身边的朋友都大四了,参加了一些毕业拍照。大家都陆陆续续地开始找工作,面试。偶尔在朋友圈看到朋友拿到 offer, 也会替他们感到开心。
有很多朋友开始请教我一些出来工作的经验,面试的技巧、offer 怎么选择、租房的经验等等。被问到这些问题的时候我也会很开心。因为以前上学的时候,学业成绩不好,我在班上除了搞搞笑,对身边的同学来说并没有多大的「用处」。
4 月份的时候上台拿了 16 年的优秀新人奖,但是 17 年整一年没有做出很出色的成绩。慢慢失落地发现在很多事情上,技术并不是那么重要,它只不过是一种手段而已。
在年底,和 @EGOIST 一起创办了 StickerOverflow. 成功地让国内的开发者能买到高质量的技术贴纸。
今年想得比较多的是应该如何用自己的能力去帮助更多的人。想过去做培训,想过回大学给以前班的人开个交流会,想过写书。最后都搁置了,因为我后来发现,「助人」有时是一件很一厢情愿的事。
除了技术外,这一年有很多新的尝试,上台唱歌纪念张国荣,参加了唱歌的比赛,做了一期音乐电台节目。在新的一年,还想尝试去经营一个音乐博客,让更多人发现被忽略的优秀粤语流行音乐和歌手。
新年计划
2018 年的计划是多写写代码,多玩玩音乐,读更多书,换一间大些的房子,买一辆车。
有次和朋友聊天,她说,你知道自己想要做什么,又能把它做到,还能靠它养活自己。你千万不能变得世俗啊,如果你也变得世俗,我会觉得这个世界,真的就是那样了。
via Randy's Blog
Invalid media:
image
image
Preface
我的 2017 过得很平淡,可能是因为出来工作已经是第二年了。
今年比较特别的是身边的朋友都大四了,参加了一些毕业拍照。大家都陆陆续续地开始找工作,面试。偶尔在朋友圈看到朋友拿到 offer, 也会替他们感到开心。
有很多朋友开始请教我一些出来工作的经验,面试的技巧、offer 怎么选择、租房的经验等等。被问到这些问题的时候我也会很开心。因为以前上学的时候,学业成绩不好,我在班上除了搞搞笑,对身边的同学来说并没有多大的「用处」。
4 月份的时候上台拿了 16 年的优秀新人奖,但是 17 年整一年没有做出很出色的成绩。慢慢失落地发现在很多事情上,技术并不是那么重要,它只不过是一种手段而已。
在年底,和 @EGOIST 一起创办了 StickerOverflow. 成功地让国内的开发者能买到高质量的技术贴纸。
今年想得比较多的是应该如何用自己的能力去帮助更多的人。想过去做培训,想过回大学给以前班的人开个交流会,想过写书。最后都搁置了,因为我后来发现,「助人」有时是一件很一厢情愿的事。
除了技术外,这一年有很多新的尝试,上台唱歌纪念张国荣,参加了唱歌的比赛,做了一期音乐电台节目。在新的一年,还想尝试去经营一个音乐博客,让更多人发现被忽略的优秀粤语流行音乐和歌手。
新年计划
2018 年的计划是多写写代码,多玩玩音乐,读更多书,换一间大些的房子,买一辆车。
有次和朋友聊天,她说,你知道自己想要做什么,又能把它做到,还能靠它养活自己。你千万不能变得世俗啊,如果你也变得世俗,我会觉得这个世界,真的就是那样了。
via Randy's Blog
Invalid media:
image
image
高中时的地下刊物
一个月前一位初中朋友 Bunny 发了一篇 《年少的文字》,讲起了初中的我们搞地下刊物的事,让我想起了那段时间这本刊物的一些点滴。
这份刊物叫《新视觉》。当年要做这份刊物,是因为那段时间,我读了很多民国时期的文学作品,还读了李开复的那本《世界因你而不同》,使我开始对政治、教育有了不一样的看法。
当时的我认为文字只有背负了政治的责任,才能称得上文学。所以看不起很多「当代文学」。我对当代文学的定义是 —— 1990 年以后出现的文学。
班里一个女性朋友很喜欢郭敬明,我却对此嗤之以鼻。于是我给我朋友传教似地讲了很多诸如为什么我们需要关心政治、我们应该读些什么书、我们需要什么样的教育等等这样的话题。但是她不以为然,认为我越俎代疱。
我想,我应该做一份刊物,来传达我的理念。因为「不识字的上人的当,识字的的上印刷品的当」。
就这样,我拿了一沓我们学校标准的信签纸,开始做了起来。我把这份刊物叫做《新视觉》,是源于白话文运动时,陈独秀所创的《新青年》。我认为这份刊物的目标,是为了提倡新思想,以摘抄严肃文学作品的形式,启发班上的同学,应该从现在起,去寻找自己的目标,自己想要的是什么,未来想做的是什么。而不是把所有时间,都花在试卷和娱乐上。
为了传达这份理念,我在首期的《新视觉》的第一页,认真地誊写了 Robert Frost 那首诗 —— The Road Not Taken.
我现在已经记不清当时摘抄了哪些具体的文字了,只记得抄过王小波、李敖、韩寒、胡适等等。
这份全手写的刊物开始在班上互相传阅,并不是因为内容深刻,而是因为形式新鲜罢了。我为了这份刊物可以维持下去,「聘请」了上文提到的女同学作为编辑,也接受所有同学的来稿。
接受同学的来稿后,刊物渐渐成了班级的一部分,甚至每一期都会有人催我「出版」。当时的「出版」形式,则是收集来稿,用钉书机装钉成册。
同学的来稿很有意思,有人开始做起了小说连载。而我还是做一些摘抄,顺便构思一些虚构类的讽刺文章。同时 Bunny 开始把手写的刊物改革成了真正的印刷品——每周回家录入然后打印出来。
因为刊物带有媒体属性,班级上一些事件也会被刊登到里面去。例如校运会,我们做了一份校运会特刊,报道了校运会的情况、现场照片。
虽然刊物在班上火了,但我并不是太开心,因为这本刊物慢慢偏离了我的初衷。我向 Bunny 提出要做一本《新视觉》的子刊物,就叫做「16 度」(我们是 16 班),把小说连载、读者来信这些内容都放到里面,《新视觉》只做严肃文学。
于是 Bunny 开始打造《16 度》,而我继续负责《新视觉》。发展到后来,《16 度》其实有很多地方和《最小说》变得很相似,是同学们饭后的话题、减缓考试压力的地方。很多人在上面连载小说。不生产的内容的,也会来留言,说自己对某篇文章的读后感。而这份带有意识形态的《新视觉》很快就没有再连续出版下去了。
以上是我对这份刊物仅剩的几乎所有回忆,手写的稿早就在初中一次搬课室的过程中丢失了。谁会想到这些东西未来会被这样津津乐道呢。这确实是一个遗憾。
via Randy's Blog
Invalid media:
image
image
image
一个月前一位初中朋友 Bunny 发了一篇 《年少的文字》,讲起了初中的我们搞地下刊物的事,让我想起了那段时间这本刊物的一些点滴。
这份刊物叫《新视觉》。当年要做这份刊物,是因为那段时间,我读了很多民国时期的文学作品,还读了李开复的那本《世界因你而不同》,使我开始对政治、教育有了不一样的看法。
当时的我认为文字只有背负了政治的责任,才能称得上文学。所以看不起很多「当代文学」。我对当代文学的定义是 —— 1990 年以后出现的文学。
班里一个女性朋友很喜欢郭敬明,我却对此嗤之以鼻。于是我给我朋友传教似地讲了很多诸如为什么我们需要关心政治、我们应该读些什么书、我们需要什么样的教育等等这样的话题。但是她不以为然,认为我越俎代疱。
我想,我应该做一份刊物,来传达我的理念。因为「不识字的上人的当,识字的的上印刷品的当」。
就这样,我拿了一沓我们学校标准的信签纸,开始做了起来。我把这份刊物叫做《新视觉》,是源于白话文运动时,陈独秀所创的《新青年》。我认为这份刊物的目标,是为了提倡新思想,以摘抄严肃文学作品的形式,启发班上的同学,应该从现在起,去寻找自己的目标,自己想要的是什么,未来想做的是什么。而不是把所有时间,都花在试卷和娱乐上。
为了传达这份理念,我在首期的《新视觉》的第一页,认真地誊写了 Robert Frost 那首诗 —— The Road Not Taken.
我现在已经记不清当时摘抄了哪些具体的文字了,只记得抄过王小波、李敖、韩寒、胡适等等。
这份全手写的刊物开始在班上互相传阅,并不是因为内容深刻,而是因为形式新鲜罢了。我为了这份刊物可以维持下去,「聘请」了上文提到的女同学作为编辑,也接受所有同学的来稿。
接受同学的来稿后,刊物渐渐成了班级的一部分,甚至每一期都会有人催我「出版」。当时的「出版」形式,则是收集来稿,用钉书机装钉成册。
同学的来稿很有意思,有人开始做起了小说连载。而我还是做一些摘抄,顺便构思一些虚构类的讽刺文章。同时 Bunny 开始把手写的刊物改革成了真正的印刷品——每周回家录入然后打印出来。
因为刊物带有媒体属性,班级上一些事件也会被刊登到里面去。例如校运会,我们做了一份校运会特刊,报道了校运会的情况、现场照片。
虽然刊物在班上火了,但我并不是太开心,因为这本刊物慢慢偏离了我的初衷。我向 Bunny 提出要做一本《新视觉》的子刊物,就叫做「16 度」(我们是 16 班),把小说连载、读者来信这些内容都放到里面,《新视觉》只做严肃文学。
于是 Bunny 开始打造《16 度》,而我继续负责《新视觉》。发展到后来,《16 度》其实有很多地方和《最小说》变得很相似,是同学们饭后的话题、减缓考试压力的地方。很多人在上面连载小说。不生产的内容的,也会来留言,说自己对某篇文章的读后感。而这份带有意识形态的《新视觉》很快就没有再连续出版下去了。
以上是我对这份刊物仅剩的几乎所有回忆,手写的稿早就在初中一次搬课室的过程中丢失了。谁会想到这些东西未来会被这样津津乐道呢。这确实是一个遗憾。
via Randy's Blog
Invalid media:
image
image
image