吕进是我非常欣赏的一位同事,最重要的一点在于他的探索精神,以及解决问题的能力。很多我们想要做到的事,在他这里只要一个线索,就足够来实现。这种看起来“毫不费力”的表述,背后其实有他大量的思考、积累和努力。

推而广之,最终是解决问题的能力,帮助一个人在职场上不断进步。我们也希望在公司有更多“积极思考并试图更好地解决问题”的同事,每一个在思考的灵魂,都值得我们珍惜并给予更多发展机会。

——曾老师点评

长期以来,开发团队帮我们走在TD业务新突破的最前锋,为我们解决了很多技术问题,也给TD的工作带来了很多便利。今天我们邀请到开发团队的吕进,和我们聊一聊他在TD不断高效完成工作并且收获成效背后的故事。

Q:简单向大家介绍一下你的工作内容?

A:大家好,我是咱们的(爬虫方向)程序员,介绍工作内容之前我们先来了解一下爬虫这个概念,按照官方的说法:爬虫是指用计算机语言编写的一段可以自动抓取数据的程序或者脚本,爬虫也可以实现模拟人的操作,就像一只虫子一样在互联网上爬来爬去,由此我们称为爬虫。所以我的工作内容主要分为三大类:

第一类是根据需求去抓取一些我们想要的目标站点数据。比如我们神选校官网的大学排名数据以及学校对应的详细信息,就是通过爬虫的程序采集过来的。

第二类是通过模拟人的操作实现一些自动化的程序。比如我们的自动下单程序,还有最近刚做的自动发布文章程序,以及配套的免扫码自动登录功能等,就是通过自动化脚本实现的,可以提高工作效率节省大量的人力和繁琐的人工操作。

第三类是实现反反爬。并不是会了爬虫以后所有的数据都可以随心所欲的获取,我们在爬取数据过程中会遇到网站设置的各种防爬虫手段,也被称为反爬,如验证码、人机识别、无感token等,我们要想达到目的爬取想要的数据,就必须破解防爬虫手段制定相应的反反爬策略。

Q:爬虫的工作内容听起来还是蛮有挑战性的,你是怎么走上了做(爬虫方向)程序员的道路?如何对爬虫产生兴趣的呢?

A:我最开始做程序员的时候是做业务方向开发的,做了一段时间自认为已经对“增删改查”足够熟练了,在这样的情况下我了解一下数据抓取,接触一段时间以后开始对爬虫产生了浓厚的兴趣,从此走向了爬虫的道路。

我是如何对爬虫产生兴趣的呢?第一点是觉得比较好玩,因为爬虫可以做很多很酷很有趣的事情。比如生活中,会员快到期了还有一些VIP视频没来得及看,赶紧爬下来慢慢看。工作中爬虫可以提高工作效率,省去大量的复制粘贴工作减少对鼠标键盘的伤害。爬虫还可以爬股票、新闻、文章、热搜等等,凡是我们在互联网上肉眼可以看到的数据,在符合法律规则的情况下基本上都是可以实现爬取的。

第二点是我发自内心的喜欢拿数据的那种快感,喜欢破解别人的防爬加密算法,享受对抗的过程。在一些知名的网站上(比如某乎、某福、某思等)都是有很棘手的反爬手段的,有一个与爬虫相生相克的职业叫反爬虫工程师,存在一个矛与盾的关系,我们是要通过爬虫手段拿到数据,他们是要通过防御措施防止你爬取数据。上有政策下有对策,道高一尺魔高一丈,这个之间的较量还是比较激烈也是挺有意思的。

Q:在你看来,解决一个新的难题,最难或者最重要的突破点是什么?

A:我的回答可能会有一些官方:第一点是要有足够的自信,遇到难题时不要惧怕难题,更不要放弃。遇到难题其实是好事,是很难得的提高自己技术能力的机会,解决了难题的同时技术能力也更上一层楼。在爬虫过程中难免会遇到目标站点改版、网站风控升级,一次次的改版与一次次的修复,都是技术能力不断迭代变强的过程。

第二点是多思考多尝试。不要放过任何蛛丝马迹,去寻得一个有效的思路,在可以接受的时间范围内尽自己最大的努力去解决,巧妙利用搜索引擎收集相关资料,有时候一个不经意间的想法就可能解决卡了很久的问题。

Q:你在忙的时候需要一个人同时管几百台服务器,是怎么保证高效完成的呢?

A:几百台服务器也就是几百台电脑,我们想要同时控制部署几百台电脑是非常困难的。

最开始的时候我也是用最笨的方法,人工操作部署,当时部署一次项目就要耗费将近半天的时间,而且部署完之后整个人感觉已经筋疲力尽了。

持续了一段时间以后对服务器的操作倒是熟练了不少,但也终于搞烦了,用一个周末的时间回家造了一套自动部署系统,大概思路是把服务器与爬虫自动化进行了结合,利用了版本控制和爬虫自动下载文件的原理,实现了让服务器之间可以自动互相管理,或者说让服务器可以自己管理自己,终于完美解放了双手。

稍微总结一下就是两个点:第一点熟能生巧,首先需要对服务器的基本管理操作足够熟练,能够快速处理服务器的疑难杂症;第二点找小窍门,结合爬虫自动化程序,让大量复杂的手工操作交给服务器去自动完成。

Q:这两点真的很重要,不禁想起,你的座右铭是“程序能干的绝不手干,绝对不干重复的事情”,如何理解这句话?

A:在工作中只要是遇到稍微繁琐一点的操作,在可以接受的时间范围内,我尽量是用程序实现的,这样不仅可以锻炼自己的编码能力,也能提高工作效率,而且还多了一个处理问题的小功能,下次再来类似的问题,是可以直接利用上的。

爬虫的本质就是用来解决大量的繁琐操作的,这句话即是对技术的一种追求,同时也是对自己的一种要求。

Q:做程序员需要长期持续的迭代学习,你是怎么规划并践行的?

A:第一点:做好时间管理

随着互联网的飞速发展,技术会不断的更新迭代,再加上程序员又长期存在加班的压力,所以一定要充分利用好时间学习新技术:

1. 利用碎片时间学习

平时上下班在坐地铁、公交的时候,利用碎片的时间来阅读下领域内的技术文章,提高自己对知识和时事的敏感度。

2. 集中精力,深入学习

尽量集中力量去深入学习一个知识点,利用相对整块的时间,比如说一个周末或者一天假期,不要求自己一天快速达到很高的水平,最起码要入门或者学有所得,不能刚学个两三分钟就转投别的知识的怀抱去了。

第二点:跟随自己的兴趣,广泛学习

技术层出不穷,要跟踪学习每一项技术是不太可能的。但学习永远是跟着兴趣走的,尽量去学习自己感兴趣的技术,多读自己感兴趣的书。技术学习的更多更广阔,知道的事也就多,思路更加开阔,解决问题的能力也就能高于常人。

Q:在TD做程序员是什么样的感受?和之前有什么不同?

A:第一点:舒服

公司没有很复杂的企业文化,和领导同事之间相处简单,不存在任何勾心斗角和官僚主义。可以专心的工作,把主要的精力都投入到工作中。公司一直倡导简单、坦诚的工作氛围,这点我相信大家是肉眼可见的。

第二点:专业

我们虽然是一家教育公司,其实我们公司涉及到的业务对技术的要求还是挺高的,在技术层面上从广而浅到专而精完全不落后于专业的互联网公司,我们技术团队所呈现出来的一部分作品是可以与专业的互联网公司媲美的。

第三点:高效沟通

在日常开发中,我们公司虽然没有专业的产品经理在需求方与开发之间做信息桥接,但是我们从需求提出者到技术负责人再到每一位开发同事,仍然能够高效准确的把需求传递给我们每个开发同事,并能把事情做好,这点我的感受是很深刻的。

写在最后

作为吕进所在开发小组的组长,鲁平老师也很有感慨:

回想起吕进刚入职那会儿,我们一起给新购置的服务器搭环境,他使用着我们常用的工具进行着眼花缭乱的操作,看的我心里只有一个想法:招这个小伙子进来指定没错!

吕进加入我们之后,帮我们解决了很多很多的难题,也给小组带来了很多积极的改变。下面分享一些我在平常工作中吕进值得我们学习的优点,大家也可以通过这些优点更好的了解吕进。

1. 勇于接受挑战对自己不设限

无论我们每次给吕进多么困难的任务,都会听到熟悉的回答:没问题,我先试试。然后在出乎预料的时间点带来捷报。

2. 尽自己所能提高效率

无论是常用工具的快捷键,还是各种程序脚本,吕进一直践行着效率至上的原则,让自己不做重复的工作。

3. 个人知识存档

吕进会将工作中使用到的知识仔仔细细的做好笔记,过硬的业务能力和良好工作习惯密不可分。