从2015年1月底到2016年8月底在某二手车服务平台公司北京研发部实习了也算有半年的时间(去除中间回校答辩的一个月),从刚进入团队时的四五个人到离开时的20+人队伍,也算是从一个实习生角度见证了一个公司的成长过程。

实习之初:

接手的工作是尽可能多地匹配两个车型库中的车型,提高车型匹配率。说实话这个工作我做地很痛苦,因为用C++写的,本身开发速度就比较慢,而且刚进入团队一方面是想展现出自己的实力;另一方面团队领导也对我不够信任,给我的感觉就是他们认为我在偷懒,而事实是我投入了大量的时间在其中。写完了一版之后就会发现有各种case要单独处理,当然出现这种问题很大的原因是我在动手写项目之前没有认真考虑过整个项目的结构以及各种可能会面对的case,这应该归因于我的经验问题,而不是能力问题。面对这种情况,这个时候摆在面前的选择有:

1、在程序中加各种判断语句针对处理;

2、代码重构;

就我个人而言我更倾向于代码重构,因为能够重新理清思路,避免后续出现的很多坑。但是由于业务需要,boss们更倾向于我快些交付,因此就只能像打补丁一样往原代码里面加各种处理,导致最后整个代码改起来特别吃力,每天花费大把的时间投入其中而取得的效果却微乎其微。而且boss的想法总是想一出是一出,需求来回变换而我又不能重构代码。那段时间自己也很痛苦,后来向boss明确表示自己不想再做这方面的工作了。幸好boss也表示理解,并且这项工作也证明了很难走得通( 原因:两个车型库的车型命名差异太大,很难提取共通之处。

实习之中:

因为车型匹配这条路走不通加上我明确表示这项工作让我觉得很痛苦,因此boss给我分配的新任务是爬虫,爬取各大车上网站的数据(主要是每款车的配置价格等数据)。在这之前我学习过一段时间的python,算是入门,其中也涉及到了基础的爬虫抓取,懂得urllib以及beautifulsoup的使用。刚刚接手这个工作还是很惶恐的,好在boss表示交给我的任务是尝试性的,能够爬取更好,不能爬取的话再想别的方法。也正是从这里开始了我边学习边写爬虫的实习之路。

起初刚接手的是车王网,记得好像没有什么防爬措施,因此大概花了一周的时间顺利地完成了爬取工作,boss也对我完成的工作比较满意,后面就给我布置了爬取车300的工作。说到这里就要提到一件比较有趣的事了,因为要求我写的爬虫只需要把相应网站的车型库整体爬下来一次,而不是动态更新,因此写得比较简单,并不涉及并行操作,而每个车型都对应一个唯一的id,所以完全可以启动多个python爬虫脚本,每个脚本爬取一个id范围内的车型信息,这样也算是从某种角度上实现了并行爬取。刚好boss当时对车300数据要的比较急,就让我同时启动10个脚本一起爬,这样一来速度上确实快了很多。但是因为单位时间内大量访问,ip被封了。。。也就是从这里开始学习了各种反-反爬虫的技术。后面又爬了国家质检总局产品缺陷管理中心,新旧页面结构变化很大,且老数据展示及其不规范!不过花了写时间总算是比较像样地实现了。

这段时间公司各项业务也开始起步,招聘了很多新人,并购置了很多服务器。作为一个实习生,运营维护也就成了我工作中的一部分,实现一些定时脚本等等。这里不得不吐槽一下:为什么好多计算机从业人员连装系统都不会啊。。。

期间也在实习中完成了自己的毕业设计,回校答辩。(爬虫跑起来抓取数据的时候我就有时间动手写自己的毕设了,这也算是写爬虫的一个福利吧!)

实习之尾

本来预计回校一周完成答辩工作的,没想到我们院硬生生地拖了大半个月才开始答辩工作 #_#!。可能是经过前面这段时间的高强度实习,很多知识都没有时间消化,回校这段休闲的时间反而感觉领会了很多东西。期间也帮同学的一个姐姐编写了一个校内抢先预定实验设备的脚本,功能倒是实现了,可以因为用的是 selenium + phantomjs导致最后速度上还没有人工操作快。。。也算是胎死腹中了吧。

答辩完成后和朋友们一起去云南玩了一周,又回到公司实习,继续做爬虫相关工作。实现了一个定时抓取汽车之家的动态增量爬虫,并部署到了公司的服务器上,每个月初定时爬取。

实习总结

实习过程中自己确实学到了很多,看到了一些优秀程序员的追求已经不再是多少多少钱,而是在愉快地工作中实现自己的价值。让我了解到了优秀的程序员是怎么看待问题以及处理问题的。在获取酬劳的同时也学到了很多知识以及技术,以及一些与hr、boss交流的注意事项。相信对以后从事工作应该也有所帮助。

自己也认真地思考了一下去初创公司的一些长处和缺点,仅供大家参考:

长处:

1、能够和大牛们一起并肩战斗,开拓眼界;

2、团队工作强度大,锻炼多,成长速度快;

3、一人多用,要做各方面的工作;(或许算是缺点->_->)

4、和领导接触机会多,能够看到领导是怎么看待问题,怎么处理纠纷的;

5、人际关系简单,同事相处起来没有太多约束;

缺点:

1、缺乏有效的团队管理,开发进度很大程度上靠自我约束以及上级督促;

2、需求来回变换,往往想一出是一出,没有系统地构架;

3、开发工具、语言没有统一要求,整体比较混乱;

回想起实习的那段时间,虽然比较辛苦,但整体还是感觉很快乐,自己也确实成长了许多。感谢实习公司给予我的实习机会以及同事们给予我的指导和帮助!