阅读 2515

一个野生程序员的 2019 年度总结 | 掘金年度征文

前言

从不少朋友圈的大佬们看到这次掘金的 2019 年度征文,本想只作为吃瓜群众来细细品读大佬们的心得体会、创作灵感、美文佳作。但是,静下心来仔细思考,今年,也就是 2019 年,是何等的不平凡:一份正式工作,两个开源项目,三个优秀团队,四门新学语言。2019 年同时也是一个不平凡的一年,成就了我很多的第一次:第一次开源项目上 Github Trending,第一次录技术视频,第一次在公开场合分享知识,还有很多很多不一样的第一次。于是,我感觉自己有必要也很愿意将自己在 2019 年的收获与感想分享出来。

自我介绍

我不是一个科班出身的软件工程师,没有学过算法、数据结构、设计模式。没错,我就是传说中的野生程序员。我靠着网上的教程和课程,不断精进,终于成为了一名前端工程师,和小伙伴们一起不断成长。大学毕业之后,我以数据分析师的 Title,也就是“表哥”,开始了自己的职业生涯。后来因为工作的原因接触了数据仓库(Data Warehousing,DW)、ETL(Extract、Transform、Load)和商务智能(Business Intelligence,BI),了解到数据分析还可以在 Web 界面上做。于是我跟着当时的前端工程师学习了 HTML/CSS/JS,踏上了码农生涯的不归路。后来接触了 Python、PHP、NodeJS 等等很多语言。2018 年,我成功获得 CDA Level 2 数据建模分析 的证书,以为自己要向数据科学家发展。然而,从工作的需要加上自己的兴趣,自己最终还是选择了前端工程师,作为自己的职业发展方向。我在掘金上吸收了大量的前端知识,掘金小册也是我快速学习的涞源之一,在此我非常感谢掘金能够给我这个野生程序员锻炼的机会。

关于工作

前后辗转伦敦和北京,终于回到家乡重庆。几次面试数据分析师失败之后,我很幸运地应聘上了现在公司数据建模师的职位,但最终阴差阳错的做起了前端工程师的工作。

2019 年是我的第二年。今年开始,大大小小做了好几个项目,从本分地做好每一个功能到带领团队完成项目、技术选型、面试候选人,感觉自己真的成长了不少。我一直认真的对待每一项任务,即使有不懂不会的地方,也会寻求帮助,不管是从网上还是来自同事。今年还很荣幸的参与年会的小游戏前端开发,为公司年会添砖加瓦。

今年也来了不少刚毕业的小朋友,自己作为相对资深的员工自然而然的带了两个实习生(目前已转正)。在作为导师的过程当中,我也在不断学习,学习如何成为一个合格的导师,如何正确引导、培养刚毕业的实习生让他们发挥出最大的潜力。最开始,我手把手教,手把手码代码,希望对方能理解。但在一次偶然的机会听了樊登的《高绩效教练》、《可复制的领导力》,我猛然发现自己的指导方式是有问题的。于是我迅速改进,从教育、灌输改变为引导、启发,多问一些“你怎么认为”,“你打算怎样解决这个问题”,“你是如何理解的”,这样的问题。这样问了之后,自己手把手教的时候就更少了,因为他们都会知道需要自己来独立解决这个问题。否则,实习生编代码和你自己遍代码,没有任何区别,他们没学到东西,自己也累得半死。

开源项目

2019 年我主导开发了两个上千 Github Star 的开源项目,分别是 CrawlabArtiPub,都源自于学习工作中的思考和需求。

Crawlab

在今年 2 月份媳妇回老家过年返回重庆的火车上,手机信号不好,车上也没有 Wifi,不能够上网打发时间。于是坐下来思考之前韦世东大佬在掘金小册上介绍的爬虫调度平台以及 Gerapy,突然灵感一现💡想到可以做一个管理爬虫的可视化界面(后来被定义为爬虫管理平台)。当时我记得自己打开 iOS Notes 就开始写这个平台的基本功能需求,取了几个名字让媳妇参考,她一看马上就选择这个朗朗上口、容易记住的 Crawlab(发音 /krə'læb/),跟 GitLab 这样的名字类似。

回到重庆之后,我就在大量调研这个平台的可行性,发现用 Celery 可以作为分布式任务调度引擎,shell 作为任务执行媒介。之后用 Excel 作为项目管理工具,用 Python 作为后端,Vue 作为前端,一点一滴的开发了最小可行性产品(Minimal Viable Product,MVP)。一个月之后诞生了 v0.1.0 初始版本,并撰文在掘金上发布了第一篇文章,取名为 《分布式通用爬虫管理平台Crawlab》

发布当时就吸引了很多用户加入 Crawlab 社区和微信群,其中就包括韦世东和陈祥安两个大佬。在韦大的带领下,第一次成立了一个草台班子开发组。后来不断迭代,开发了定时任务、数据分析、网站信息、可配置爬虫、自动提取字段、下载结果、上传爬虫、Docker 镜像。

随着 Crawlab 的功能不断丰富,新用户不断加入,伴随着的问题也逐渐明显;而且,之前的开发组成员由于各种原因,实际参与的非常少。为了让 Crawlab 更加稳定和高性能,我决定将后端迁移到如今大红大紫的 Golang(虽然当时我还不会 Golang)。边学边做,我逐步将 Crawlab 的核心功能从 Python 迁移到了 Golang,并于 7 月底发布了 v0.3.0 版本,也就是 Golang 版本。

Golang 版本不仅解决了很多 bug,还做了不少界面优化,因此又吸引了大量的新用户来使用 Crawlab。从 5 月份到现在的 Github Stars 增长曲线。其中,8 月底的快速增长是因为我在国外的 Hacker News 上发布了一个关于 Crawlab 的帖子,第一次让 Crawlab 在 Github Trending 榜上待了一段时间。

目前 Crawlab 已经发布到了 v0.4.1 版本,Github Star 数增长到了 3.5k,微信群也增加到了 2 个,核心开发组成员发展到了 5 人,《免责声明》 已经添加,接下来的产品规划也基本确定了。不知道今后 Crawlab 会如何发展,但可以肯定的是 Crawlab 一定会让爬虫更加简单,同时我们也会为发展合法的爬虫规范而努力。2020,我们拭目以待。

ArtiPub

ArtiPub(意为 Article Publisher)是一款一文多发平台,也就是你只写一篇文章,然后在 ArtiPub 上发布,它就可以自动帮你把文章同步到掘金、思否、CSDN、博客园、知乎等各大技术媒体平台。

开发 ArtiPub 的初衷是自己是一个爱好写技术文章的开发者,同时也是一个产品推广者(例如 Crawlab),经常需要写文章来吸引流量。而发布到各大平台会最大化文章或产品的曝光度。有了这个想法之后,我在 Crawlab 群里召集了一批开发者,其中包括 Yifei 大佬,他用 React + Ant Design 帮助写了 ArtiPub 登录插件的框架;我呢,为了练手,就用 React + Ant Design Pro 写了 ArtiPub 的前端,Node.js 的 Express 写了后端。然后,9月20号发布了第一个版本 v0.1.2。结果发布第二天就收获 200 stars,不到 20 天 star 数就上千了。

ArtiPub 也有竞争产品。在首次发布之前 1 个月,另一个跟 ArtiPub 类似的基于云的产品 OpenWrite 也发布了,吸引了不少用户。但 ArtiPub 的理念是安全性,开源软件部署在自己的服务器上,不会暴露 Cookies 等敏感信息,会更为安全。

但是,不得不承认 ArtiPub 当前的版本问题还很多,需要更多的优化。目前,我们组建了一个开发团队来打造云端版的 ArtiPub,这个版本将解决 ArtiPub 的多账号问题以及发文稳定性问题。

优秀团队

在 2019 年中,我组建了 2 个开发团队(Crawlab 开发组和 ArtiPub 开发组),还加入了 1 个大佬云集的夜幕团队。

Crawlab 和 ArtiPub 开发组

组建 Crawlab 开发组是自然而然的事情。当时 Crawlab 的 Golang 版本刚刚发布,有一批 Golang 爱好者加入了进来,其中就包括现有的开发组成员。他们在 Github 上经常提交高质量的 PR(Pull Request),修复一些疑难的 bug,升级各种底层架构,解决很多我自己都无法解决的问题。于是,我意识到,我们需要把这帮人组织起来,我就拉了微信群,大家就组成了 Crawlab 核心开发组。开发组管理非常松散,大家基本是以 Github 的 issues 和 PR 为工作重点,谁有空的时候就去修复问题或完成优化,没有强制的规定。后来我还第一次为开发组成员申请了 JetBrains 的 All Products Open Source License,可以免费使用他们家的所有产品 1年,相当于每个人节省了几千人民币。大家都是无偿贡献自己的业余时间,很辛苦,我作为项目作者也应该稍微为大家谋点福利。

ArtiPub 开发组是我们打算开发云端版而组建的。组建初期我们联系了 markdown-nice 的作者,对方答应帮我们优化编辑器。 在我抱怨说没有时间参与开发的时候,韦大提醒我说可以招一些开发者了。于是我们在各大群里发布了招募信息,召集了一批大佬来加入。后来强哥自发的帮忙建设了官网,也就被我们自然而然拉了进来。目前云端版的基本雏形已经出来,有注册登录、Cookies 导入、Crawlab 集成等功能。虽然 ArtiPub 云端版的开发目前有些搁置,但相信近期就会推出首发版。

夜幕团队

夜幕团队 是一次偶然聊天的机会,讨论完了 ArtiPub 的事情之后,韦大告诉我说要不要加入一个大佬云集的技术创作团队,前提条件是需要定期创作高质量文章。本来我也希望和大佬们一起共事,而且我本身也比较喜欢写技术文章,崔庆才大神也在这个团队中,我就答应加入了。

加入之后在团队中的主要任务是创作高质量技术文章。我通过夜幕团队发布在掘金上的第一篇文章是《Puppeteer 用来做爬虫太 Low 了!但用在这里很合适!》,其实讲的就是 ArtiPub 的核心原理。我还在夜幕团队微信公众号上撰写了 3 篇关于 DevOps 的系列文章,其实在为大家科普知识的同时,对自己的理解也是一次巩固。不仅如此,我还参与了夜幕团队的 《JavaScript 逆向课程》的视频录制。上周末我才花了整天的时间第一次完成了课程的整个录制,感叹平时那些网课老师的不易,又要将 PPT 写好,还要把稿子念好,实战还需要临场发挥,真的很难。

总之,夜幕团队让我找到了自己的价值,能够持续输出高质量内容,同时也能和大佬们不断交流沟通,还能在团队中发挥作用。2020 年,也期待跟夜幕团队成员一起发展和进步。

编程语言

2019 是非常不同寻常的一年。在这一年中一共我学习了 4 门新的编程语言:Golang、C#、React、TypeScript。不能说达到掌握熟练的程度,但这 4 门语言都在工作或业余项目中应用到了。学习一门新语言是一个痛苦并快乐的过程:因踩坑、无法解决问题而痛苦;因新技能 get 而快乐。因此,学习这些新的编程语言让我的白头发增加了不少,但同时也让我的快乐指数增加了不少。

  • Golang 是在升级 Crawlab 的过程中自学的。最开始的时候我连如何安装第三方包都不知道,坚持到后来就可以驾轻就熟的编写 API 了;
  • 因为我们部门经常使用 C# 来开发后端应用,因此我也顺便在开发后端 API 的时候学习了 C#;
  • React 和 TypeScript 是我在做 ArtiPub 这个项目的时候现学的。

总结下来,我学习这 4 门语言的经验如下:

  • 坚持,坚持,再坚持,量变到质变,坚持到最后一定总会有收获,过程痛苦,但成果丰硕;
  • 学习的时候要有类比,例如 React 和 Vue 相比,有什么不同点,有什么相同点,优势如何,缺点如何,等等,都需要思考;
  • 没有一种语言是全能的,要掌握各自的适用场景,就像打网球一样,正手反手都得会;
  • 在项目中使用新语言是最好的锻炼方法,这样你将体会到现学现卖的兴奋和快乐;
  • 千万别骄傲,你永远不知道你掌握得如何,抱着谦虚的心态学习不会误入歧途;
  • 语言不是掌握得越多越好,精通一门语言比会写 100 个 Hello World 有用。

结语及 2020 展望

感谢您能耐心读到这里,希望不要因为我的流水账感到无聊不堪。本想简单归纳一下写成总结文,没想到一不小心成了长篇大论。但这也是我切切实实的关于 2019 年的回顾的总结,包含了我的项目、工作、学习以及无数个第一次,是非常真实的心路历程。其实在 2019 年已经完成了很多愿望,例如第一次开发开源项目,开源项目 Star 数上千,学习新的语言,等等

希望能够在 2020 年能够将两个开源项目 Crawlab 和 ArtiPub 发扬光大,让更多人使用,甚至走向国外,走向商业化。为此,我们还需要更多的努力和付出。按照计划,Crawlab 将在 2020 年推出更加强大的 插件机制爬虫市场,以方便开发者们使用 Crawlab。而我也希望能够在夜幕团队中更进一步,输出更多优质的技术文章和内容,能够帮助到有需要的朋友。

2020 年,机遇和挑战并存,我也将更加脚踏实地的历练和成长。

关注下面的标签,发现更多相似文章
评论