近几年我看过最好的一部同人

许多漫画都能让我大呼过瘾或是沉浸在剧情中无法自拔。相对而言,能触动我的同人本不多,毕竟篇幅和剧情你们都懂,最多也就感叹一句画风真还原或者这 TM 都可以。

然而前几天我看了一本丧女同人,第二天又看了一遍。我想我要写一篇文章。

本子的名字叫《大学生だしルームシェアする》,作者是 sanada

不夸张地说,这是近几年我看过最好的一部同人。我真的被打动了。

这部作品牛逼在,作者基于对角色的深刻理解脑洞了一些角色之间的互动,其大胆又合理的想象甚至让我觉得可以直接作为原作后传,而且几乎每一页都可以让读过原作的人笑出声。

作品讲述的是临近高中毕业,黑木开始思考以后是要自己租房还是跟人合租。然后就是后宫团成员们纷至沓来,每个人都脑补出了和小丧一起租房的场景。选几页有代表性的图吧。

上图是百合和小丧一起租房的场景。小丧和优打电话,然后百合果断吃醋。

面无表情找小丧一起睡的百合,awsl

接下来出场的是加藤。

作者对加藤妈妈的刻画实在太绝了,后面百合和尼姆的眼神我看一次笑一次。她还画过一个的小丧 x 加藤的本子,也非常赞。

颜文字和尼姆的图就不放了。漫画的每一页都很有意思,每一页。

然后就是让我决定写下这些文字的一幅图:

Y-Yuri-chan, I…

When I'm with you…

I can have fun being myself.

这个理解,真的太太太太太强了,除了牛逼我想不出别的形容词。因为我自己是站百合的,所以我很清楚小丧和百合的相处模式和与其它人不一样。但直到看到 sanada 借小丧之口说出的台词,我才真正明白了区别所在。我可以肯定 sanada 也是站百合的。她对角色的理解的深刻程度,可以说达到了 EVA Re-Take 的级别。

同人本是一类特殊的作品,要从中获得愉悦是有门槛的,因为它要求读者对原作熟悉并喜爱到一定程度。类比一下,就好像只有天才们才能体会到数学的美。我恰巧超级喜欢丧女的原作,这也是为什么我会被本作深深打动。没读过原作或是对原作无感的朋友,很遗憾,你们错过了一份珍贵的礼物。

最近遇到的几个问题

最近我负责维护的一套系统出了不少问题。痛定思痛,决定总结一下。

根本原因有两个。

没有及时删掉不再使用的代码

在最近的重构中,我重写了一部分功能,导致原来的一些代码成了幽灵代码。问题源自一个 getter,它返回一个类的属性。这个属性在旧逻辑中一定会被设置,但新逻辑中不会。因为需要删除的代码很多,我在重构时加了不少 TODO,想的是等测试没问题了再一起删掉。然后就出问题了。一块我没注意到的代码调用了这个 getter,并且依赖它的返回值进行一系列判断,由于拿不到正确的值,这部分功能直接挂了。

这给了我一个教训:删除幽灵代码是实现新功能以及重构的必要工作,而不是后续。不仅仅是要最终删掉,还要删得及时。想把代码多留一会是程序员的本能,“万一有用呢”。我们必须去对抗这种本能。

单元测试真的不靠谱

按理说有测试,前面那个问题应该能发现。但实际上并没有。单元测试里该 mock 的东西都被 mock 掉了,包括那个不应该继续存在的属性,导致测试 false positive.

从本质上来说,单元测试之所以不能发现所有问题,是因为程序有无穷多的输入和内部状态,而单元测试只能检测其中一部分,即使代码测试覆盖率达到了 100%。依赖别的组件的测试又往往需要 mock,一旦实际运行状态和 mock 不符,等于什么也没测。因此测试不挂说明不了任何问题。

一般而言,集成测试(integration test)是单元测试的良好补充。然而这套系统是一个 streaming system,数据来源又多,想搞集成测试是真的难,我并没有足够的时间来做这件事。这种情况下,能做的也只有起一个测试环境,手动测试。其实重构后的代码在测试环境里也跑了几天,但我恰恰没去测试那个功能。以前看见 QA 们照着文档一遍遍重复相同的操作,觉得真繁琐,现在想来,这种繁琐和机械化是不可或缺的。

类似的,另外一个 bug 也是因为测试里输入设置得不对,并且最后没有实际验证。

话说回来,如果有无限时间,那么我们完全可以把整套运行逻辑都想得很清楚,检查每一个单元测试是否需要更新,这样所有的问题都可以避免。然而人不是机器,一定会有注意不到事,并且我们也没有无限的时间。因此我们只能尽量运用一些“原则”,去减小犯错的可能或是提早发现错误。

要学的东西果然还有很多啊。

所以,到底要不要读研?

Update
V2 上关于读研与否的讨论真的是生生不息。。这篇文章我也贴了一遍又一遍。

估计有的人不喜欢看长文,那我直接给个结论吧:对于工作三年跳槽进不了大厂的,就算读了研,一样进不去。


过去几年,我零散地表达过一些对读研的看法。鉴于最近有人感兴趣,我也正好写篇文章总结一下。本文所说的“读研”,特指在中国境内读三年制硕士研究生。这也符合大多数人的情况。本文所谈论的“读研”不包括:读博、读两年制项目、在职研究生、出国读书等等。

我对读研怎么看?用一句话概括就是:如果你明确知道读研就是达到既定目标过程中所缺失的那个条件,那就去读。否则不要读。

在展开讨论之前,我必须先讲一个致命的思维盲区:权衡要不要做某件事的时候,只看到做这件事的收益,而完全不考虑因此导致无法做别的事所造成的损失。以读研为例。有人说“读研提升了学历,增加了进大企业的机会,好处太多了,一定要读”。True,我承认有这些好处。问题是,你把这些好处放在天平的一端,另一端放什么?如果什么都不放,那最后的结论当然是读研好。但应该这样比吗?不该啊。要放在天平另一端作为比较对象的,不是三年前的你,而是没读研去做了其它事的那个你。一个人要判断的,不是读研带来了多少收益,而是读研和其它选择哪个收益更大。这才是正确的思考方式。

有了上面这些基础,我们来列举几种常见的值得读研的情形。

情形一,你想去的地方,对学历有明确要求。包括但不限于积分落户、某些事业编制、男/女朋友的家人要求你必须是硕士等。没什么好说的,去读就行了,毕竟你没法改变规则。

情形二,你想去的地方,对学校有明确要求。比如某岗位要求必须是 211 及以上,而你之前只是普通一本。这条看似和上一条类似,但其实不一样,后面会说。

情形三,你想转行。比如误入了天坑专业的学子,想完全依靠自己力量跳出去实在是太难了。用人单位看到你本科专业,可能直接就把简历扔了。去读个对口专业的研究生会好很多。

情形四,你想去的地方,拥有硕士学历能带来更好的发展。诸如政府机关、国企、军队,唯学历论依然盛行,本科生和硕士可能会被分配完全不同的就职岗位和培养路径。

当然,上面只是几个例子,无法涵盖全部情况。归纳起来还是最开始说的:如果你明确知道读研就是达到既定目标过程中所缺失的那个条件,那就去读。

然而,大部分人连目标都不确定,只不过是把读研当做一种改变命运的美好幻想罢了。幻想的形式包括但不限于(随便从这个帖子里摘录几条)

谁说计算机从业人员就只有程序员、进公司 code 这一条路了,选择读研读博继续深造的,可能是想在计算机前沿领域进行研究,以后仍然可以选择进公司或者出国留学然后留校留研究院搞科研学术。

读博我们这里不谈,但你跟我讲读研深造?我就想知道第一年上课最后一年写毕业论文找工作可能还有实习请问你要怎么搞研究?把学术界当儿戏以为成果能随便就能出?你想读研留校搞学术,我还想去二次元开后宫呢,好不好?

因为你儿子 /女儿以后可以跟同学说我爸不是个纯 code 屌

笑尿了,读研就不是“纯 coder”,就高大上了。这种话简直不值一驳,能说出这话的人可以想象是处在怎样一种封闭无知的圈子里。

控制变量,能力相等的情况下,有研究生学历的你,和没有研究生学历的你,哪个在别人眼中更优秀?

这个还是有必要说一下。对于能提升学校档次的考研,我完全支持,但首先你得确定这是你需要的,其次是你得去一个真正提升了档次的学校。你说我从xx理工学院城市学院考研到xx化工学院科亚学院,读不读又有什么区别呢?还不如去积累工作经验。

看看今年研究生算法岗的神仙打架和工资....

不好意思,我就没见到哪家公司的岗位指定了要研究生,因为他们知道学位不等于能力,一个 NB 的本科生可以顶十个水货硕士。

能考上研究生的,整体水平要比本科水平高。不要把公司当傻子,研究生这个门槛天生就隔绝了能力水平稍低的人。

不值一驳。

因为太菜了,纯写代码竞争不过各位大佬。

所以你读完研就不菜了?读研不能让你脱胎换骨变成另一个人,醒醒吧。

大部分人平庸到谈不上靠能力争取到话语权,所以只能尽力找一个块儿厚点的敲门砖。

这句话不能说没道理,但首先,你总得先选好想进的门吧?

可能你眼中的程序员只是日常 CRUD 吧

嗯,研究生牛逼,做的都是高大上的工作,CRUD 什么的太没技术含量啦。

样本虽然小,但是我身边确实就学历和经验来看,学历高的比经验足的后劲更大。前几个月刚毕业来公司的交大小伙,现在熟悉业务了代码写得嗖嗖的,又好又快,而且产品那边一些新需求他也能就着英文文档去啃出来。而另一位 3 年经验的专科同事,虽然解决问题挺熟练,但是文档几乎不会啃,全靠简书和 csdn 里面的博客对着写,有些生僻点的玩意百度找不到,他那边就 gg 了,更不用说数据处理,除了日常的增删改查,其他的复杂的数据处理他那边就会僵住.

您厉害,这变量控制得真好。他厉害不是因为他是研究生,是因为他是交大的啊。

作为一名研究生应届毕业生,来说说我对此问题的看法 1.研究生选择更多。可以选择去做科研,做教师,工作职位可选择的也多,比如女生不想做研发可以做测试等等 2.发展空间更大。个人认为学历还是很重要的,尤其是在以后职位的晋升上 3.思维方式和学习更力。研究生期间,学习到更多的应该是看问题的方式,对行业的见解等等,而不仅仅是码代码 4.起点更高。更容易去大公司,起薪也会更高

1 不说了。2 是一种很奇怪的误解,因为我发现老一辈人(比如我妈)真的会这么想。但实际上除了少数地方比如国企,大部分工作并不存在本科生发展空间受限一说,尤其当你讨论的还是 CS 专业的时候。3 有一定道理。4 我要重点反驳一下,这就是前面提到的思维盲区的典型。研究生的你,的确更有可能拿到比本科的你更好的 offer。然而,和工作了三年的你相比呢?三年时间,快的话可以涨薪两次或是跳槽两次了,在大公司的话升一级没问题,快的话可以升两级,更不要提工作经验的积累了。别忘了学校和公司可是完全不同的。

程序员只是青春饭,你会发现上了年纪就不行了

读研之后你老了三岁,能吃这口饭的时间更少了。

校招大厂来面试的大多数是研究生,足以说明问题

看来 Google 不是大厂了。再说进了公司你就会发现研究生和本科生干活真的没什么差别。

...

这些幻想要批判起来说一年也说不完。不过相信大家也发现了一些共性,就是这种盲目推崇读研的人,往往对很多问题都缺乏基本了解,看问题也非常片面。我暗自揣测,他们中大部分可能并没有真正读过研究生,却又把自己目前的不如意归咎于没有读研,并幻想出了所谓读研之后的美好生活。我在计算所的时候,周围很多同学都觉得读研浪费时间,也包括我在内。有个哥们实在受不了实验室安排的无聊工作直接退学然后面试进了头条,人家也没嫌他学历不够。总之呢,读研这件事好不好,各人有各人的情况。对想进互联网行业的同学,可能确实是浪费时间,但若是想去考公务员或者拿户口,可能又很必要。关键还是要清楚自己的目标,分析自身情况,再来判断读研到底是不是一个好的选择。

写这么多,想说的基本都说了。我试图保持客观,但也并不想掩饰对读研的负面看法。说真的,如果国内的研究生学制也是像国外那样是一年或者一年半,我断然是不会写这些的,因为读了也就读了。然而,它是三年,还是你人生中非常宝贵的三年。三年时间是真的不短啊。好好思考一下三年你能做什么,是否值得用这段时间去换一张文凭。我希望所有人都能做出令自己不后悔的选择。


top