再见,2017

第一次写个人的年终总结,想给不安分的 2017 年画上一个不完美的句号。人的记忆很多时候不大可靠,如果想活得更加明白一点,每年都企求进步,及时的思考总结是非常有必要的。时至今日,2017 年大概已经积累了大约 10W 字的书写量,定期写作的习惯已经成为了我生活的一部分,自然做一个年终总结是很有必要的。

Never Give Up, photo by Donny Yu

Never Give Up, photo by Donny Yu

前前后后写了大概半个月,这份不太长且有点杂乱的总结梳理了我在 2017 年的一些关键节点,我给自己找出哪些地方做得比较好,哪些需要改进,以及如何改进。

1. 这一年发生了什么?

沪昆线在距离学校不到两公里处,我特别喜欢听远远传来的火车鸣笛声,鸣笛声意味着出发、意味着离开、意味着新的开始。

跟大家一样,今年大部分的时间没有在学校,要么实习,要么独自在 302 机房上机、看书、读论文、写博客,除了每天晚上回去睡觉的宿舍,302 应该是我停留时间最长的地方吧。南来北往,在几个城市停停留留,很庆幸每新到一个地方总会结识一帮志同道合的新朋友或是偶遇老朋友。外面的世界很精彩,也很残酷、现实。我是一个比较喜欢体验新事物和环境的人,“新”代表挑战、不确定,不确定才有意思,一成不变简直要人命,所以极有可能固有的角色会因此而临时发生改变。所以,你新到了一个地方就再也不想待在原地是有原因的,那个时候便会明白什么才是“回不去的故乡”。

2017 年成长了许多,同时我也发现自己越来越无知了,不懂的东西着实太多,时间太少。很多时候,当我花了很多时间写了一个东西,做完之后感觉自己非常牛逼,恨不得马上告诉别人我有多厉害。但是这个冲动仅仅能够维持一分钟吧,因为马上发现你的想法早就被别人实现过了,一文不值,没有炫耀的资本。所谓见得多了,也就知根知底。另外我也学会尽量以平和的语气和态度处理身边的人和事,管理自己的情绪。物以类聚,人以群分,你的为人处世就决定了你身边的圈子。大多数时候是由于我们自身的所作所为而导致自己碰到不公平、令人愤怒的事情。

连续三次被别人问是不是当兵的

连续三次被别人问是不是当兵的

1.1 日出

打开车的窗,太阳在头上,公路的右方,无边的海洋

过完年,做完一个决定后,心情郁闷,回到学校的时候还比较早,食堂并没有开门。

刚到宿舍,站在阳台上抬头一看,晚春的天气还是不错的!突然就想出去走走!从本科的时候开始就想骑单车去衡山,由于各种原因不了了之。说走就走,把室友从家里叫过来,中午吃完饭就去汽车站坐大巴,记得还买错了车票,因为上大巴之前一直还以为衡山在衡阳市。为了看到日出,晚上简单睡了一下,披星戴月,凌晨两点半就开始出发,同行的还有一个驴友,听说他春节都没有回家,在火车上过的。

天与地

天与地

幸好大月好光,手电筒也省了。从山脚到半山亭之间登山的人不多,过了半程之后人才开始渐渐多了起来。连续不断一直爬了四个多小时才登上望日台。第一次完整地观察地平线的时候十分震撼,视线的尽头尽是未知与混沌,天与地的界限从未如此清晰。当太阳快要突破地平线,希望似乎也一点点燃起,心里默默在想,今年运气应该不会太差吧。紧接着,视线尽头的混沌慢慢清晰,“上帝说:要有光,于是便有了光”。

1.2 抉择

鱼和熊掌不可兼得

从衡山回到学校后,再次捡起寒假前完成的小论文初稿。此时内心有点纠结,数据处理、技术实现的部分完成得差不多了,但是经济管理的理论解释部分让我提不起太大的兴趣,并且一直也找不到一个合适的切入点。鱼和熊掌不可兼得,去年的这个时候就打算,不管怎样先把论文的草稿写下来,来年尽可能走出学校实习。当时已经三月份了,按照跟导师交待的计划,两者必放弃其一,我选择了后者(这里我要感谢我的导师给予我的充分自由,尊重我的选择)。

既然选择后者,那就走吧,想来想去,考虑了一下自身条件,唯一拿得出手的就是那个写了几篇机器学习算法笔记的博客,关键缺乏动手实践的经验。既然没有经验,那就做吧。不会做?那就照着教程做吧。Google认证的机器学习工程师学费得5k+,学生党自然是掏不出“巨款”的,那就免费的呗。先后尝试了优达学城和fast.ai的深度学习公开课,依葫芦画瓢完成了5个实验。不管怎么样,至少是动了手吧,不会被别人嘲笑只会纸上谈兵。后来发现,这些依葫芦画瓢的东西对后来的学习还真管点用,毕竟实战的经验才是最重要的。

出发

出发

比较幸运的是,两家公司接受了我的实习申请。因为帝都的机会相对其他地方较多,所以地点都考虑在北京。从学校走向企业是一个角色的转变过程,校园里你是“消费者”和“顾客”的角色,学校和老师是为你服务的,而企业不同,在企业里就变成了服务的提供者了,刚开始都会不习惯转变,角色的转变过程还是尽早经历比较好。这段提前的经历给我最大的收获是更加了解了自己,大概知道自己的方向该往哪里走,明白哪些地方做得好,哪些地方还需要继续踩坑。出来走走后对比发现,自己之前眼界很狭窄,人外有人,牛逼的人比你还努力。

1.3 归西

湖南的四季并不分明,春天和秋天非常短暂,不是酷热就是严寒。虽然到了四月份,却丝毫没有春天的感觉,一连十几天的阴雨是常有的事,人的情绪很容易受到影响,那段时间失眠也很严重。就在这个时候,我的爷爷,也就是我之前写过的“香嗲”,时隔两年某日再次摔倒在地,这次状况很严重。

归西

归西

从微信看到发过来的视频之后,心想这次爷爷这次应该是撑不过了,当天就从学校回到了家里。人快要归西的时候是很容易感知的,如果说有气味的话,那就是死亡的气味。我到家的时候他说话都不利索了,唯一一句听清楚的话是晚上问他开不开灯,他说“不限定”(方言:没必要)。爷爷一生勤俭持家,直到临死前还惦记着不要浪费用电。等子女都到了家里,没过两天他就走了,走的时候我在场。等家里的事情处理完毕,回到学校,四月已经过了三分之一。整理好心情,继续准备寻找实习工作。接下来发生的事情在北京,后会有期一文中有详细的记录,这篇总结就不再赘述了。

1.4 秋招

江湖上闯名号,从来不用刀

秋招市场是惨烈的,野路子文科生屡屡受挫。但是我又不太容易妥协,如果认定了要做什么的话就不会轻易地去改变,不大可能中途修改路径。身边的同学清一色考银行和公务员,没办法,想组个团都没办法,只能靠自己。基础差能怪谁呢?你说你快速学习能力强又怎么样呢?你说你有相关实习经历又怎么样呢?我需要你是 cs 科班出身,精通算法,最好是 985/211 学校毕业的。从北京回来的第二天就去长沙参加菊厂的宣讲会,没想到宣讲会日期早就改了,扑了一场空。9 月和 10 月很焦灼,每天不是在做笔试就是在寻找招聘信息,大大小小的笔试做了快二十几个了吧。对于我来说,笔试很难,因为我根本不会做,大多数笔试最后的算法题直接交了白卷。笔试大多挂了,好不容易笔试过了,面试又挂了。面试过了,跟 HR 又直接谈崩。挂的次数多了,心里也就坦然了,急也急不得,慢慢来吧,此处不留爷,自有留爷处。如果你把握好了自己的节奏,内心就不会被外界所干扰(脸皮变厚),理想主义者修炼的秘诀就在于此。

种一棵树最好是 10 年前,其次是现在

可是我就是想做编程!可以很负责任的说:计算机是最不需要背景并且容易能够凭借个人努力而有所收获的,你想要的答案在 Google 上都可以找到。学习编程什么时候都不算晚,算起来,真正接触编程也不过一年多一点时间,如果真正想学,什么时候都不晚吧!回想研一刚开始的时候,根本不知道编程语言为何物,亦不知道该从哪处着手,我的导师告诉我:Python 和 R 里边随便选一个吧!R 语言在数据分析、经济领域的应用比较多,而且比较容易上手,所以 R 成为了我的入门语言。然后,我又买了很多 R 语言方面的编程书籍,打印网上下载的 PDF 资料,没事就去翻翻看看,在笔记本上敲敲,就算是入了个门。

后来 R 语言入门了之后(其实就是明白了一点点皮毛),我觉得自己的统计学还不够好,所以买了 统计学习基础(ESL)和统计学习方法两本书(后来才知道它们根本不是统计学!==!)。统计学习方法很难,刚开始看的时候根本看不懂,异常吃力,大概就看了前面几章,对照着书本把公式推了一遍,然后写了一系列的笔记。再到后来大量接触 Python,Python 逐渐成为了我的主要语言,陆陆续续用 Python 做了一些算法模型、后端开发的工作。

“商学院的文科生怎么也来搞编程了?!”、“你去银行吧,他们说银行年薪10w+”、“考个公务员也行啊”、“为什么要去北京,湖南不也挺好的吗?”。校招季耳边也响起了不少这样的声音,如果听到了,最好想想当初为什么要出发吧!怎么说呢,后来想通了,这个过程是必须要经历的,迟早要来的,一眼也可以看出来这不是最后一次,习惯就好了。

2018,继续迎风向前吧!

1.5 写作

这一年里共计发布了 74 篇原创文章,长短不一,累计约 10W 字,涵盖技术、读书笔记、心得体会,文章主题分布在 4 个板块:

  • 机器学习相关:http://www.libinx.com/categories/Machine-Learning/

  • 编程语言相关:http://www.libinx.com/categories/coding/

  • 技术碎碎念:http://www.libinx.com/categories/%E6%95%99%E7%A8%8B/

  • 读书笔记:http://www.libinx.com/reading/

2. 道系青年

道不同,不相为谋

我对无聊的社交深恶痛绝,在校的圈子很少超出两个寝室的范围。读研的生活不同于大学,大家关注的内容、兴趣喜好差别巨大,从而导致社交网络中的圈子界限很清晰,联系次数少了就越走越远。我比较厌恶无聊的聚会,我觉得“表面兄弟”是一件很浪费时间的事情。大多数时候,孤独是一种常态,因为我想腾出比较多的时间来做自己的事情,也不管这些事情是否能够被认同,我想我大概已经渐渐习惯这种状态了吧。一个人工作的时候很爽,不用征求别人的意见。比如,周末想去闲逛或者去公司学习都不用跟谁商量,而且执行效率奇高。再比如,到了饭点不用迁就别人,米饭、面条、面包什么都可以,不用一块跟着吃垃圾食品。

有人总结过,世界上所有的事情可以归为两类:一类是关你屁事,一类是关我屁事,如果明白了这个道理,许多问题会变得异常简单或者根本不会出现。当然,这个总结有些极端,但不乏借鉴之处。并且有一点可以很明白地说,成年人的世界里,绝大多数的聚会、社团活动都是“表面兄弟”和“塑料姐妹花”们在一起浪费时间。

在运营网站的时候,我经常会拿自己的站点跟别人对比,思考为什么他们的流量、他们的文章就是有那么多人看,而我认认真真写的东西却无人问津。是因为文章水平不够吗?原因肯定是一方面,但觉得不是主要因素。从我自身的角度来看,我想到了以下两个点,一来我不太善于表达自己的想法,对自己的信心不足,往往过不了自己这关。不得不说,我发自内心地不带任何偏见地佩服那些能把六十分的作品包装到八十分甚至更高的人。二来自己的技术圈子实在太小,有的时候碰到问题实在无处求解,再加上自己急躁,往往解决的过程会很漫长。孤独的状态是极好的,同时也非常糟糕。极好之处在于,你的注意力会高度集中而不会受到外界干扰。糟糕之处在于,需要在技术路线选择上走很多弯路,再者出了比较麻烦的技术问题,往往需要在搜索引擎和书籍中花费大量的时间。比如,今年花了不少时间学习 C++,学习 fast.ai 提供的公开课,鼓捣网站顺便学了一点前端,Hadoop ,学习 Java,死磕算法,但是遗憾的是,这些都由于各种原因没有继续坚持下来。

3. 如何成为一名真正的工程师?

11 月是充实的,每天都在接触新的东西,Python、git、webhook、flask……我的征途是星辰大海

11 月是压抑的,不想打开微博,三色幼儿园、江歌、低端入□……看多了只会对这个世界越来越失望,似乎这个城市一夜之间不欢迎你了,而不管你正义感如何爆棚,然而你发现你并不能改变什么,毕竟大众的记忆力不过一周,风头过后一切照旧,他们好像也知道这个秘密

两年前还没入学的时候,我给自己定下了一条比较独特的路:立志从文科生转型成为一名优秀的工程师。在我看来,工程师是一个比较有趣的职业:一、在工程师的职业生涯中,在项目中把自己或者别人的想法实现是一件很有成就感的事情;二、它做不来“假”,你的简历做得再漂亮,杂七杂八的证书水得再多,经历写得再精彩,面试官几句就能把你问倒;三、人际圈子比较简单,不用在处理社交关系上花费太多的时间,实际上,我接触过的工程师大多还比较 nice。一句话总结也就是,你行你就可以上,不行就下去把技术练好再上来,两边都服气,这也是我特别喜欢这个职业的原因。

对比一下,距离成为一名优秀的工程师还有很长的路要走。

职业生涯的第二次实习是在文因互联度过的,说起跟文因的渊源,还得从鲍老师的微博说起。大概在 15 年,无意中感觉微博的时间线上“西瓜大丸子汤”这个 id 出现的频率很高,当时的感觉是,我艹,他怎么什么都知道!后来文因互联一周年的时候,鲍老师在微博 po 了一张公司全家福,从那个时候才知道了文因这家创业公司。鲍老师在微博发了很多干货文章(实在的“招聘广告”),其中那篇教你如何写一封得体的求职信对我影响最大,第一份实习工作就是写了大量的求职信才得到的。

因缘际会,十月的某个时候,鲍老师的微博转发了大苏写的一篇文章,顺手文章添加了底部的微信公众号 wenyinai42,小助手很热情地询问了我的一些情况,当时我正在找工作,碰了不少壁。转发了简历后,没想到我的博客成为了为数不多的亮点,第一次我感觉坚持做的东西还是有人认可的。10 月 23 号下午,接到一个来自北京的电话,当时很紧张,巴拉巴拉说了一大堆。最后,鲍老师问我什么时候方便来北京看看,毫不犹豫地就说下个星期。

要问北漂者最头疼的是什么?我想除了“租房子”,大概想不出更麻烦的了,短租尤其恶心!11 月 1 号,天气不错,坐了一个晚上的火车,第二次来北京没有那么生疏了。到达住的地方,实在太挤了,那一阵着实体验了一把什么才是真正的北漂!简单洗了个澡,中午饭也没吃,两点到了公司,领了器材、注册好邮箱、协同工作账号,还没缓过神来,啪,开始处理一个接口适应性更新的任务。或许这才是真正的创业公司吧!

在文因实习的一个月时间里,却让我实实在在体验了什么才是真正的工程师文化。这里的工程师都很 nice,即使他们比你的技术高了很多段位,他们仍然会很平和地回答你提出的“小白”问题。这里的工程师很有创造力,都有自己的闪光点,也就是不可代替性。hack 一下,没有什么问题是一段代码解决不了的,如果有,那就是两段。在解决一个问题的时候,不要想着一开始就 bug-free,如果你想造一辆汽车,别的不说,四个轮子,两张沙发,先跑起来再说!这家公司更像是一所学校吧,记得有次开会开玩笑说,工作三年应该可以算是修了一个 nlp 的硕士学位了。

工位

工位

实习涉及的工作主要涉及到后端的开发,一个星期处理一个任务。因为之前接触大多跟数据模型和算法,后端开发的还不太熟练,好多问题都需要请教小组的其他前辈。我逐渐发现自己的两个缺陷:一、逻辑抽象能力比较弱,实现的思路往往比较混乱,思路想好之后又怕麻烦吝于动手,导致浪费了不少时间。二、迷信算法,算法不能解决所有的问题,完全依赖算法是一种很不负责任的行为,实际的工程中大大小小的问题都需要考虑到,异常怎么处理?如何让程序更稳定?比如,文本信息的摘要,一开始我就想着怎么调用现成的库生成,后来还是老老实实地用正则表达式一条一条去匹配。后来又接触了 IDE,学了几招断点 debug,抛弃了一次性 bug-free 的想法,能写多少是多少,出了问题再增删改,这时才感觉慢慢步入正轨。工作的时候很担心自己做不好,倒不是怕有什么后果,只是觉得感觉自己很没用,所以给自己施加了挺大的压力,再加上住宿的条件又不太好,经常性睡不着,一个月体重掉了好几斤。不过谢天谢地,没有出什么大乱子。

这段日子过得很充实,能够看得到自己一点一点的成长,从一开始大量 copy 别人的代码到慢慢积累了一些独立处理任务的经验,心里感觉也越来越有底。

在文因,六点吃完阿姨做好的饭菜,六点半 demo 后基本上你的时间就自由了。demo 有一个好处,它能够强制性地让你梳理当天的工作内容。以我的习惯,demo 完成后,一般还会在工位回顾和处理当天没有解决的问题,整理一下开发笔记,然后 deploy 到博客上。通常,做完这些工作也就差不多十点半多了(我得声明,这不是“图表现”什么的,纯粹是个人的习惯)。不像南方,北方的室内和室外温差极大,下班走出圣世一品,再走到垃圾回收站,室内储存的热量消耗完毕,全身的血便开始全部往唯一暴露的部位头顶上冒,充满血的脑袋奇涨无比,导致几分钟内说话都不利索。其实,这次来的时候就带了厚的裤子和羽绒服,只是放在包里实在懒得打开。后来,在会芳小姐姐的提醒下终于穿上了保暖裤和羽绒服,问题解决!

香炉峰观察北京城

香炉峰观察北京城

在北京的日子时候蓝天白云居多,很遗憾没有目睹纯正的“京霾”。印象比较深刻的是 11 月份的时候一个人去爬了香山,那天天气不错,整个北京城都在视线范围内,给我的感觉是:真的好大!另外,还短暂体验了一把有暖气的冬天,给我的感觉是:北方人真幸福,室内就算不开暖气都比南方暖和,不像在湿冷的南方无处可躲。唯一比较不适应的是饮食习惯,作为一个嗜辣的湖南人,饭菜里怎么能没有辣椒呢?于是经常产生以下对话:

Q:“这个菜为什么也要放辣椒?” A:“为什么不放辣椒啊?我们的汤里面都放辣椒!”

下次有机会一定要好好找找湖南米粉店,实在受不了只有煎饼果子和豆浆油条的日子。

4. 方法论

这世上本没有坑,踩得人多了,也便有了坑。工程实践的路上永远布满了坑坑洼洼,它们就在那里,经常在路上走,哪里有坑,哪里比较近,自然心里会有数。我的工程经验还不是特别丰富,不过我也渐渐总结了几条“心法”,这里总结下来在以后的实践中作为参考。

4.1 今天没有解决的问题,明天说不定就好了,不行就后天

做开发,一定不能急躁,急躁也没有用。情侣间的矛盾处理有不隔夜之说,矛盾尽早解决比较好。然而在解决难题的时候,火候没有到,再急躁也没有用,手忙脚乱只会徒劳无功,倒不如耐心等待。这似乎成为了一条没有证明的定理,曾多次在开发中碰到难题,一般最多不超过两天,问题自然而然地就水落石出。我也说不清楚个缘由,也许是遇到的问题根本就不够复杂吧!然而,每当我想破脑袋也解决不了问题,我就安慰自己,“说不定明天就好了”,结果,神奇般的是往往如人所愿。其实,我更喜欢将此方法论命名为“take it easy”,无论做什么事,不要急。

4.2 分清楚主次和优先级

分清主次是解决问题的高阶技能,它意味着你必须得权衡,权衡之后便会存在损失和放弃,放弃则存在着机会成本。每当需要解决一个崭新的问题,思绪往往非常混乱,不知该如何着手,你会一头扎进搜索引擎的海洋无法自拔。或许最终你还是可以弄清楚问题的来龙去脉,但是过程中却需要耗费大量无关的时间。

那么,适合我的方式是什么?经过几次这样的心里挣扎,我总结了这么一套思考过程:先问问自己,我要解决什么?我该如何解决?问题可以分解成为几个模块?各个模块各自实现的难易程度如何?想了很久,仍然没有思路?站起来,去上个厕所,喝口水,走动走动,重新回到椅子上,相信我,会有惊喜发生的。不要相信记忆,脑子一片混乱的时候,记忆还可靠吗?写下来,写在草稿本上,在本子上随意写下任何思路。当然,回答以上的几个问题也难以摆脱扎入搜索引擎的命运,不过相对来说,效率会更高一点。

4.3 尝试将问题切分成小块

紧接上一条,分清楚了主次和优先级,先做什么后做什么已经明了,接下来便是各个击破。不要想着一个大招就完成,take it easy,先写草稿,细节方面的暂时不要太在意,写得烂不要紧,代码能跑通再说。我在很多地方都提过马斯克造汽车的例子:如果要造一辆汽车,先给四个轮子两排沙发,能动起来再说。

4.4 清晰地表述问题

关于如何清楚地表达自己想要问的问题,《学会提问——批判性思维指南》专门有讲。清楚地表述问题有两个好处,第一、当你遇到一个棘手的难题,往往会不知所措,从而一头扎进搜索引擎,这样的做法往往效率十分低下。这时你便会去求助别人,伸手党是最不招人待见的,随手在论坛、QQ群抛出一个问题就想得到满意的回答,这么自私的行为有人会帮你吗?不会。最基本的,先问问自己:(What?)你需要解决的问题是什么?有没有在搜索引擎上寻找相关的资料?你有做过哪些尝试?有仔细看过尝试后的错误信息吗?如果你做了这些尝试后仍旧无法解决,极有可能这个问题超出了你的解决范围,此时便是你向其他人寻求帮助的最佳时机,懂得人会非常乐意帮你解决。不过以我的经验来看,一般问过自己这些问题之后,解决的思路往往就很清晰了。

4.4 “少谈点主义”

我讨厌泛泛而谈,喜欢说大话的人。别人不会关心你想做什么,只会关心你做了什么。

写了这么多,该跟 2017 告别了,你好 2018!

最后给大家分享今年看到几篇印象比较深刻的文章:

  1. 阮一峰:炫耀从来不是我的动机,好奇才是(图灵访谈)
  2. 西瓜大丸子汤:最快的成长方式就是慢慢来
  3. 西瓜大丸子汤:一份优秀的求职信样本
  4. Will Knight: China’s AI Awakening
  5. 程序员,如何从平庸走向理想?
  6. 丧文化和中年危机背后的大国哲学

继续阅读本站其他精彩文章

  1. 机器学习
  2. 编程语言
  3. 技术碎碎念
  4. 读书笔记
觉得还不错?帮我赞助点域名费吧:)
分享到: