是时候了

上周五答辩,本周一提交了全部材料,至此学生生涯已走到末尾。写点东西来记录一下此时的想法。

关于出国

高中班上有四五个同学打算考 SAT。我的好友是其中之一,高二他便去了美国,留下一个非常夸张的 SAT 分数和无数传说。另有因户口问题无法在北京高考的同学,出国是他唯一的选择。当时大家对于去国外念本科这件事没什么特别的看法,无非就是觉得出国党将来要去的学校和大家不同,以及不用高考很爽。即便如此,上铺的哥们拿到哈佛 offer 这件事还是引起了不小轰动,说起来毕业后我再也没见过他。

本科则是另一幅光景。T 大建校时就是留美预备学校,学生们调侃百年之后还是。许多同学大一就想好了要出国并开始背单词。我没什么想法,但受到某人蛊惑报了个 GRE 班,搞笑的是他自己没去上。虽然时间不长,多少体会了一下新东方的段子文化,也知道了 GRE 是什么。上完课之后我就再也没碰过 GRE 的东西,为什么呢?因为根本没有余力去学,更重要的是,我意识到凭我的渣成绩根本不可能有学校要——即使连 GPA 都没算过。我妈总说我没追求,这是事实,并且我也并不觉得在国内有什么不好。最终学习最顶尖的一批人大部分出国,少部分留校。总体来看出国比例大约四成。

研一住在怀柔。隔壁单间的同学总是不上课,后来问了才知道是在准备 GRE。研二我们回所,他退学去美国念硕士,反而更早毕业。 这件事除了让我惊叹 “原来还可以这么玩” 并佩服他的行动能力之外没有产生什么影响。让我的想法发生转变的是研究生三年的所见以及思考。 去年 6 月 26 号的时候,同事前辈邀请我参与创业项目。我是这么回复的:

…… 接下来的几个月我把它看做活到目前为止将要面对的最重要的几个月,甚至重要过高考的时候。并不是说找到一个工作需要这么大精力,而是我非常非常想找一个国外的工作,如果错过了这个时间,这辈子可能就没有出国的机会了。当然这件事难度极大,并不是说投入了时间就一定有结果,但是如果因为投入的时间不够而失败,我大概会后悔一辈子的。所以真的很抱歉,并不是我不愿意帮忙,在其它任何时候如果你找我我都会答应,但是唯有这几个月,面对如此困难的事,我除了投入尽可能多的时间真的没有别的办法,不求别的,只求将来不会后悔。

为什么我的想法改变了呢?总结起来有以下几条:

  1. 大大

    我发自真心地感谢大大,如果不是他,我绝无可能下定决心拼上所有力气挤进 Google。是他让我意识到,国内的环境在相当长一段时间内只会越来越严酷。关于这点其实我在很多文章里都提到了。有人觉得因为这个理由想出去很不可思议,其实我丝毫不怀疑中国最终会达到一个理想的状态,只是我不想在黑暗时期度过人生中最好的一段时光,也不想承担不必要的风险。

  2. 技术

    在知乎的一个回答中我曾写到:

    各种技术的中心仍然在美国,并且几乎不可能转移到中国。以我最熟的 Python 举例吧。Guido 在美国,核心开发者美国欧洲为主,各种广泛使用的第三方库的开发者也在美国。这些人的存在提升了上限,换句话说你可以接触到这些人,提升自己变得和他们一样好甚至更好。中国呢?上限也就是大厂资深工程师了吧。

    这种感觉在听了无数国外 PyCon 和参加了三次国内 PyCon 之后变得愈发强烈。我不怀疑在 BAT 干五年能成为独当一面的工程师然后被安上个 “架构师” 的头衔,然而也就到头了,你能接触到把你带入各种核心开发者圈子的人吗?不能。你能继续钻研技术吗?可以,无非是被人议论 “这哥们三十多还在写代码,是不是有毛病?” 当然,国内也有很多超级大牛,比如章奕春、比如鸟哥、比如云风,但总感觉少了点什么。不论是计算机科学还是程序员这个行业,美国都比中国早发展几十年,这也是很正常的事。

    另一方面,在国内写代码就不得不与墙、备案以及傻逼运营商战斗,这些无意义的事情将耗费许多时间与精力。

  3. 人生道路

    Robert Frost 在著名的《The Road Not Taken》中写道:

    Two roads diverged in a yellow wood,
    And sorry I could not travel both

    随着阅历逐渐增长,对 “Road Not Taken” 的体会也逐渐加深。某天看见 Fenng 写的一个答案,完美表达了我的想法:

    对很多刚毕业的优秀应届生来说,BAT 是一种人生路径,但选了这条路,你几乎能看到自己的轨迹。走出去是另一种路径,它的变化和可能会多得多。年轻人,总得要考虑下生命的广度和厚度。

    是的,直到最近一年我才意识到,我对于获得更广阔体验的可能性被扼杀有莫大的恐惧,这种恐惧甚至超过了对大大政策的担忧。进入 BAT,不出意外会干几年。之后要么互相跳,要么就去创业公司。不是说在国内工作不好,但是走上这条轨道你就别想出来了,就像 Fenng 说的,“你几乎能看到自己的轨迹”。对很多人而言,这不足为虑;对我而言,这很要命。

大致的理由就这三条。其它七七八八还有不少,比如更好的空气、更优厚的待遇、更少的加班等等。国外也有糟糕的地方,比如安全和医疗,所以并没有完美的选择。

智商、科研及我的天赋论

小学六年级时,班主任曾经让大家上台讲自己将来想干什么。我说以后想成为制造武器的专家——毕竟到高中为止都是军迷。虽然从来没说过自己想当科学家,但因为成绩一直很好,所以也觉得有可能。大三下学期报了一个 SRT(Student Research Training)项目,跟着指导老师开始读论文,研究 Dirichlet model、CRF 这些东西。最后改了毕业师兄的一点代码,把项目糊弄过去。SRT 让我确认了两件事:1. 我的智商不允许我做科研;2. 我不喜欢读论文。所以结论是我不适合做科研。现在看来,在本科得出结论还是很重要的,因此我从一开始就没有对研究生阶段抱有不切实际的幻想,只当做转专业和找工作的步骤。劝我转博的话也都当耳旁风了。

再说智商。这么多年下来见识到了身边的不少神牛,让我逐渐对自己的智力水平有了比较清晰的认识。我自认属于一般人中比较聪明的,这意味着虽然看起来比大部分人聪明一点,但仍属于普通人,和真正的高智商群体有巨大差距。这种差距我已在无数场合体会过无数次,自知无法弥补。想在科研上做出东西,智商是基本的硬指标。当然这并非绝对,有时毅力能够弥补智商的不足,有时好运会把重大发现砸到你头上。

这么一说好像显得我认为智商不足就没法活了。其实不是这样。下面说明我对于 “天赋” 的看法。

  1. 天赋的本质是一种或多种优秀身体能力的组合
    身体能力泛指身体的属性及对外界的反应,理论上有无限种,比如脑子对数字敏感、空间感好、红细胞能携带更多的氧、手比较大、动态视力好等等。而把一种或多种优秀的身体能力组合起来就构成了天赋。上面提到的智商在不同语境下对应不同的身体能力组合,一般而言包括记忆力好、抽象思维能力强等。

  2. 天赋有无限种组合,在任何事情上都没有天赋的人是极少的

  3. 大部分人找不到天赋所在的原因有两个:
    a. 接触不到自己有天赋的那件事
    比如,生在中国,就算你有足球天赋,但是父母一般不会送你去踢球,很多学校也没有足球场;
    b. 每一个历史时期,人类社会能够提供的职业都是有限的
    比如,某个人可能有制作陷阱的天赋,在人类需要打猎的时期,他可能会获得很高的地位,然而现代社会不存在 “制作陷阱” 这种职业,所以这个人既意识不到,也无从施展自己的天赋。

以上就是我对于天赋的看法。后来偶然发现有人的想法与我契合。其一是 Donald Trump。《The Art of The Deal》第二章中有这么一段。

Moreover, most people who do have the instincts will never recognize that they do, because they don't have the courage or the good fortune to discover their potential. Somewhere out there are a few men with more innate talent at golf than Jack Nicklaus, or women with greater ability at tennis than Chris Evert or Martina Navratilova, but they will never lift a club or swing a racket and therefore will never find out how great they could have been. Instead, they'll be content to sit and watch stars perform on television.

其二是 Clifton StrengthsFinder, 书的名字叫《StrengthsFinder 2.0》,我看的是中文版《优势识别器 2.0》。其核心观点是:人应该去寻找自己的长板,并根据自己的优势决定职业、做事方法,弥补短板虽非毫无意义,但事倍功半。书中还写到:

近期的一项研究表明,人的基本个性其实在很小的时候就会有所显露,这个年龄甚至比我们之前所想还要小。新西兰一项跨度长达 23 年、针对 1000 个孩子的研究显示,孩子 3 岁时表现出的个性和其 26 岁时的个性非常相似。这也是为什么优势识别器要测试你个性中较稳定的元素——天赋——的原因之一。

不过这本书更关注的是 “精神” 方面的天赋,它总结出了 34 个天赋主题,比如专注(Focus)、搜集(Input)、责任(Responsibility)、审慎(Deliberative)等。做了书中提供的测试后感觉还挺有收获的,发现了一些未曾注意到的事情。

书中提出了一个公式,我认为完美解释了努力和天赋的关系。

天赋(天生的思考方式、感受方式和行为方式)X 投入(投入到练习和开发技能、学习基础知识上的时间)  
= 优势(持续做出近乎完美表现的能力)

关于人和人的理解

人与人无法相互理解。日本人特别喜欢在动画里表达这个主题。大四看了《献给阿尔及侬的花束》,一个人因为智力变化看到了完全不同的世界,这让我意识到不同人看到的世界差异只会更加巨大,而且我们都只认为自己看到的世界的才是真实的。

想说的是,上面写的所有文字都只代表我个人的理解,一些内容和真实情况不同,另一些或许和读者的想法不同。你们看看就好。

新的开始

到现在为止我还没有按自己希望的方式生活过,一方面是想法的形成需要时间,另一方面是客观条件不允许。随着我逐渐理清自己的想法,这时被困在学校中就如同在地狱一般煎熬了。客观地说,研究生三年给了我很多新鲜的体验,将我带到了足够高的平台,而另一方面,三年时间也浪费在了许多无意义的事和莫名其妙的不便中。当一切结束之时,我记录下自己的想法,这篇文章就是我为学生生涯写下的句号。

奇迹的四月

四月新番逐渐开播,数了一下感兴趣的作品,居然超过了 10 部。超人幻想第一季那么好,要追;吊神坂本看了漫画,要追;逆转裁判,从高三开始玩到现在也八年了,为了玩 5 买了 3DS,能不追吗?黑色残骸,PA 的,追。爆音少女、田中君、文豪野犬、joker game、迷家,题材有意思,今石洋之的神经病番露露子,也可以追。甲铁城我本来嫌吹得太狠不想看,结果第一集看完我就知道没法不追了,这个制作太吓人,而且蒸汽朋克也是我的菜。这么一数,实在不少。

然而今天想说的并不是 2016 年的四月,而是十年前,也就是 2006 年的四月。如果你了解到那年春天出了什么作品,再听到别人说今年是最强四月,大可以一笑置之。

按照 bgm 的 rank 来介绍一下吧。我只说看过或了解大概剧情的作品。

银魂


银魂有多火随处都能感受到,不管出现在什么视频里,满屏幕的“愿用一生节操换银魂永不完结”就堆过来了。我对银魂本身没什么好评价的,因为并不是我的菜,就看过的部分而言,有些故事还是相当不错的。只不过,银魂厨实在是太……

水星领航员 第二季

ARIA 我还没看,但已经习惯了看见它在各种榜单里出现。据说是相当治愈的动画,大概未来会补。

凉宫春日的忧郁

虽然没看过凉宫,但是就感觉来说,凉宫是改变了业界走向的一部动画,其意义也不用多说了。在 ACG 群体中心目中的地位,凉宫大概排的上前五,只是我对这个题材实在没兴趣。

寒蝉鸣泣之时

前段时间把海猫补了,然后就不想补寒蝉了。听说寒蝉比海猫好点,但是这种反复轮回死来死去又不给出线索的动画真的很有意思么……不过看了海猫的真结局之后,真心佩服龙骑士能想出这样的剧本,的确是天才。这种容量和题材的故事,还是用游戏表现更合适。

黑礁

黑礁我只看了前几集,后来忘了为什么没继续看,之后应该会补。同类型而言,应该找不到比黑礁更好的动画了。

NANA

作为一个惊天巨坑,NANA 不知道让多少读者被剧情感动流泪之后又因为看不到结局而大呼坑爹。NANA 是少有的我觉得动画比漫画要好的作品,当发现导演是浅香守生之后,我果断把他放在了心目中监督 NO.2 的位置。然而,带着百合脑看 NANA 真是辛苦……

校园迷糊大王 二学期

关于 SR 我只想说一句:去看就对了!史上最佳校园番,没有之一。至于党争……爱理八云你在现实生活中遇到一个都能高兴一辈子好吗,还争个毛!

四月一日灵异事件簿

我很喜欢里面的故事,但某些地方真的是看不懂,因为涉及了 CLAMP 的其它作品。抛开这一点,单纯把它当做解决灵异事件的单元剧来看也相当有趣。大妈们真喜欢画衣服啊,侑子一集一件不重样。片子对于“代价”的强调很有意思。

樱兰高校男公关部

有人在弹幕里说樱兰是男生也能看的下去的乙女番,不过我几年前看了一集就不行了,也实在不知该作何评价。

西蒙

如果让我推荐一些冷门神作,那西蒙必然位列其中。西蒙对情感的描写胜过百合三神作中的任何一部作品,唯一的缺点是结局有点玄妙以至于我现在都没弄懂。动画的整体氛围和神枪少女第一季有点像,没有那么阴暗,战斗的间隙穿插着少女们喝茶聊天的日常。不得不提的一点是西蒙的音乐。来感受一下超神 OST 妖艶なる絆の響き,我实在想不到有曲子和动画契合到这种程度,好像能把画面印出来一样:

我的女神 缤纷之翼

我的女神第二季,启蒙了多少御姐控的作品。不过我没什么兴趣就是了╮(╯_╰)╭

传颂之物

只知道是有梦想歌的 GAL 改,别的不太清楚,不过从经验来看有经典音乐的动画都不会差。

翼·年代记 第二部

这部和四月一日同时在四月开播,所以每周有可能在两部番里看到侑子。据说相当于 CLAMP 作品的大杂烩。

惊爆草莓

三神作之一,不多说,以前写过评论

魔女之刃

没看过,但 ED2 是真好听。

彩云国物语

没看过,算是经典的乙女向逆后宫。同样有神曲《はじまりの風》

所以,今年的四月怎么能叫最强四月呢?

Requests 代理池

Requests 本身不提供代理池,然而爬数据又要用,所以只能自己搞。其实还挺简单的。我也不知道为什么这么有用的 feature 一直没有被加入。

import requests


class Client:

    def __init__(self):
        self._session = requests.Session()
        self.proxies = None

    def set_proxy_pool(self, proxies, auth=None, https=True):
        """Randomly choose a proxy for every GET/POST request        
        :param proxies: list of proxies, like ["ip1:port1", "ip2:port2"]
        :param auth: if proxy needs auth
        :param https: default is True, pass False if you don't need https proxy
        """
        from random import choice

        if https:
            self.proxies = [{'http': 'http://' + p, 'https': 'https://' + p} for p in proxies]
        else:
            self.proxies = [{'http': 'http://' + p} for p in proxies]

        def get_with_random_proxy(url, **kwargs):
            proxy = choice(self.proxies)
            kwargs['proxies'] = proxy
            if auth:
                kwargs['auth'] = auth
            return self._session.original_get(url, **kwargs)

        def post_with_random_proxy(url, *args, **kwargs):
            proxy = choice(self.proxies)
            kwargs['proxies'] = proxy
            if auth:
                kwargs['auth'] = auth
            return self._session.original_post(url, *args, **kwargs)

        self._session.original_get = self._session.get
        self._session.get = get_with_random_proxy
        self._session.original_post = self._session.post
        self._session.post = post_with_random_proxy

    def remove_proxy_pool(self):
        self.proxies = None
        self._session.get = self._session.original_get
        self._session.post = self._session.original_post
        del self._session.original_get
        del self._session.original_post

    # You can define whatever operations using self._session

替换掉 Session 原本的 getpost 方法就行了,不会有什么副作用。class Client 并不必需,直接操作 Session 是一样的。

可以用 httpbin 来做验证

def test_proxy():
    # visit http://cn-proxy.com/ to get available proxies if test failed
    proxy_ips = ['112.25.41.136', '180.97.29.57']
    client = Client()
    client.set_proxy_pool(proxy_ips)
    for _ in range(5):
        result = client._session.get('http://httpbin.org/ip').json()
        assert result['origin'] in proxy_ips
        result = client._session.post('http://httpbin.org/post',
                                      data={'m':'1'}).json()
        assert result['form'] == {'m': '1'}
        print(result['origin'])
        assert result['origin'] in proxy_ips

    client.remove_proxy_pool()
    client.set_proxy_pool(proxy_ips, https=False)
    for _ in range(5):
        result = client._session.get('http://httpbin.org/ip').json()
        print(result['origin'])
        assert result['origin'] in proxy_ips

top