2018 再见

一年总是要写点儿什么东西,不然拿什么证明存在过呢?回想了一下,自从毕业之后由于各种原因很少写日记,年度总结还是不能省的。

很久之前我一度把很多事情不公开,只是写到私人日记里面。最近其实想清楚了,做人做事应该真实一些,而且其实我这点儿想法,遭遇的事情都只是很小很小的事情,写出来如果有人看到说不定能参考一下。这也是开源精神的魅力所在。

工作

2018 年年初换了工作,来到了这家新公司。 原因在于工作内容有点儿无聊,然后 leader 把我当作小学生一样干活,有几天心情很不好就随手发了简历,之后竟然就很顺畅地跑了。 其实离开的时候也是挺忐忑的,之前对于新公司完全没有任何了解,和一个朋友聊天,碰巧是用户,给我安利了一把,后来发现在里面工作可能比他给我安利的还要好。

之后就不知不觉干了一年。公司还算是不错的,技术分享是 CTO 在推,健身房,三餐也都不错,工作电脑虽然不是 Ubuntu, 但是 mac 还还算不错。主要还是团队够年轻,大家能聊天,说说想法,聊聊产品,比较自由。和在之前的公司那种 “你发需求我来实现” 纯包工的方式不太一样的。

工作内容的话,在刚过去的时候重构了一个状态比较多的聊天页面,我感觉现在逻辑还蛮清晰的,流程 debug 起来挺舒服。之后的大半年时间几乎都在做小程序。 所以我在之前的文章里有 diss 小程序应该是还算能说上两句的。

小程序的工程是一坨屎,真真正正的一坨屎。 感觉像是学了半年 java 的产品经理然后转了高级管理岗写出来的代码,没有设计思想,没有目标规范,没有逻辑,更别提什么封装内聚了。

不过小程序在一些隐私方面的想法还挺不错的。比如 离屏开放数据 既保住了微信的封闭性,又可以自定义界面。 广告方面的视频广告模块想法也很好。

说回工作。 写小程序的时候因为后端没人手,所以我和另一个同事两个人顺便连后端也写了。 后来就想清楚了,没有什么是没用的。 早年学的 PHP,去年折腾的 rpc,今年都用上了。现在线上有两个 api 服务,一个 rpc 服务,还有几个公有包都是我们写的。 性能,稳定性,测试覆盖率都没什么问题。 今年公司的 Hackathon 因为 safari 的回弹不能解决,顺手还写了一个 ios app,用 webview 包了一层,屏蔽掉 scroll view 的滚动。

有很多人,真的真的很多人说,不应该学那么多东西,应该学精。广度和深度这两个方面,深度更重要。我理解他们都是为了我好,但是我觉得纯 web 上已经没有什么能够再让我惊叹的了。浏览器帮 web 屏蔽了太多太多的细节,javascript 也帮助处理了太多 gui 中特殊的问题。 写 web 很多时候像是在学校里上课,外面的风风雨雨学校都帮忙屏蔽了。我们不在乎内存调配,不在意线程通讯,更不用考虑集群和负载。

其实仔细想想,如果只是非常低端地画页面,那确实是纯前端,但是工作, 生活并不是这样。

写逻辑一定要考虑代码优雅规范,代码优雅又要了解很多设计模式,了解设计模式的话,那么 java, c# 是过不去的坎。 FP 可能是另一条路,但在我这里不是。 写程序大了同样要考虑性能,把 int 换成 int8, text 改成 varchar(32),那么改动的意义需要背后的计算机理论支持。

很多时候能力是 80 分的话,老板只会让你做难度为 60 分的事情。能力 100 分了,80 分的事情才可能交给你。

代码怎么写都能运行,但是写好完全是另一回事。

今年的工作中成长还是挺大的。 由于和产品,设计坐得比较近,很多时候能有更多的沟通,也更了解了他们的想法。 比如我非常不能忍受给用户的单词太简单了,但是产品不会听我一面之词,他会看用户画像,查用户打点操作,做各种测试,结合其他数据最后告诉我说这些单词就是应该简单。 设计也是,我总是催设计搞一些激进的,华丽的动画效果。但是他也需要考虑排期,考虑用户接受度,考虑之前的操作习惯。

工程师是一批站在比较靠后位置的人,远离用户的弊端也是不能正确认识用户。 也许很多事情并没有那么简单。

前面说到了 FP(Functional Program),我顺嘴也说说自己的看法。 如果你看过我之前的文章会了解到我在之前也是对 FP 有一些向往的,在 2018 的 OKR 里面也定了了解 Haskell. 只是今年在我了解了一些 FP 之后,我对它的认识变了,不再是那个 “凌驾于面向对象之上,很牛逼很无敌的编程方式” 了,而变成了 “可以写出来不错的小功能,但是可能 hold 不住工业项目”。

其实与其说是 FP 的了解倒不如说是对 OO 的认识程度更深了。在我的观点看来,项目上了规模或者时间以后,面向对象和强类型仍然是最好的代码组织形式。interface, abstract class, type 这些在 js 里都没出现的东西,在多人协作,保护不犯傻事等方面竟然如此好用。面向对象解释起事情来竟然是如此的清晰便捷,自行车有两个轮子,能行进,有最大速度。SUV 有四个轮子,也能行进,有最大速度。再明显不过了: 它们继承于同一个 class,实现同一套接口。没必要搞一个 meta function 去生成各自的 run 方法。而且内部把作用域换来换去的。

关于分享

今年在前端组内分享了几个话题。分别是 小程序,vim,以及推送服务这三个话题,有兴趣的可以 点这里查看

很久之前我也有幻想过能站在讲台上说点儿什么。但是临到跟前,才猛然意识到其中责任之重,难度之艰。仔细回想起来我也才意识到对于很多技术上的理解也只是浮于表面,用浮于表面的水平去给大家分享其实是个很不好的事情。而且我的听众里基本没有小白,也不能说一些太过于简单的话题。

关于我的分享的话题到这里结束吧。说到分享可能得提一下阮一峰。我想国内程序员有一半得知道这个人吧。我们多多少少都曾受到过他的恩惠。无论是文章,还是一些书籍。他可能在一些深层次的问题上理解不够深入,但是解释基本技术上的能力确实是非常强。有很多技术都是通过他的文章在国内普及。程序员圈子里是有一个批判阮一峰的风气的,声称他技术垃圾,写点儿基本文章还错误百出。我实际上非常不服气。这些标榜自己为技术专家的人有指导过初入行的前端怎么理解跨域,怎么写 flexbox 吗?他们当然没有,这种低级技术不值得他们考虑。他们有指导学生应该如何入门吗?

他们早就忘了自己是个初学者的时候了。他们早就忘了自己也曾经是个无知懵懂的孩子。

这和游戏里面那些喷子的性质是一样的。看起来把别人骂得狗血淋头似乎自己很厉害,实际上很多时候只是一个小丑。而在内心,是懦夫。他们不敢承担教育大众的任务,无力承受历史赋予的重任。可能三五年之后,这些人就会消失不见,也许他们的代码还在,但一定会被新人重写。

而阮一峰这样的人,他的文章会传下几十年。也许三十年之后没人用 css,也不写 es6 了,但是他的《黑客与画家》必将流传,他那种图文并茂的写作风格,言简意赅的行文流程会在第二个阮一峰上发扬光大。他这种破除壁垒的精神应该被颂扬。

说到行业壁垒。我发现很奇怪。很多时候各个行业的壁垒并不是靠专业技能,也不是深入认知,而是缩写,是名词。这点和粉圈很像,一样的奇怪。

一个代码写得很好的应届生初入职场,能力上可以是 principle 级别,但是职位上得是 junior。怎么样让他在最开始的一两年心甘情愿接受这个落差,并且还假装公司能提升他的能力?全靠缩写,靠名词。比如 PRD, R&D, TB, TL

Lisa, 今天下午 TL 带我们 TB, 你的 PRD 可以拖一下。

面试

因为公司扩张的原因,今年有面试一些人。

最开始是老大带着我去面试的,前几个很恐怖,一看简历,都是五到八年经验,还有十年的那种。我看到简历吓得不行,老大也说这有点儿难,因为其中有几个人比他年纪还大。

然而真的到现场聊了两句,情况让人咋舌。说实话我大二都不止这么菜了,他们这十年在干什么很难让人理解。基础问题都答不出,甚至基本布局都是靠猜的。而态度上基本就是那个年纪才有的蔑视与傲慢。

之后很大一块时间我是在面校招。校招让我想起了我当年,所以我其实是很愿意放这些同学过去的,可惜很少有人是真的爱这个行业,很少有人喜欢前端,其中有理解,有思考的就更是没有。让人很遗憾。面试中很多同学还是用学生的方式企图通过面试。因为我害怕一开始就问一些需要思考的问题他们答不上来,所以我会先从那种大众面试题入手。然后就惊呆了。很多人都开始背书,把五种实现继承的方式全都背下来,那种背书的感觉和我在小学给老师背课文的感觉一模一样。没有情感,也不知道自己在干什么,只是声音发出去了。

第一个这么给我背书的人把我吓到了,之后的面试题她大多能回答(背诵)出来,所以我放她过去了。老大二面,给了个非常差的评价。因为让这同学写一个 delay 函数都不会,写 Promise 的时候是靠猜的。

之后还有个社招让我印象比较深刻。他的简历中到处都是精通,我在和他沟通之前很忐忑,但是沟通下来我觉得很疲惫。比如他写了 Git 精通,但是问下来似乎是除了 add, commit, push 三板斧之外其他都不了解。

到现在,唯一碰到一个还算有亮点的女孩子,博客有好好写,文章也有写。可惜的是技术不太行。

读书

今年读书不多。

今年年初把 《源氏物语》 看完了,这本书看了不知道是一年还是两年,反正周期很长。 这本书怎么说呢,太日系了。这种感觉说不清,道不明,如果你全文读下来会明白。像是那种看起来很正常,人死了,花落了,一切好像很正常,只是泪水会莫名其妙在眼角留下。全文没有强烈的情感波动,但是在合上书的时候,总能感受到一种怅然若失。

半年后的早上我走在去地铁的路上,风不大,地上略微湿滑,有点儿冷。突然好像有点儿理解紫姬死的时候源氏的心情了。只记得那天心情阴郁。

之后重刷了 《西方美学史》, 这个书是介绍了各个历史时期的哲学和美学思想。 书里也是没什么特别的标点符号,平铺直叙,轻描淡写。但是就是让人震撼,让我感觉到了自己真的是渺小到连微粒都不如,在这些真正的天才面前都羞于抬头。

可能有那么一瞬间,觉得自己的某个想法觉得很牛逼。草草记下,第二天又忘了。 殊不知早在几百年前就有人对此发表了文章,甚至成了体系。亚里士多德的余光在两千年之后仍然影响着西方世界。甚至世界民众的 80% 都没达到他两千年钱的思想程度。 可悲可叹。

《西方美学史》 对于专业领域的人可能是本入门书,也可能看不上眼,但是真的很优秀很优秀了。推荐有兴趣的朋友去读一把,不会亏的。

之后读了 《日本现代史》,主要说的是德川幕府末期到现代日本的这么一段时间的政治经济文化等方面的变化。和之后读的 《乡土中国》,以及鲁迅的两个文集 《呐喊》,《彷徨》 合在一起,好像是看到了一个和高中课本里不太一样的近代中国史,也认识到了似乎是一个不一样的思想变迁。

我还记得上学的时候,说到旅顺战役,它只存在于右上角一个可能只有一半宽度五六行的文字就概述的地方,结论是两个帝国主义在中国领土争斗,侮辱中国。

那么真实情况是怎么样的呢?日本拼了老命干倒了欧洲国家各个都怕的沙俄。而且是第一次东方国家击败西方。要知道那个时代可是连秘鲁这么个地方都敢跟大清商讨割地赔款。而但凡思想稍微活络一些的朋友就会明白当时中国的知识分子绝对不会是 “你俩在我家打架,让老子很没面子” 这种无厘头的想法。

这场战役的影响程度远比鸦片战争要轰动得多,只是在一些奇怪的力量驱使之下,它只存在于那么短短几百个字。

下一个问题,日本佃农和地主的关系起初很是和谐,而且日本整个近代史,农民和地主关系虽然没那么好,但是也没有紧张到说像是七十年代戏曲里面那样。而日本知识阶层是学习的中国文化。为什么中国,两个阶层的对立就这么夸张呢?

这个问题想的人不多,它比较基础了,像是空气之于人一样,很少有人在意空气的重要性。

在很多文献,或者当时写的文章中,农民和地主的关系并没有那么紧张。鲁迅小时候还经常和闰土一起玩,家里有什么东西还会带给闰土一些。而且知识分子的文人气节以及他在当地的社会地位是不会允许他们把坏事做绝的。甚至必要的时候还得关心一下,即使是假装。然后,不能再往下想了。

还有很多问题,可以深挖的地方太多了。看过这些书对我的震动不止是真相。而是还有什么是我 “以为是正确的,实际上可能是有失偏颇的” 。

好像还有其他一些什么书,可是书名有些记不住。我也没有刻意记下然后让自己说一些 “我一年看完一百本书” 这种 PR 的话,很无聊。有个比喻说读书很像: 读过的书就像是一颗糖粒,一颗放在水里,喝下去没有什么感觉。而读的书越来越多,质量越来越好,量变引发质变。这杯水就会变得很甜。

最不济,和妹子聊天总能说上吧。能从吴亦凡谈到苏格拉底的人又怎么会不合适做男朋友呢,对吧。

技术上有一本 《高性能 MySQL》, 还有《现代操作系统》,其他的可能记不得了。这两本书还挺不错的。让我印象比较深刻的是 “优化” 这个概念。似乎计算机上的每个结构,每个软件,都在做自己的 cache, 来使得响应更快。 很有意思。高性能 MySQL 吐槽了很多 MySQL 的问题。但是还是给出了很好的解决方案。

所有搞过数据库的应该多多少少都耳闻过类似于 MySQL 垃圾 这样的话,但是还是一个又一个的公司用上了 MySQL。 我完全能理解他们的顾虑,但是我还是不能苟同。要知道 Postgres 都到了字节码优化的时代了,而 MySQL 还只是 parser, 更不用提 Oracle 了。

这牵扯到一个技术选型的问题。我在看了 《黑客与画家》 之后其实对于这种事情比较确定了。虽然吃过不少新工具的亏,踩过不少新框架的坑。但是我还是选择新的。老的可能稳定,然而我最不需要的就是稳定。我需要的是高速发展,是破坏,是做到别人做不到的好。而不是和别人一样

我看书习惯是在地铁上。我想了很多原因,最后不得不面对自己:懒。是的,我没什么空闲。一天大部分时间在工作,回到家累了就玩玩游戏,和女朋友说说话。不累的话就写点儿自己的项目。个人空间可能只有地铁上了。其实我在地铁上看书还蛮有效率的,虽然看起来比较嘈杂。只是有些非常需要精力的书不合适,类似的书有 《SICP》。

建议地铁时间长的朋友可以试试。我已经大概三年了,现在阅读量,也不算太差吧 😝

行走

我其实很不喜欢出去。出去意味着要花费很多的时间,要接受几个我非常非常不能忍受的酒店(我个人非常嫌弃酒店),要被宰,要花钱。

但是女朋友喜欢,其实有时候我不知道是她喜欢出去玩,还是怕我在家里呆久了人会变呆才叫着出来玩。

总之今年跨年去了泰国。一开始是想着韩国或者泰国越南的。去泰国的原因有几个,一方面是比较便宜,另一方面也是因为冬天了,不适合去韩国。

记流水账不是我的风格。只说说印象很深的几个部分。

最后,穿上棉衣回国,久久不能忘记。

读万卷书行万里路还是蛮有道理的。比如我的英文都是在国内学的,也没什么勇气说出去,但是在泰国没办法,真是说了太多的英文。现在我也感觉自己没那么害怕说错了,反正大家都能懂不是。说英文的目的也不是把语法说对,把单词换得更高端,是表达出自己想要的意思。

另一个行走经历是春节 —— 回家。

回来之后,我比去年感觉更加强烈了 —— 家里不适合我。

在初高中的时候,我一直都以为自己有鼻炎,因为我总是会流鼻涕,所以无论做什么,我总会背包,里面装上一卷纸。之后去了南京就好了一些。到今年回来我都忘记自己还会流鼻涕的时候,又流了鼻血。从小的教育都在告诉我,不应该从其他地方找原因,应该从自身。我会流鼻涕可能是我做错了什么,吃了什么不该吃的,吸了什么不该吸的。而不能怨其他人。

真的吗?

我家门口的路,双向八车道。修了至少十四年,到今天还在修。为什么?除了假装增加莫名其妙的 GDP 我不知道还有其他什么原因能让一条路修 14 年,而且这么宽的一条大路竟然连路灯都不开。

至于教育更是可笑。我一个外省的朋友常年待在郑州,他说他身边的本地人很奇怪,最后总结下来就是那种笑贫不笑娼的状态。这让我回想起小学的语文老师,高中的数学老师,毁人不倦。他们灌输给小孩的是那种要挣钱,你做题就只是做题的奇怪观点。而家长的任务则是每天冲击小孩子正确的世界观,把思维正常的孩子叫成 傻子二愣子 这种称呼。

这是一个闯红灯都能闯出优越感的城市。

不知道是不是因为我身边全是拆迁户的原因,反正我对这个城市的市民素质和价值导向非常失望。

郑州当然也有好的老师,好的人。只是感觉他们留在这个城市不值得。他们应该被更好地对待。

当我回到家里,感受到的只有阴沉,负面,吵叫。很长时间我在思考,为什么会变成这样。我只能庆幸自己变成了他们眼中的傻子。

但是他们还是影响了我,深深地影响了我,即使很抗拒。真的跟我很熟悉的朋友会了解到,我对人的认知是从负面先开始,在做决策的时候总是倾向于悲观情况,选择能承担更多失败的方案。比如开发排期,比如技术选型。我能明白我存在的这些问题,但是太难改掉了。少年时期种种的耳濡目染让我没办法再次改变性格。我也庆幸自己离开地够早,没有陷入太深。

明年也许我不会回来,也说不定。

Side Projects

就是自己写的小项目,目的只是为了学点儿东西。

一个项目叫 Athena, 这个项目现在想想有点儿大了。两个 rpc 服务,一个 http, 还依赖于 redis, postgres 服务。由于是 graphql 沟通,所以还需要一个 schema 的 repo 去统一 query,客户端有三个,分别是 web, android, iOS。。。还没完,还有一个爬虫脚本,一个图片迁移脚本。涉及的语言有 golang, js, ts, sql, java, swift, gql, python。现在想想,一个个人项目整这么多事情,真的是没必要。

这个项目由于监管的原因,我从未开放过注册接口。主要用户也只有我一个人,一些朋友体验过,但是由于没有合适的客户端,可能都渐渐淡忘了。

现在图片资源内容有 73G 左右了,意味着除了服务器开销之外,我每月还得交至少七块钱的 cdn 服务费。

对于这个项目来说,今年算是完成了 “可用” 的功能。主要是 iOS 和 web 客户端达到了可用的状态。然后导入脚本也实现了规模化。

我知道我说的很含糊,应该没人看得懂。其实这些只是说给我自己看的。😝 我也没打算给谁看懂。谁有兴趣可以发邮件给我,我考虑一下可以给你开账户体验一下。

另一个项目是 Clippingkk 这个项目启动于 2018 年年中。启动原因主要有两个:一是想学 Windows UWP 开发。二是我用 Kindle 但是没有个好的笔记整理软件。这两个原因促使我写了这个项目。在立项之初我一直阻止自己写 web 版,因为我知道,一旦我开始写 web 版,可能两天就写完了,再也不会管 Windows 版,学 Windows 的计划就会很难完成了。

这个项目没有像 Athena 那样搞那么大。后端只有一个 golang 写的 http 服务,用的 restful 接口。前端是 Windows 全家桶。由于这个项目立项之初的目的是倾向于学 UWP,所以后端就朝着简单的方向做的。其实学 Windows 真的让我学到了很多。Visual Studio 不得不称赞是迄今为止我用过最强的 IDE。C# 是严谨,简单,优雅的结合体。UWP 的抽象程度十分优秀。无论是编译,发布,debug 流程都非常顺畅。和 web 开发非常不一样。在 web 开发那边,你可能需要花半个月去搞 webpack。具体夸 Windows 开发的话可以参考前一篇文章。

这个项目目前的情况是 Windows 已经上线了。Web 版还在我手里,过了年回到上海就发版本,客户端用了 Flutter 写的,也准备过了年回到上海的第二周发个版本。

对了,这个项目主要的功能是整理 kindle 笔记。我发过版本之后,感兴趣的朋友可以试试。到时候我再写一篇文章出来吧。

KR

我觉得应该给自己订几个 KR,学习一下公司的策略。

  1. 技术精进。具体操作是工作上能写一个 PostMortem,尽量,这个可遇不可求。然后 ClippingKK 代码量能再加一些。具体定一下:多加十个页面,优化两个页面。平均一个月一个了。强度不算小。

  2. 吹牛逼能力提升。一年内公司内部分享三次。ClippingKK 注册用户突破 300。

  3. 提升文化修养。政史经哲各刷一本比较专业的书。技术书籍至少一本。顺便翻译一篇外文长文,中文字数大于 6k 的那种。

最后,新年各位一起加油。