代码开源生涯十年-百有一用是开源

高考选择专业的时候,并不了解软件开发具体是什么,那时候想法是IT很潮流很未来,因此选择了软件开发专业。大学期间也没怎么了解过开源,在2010年12月首次加入github,记不起来是为什么注册,首次代码提交记录在2012年,主要是一些工具类的代码。

忘记了一开始接触github是什么原因,在这十年期间创建了200多个项目,最近每年大概上千次commit,项目都是闲余时间写的(毕业后工作的公司均没有企业开源项目,因此都只是个人项目),从一开始的迷茫到后来的奋进,最后回归平常,变成了习惯。首次提交开源代码到现在也有十年了,这些项目到现在为止只剩下20个左右还在维护,不能说质量低下,但这些项目确实关注度不高。

下面先跟大家分享一下我程序员生涯各阶段的经历和感想,相信我的经历也是部分开发者的经历,文末再跟大家分享个人目前的项目。

迷茫

大学的时候想法有点天真,认为毕业之后就可以找到一份好工作,慢慢就可以赚钱成为人上人。谁知道真正找工作的时候才发现原来自以为理论知识学的挺好,在面试的时候却什么都用不上。

工作第一年,在一家中等规模的公司做嵌入式开发,大学期间C学习得不太好,当时公司又无人指导,全靠自己看文档,而且禁止接入互联网,所以那一年没有学到什么技术上的知识,只是适应了由学生阶段步入社会的转变。

第二家公司是使用QT开发的一家台湾企业子公司,无绩效考核无工作压力,感觉是给公司领导养老的。当时的工作也比较被动,有点不知所措,感觉在混日子,每天应付式的完成些小功能即可。当时需要做一个简单的网页实现应用设置功能,为了给工作带来点变化,机缘巧合之下学习了jQuery(当时特别火)。

因为工作闲余时间比较多,所以深入了解jQuery的源码,并开始学习前端各类开发技术。平时在各种QQ群上沟通交流,当时还自己试验性的去写了一套UI框架,由于工作上较少前端的工作,理论掌握得比较多但实践挺少。

后来感觉自己还是无法喜欢底层开发,开始找前端类的开发工作,当时运气还算好,面试第一家公司时,说自己在当前公司主要负责前端开发等,面试通过忽悠成功。

在这个阶段,我的心得体会是:选择一个自己感兴趣的方向,若有人指导入门最好,若没有则可以通过官方文档、深入源码等方式学习。第一份工作很重要,尽可能选择适合的,第一份工作也不太重要,因为很多时候为了生存只能被动接受,不过就算如此也应尽力在夹缝中成长。

奋进

在公司负责前端开发工作期间,开始学习使用nodejs,开发各类工具提升开发效率。由于需求场景有限,一直处于入门阶段,因此想尝试在公司业务中使用nodejs,于是向领导推荐使用nodejs替换php,尝试前后端语言统一。

在此顺带说一下当时说服领导的理由:公司规模较小,无各种规范的文档,人员流动较为频繁,且公司业务也是侧重于前端,因此向领导建议减少前后端开发之间的沟通,可由前端开发完成各类逻辑的处理,后端开发仅完成基础架构部分即可。

在工作中使用nodejs之后,有了由0到1的转变,开始了解各类开源模块,当时基于npm的模块下载量了解排名较前的相关模块,对各模块有了直观的了解后,则开始选择工作中有需要的各类模块深入了解其相关实现。

记得当时深入了解express相关源码后,自己尝试写了一些中间件,在自我感觉对nodejs的各类模块较为熟悉后,开始将工作中的部分功能切换为由nodejs来实现,实现由1到10的进阶。

在此阶段,我的心得体会是:建议基于工作中的项目选择合适的方式,切入新技术的同时也可延续自身的相关技术栈,避免完全切入一个全新的领域。在说服领导使用新技术时,一定要站在公司立场,提出对公司有利的方向,而不是仅考虑自身发展。此时我的开源项目基本以代码熟练为主,基于熟悉的模块去思考实现扩展功能,尝试在学习中完成。

平常

在自己努力学习之下以及nodejs的热度,终于换到一家大公司。开发工作主要是前端,也包括部分nodejs后端。由于开发流程的规范化,不能再随意选择新技术来尝试,对于公司业务不熟悉且开发工作繁忙,此阶段新技术的学习停滞不前,对于开发工作我陷入自我怀疑,开始质疑是否应该作为终身职业。

在此期间,开源项目主要是把以前的一些想法实现之类的一些修修补补的提交。

在这个阶段,我的心得体会是:当你开始怀疑自己是不是适合继续做开发的时候,如果有更喜欢的发展方向可以多线发展学习,如果没有,别纠结太多。因为想再多还不如在当前的方向上多做实践。

渐入佳境

由于后端开发人员的调动,后端相关开发工作完全交由我负责,我开始去思考系统整体架构,补齐系统监控、统计等各类指标。

此时开始对nodejs感到迷茫,不知道还有哪些可以深入(并不是说自己已经很精通,而是觉得遇到了瓶颈无法再进步),正好golang开始比较火,虽然公司项目中暂未有使用,但考虑到今后后端开发可能会切入至golang,也刚好想弥补以前实现nodejs的web框架遗憾。

由于工作上并没有golang相关的需求,公司性质也注定了无法自己随意尝试使用新语言,所以都只能在下班或周末时实现。在此不得不说golang的确容易上手,基本一周即可。

elton则是当时学习的产物,主要参考koa的实现,完成了web框架以及十多个常用的中间件,后续基于elton实现了一个类似varnish的http缓存服务。

这时公司开始在后续业务中引入golang,工作中无缝切换至新的语言,但使用后又步入了和nodejs相同的境况,我不知道该如何继续提升,于是又开溜到另外一个方向。当时想了解APP应用的开发,学习flutter尝试写了一个小说类的APP(主要方便自己平时看小说),最终上架之后由于没什么人用(卫斯理系列部分无版权问题的科幻小说),因此将应用下架。然后又想尝试一下macos的应用开发,搜索了解各类技术,看到了tauri,决定尝试使用tauri开发一个桌面应用,顺带学习一下rust(几年前尝试过学习,最终从入门到放弃)。

在这个阶段,我的心得体会是:人生好像一直都是这样,找点事做便把时间打发了,每个人的选择可能都不一样,可以写代码可以玩游戏,也可以看电视剧。其实没必要太计较得失,也真不要想太多,尽可能让自己过得开心即可。

平常心平常态

为什么一直在换语言而非深入再深入研究?除了刚毕业的时候,过往的事实让我明白其实自己就是一个普通人,可能靠努力能达到80分,但是很难靠努力能完成80到100的跃迁。

虽然创建了200多个开源的代码库,也占用了自己大部分闲余时间,效果那真是惨不忍睹,心酸也是真的心酸。一开始想着金子总会发光,后来的经验告诉我项目还是需要推广,因此还是厚着脸皮推广以下几个项目:

Last updated