我在学校学到的东西
今年身边的朋友陆陆续续毕业出来工作了,偶尔有机会的时候会聚在一起聊聊,然后谈到各自的就业情况。我发现有很多朋友还不知道自己想从事的职业是什么,因此也不知道自己未来会怎么样,先做着现在能做的。
因为我的经历特殊,有人也会对我开玩笑说真不知道读书有什么用,还不如早点出来工作。我知道以我朋友的受教育程度来说,这肯定只是玩笑,他们不可能是「读书无用论」者,所以我也会附和着笑。
虽然这只是句玩笑话,但是确实令我回顾了一下我从我的在校生涯中得到了什么东西。
我首先想到的是英语。我的小学是从一年级开始就有英语的课程,所以我接触英语的时间很早。我自认小学四年级以前我还是个很乖的学生,上课认真听讲,作业按时完成。所以我的语数英成绩都很不错。从小培养了「语感」,使得我一直以来可以低障碍地读写英文。这对我的编程学习、职业生涯都有很大的意义。懂英文让我可以亲自融入整个开源社区、技术社区,可以直接在 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
养猫随想
我是个很怕负责任并且不感性的人,养一只猫对我来说,是一种很大的责任。
传闻说猫的智商相当于 2~3 岁的小孩,所以我会把养她当作是在养我的小孩,每个月要花钱换猫砂,去超市要顺便买些罐头,偶尔也想去宠物店看看有什么好玩的玩具。养猫和养小孩的区别,我想大概就在于前者的过程中不需要担负教育的责任。教育很难。
我外甥女今年刚好是 3 岁,有时候我也觉得和猫很像:见到什么都要摸摸看,甚至打翻。
对于猫打翻东西,一般来说,主人都会生气。但是我想,3 岁的小孩打翻了东西,其实是监护人的责任。既然家里多了这个不懂事的小孩,易打翻的东西就不该让她碰到。出现事故,自己要先反思。
她不会完全信任我,她吃东西,我路过,她有时还是会立刻跑开。帮她滴清耳液的时候,她看到我拿着瓶子也会跑开。但有时候我觉得她也很信任我,每次回家,不管她的时候她都要一直叫,非要爬过来腿上让我摸才停。养猫有趣的地方就是这里,你要向一种时刻保持警惕的生物身上获得信任。
第一次带她去医院打疫苗,在医院里我和几个素味谋面的猫主人狗主人竟然可以自然地打成一片,互相交流育宠经验,然后让自己的宠物见一见对方的宠物。大家都像妈妈们互相交流育儿经验似的。
有时候在路上看到走过的流浪猫,会想要不要把它养了,让她有个伴。但是想想,我确实还没有做好二胎的准备。
前段时间发烧,在搞保险报销的时候,我想如果可以给宠物也买保险,我也会给她买一份。
养一只猫不容易,何况养一个人。所以养猫之后,有时我会留意街上怀孕的路人,想她们是不是做好了准备,去承担这份责任呢。这需要一份勇气和担当,还有深思熟虑。
鲁迅在《热风》里谈到孩子,他说,「中国的孩子,只要生,不管他好不好,只要多,不管他才不才。生他的人,不负教他的责任。虽然“人口众多”这一句话,很可以闭了眼睛自负,然而这许多人口,便只在尘土中辗转,小的时候,不把他当人,大了以后,也做不了人。」
因此我很怕,我没有准备好,没有想好要怎么做教育。我要先把猫照顾好,才有信心去养一个人。
以上。
via Randy's Blog
Invalid media:
image
image
image
image
image
我是个很怕负责任并且不感性的人,养一只猫对我来说,是一种很大的责任。
传闻说猫的智商相当于 2~3 岁的小孩,所以我会把养她当作是在养我的小孩,每个月要花钱换猫砂,去超市要顺便买些罐头,偶尔也想去宠物店看看有什么好玩的玩具。养猫和养小孩的区别,我想大概就在于前者的过程中不需要担负教育的责任。教育很难。
我外甥女今年刚好是 3 岁,有时候我也觉得和猫很像:见到什么都要摸摸看,甚至打翻。
对于猫打翻东西,一般来说,主人都会生气。但是我想,3 岁的小孩打翻了东西,其实是监护人的责任。既然家里多了这个不懂事的小孩,易打翻的东西就不该让她碰到。出现事故,自己要先反思。
她不会完全信任我,她吃东西,我路过,她有时还是会立刻跑开。帮她滴清耳液的时候,她看到我拿着瓶子也会跑开。但有时候我觉得她也很信任我,每次回家,不管她的时候她都要一直叫,非要爬过来腿上让我摸才停。养猫有趣的地方就是这里,你要向一种时刻保持警惕的生物身上获得信任。
第一次带她去医院打疫苗,在医院里我和几个素味谋面的猫主人狗主人竟然可以自然地打成一片,互相交流育宠经验,然后让自己的宠物见一见对方的宠物。大家都像妈妈们互相交流育儿经验似的。
有时候在路上看到走过的流浪猫,会想要不要把它养了,让她有个伴。但是想想,我确实还没有做好二胎的准备。
前段时间发烧,在搞保险报销的时候,我想如果可以给宠物也买保险,我也会给她买一份。
养一只猫不容易,何况养一个人。所以养猫之后,有时我会留意街上怀孕的路人,想她们是不是做好了准备,去承担这份责任呢。这需要一份勇气和担当,还有深思熟虑。
鲁迅在《热风》里谈到孩子,他说,「中国的孩子,只要生,不管他好不好,只要多,不管他才不才。生他的人,不负教他的责任。虽然“人口众多”这一句话,很可以闭了眼睛自负,然而这许多人口,便只在尘土中辗转,小的时候,不把他当人,大了以后,也做不了人。」
因此我很怕,我没有准备好,没有想好要怎么做教育。我要先把猫照顾好,才有信心去养一个人。
以上。
via Randy's Blog
Invalid media:
image
image
image
image
image
做技术要自信
我很久以前就把博客的评论直接去掉了,原因是大多数评论毫无营养,如果我发技术类的文章,评论都是「围观」,「膜拜」之类的内容。偶尔有人会通过微博私信问我技术,开头都是很客气,称呼我「大神」,然后声称自己很「菜」。总的来说,就是把自己的地位拉得很底,误以为这是一种谦虚。
「大神」这类的称呼一开口,会把两个人的距离感拉得特别长,就像闰土叫了迅哥儿一声「老爷」。我没有觉得自己很厉害,反而是越学越自卑了。我总结了这些视我为「大神」的网友,不过是经验比我少一些, 或者思考的东西比我少一些而已。
于是我回想自己刚接触编程的时候,也很喜欢逛 BBS, 看一些版块上有些许知名度的网友,发自己的新作品,心里很是羡慕,觉得他们技术很强,是无法触及的。我只能静静地看着,不断地思考他们做出来的功能是怎么实现的,然后翻书找。实在找不到,也会回回贴,发发站内信,请教一下实现的思路,不过基本是没有人会回复我的,因为那时年轻,提问的方式很蠢。渐渐地,我的经验也因为自己做的 side project 日积月累了出来,慢慢地也成了一些人口中的「大神」。
如果说这其中的成长有什么秘诀,我认为是自信:遇到自己不懂的问题时,永远相信自己可以通过不断的学习和查阅资料得到解答,并使解决问题的经验成为自己的一部份。
妄自菲薄会让人变懒,认为自己永远达不到别人的高度而放弃努力。很多人因为不自信,开始依赖别人,把自己活成配角,又苦恼自己不成长。我通常会建议他读一读《提问的智慧》,学会自己先思考问题。我从前也很害怕问比我富有经验的开发者问题,因为我害怕自己的提问很蠢。因此每次提问前,会先梳理好问题梗概,我做了什么去解决这个问题,最后才小心翼翼地把问题发出去。其实往往在梳理问题的过程中,自己就把问题想通了。
所以做技术要自信,不要做伸手党,要多思考。开源不是所谓的「大神」才能参与的,你也可以参与,从读代码开始。每一个你眼中的「大神」都不是生下来就会编程,他们只是善于自己解决问题,并坚信自己能解决问题,最后成功解决问题。
via Randy's Blog
我很久以前就把博客的评论直接去掉了,原因是大多数评论毫无营养,如果我发技术类的文章,评论都是「围观」,「膜拜」之类的内容。偶尔有人会通过微博私信问我技术,开头都是很客气,称呼我「大神」,然后声称自己很「菜」。总的来说,就是把自己的地位拉得很底,误以为这是一种谦虚。
「大神」这类的称呼一开口,会把两个人的距离感拉得特别长,就像闰土叫了迅哥儿一声「老爷」。我没有觉得自己很厉害,反而是越学越自卑了。我总结了这些视我为「大神」的网友,不过是经验比我少一些, 或者思考的东西比我少一些而已。
于是我回想自己刚接触编程的时候,也很喜欢逛 BBS, 看一些版块上有些许知名度的网友,发自己的新作品,心里很是羡慕,觉得他们技术很强,是无法触及的。我只能静静地看着,不断地思考他们做出来的功能是怎么实现的,然后翻书找。实在找不到,也会回回贴,发发站内信,请教一下实现的思路,不过基本是没有人会回复我的,因为那时年轻,提问的方式很蠢。渐渐地,我的经验也因为自己做的 side project 日积月累了出来,慢慢地也成了一些人口中的「大神」。
如果说这其中的成长有什么秘诀,我认为是自信:遇到自己不懂的问题时,永远相信自己可以通过不断的学习和查阅资料得到解答,并使解决问题的经验成为自己的一部份。
妄自菲薄会让人变懒,认为自己永远达不到别人的高度而放弃努力。很多人因为不自信,开始依赖别人,把自己活成配角,又苦恼自己不成长。我通常会建议他读一读《提问的智慧》,学会自己先思考问题。我从前也很害怕问比我富有经验的开发者问题,因为我害怕自己的提问很蠢。因此每次提问前,会先梳理好问题梗概,我做了什么去解决这个问题,最后才小心翼翼地把问题发出去。其实往往在梳理问题的过程中,自己就把问题想通了。
所以做技术要自信,不要做伸手党,要多思考。开源不是所谓的「大神」才能参与的,你也可以参与,从读代码开始。每一个你眼中的「大神」都不是生下来就会编程,他们只是善于自己解决问题,并坚信自己能解决问题,最后成功解决问题。
via Randy's Blog
从 React 谈 Web UI 开发
此前我在 Twitter 上这样表达过对 React 的理解,但是 Twitter 篇幅有限,所以在这篇文章里,我要做更详尽的阐述。
我从前不喜欢 React, 是因为写 React 的 render function 不像写 template 一样方便,尤其是存在复杂的判断渲染的时候,Vue 的 template 一个 v-if 就搞定了。而在 React 里写,需要把这个判断写成 function, 然后条件判断 return 哪一个 view. 这是我最初对 React 的偏见所在之一。
然而经过自己的实践和思考,加上阅读一些文章,我发现以前的想法是错的。我在使用 React 的时候,没有做到 Thinking in React. 从而对 React 产生了不解和困惑。
有很多人把 React 当成框架来用,这是用不好 React 的根本原因。很少人认真思考 A JavaScript library for building User Interface 背后的含义,把 React 用得一团糟。
何谓 For Building User Interface? 意思就是,这个库仅仅是用于构建 UI 的,这是 React 本质要解决的问题。我甚至和很多人说,事实上 React 本身是不是 React 已经不重要了,重要的是我们写 UI 的思维。React 这个 library 本身仅仅是用来实现这个思维的手段。React 提供的,是优秀的 DOM diff 算法,和一套 Component system。换成代码来说,也就是:
这是 React building UI 的核心思想,所有的组件,就是接受 state, 返回一个 View. 这样看上去比较抽象,比如我们有一个 Clock 组件:
Clock 是一个 function, 接受一个 time 参数,返回的是一串 HTML String. 在程序里,我们可以给一个 Interval, 每秒传一个当前的 time, 得到一个新的 HTML String, 然后 apply 到某个 DOM 上。
这样的实现是能达到目的的,但是问题在于,每次
我们都知道,DOM 更新的花费是昂贵的。整个 DOM 树,实际上只是一个
在 React 里,把 props 传入,返回一个类似 HTML 的结构,然后 render 到指定的 DOM 节点上。这里 React 会算出哪个节点应该被更新:
我们这样手动去 setInterval 然后 render 未免有点傻,我们可以更改 state (也就是通常用到的
Functional Programming 里有 Pure Function 的概念。Pure Function 之所以 Pure, 是因为不存在 side effect. 举个例子,我们写一个求和 function:
这个求和函数就是一个 pure function. 因为函数内部没有对 input 做任何改变,并且返回一个新的值。我传 1 和 1,得到的永远是 2.
Pure Function 的好处是利于维护和测试。要测试一个 Pure Function, 仅仅是传不同的值,预言对应的返回值。
现在回头看 React 的 Component, 也可以算是一个 Pure Function——接收不同的 props, 然后 render 对应的 View. 上面 Clock 的例子,props 和返回的 View 是映射关系。
光是
这样就很容易理解为什么我说 React 仅仅是实现构建 UI 思想的手段,因为构建 UI 的思想总结起来就是:
1. State 是 Reactive 的 (比如 React 的
2. state => View (依靠 DOM diff)
3. View 组成 Component
4. 管理 state (依靠第三方的 state manager)
无论是 React 还是 Vue, 大抵都是这样的思想。Vue 1 还不完全是,Vue 2 就更接近了,只是后者写法既可以写得像 template, 又可以写直接写 vdom.
而开发者常常感到困难的地方实际上是上面的第 4 点——管理 state. 写 React 写得痛苦,大部分原因是用把 library 当成 framework 去用,把处理 state 的逻辑瞎写到 View 层中去,也就是所谓的 Dump Component.
改变 state 是 side effect, 我们应该把它从 View 层中分离出去。我多次提到,View 层真正要做的,仅仅是根据 state 返回对应的 View. state 的变化逻辑,应该在给 state manager 库去做,例如 Redux, Mobx. 下面我用 Mobx 作为例子:
https://jsbin.com/fumerup/edit?js,output
如果没有接触过 Mobx 不用慌张,只需要知道,Mobx 的 Observable 变化时,被 observer 包装的 React 组件会重新渲染。使用 state manager, 明显地分离了 View 和 side-effect:
测试这样的程序,首先为 side effect 的逻辑做测试,再为 View 做测试。View 的测试在这里就十分简单了,给他传一个 store 实例,借助 enzyme 之类的 testing utilities 预言不同的 action 得到的返回 View.
React 是 Reactive Programming 在 Web User Interface 上实现的手段,它只不过是一个库,提供了reactive render, component system 和降低开销的 DOM diff 算法. 把 React 换掉,只要不是手动操作 DOM, 其它的框架也不过大同小异。重要的是理解它背后的思想。说到底,前端开发在解决什么问题,用什么样的方式解决问题,在使用任何框架和库之前先把这两个问题思考明白,就不会认为前端难学了。
via Randy's Blog
Invalid media:
animation
animation
animation
image
此前我在 Twitter 上这样表达过对 React 的理解,但是 Twitter 篇幅有限,所以在这篇文章里,我要做更详尽的阐述。
我从前不喜欢 React, 是因为写 React 的 render function 不像写 template 一样方便,尤其是存在复杂的判断渲染的时候,Vue 的 template 一个 v-if 就搞定了。而在 React 里写,需要把这个判断写成 function, 然后条件判断 return 哪一个 view. 这是我最初对 React 的偏见所在之一。
然而经过自己的实践和思考,加上阅读一些文章,我发现以前的想法是错的。我在使用 React 的时候,没有做到 Thinking in React. 从而对 React 产生了不解和困惑。
有很多人把 React 当成框架来用,这是用不好 React 的根本原因。很少人认真思考 A JavaScript library for building User Interface 背后的含义,把 React 用得一团糟。
何谓 For Building User Interface? 意思就是,这个库仅仅是用于构建 UI 的,这是 React 本质要解决的问题。我甚至和很多人说,事实上 React 本身是不是 React 已经不重要了,重要的是我们写 UI 的思维。React 这个 library 本身仅仅是用来实现这个思维的手段。React 提供的,是优秀的 DOM diff 算法,和一套 Component system。换成代码来说,也就是:
(state) => View
这是 React building UI 的核心思想,所有的组件,就是接受 state, 返回一个 View. 这样看上去比较抽象,比如我们有一个 Clock 组件:
const Clock = (time) => `
<div id='clock'>
<span>It's now: </span>
<span>${time}</span>
</div>
`
Clock 是一个 function, 接受一个 time 参数,返回的是一串 HTML String. 在程序里,我们可以给一个 Interval, 每秒传一个当前的 time, 得到一个新的 HTML String, 然后 apply 到某个 DOM 上。
const $app = document.getElementById('app')
setInterval(() => {
$app.innerHTMl = Clock(Date.now())
}, 1000)
这样的实现是能达到目的的,但是问题在于,每次
innerHTML
时,整个 #app
的 DOM 树会被重新渲染。我们都知道,DOM 更新的花费是昂贵的。整个 DOM 树,实际上只是一个
span
在不断变化,所以我们需要 DOM diff 算法来得知到底哪一个 DOM 节点才需要被更新,从而节省开销:const Clock = ({time}) => (
<div id='clock'>
<span>It's now: </span>
<span>{time}</span>
</div>
)
const $app = document.getElementById('app')
setInterval(() => {
ReactDOM.render(<Clock time={Date.now()} />, $app)
}, 1000)
在 React 里,把 props 传入,返回一个类似 HTML 的结构,然后 render 到指定的 DOM 节点上。这里 React 会算出哪个节点应该被更新:
我们这样手动去 setInterval 然后 render 未免有点傻,我们可以更改 state (也就是通常用到的
setState
) 自动地让 React 随着 state 的改变而重新 render. 这里的 time 就是一个 state. 这叫做 Reactive.Functional Programming 里有 Pure Function 的概念。Pure Function 之所以 Pure, 是因为不存在 side effect. 举个例子,我们写一个求和 function:
function add (a, b) {
return a + b
}
这个求和函数就是一个 pure function. 因为函数内部没有对 input 做任何改变,并且返回一个新的值。我传 1 和 1,得到的永远是 2.
Pure Function 的好处是利于维护和测试。要测试一个 Pure Function, 仅仅是传不同的值,预言对应的返回值。
现在回头看 React 的 Component, 也可以算是一个 Pure Function——接收不同的 props, 然后 render 对应的 View. 上面 Clock 的例子,props 和返回的 View 是映射关系。
光是
state => View
还不够,在构建 UI 的时候,我们希望 state 改变的时候,立即 rerender 整个 View, 也就是我们经常用到的 setState()
.这样就很容易理解为什么我说 React 仅仅是实现构建 UI 思想的手段,因为构建 UI 的思想总结起来就是:
1. State 是 Reactive 的 (比如 React 的
setState
)2. state => View (依靠 DOM diff)
3. View 组成 Component
4. 管理 state (依靠第三方的 state manager)
无论是 React 还是 Vue, 大抵都是这样的思想。Vue 1 还不完全是,Vue 2 就更接近了,只是后者写法既可以写得像 template, 又可以写直接写 vdom.
而开发者常常感到困难的地方实际上是上面的第 4 点——管理 state. 写 React 写得痛苦,大部分原因是用把 library 当成 framework 去用,把处理 state 的逻辑瞎写到 View 层中去,也就是所谓的 Dump Component.
改变 state 是 side effect, 我们应该把它从 View 层中分离出去。我多次提到,View 层真正要做的,仅仅是根据 state 返回对应的 View. state 的变化逻辑,应该在给 state manager 库去做,例如 Redux, Mobx. 下面我用 Mobx 作为例子:
https://jsbin.com/fumerup/edit?js,output
如果没有接触过 Mobx 不用慌张,只需要知道,Mobx 的 Observable 变化时,被 observer 包装的 React 组件会重新渲染。使用 state manager, 明显地分离了 View 和 side-effect:
测试这样的程序,首先为 side effect 的逻辑做测试,再为 View 做测试。View 的测试在这里就十分简单了,给他传一个 store 实例,借助 enzyme 之类的 testing utilities 预言不同的 action 得到的返回 View.
React 是 Reactive Programming 在 Web User Interface 上实现的手段,它只不过是一个库,提供了reactive render, component system 和降低开销的 DOM diff 算法. 把 React 换掉,只要不是手动操作 DOM, 其它的框架也不过大同小异。重要的是理解它背后的思想。说到底,前端开发在解决什么问题,用什么样的方式解决问题,在使用任何框架和库之前先把这两个问题思考明白,就不会认为前端难学了。
via Randy's Blog
Invalid media:
animation
animation
animation
image
21 岁我想说的
在我很小的时候,在香港电视剧的影响下,我最初的理想是当一名警察。但是很不幸,当我向着全班描述这个理想的时候,班上的同学都哈哈大笑,甚至老师也对我说,你这样的身材,能打得过小偷么。
于是这个理想再也没有跟任何人提起。但是我很俗套地感谢那位老师,因为从那以后我决定改变我的理想,成为一名科学家。
之后我读过很多科普书籍,奇怪的是,这种给青少年看的科普书,大部分的内容都是有关化学的。以至于我有很长一段时间都在意淫我成为化学家的情景。
六年级转学后,我遇到一位朋友,他给我展示了他自己写的一个博客网站。当时我很吃惊,于是和他一起自学编程。我没有零花钱,只能用学杂费的一些找零买了一本 20 块钱的 中专教材《c语言程序设计》。
和老罗一样,从那时起我就有种被上帝选中的感觉,我觉得我这辈子就是搞这个的。我从意淫自己成为化学家,变成了意淫自己天天写代码。
在这个过程中,我遭受了很多不被人理解和看好的压力,甚至被嘲笑。念高中的时候,由于在一篇周记里表达了自己的理想主义,晚修就被班主任拖出去批判了一番。
直到这一年,经历了足足 8 年,我离开了学校,真正成为了一名软件工程师,曾经意淫的场景变成了现实,和『科学家』这个理想也算占了点边。理想主义万岁。
21 岁,我希望我可以继续写代码,离自己的终极目标更加接近。而那些曾经看不起我和嘲笑过我的人,我只想说,你们这帮孙子,我去你妈的。
via Randy's Blog
在我很小的时候,在香港电视剧的影响下,我最初的理想是当一名警察。但是很不幸,当我向着全班描述这个理想的时候,班上的同学都哈哈大笑,甚至老师也对我说,你这样的身材,能打得过小偷么。
于是这个理想再也没有跟任何人提起。但是我很俗套地感谢那位老师,因为从那以后我决定改变我的理想,成为一名科学家。
之后我读过很多科普书籍,奇怪的是,这种给青少年看的科普书,大部分的内容都是有关化学的。以至于我有很长一段时间都在意淫我成为化学家的情景。
六年级转学后,我遇到一位朋友,他给我展示了他自己写的一个博客网站。当时我很吃惊,于是和他一起自学编程。我没有零花钱,只能用学杂费的一些找零买了一本 20 块钱的 中专教材《c语言程序设计》。
和老罗一样,从那时起我就有种被上帝选中的感觉,我觉得我这辈子就是搞这个的。我从意淫自己成为化学家,变成了意淫自己天天写代码。
在这个过程中,我遭受了很多不被人理解和看好的压力,甚至被嘲笑。念高中的时候,由于在一篇周记里表达了自己的理想主义,晚修就被班主任拖出去批判了一番。
直到这一年,经历了足足 8 年,我离开了学校,真正成为了一名软件工程师,曾经意淫的场景变成了现实,和『科学家』这个理想也算占了点边。理想主义万岁。
21 岁,我希望我可以继续写代码,离自己的终极目标更加接近。而那些曾经看不起我和嘲笑过我的人,我只想说,你们这帮孙子,我去你妈的。
via Randy's Blog
我学五笔的经历
最近总是看到社区有人讨论输入法,有朋友安利双拼,有人想 开始学五笔,看了一些回帖,作为一个打了 6,7 年五笔的年轻人,我很有感触,所以就写写我学五笔的经历,给大家借鉴借鉴。
我第一次接触五笔是五年级的电脑课,那时鼠标还是有滚球的。当时电脑老师知道我很喜欢电脑,就告诉我学校准备搞一个电脑打字比赛,希望我学五笔去参赛。我那时只会打全拼,压根没有想过学五笔,但是老师告诉我,如果参加,午睡的时间可以到机房练习。听到这个『福利』之后我立马答应参赛。
之后的一个星期的午睡时间我都去机房练打字,不过我的电脑老师并没有手把手教学,而是帮我装了个叫 "wt" 的软件,是个 DOS 程序,专门用来练五笔的。(我一直没搞懂它为什么叫做 wt,最近又搜了一下,这货中文名叫『明伦五笔』)电脑老师就让我按照这个软件的进度去练。然后又给我一张字根口诀表,什么『王旁青头戈五一』,让我背一下。
刚开始我练的是很认真的,看着一排字,对照着键码提示敲。老师也没管我,自己在讲台玩电脑。于是几天以后我也就没怎么练五笔了,开始玩金山打字通,玩打字游戏,打英文。
这就是我第一次接触五笔,没有背字根,只勉强记住了一些一级简码,能打出来的词语只有『中国人』(k l w)。这段时间最大的收获其实是学会了盲打,靠金山打字通掌握了正确的打字指法。
第二次接触是我姐买了一台步步高电子词典,这部词典相当牛逼,可以用数据线连到电脑,然后安装很多游戏,我经常上厕所的时候拿去玩。后来我姐就生气了,一怒之下把游戏全删了。当时我很失落,但是我还是得上厕所,还是得拿电子词典去玩。我把所有功能都按了一遍,发现没什么好玩的,唯一算得上具有人机交互功能的程序就只有一个练五笔程序。
我就开始玩这个,但是我几乎什么字都不会,我选了四级全码的练习。四级全码的意思是同一个字母打四次就会出现的字。程序是这样的:右上角出现一个字,我得输入四个字母然后按确认看对不对。我一开始什么都不会,只会一级简码。所以我就开始一直蒙,蒙到最后我就把所有全码几乎都记住了。我现在还记得我记住的第一个全码是『火』,四个 o。
第三次是六年级毕业后的暑假,那时我的上网时间是被限制的。那段时间几乎每天在我爸上班的地方,有一台没有联网的电脑,除了 Microsoft Office, 就只有金山打字通。那时拼音输入法没有现在智能,会五笔仍然是招聘的一个加分项,所以我爸妈都希望我们学五笔。我姐是打五笔的,打字非常快,虽然和我当时打拼音的『敲打速度』差不多,但是五笔重码率非常低,不需要像拼音那样,打出来,还得看看是哪个选项。加上那时我也闷得慌,就天天用金山打字通练五笔。
很多人说学五笔得背字根表,记口诀。我从小就讨厌背诵,所以一直没有去背那个鬼东西,导致我一直非常容易忘。后来我『牺牲』了自己一些有限的上网时间,搜了一下字根排布有没有什么规律。
然后我发现果然是有的,五笔字根在键位上的排布是有规律的。
五笔的规律
首先来看一下整个字根的分布图:
对于新手来说肯定是非常吓人的,这也是很少人学五笔的原因。但是其实它是有规律的。
第一是整体上的划分,整个布局总共只有五个区,分别是撇(QWERT)、点(YUIOP)、横(ASDFG)、竖(HJKL)和折勾(XCVBNM)。这也许就五笔叫做五笔的原因。只要记住这五个区的分布就十分容易定位某个字根所在的键位了。比如你忘了『蝗』字的『虫』字旁在哪个键位,但是你知道它肯定是在 HJKL 其中一个键上。
再来深入地看某一个区中的规律。例如『刘』立刀旁,他是竖的,它肯定在 HJKL 其中一个键位上,那到底是哪一个键呢?如果你仔细看一下,你会发现,H 是一条竖,J 是两条竖,K 是三条竖,L 是四条竖。立刀旁是两竖,那它就是在 J 上了。
当然,还有很多其它的字根并不遵循这些规律,到底是为什么,我也不知道,你得问王永民先生。打多几次,就能记住。
记着这两个规律,自己再读一遍字根图,摸索一下,再打个一星期,正常人来说,是肯定能学会的。但是熟练还是得靠多打。五笔是十分靠肌肉记忆的,打到熟练的时候,你已经不会再去这个字应该怎么拆的。比如我就不会去想『应该』这两个字怎么拆,但是我知道它肯定打
五笔快还是拼音快?
现在社区上一般讨论的是五笔快还是拼音快。常年打拼音的人肯定会说现在的拼音输入法已经相当智能,不怎么需要去考虑重码。事实确实是这样的,以前智能 ABC 的时代,五笔是完全可以虐拼音的。但现在,起码在这个点上,五笔的优势已经不再明显了。也就是说,五笔最能体现出优势是在脱离词库的场景。这有点像 vim 和 sublime 的比较,离开了 GUI,vim 的优势就迅速体现出来了。
根据我多年的经验,实际上,拼音不是最快的,五笔也不是,最快的输入方式是拼音五笔混输。说实话,打了这么多年五笔,我仍然不清楚『尴尬』两个字怎么拆,当我打到这两个字的时候,我只要输入"ganga",就立刻打出来,这是最好的,非常舒服和自然。这一段文字,除了尴尬两个字,其它全是五笔打出来的,难拆的字一点也没影响到我的打字速度。所以,还是那句话,最快的输入方式是拼音和五笔混输。
那我现在学不学五笔好?
无论在什么情况,能学习的东西,学了肯定是好的,不管它是不是『有用』的。就像 Steve Jobs 说的,connecting the dot. 有没有必要学,花多少时间去学,那是你自己要考虑的事情,作为旁人,没有办法给意见。只能说的是,学了以后不会在短时间内给你带来什么,不学你也不会失去什么。
人越长大,就越少机会做些能让自己感到开心的『无用』的事情了。
最后推荐个输入法?
关于输入法,我在 Mac 上用的是 QQ 五笔,基础词库很足,再加上流行语词库,就十分够用了。打五笔,词库只有嫌多,没有嫌少的。至于手机,我在手机是不打五笔的,因为没有手感。之前已经说了,打五笔到后期基本是靠肌肉记忆的,也就是说,离开了实体键盘,很难有同样流畅的手感。我在手机上比较奇葩,用的是笔划输入,是学我姐的。最近也在玩 Google 的划动输入,所以偶尔也打打拼音。
via Randy's Blog
Invalid media: image
最近总是看到社区有人讨论输入法,有朋友安利双拼,有人想 开始学五笔,看了一些回帖,作为一个打了 6,7 年五笔的年轻人,我很有感触,所以就写写我学五笔的经历,给大家借鉴借鉴。
我第一次接触五笔是五年级的电脑课,那时鼠标还是有滚球的。当时电脑老师知道我很喜欢电脑,就告诉我学校准备搞一个电脑打字比赛,希望我学五笔去参赛。我那时只会打全拼,压根没有想过学五笔,但是老师告诉我,如果参加,午睡的时间可以到机房练习。听到这个『福利』之后我立马答应参赛。
之后的一个星期的午睡时间我都去机房练打字,不过我的电脑老师并没有手把手教学,而是帮我装了个叫 "wt" 的软件,是个 DOS 程序,专门用来练五笔的。(我一直没搞懂它为什么叫做 wt,最近又搜了一下,这货中文名叫『明伦五笔』)电脑老师就让我按照这个软件的进度去练。然后又给我一张字根口诀表,什么『王旁青头戈五一』,让我背一下。
刚开始我练的是很认真的,看着一排字,对照着键码提示敲。老师也没管我,自己在讲台玩电脑。于是几天以后我也就没怎么练五笔了,开始玩金山打字通,玩打字游戏,打英文。
这就是我第一次接触五笔,没有背字根,只勉强记住了一些一级简码,能打出来的词语只有『中国人』(k l w)。这段时间最大的收获其实是学会了盲打,靠金山打字通掌握了正确的打字指法。
第二次接触是我姐买了一台步步高电子词典,这部词典相当牛逼,可以用数据线连到电脑,然后安装很多游戏,我经常上厕所的时候拿去玩。后来我姐就生气了,一怒之下把游戏全删了。当时我很失落,但是我还是得上厕所,还是得拿电子词典去玩。我把所有功能都按了一遍,发现没什么好玩的,唯一算得上具有人机交互功能的程序就只有一个练五笔程序。
我就开始玩这个,但是我几乎什么字都不会,我选了四级全码的练习。四级全码的意思是同一个字母打四次就会出现的字。程序是这样的:右上角出现一个字,我得输入四个字母然后按确认看对不对。我一开始什么都不会,只会一级简码。所以我就开始一直蒙,蒙到最后我就把所有全码几乎都记住了。我现在还记得我记住的第一个全码是『火』,四个 o。
第三次是六年级毕业后的暑假,那时我的上网时间是被限制的。那段时间几乎每天在我爸上班的地方,有一台没有联网的电脑,除了 Microsoft Office, 就只有金山打字通。那时拼音输入法没有现在智能,会五笔仍然是招聘的一个加分项,所以我爸妈都希望我们学五笔。我姐是打五笔的,打字非常快,虽然和我当时打拼音的『敲打速度』差不多,但是五笔重码率非常低,不需要像拼音那样,打出来,还得看看是哪个选项。加上那时我也闷得慌,就天天用金山打字通练五笔。
很多人说学五笔得背字根表,记口诀。我从小就讨厌背诵,所以一直没有去背那个鬼东西,导致我一直非常容易忘。后来我『牺牲』了自己一些有限的上网时间,搜了一下字根排布有没有什么规律。
然后我发现果然是有的,五笔字根在键位上的排布是有规律的。
五笔的规律
首先来看一下整个字根的分布图:
对于新手来说肯定是非常吓人的,这也是很少人学五笔的原因。但是其实它是有规律的。
第一是整体上的划分,整个布局总共只有五个区,分别是撇(QWERT)、点(YUIOP)、横(ASDFG)、竖(HJKL)和折勾(XCVBNM)。这也许就五笔叫做五笔的原因。只要记住这五个区的分布就十分容易定位某个字根所在的键位了。比如你忘了『蝗』字的『虫』字旁在哪个键位,但是你知道它肯定是在 HJKL 其中一个键上。
再来深入地看某一个区中的规律。例如『刘』立刀旁,他是竖的,它肯定在 HJKL 其中一个键位上,那到底是哪一个键呢?如果你仔细看一下,你会发现,H 是一条竖,J 是两条竖,K 是三条竖,L 是四条竖。立刀旁是两竖,那它就是在 J 上了。
当然,还有很多其它的字根并不遵循这些规律,到底是为什么,我也不知道,你得问王永民先生。打多几次,就能记住。
记着这两个规律,自己再读一遍字根图,摸索一下,再打个一星期,正常人来说,是肯定能学会的。但是熟练还是得靠多打。五笔是十分靠肌肉记忆的,打到熟练的时候,你已经不会再去这个字应该怎么拆的。比如我就不会去想『应该』这两个字怎么拆,但是我知道它肯定打
YIYY
。五笔快还是拼音快?
现在社区上一般讨论的是五笔快还是拼音快。常年打拼音的人肯定会说现在的拼音输入法已经相当智能,不怎么需要去考虑重码。事实确实是这样的,以前智能 ABC 的时代,五笔是完全可以虐拼音的。但现在,起码在这个点上,五笔的优势已经不再明显了。也就是说,五笔最能体现出优势是在脱离词库的场景。这有点像 vim 和 sublime 的比较,离开了 GUI,vim 的优势就迅速体现出来了。
根据我多年的经验,实际上,拼音不是最快的,五笔也不是,最快的输入方式是拼音五笔混输。说实话,打了这么多年五笔,我仍然不清楚『尴尬』两个字怎么拆,当我打到这两个字的时候,我只要输入"ganga",就立刻打出来,这是最好的,非常舒服和自然。这一段文字,除了尴尬两个字,其它全是五笔打出来的,难拆的字一点也没影响到我的打字速度。所以,还是那句话,最快的输入方式是拼音和五笔混输。
那我现在学不学五笔好?
无论在什么情况,能学习的东西,学了肯定是好的,不管它是不是『有用』的。就像 Steve Jobs 说的,connecting the dot. 有没有必要学,花多少时间去学,那是你自己要考虑的事情,作为旁人,没有办法给意见。只能说的是,学了以后不会在短时间内给你带来什么,不学你也不会失去什么。
人越长大,就越少机会做些能让自己感到开心的『无用』的事情了。
最后推荐个输入法?
关于输入法,我在 Mac 上用的是 QQ 五笔,基础词库很足,再加上流行语词库,就十分够用了。打五笔,词库只有嫌多,没有嫌少的。至于手机,我在手机是不打五笔的,因为没有手感。之前已经说了,打五笔到后期基本是靠肌肉记忆的,也就是说,离开了实体键盘,很难有同样流畅的手感。我在手机上比较奇葩,用的是笔划输入,是学我姐的。最近也在玩 Google 的划动输入,所以偶尔也打打拼音。
via Randy's Blog
Invalid media: image
写给即将学习编程的大学新生
写下这篇文章,是由于我想和即将进入大学有意学习编程的同学谈谈关于编程的事,因为你可能需要一些建议,来步入这个新的阶段。
编程是非常有趣的一件事情,学会编程就像成为魔术师,你可以创造任何你想创造的东西。在我出生到现在的这 20 年里,除了文学,没有比编程更吸引我的活动。就像 Zed Shaw 所说的,『编程作为一项智力活动,是唯一一种能让你创建交互式艺术的艺术形式。你可以创建项目让别人使用,而且你可以间接地和使用者沟通。没有其他的艺术形式能做到如此程度的交互性。电影领着观众走向一个方向,绘画是不会动的。而代码却是双向互动的。』
一些困惑
但是当你开始接触(我所在的)大学的计算机相关课程,你会发现,所谓的编程学习,无非是老师教一章内容,要求你用学到的语法去解一些数学题。于是很多人选择放弃,认为编程乏味无趣,用很长的课时学习,却只能写出简单的四则运算,或者解数学题。
然而这并非编程的全部,因为这恰恰能生动地表明编程语言只不过是一种工具,你可以用它来解数学题,也能做其它更有趣、更实用的程序。
在(我所在的)大学,计算机相关课程教 C/C++。有一次,一位大三的朋友问我说,『我学 C 学了一段时间,为什么我还是感觉很没用?』我是这样回答他的:
你学 C 学了一段时间感觉没有用处并非你个人的问题,我无法跟你解释为什么,不过我可以告诉你的是,Linus Torvalds 用 C 写了 Linux 和 Git; Antirez 用 C 写了数据库 Redis. 你可能连 Git 是什么都不知道,如何用 C 写出这种水平的程序呢?
所以,当你学习 C/C++ 基础后进入困惑期时,不要因为用它写不出实用的程序而止步不前,而应该开始接触其它的编程语言。当你所学和所做的东西越来越多的时候,你慢慢就会发现,编程语言只不过是一种工具,重要的在于你想做什么,用什么语言合适去做(华软的校内游戏直播网站 SISE Game 就是例子,网站的后端用 Ruby on Rails 写,但实时聊天是用 Node.js (JavaScript) ,因为相对于 Ruby, Node.js 更加适合处理 WebSocket)。 你之所以感觉 C/C++ 没用,是因为你暂时还没有足够的眼界和能力去使用他去进行创造。
应该去学什么?我的建议是一门严谨的强类型语言(如 Java)和一门愉快的脚本语言(如 JavaScript, Ruby, Python)。当然了,如果你想学一些能立竿见影的技能,你也可以写写前端(HTML, CSS)。
So, How?
对于应该如何去学习,我不打算在这里论述,我只想列出一些有用的建议:
1. 无论你要学什么,你读的第一篇文章应该是《提问的智慧》
2. 用 Google 搜索技术相关的信息
3. 购买付费可靠的科学上网服务,不要吝啬一顿饭的钱。
4. 不要害怕英文,英文非常重要。
几乎所有最新的技术在刚出来的时候只有英文文档,优质的 Tutorial 大多数也是英文的。
1. 参与一些质量高的社区,关注一些值得关注的人。
这一点很重要。学校所教的内容是陈旧、过时的(虽然这也许不是学校的错),你必须和社区保持同步,不断接触和学习新的技术。AngularJS 发布至今都有 6 年了,但在我们学校仍然在教 ExtJS,很多学生甚至毕业出来找工作的时候,连 AngularJS 都没听说过。
国内的 V2EX 和国外的 Hackernews 都是不错的社区。
一些现状
你并不能指望大学的课程或者大学老师能给你带来什么,一切都应该靠你自己。无论在多优秀或者多差劲的学校,学校本身能影响你的是辅助性的,而不是决定性的。在我的学校,几乎都在打游戏和应付考试,据我所知,即使是重点大学,这样的学生也大有人在,我渐渐明白,『你今后人生的艰难,恰恰不是因为你没能考上一个满意的学校,而是在这所学校里,在一个能让自己自由充分成长的黄金四年里,把自己给荒废了』(采铜的回答)。
为未来铺路
如果你以后有意从事编程的相关工作,你应该要知道,在找工作时和其它竞争者拉开差距的,并非你从哪里毕业,在学校当什么干部,而是你有足够的能力,并且能清楚地让别人看到你的能力。
让别人看到你能力的方法是开源社区和博客,所以我建议你在学习的过程中,多为开源做贡献,甚至可以维护一个自己的开源项目。另外还可以把自己的所学记录和总结到独立博客中。一个好的 Github Account 和好的独立博客是一份最好的简历。也许你也只有在大学这自由的四年才能有时间做这两件事情。
最后
我在广州大学华软软件学院读书已经有一年了,这一年里我遇到过许多对现在对未来感到迷茫的朋友,他们对教育抱有希望,对知识怀有渴望。我曾经试图做一些事情去改变现状,但是效果都不大,该混日子的还是继续混日子,到毕业后才开始抱怨就业难。我呸,互联网行业都缺人缺到什么地步了你跟我说就业难?
不过,只要我还没被学校开除,我还是会尽我所能地为迷茫的朋友做一些事情。至于做些什么,我还没想好,我不知道应该怎么做,如果你有好的建议,欢迎联系我。
如果你看完这篇文章,还有问题可以联系我的 Email: [email protected],只要你读过《提问的智慧》,问的问题经过自己思考,我都会尽快地详细地回复。
『你会编程。他们不会。这真他妈的酷。』
via Randy's Blog
写下这篇文章,是由于我想和即将进入大学有意学习编程的同学谈谈关于编程的事,因为你可能需要一些建议,来步入这个新的阶段。
编程是非常有趣的一件事情,学会编程就像成为魔术师,你可以创造任何你想创造的东西。在我出生到现在的这 20 年里,除了文学,没有比编程更吸引我的活动。就像 Zed Shaw 所说的,『编程作为一项智力活动,是唯一一种能让你创建交互式艺术的艺术形式。你可以创建项目让别人使用,而且你可以间接地和使用者沟通。没有其他的艺术形式能做到如此程度的交互性。电影领着观众走向一个方向,绘画是不会动的。而代码却是双向互动的。』
一些困惑
但是当你开始接触(我所在的)大学的计算机相关课程,你会发现,所谓的编程学习,无非是老师教一章内容,要求你用学到的语法去解一些数学题。于是很多人选择放弃,认为编程乏味无趣,用很长的课时学习,却只能写出简单的四则运算,或者解数学题。
然而这并非编程的全部,因为这恰恰能生动地表明编程语言只不过是一种工具,你可以用它来解数学题,也能做其它更有趣、更实用的程序。
在(我所在的)大学,计算机相关课程教 C/C++。有一次,一位大三的朋友问我说,『我学 C 学了一段时间,为什么我还是感觉很没用?』我是这样回答他的:
你学 C 学了一段时间感觉没有用处并非你个人的问题,我无法跟你解释为什么,不过我可以告诉你的是,Linus Torvalds 用 C 写了 Linux 和 Git; Antirez 用 C 写了数据库 Redis. 你可能连 Git 是什么都不知道,如何用 C 写出这种水平的程序呢?
所以,当你学习 C/C++ 基础后进入困惑期时,不要因为用它写不出实用的程序而止步不前,而应该开始接触其它的编程语言。当你所学和所做的东西越来越多的时候,你慢慢就会发现,编程语言只不过是一种工具,重要的在于你想做什么,用什么语言合适去做(华软的校内游戏直播网站 SISE Game 就是例子,网站的后端用 Ruby on Rails 写,但实时聊天是用 Node.js (JavaScript) ,因为相对于 Ruby, Node.js 更加适合处理 WebSocket)。 你之所以感觉 C/C++ 没用,是因为你暂时还没有足够的眼界和能力去使用他去进行创造。
应该去学什么?我的建议是一门严谨的强类型语言(如 Java)和一门愉快的脚本语言(如 JavaScript, Ruby, Python)。当然了,如果你想学一些能立竿见影的技能,你也可以写写前端(HTML, CSS)。
So, How?
对于应该如何去学习,我不打算在这里论述,我只想列出一些有用的建议:
1. 无论你要学什么,你读的第一篇文章应该是《提问的智慧》
2. 用 Google 搜索技术相关的信息
3. 购买付费可靠的科学上网服务,不要吝啬一顿饭的钱。
4. 不要害怕英文,英文非常重要。
几乎所有最新的技术在刚出来的时候只有英文文档,优质的 Tutorial 大多数也是英文的。
1. 参与一些质量高的社区,关注一些值得关注的人。
这一点很重要。学校所教的内容是陈旧、过时的(虽然这也许不是学校的错),你必须和社区保持同步,不断接触和学习新的技术。AngularJS 发布至今都有 6 年了,但在我们学校仍然在教 ExtJS,很多学生甚至毕业出来找工作的时候,连 AngularJS 都没听说过。
国内的 V2EX 和国外的 Hackernews 都是不错的社区。
一些现状
你并不能指望大学的课程或者大学老师能给你带来什么,一切都应该靠你自己。无论在多优秀或者多差劲的学校,学校本身能影响你的是辅助性的,而不是决定性的。在我的学校,几乎都在打游戏和应付考试,据我所知,即使是重点大学,这样的学生也大有人在,我渐渐明白,『你今后人生的艰难,恰恰不是因为你没能考上一个满意的学校,而是在这所学校里,在一个能让自己自由充分成长的黄金四年里,把自己给荒废了』(采铜的回答)。
为未来铺路
如果你以后有意从事编程的相关工作,你应该要知道,在找工作时和其它竞争者拉开差距的,并非你从哪里毕业,在学校当什么干部,而是你有足够的能力,并且能清楚地让别人看到你的能力。
让别人看到你能力的方法是开源社区和博客,所以我建议你在学习的过程中,多为开源做贡献,甚至可以维护一个自己的开源项目。另外还可以把自己的所学记录和总结到独立博客中。一个好的 Github Account 和好的独立博客是一份最好的简历。也许你也只有在大学这自由的四年才能有时间做这两件事情。
最后
我在广州大学华软软件学院读书已经有一年了,这一年里我遇到过许多对现在对未来感到迷茫的朋友,他们对教育抱有希望,对知识怀有渴望。我曾经试图做一些事情去改变现状,但是效果都不大,该混日子的还是继续混日子,到毕业后才开始抱怨就业难。我呸,互联网行业都缺人缺到什么地步了你跟我说就业难?
不过,只要我还没被学校开除,我还是会尽我所能地为迷茫的朋友做一些事情。至于做些什么,我还没想好,我不知道应该怎么做,如果你有好的建议,欢迎联系我。
如果你看完这篇文章,还有问题可以联系我的 Email: [email protected],只要你读过《提问的智慧》,问的问题经过自己思考,我都会尽快地详细地回复。
『你会编程。他们不会。这真他妈的酷。』
via Randy's Blog
新 MacBook 的设置和软件
趁着国补,把手头用了 5 年的 MacBook Air M1 换成了 MacBook Pro 14 寸 M4. 顺便手动重新配置新电脑,在此记录一下每次设置新电脑时我会做的一些设置和必装的软件。
设置
把点按切换成轻点:
我不喜欢用触摸板点按拖动来移动窗口,觉得有点费力,所以我会调整为三指拖移。旧版本的 OS X 可以直接在系统设置中调整,新版本的 macOS 竟然把它归类到辅助功能里了:
把 Control 键和 Caps Lock 键互换。因为我需要频繁使用 Control 键,Caps Lock 的位置是最合适的,这也是 HHKB 的默认布局:
取消 Spotlight 的所有索引,因为我用 Raycast, Spotlight 的索引会浪费计算资源:
软件
● Microsoft Edge: 用了很多年的主力浏览器
● 清歌五笔输入法: 最好用的五笔输入法
● Raycast: 不必多说
● Cursor: 目前主力 IDE, 也是 Cursor 长期的订阅用户
● CleanShotX: 最好用的截图软件,除了截图还有很多好用的小功能(比如 OCR, 录屏)
● 1Password: 密码管理
● Warp: 主力 Terminal Emulator, 已经离不开通过 AI 写复杂的命令
● iStat Menus: 在 Menu bar 显示系统信息,我用来实时看到网络传输速度和内存使用情况
via Randy's Blog
趁着国补,把手头用了 5 年的 MacBook Air M1 换成了 MacBook Pro 14 寸 M4. 顺便手动重新配置新电脑,在此记录一下每次设置新电脑时我会做的一些设置和必装的软件。
设置
把点按切换成轻点:
我不喜欢用触摸板点按拖动来移动窗口,觉得有点费力,所以我会调整为三指拖移。旧版本的 OS X 可以直接在系统设置中调整,新版本的 macOS 竟然把它归类到辅助功能里了:
把 Control 键和 Caps Lock 键互换。因为我需要频繁使用 Control 键,Caps Lock 的位置是最合适的,这也是 HHKB 的默认布局:
取消 Spotlight 的所有索引,因为我用 Raycast, Spotlight 的索引会浪费计算资源:
软件
● Microsoft Edge: 用了很多年的主力浏览器
● 清歌五笔输入法: 最好用的五笔输入法
● Raycast: 不必多说
● Cursor: 目前主力 IDE, 也是 Cursor 长期的订阅用户
● CleanShotX: 最好用的截图软件,除了截图还有很多好用的小功能(比如 OCR, 录屏)
● 1Password: 密码管理
● Warp: 主力 Terminal Emulator, 已经离不开通过 AI 写复杂的命令
● iStat Menus: 在 Menu bar 显示系统信息,我用来实时看到网络传输速度和内存使用情况
via Randy's Blog