我毕业六年了,但与技术和 Python 相关的工作经验也就两年。今天我想跟大家分享自己转行的故事,希望能够鼓励那些跟我一样的朋友共同前行。
我们将会聊到我个人的经历和入行故事,个人的技术成就,我 2019 年上半年和下半年的工作重点,讨论快速学习的方法,最后推荐一些学习资源。
我叫韦世东,是一名 Python 开发者,同时也正在学习 Rust 语言。
我学习 Rust 语言一周就编写了一个开源库,名叫 asciis,对应的crates 仓库为 asciis。
我并没有大厂履历,也没有太多的 it 工作经历。在网络世界里,我常用的昵称有两个:
我喜欢用文章的方式向周边的人分享知识,也热衷于开源项目。
在 2018 年以前,我并不是一个专业的研发,工作内容甚至与技术没有太多关联。
我所学的专业是“软件开发”,但大专念书的时候没有好好学习,导致毕业后四处碰壁。
毕业后的第一年辗转进入了一个互联网金融企业,在技术部里面担任最小的小弟。随着公司的发展和人数增加,我从小弟变成了小哥,后来成为了连接技术部和公司高层的纽带。
从这个时候起,我离技术越来越远,后来慢慢转到了运营岗,并通过努力从运营小弟变成了运营小哥。2013 年毕业,到 2018 年转技术,中间 5 年时间里我也只有第一年呆在技术岗位,其他几年都与技术无关。这几年我待过的岗位有:信息安全员、技术组长、运营专员、运营指导、副总经理、运营总监。
互联网金融倒闭和跑路潮爆发,我感到行业岌岌可危,而且我觉得就我这点运营水平也蹦哒不起来(说一事无成也不为过)。恰好那段时间我了解到 Python 语言,了解到爬虫对于企业运营和发展的重要性,还有 Python 易学的特点。
于是我下班后看 Python 的入门教程,并根据网上文章尝试运行自己编写的代码。念书的时候,学校教的是 C 语言、C# 和 PHP,但我都没有学会。唯独这一次,我感觉我能够学会 Python。
在家看慕课网的 Python 入门文章、廖雪峰的 Python3 入门教程文章和慕课网 Bobby 的爬虫入门视频。跟着教程学习了大概 3 个月,我就尝试自己接一些小需求来做,例如爬取一些公开数据、编写 Python 程序等。那时候一两天才能完成任务,得到的报酬通常是 30~300,有时候甚至靠回答群友的问题领几块钱小红包。
自学阶段过去之后,我的 Python 水平已经达到了初级,还学会了很多爬虫相关的技术,例如网页解析、数据存储、定时调度、去重和增量爬取等,对于常见的一些反爬虫措施也略有了解。
从零基础到这个阶段,我大概花了 7 个月。这时候,我觉得我能够胜任一个初级爬虫工程师的工作了,于是便在省会城市的人才网找了一些招爬虫或 Python 研发的公司,投了简历。三天内,接到了 5 个面试,然后也顺利的找到了一份爬虫组长的工作。
工作期间,我们爬虫组的任务就是完成技术负责人分配的数据爬取任务,目标分为网站和 APP两大类。我们公司是体育行业,所以数据的变动是常有的事,这就要求爬虫组能够高频的爬取数据。
为了省事,我参考 Scrapyd 和 Celery,用 Django 编写了一套支持 Crontab 规则的调度平台,这样我们编写的爬虫就可以集中在这个调度平台上进行管理。
在反爬虫方面,对于那些用 JavaScript 保护数据的网站,我们最开始采取的是 Selenium 或者 Splash 这种自动渲染工具来应对。但后来考虑到高频、时效性和资源占用等问题,便硬着头皮去解目标网站中的 JS 算法,再用 Python 模拟实现同样的算法。这样,
将爬虫的爬取速度和资源占用都调整到了最优的状态。
我认为我进入了技术领域,就应该踏踏实实的呆在这个领域里,想办法扎根。所以我一直在寻找除了工作和外包以外的副业。
我希望这个副业,既能够帮助我技术成长、提高个人水平,又能够帮助我在技术领域扎根。2018 年是知识付费蓬勃发展的一年,所以我也加入了这个行列。
我注意到csdn正在招募掘金小册的作者,正好我前段时间研究了 Scrapyd 项目,对爬虫项目的部署和调度有很深的了解,所以我在掘金社区的申请单上填入了自己的信息。
爬虫领域缺少项目部署和调度的知识,甚至连相关的文章都难以找到,我对自己的申请很有信心。可是几天过去,我却没有收到任何的回复,这就很尬了。
于是我主动联系了掘金小册的客服,希望她能够帮我重提一下我提交的申请。这一次,终于得到了回应,接下来就是对内容的策划和章节的设计。
最终,我在掘金社区发布了一本名为《Python 实战:用 Scrapyd 打造个人化的爬虫部署管理控制台》的电子小册。
正是因为我的主动出击和争取,这本小册才得以面世,填补了爬虫项目部署和调度知识的空缺。我发现在编写小册的过程中,我不得不逼迫自己弄清楚细节,这使我的技术能力得到了进步。
于是,我便开启了写文章之路,一方面作为自己的“笔记”,一方面逼迫自己完善细节。
其实一开始我有写博客,但没有系统化的写过完整文章,所以小册发布之后,我便“驻扎”在掘金社区,并发表了多篇专栏文章。文章阅读数、点赞数和评论反响都不错。
后来崔庆才崔哥跟我说有优质文章可以在他的公众号「进击的Coder」上投稿,于是我就将一些文章搬到公众号上。接着崔哥又邀请我做公众号的管理员,可以自由发文。
这对我来说简直就是雪中送炭,给了我一个很大的展示平台。
在此,感谢崔哥对我的照顾
这一切看起来都是机缘巧合,但又不乏努力争取和主动出击。就这样,一边工作一边发文,我的技术水平呈直线上升态势。故事太多,我就不一一列举了。
不提工作上的成果,单说在技术领域的成就。由于得到了崔哥的照顾,在大平台的光芒之下,我也认识了很多朋友,包括技术圈的朋友、媒体圈朋友和一些后来私交甚好的朋友。
作为一个刚转行不久的“新人”,我自知难以与高学历、大厂履历或者多年工作经验的朋友相比较。大城市和大厂对于学历的要求近乎苛刻:第一学历 985/211、名校研究生或领域极客。
在学历上,我已经没有办法努力了。我选择的是“曲线行驶”的方式,争取在其他方面能够赶上这些大佬。截至目前,我在技术领域或媒体圈获得了一些“名头”:
这些“名头”看似“虚名”,但对我而言却十分重要。虽然它们并不是什么高级的荣耀,但这都是我努力的成果,是我日日夜夜刻苦学习的证明,是广大读者和媒体朋友对韦世东的认可,是我最宝贵的财富之一。
对于转行的朋友,或者刚接触 IT 技术的朋友来说,最重要的是两件事:
第一件事其实并不难,保持专注并能够坚持的原因通常有二:有经济收入或者极大的兴趣爱好。纵观我的成长经历,其实这也是我坚持下来的原因。学习之初,完全是出于兴趣和转行的压力。
在 3 个月的阶段,有一些小小的收入也是支撑我继续前行的主要原因。第二件事,找到快速学习的方法。我可以说,我的进步速度非常快,而且很稳固。
我深深的知道**“浮沙之上难驻高台”**的道理,所以我在学习的过程中,通过写文章来巩固所学,并且我只专注于一个领域(爬虫)。Python 可以发展的方向非常多,例如 WEB、爬虫、数据分析和深度学习,我自知想要扎根就必须专注一个领域。
我从最初的网络请求、网页解析到数据存储,爬虫部署调度,再到异步、多线程多进程、去重和增量,甚至是反爬虫的研究,都属于爬虫这个领域。
为了保持专注,我改变了我的作息时间,从原来的“早上八九点起床,凌晨一两点睡”改成了“早上六七点起,晚上十一点睡”。周末亦是如此,早睡早起使我有充沛的精力保持工作和学习。
选好某个领域,并保持足够的时间后,能够让人快速进步的因素还有:读源码,造轮子。
读源码可以让我们从更高的的角度理解程序的设计,并学到很多平时难以见到的骚操作。而造轮子,则是考验我们将知识转换成代码的能力。
我读/研究过源码的项目有:
自己造过的轮子有:
这里有个建议,读源码、查资料的时候我们必定会用到搜索引擎,搜索引擎列出的文章并不一定是准确的。有些文章甚至是缺头缺尾,所以最好是直接翻文档或者找一些知名作者写的文章来学习。
2019 年上半年,我主要的精力就是放在书籍撰写上。
这是我与图灵教育签约的一本反爬虫专题的书,书本从网络协议和网页结构等基础开始,通过实际的案例和现象说明其中用到的原理和技术,并将市面上常见的反爬虫手段纳入其中,作为示例。
书中对 JavaScript 代码混淆、加密和验证码破解都有深入的介绍,我希望这本书能够帮助爬虫工程师和爱好者了解反爬虫的手段和原理,同时也能够帮助到前端、后端开发者了解爬虫工程师常用的技巧和原理。
这本反爬虫专题的书还没有印刷出版,但相信很快就会跟大家见面了。
上半年我发布了很多内容质量很高的文章,例如:
开发者必知必会的 WebSocket 协议
7 分钟全面了解位运算
MongoDB 实战教程:数据库与集合的 CRUD 操作篇
Python如何爬取实时变化的WebSocket数据
一看就懂,Python 日志模块详解及应用
【动图详解】通过 User-Agent 识别爬虫的原理、实践与对应的绕过方法
[动图演示]Redis 持久化 RDB/AOF 详解与实践
下半年,我的主要精力依旧是放在书籍的撰写上。这一本是与电子工业出版社约定的爬虫相关书籍,具体内容这里不便透露,但也会是一本高质量的书,希望大家多关注。
同时,还会兼顾其他技术内容的输出,例如这次与 GitChat 策划的 MongoDB 系列教程。
这个教程目前只出了第一期《MongoDB 实战教程:数据库与集合的 CRUD 操作篇》,大体内容如下:
这只是开胃菜,后面发布的内容才是重点。读者将从第二期《超高性价比的 MongoDB 零基础快速入门实战教程》中收获::
这是写给 0 基础同学的 MongoDB 快速入门文章。内容从文档 CRUD 到流式聚合操作;从执行计划、索引、数据模型到复制集;从分片、访问控制到数据备份与还原。****6 篇近 5 万词的内容覆盖了 MongoDB 的大部分知识点,完全满足日常开发的要求。
学习资源是学习质量和速度的保证,因此找到高质量的学习资源对我们来说也是非常重要的。以下列出的学习资源不分排名,都是好资源:
大家也可以加我qq群:175317069,征得你同意后,我会拉你进入一个大厂大佬云集的搬砖群。我们一起探讨技术知识、共同进步。