justjavac:从辍学到成为Deno核心代码贡献者,我的十年编程生涯

【CSDN 编者按】大学因学费而辍学,最困难时睡在公园长椅,有远见的母亲让他走上了编程之路,温柔智慧的妻子用爱与信任激励着他秉承初心、奋勇前行。编程十余年,他已在GitHub开源三百多个项目,项目总Star数位居全球TOP 20。从后端成功转型为前端,成为Deno核心代码贡献者的迷渡(网络ID:justjavac)在《新程序员004》之「我是程序员」板块分享了他这一路的成长与感悟。同时,也给新一代开发者留下了寄语:“学历代表过去,能力代表现在,学习能力代表未来”。

作者 | 迷渡 责编 | 张红月
出品 | 《新程序员》编辑部

2009年,Node.js&Deno之父Ryan Dahl首次在JSConf EU上介绍Node.js,从那时起,他便成为我崇拜的技术偶像。

2019年,我收到了一封来自Ryan Dahl的邮件,信中他说来中国了,想约我一起喝杯咖啡,谈谈Deno以后的发展方向。我激动的一晚上没有睡好,第二天一大早便坐高铁从天津赶到北京赴约(见图1)。

在这里插入图片描述


回顾十多年的编程生涯,我在大学时因为学费而辍学,最困难的时候也曾经睡过天津人民公园的长椅,后来在百脑汇找了份电脑维修工作,业余时间学习了计算机相关的所有课程。结婚之后在老婆的督促下开始努力,经过十余年的付出,终于迎来了自己的Aha时刻:技术文章全网访问量破千万,如今被Node.js之父单独约见并一起开发下一代类Node.js平台——Deno。

在这里插入图片描述

本文节选自《新程序员004》,扫描上方二维码即可订阅

学生时代编程启蒙

初中时,我开始接触电脑,使用的第一门语言是BASIC。那时我所在的初中是我们县仅有的几个开设计算机课程的学校之一,当时电脑还是奢侈品,进入微机室上课需要穿鞋套。每个学期的计算机课程很少,两周才上一节课。还总会出现“今天微机课老师有事,这节课改成数学/语文课”的情况。课程内容也很简单,就是一些计算机的正确开关机、拼音打字、五笔打字、常用操作,并没有安排编程课。但微机教科书最后两章是BASIC编程入门,于是我在学完计算机基本操作之后就开始自学BASIC编程,编写的第一个程序是计算从0累加到100的总和。

在初三时,我的父亲给我买了一台二手电脑。我在这台电脑上编的第一个程序是VBA,主要是使用VBA脚本在Excel中处理了我整个初三上半年的成绩。闲暇之余,也会玩一些游戏,如《红色警戒》。

到了高中,学校的电脑课程主要围绕WPS和一些软件操作教程。彼时的我从计算机杂志里面扣下来一张3.5寸软盘,在电脑上安装了Pascal编译器,也进行了一些简单的编程尝试。不过家里的电脑最主要的用途还是用来玩游戏,放假时,我经常邀请同桌一起来家里玩《雷电》。但是好景不长,没过多久这台电脑平白无故的就坏了,也一直没修。到现在我也不知道这台电脑到底是年久失修坏的还是“人为的故意”损坏。总之直到高考结束,我再也没有写过程序。

人生的两个转折点:选择与放弃

当填报志愿那天来临时,我的妈妈做了一个影响我直到现在的决定,这也是我人生的第一个拐点。当时我还在犹豫填报什么专业的时候,母亲对我说:“现在比尔·盖茨是世界首富,学编程以后肯定吃香,报计算机编程专业吧”,于是我大学选择了软件工程专业。

万万没想到妈妈的话一语成谶,我果然步了比尔·盖茨的后尘——但是并没有像比尔·盖茨一样成为世界首富,而是像比尔·盖茨一样辍学了,当然这些都是后话了。

还记得2009年对我来说是最尴尬的一年,那年我花掉了家里给我本来应该交下学期学费的钱,买了一台高配的笔记本。当我打算用一年时间打工赚学费时,却被现实无情地打败了。我和3个同学一起在网上找了一个饭店服务生的工作,面试完之后HR告诉我们上岗需要穿西装。我之前从来没有穿过西装,正当我犹豫要不要买一件的时候,却接到了公司的电话,其它3个同学都应聘上了,我落榜了。

后来,我静下心来回归到了正常的大学学习与生活中。大学期间,我学习的主要课程是C、C++、C#、Delphi,也在图书馆里自学了Java、PHP、Python。个人而言,我最喜欢的语言是Java和C,于是我给自己取了一个网名叫justjavac。我接触的第一个开源软件是FireFox,这也是我头像的由来,我很欣赏FireFox挑战IE浏览器权威的故事。

随着Node.js的发布,Ryan Dahl成了我的榜样和偶像,我做梦都幻想自己将来能成为像Ryan Dahl一样的软件工程师。

于是,我开始关注国外的最新技术以及开源相关的动态。就这样大学过去了一年,我鼓起勇气向开源软件Tomcat的Servlet组件提交了个人的第一个代码补丁。那时候GitHub还没有诞生,我在查阅了很多向开源软件贡献代码的资料后,将代码补丁以邮件的形式发给了Tomcat维护者,经过几轮的讨论,我的补丁被拒绝了。虽然这次参与开源失败了,但这是我迈向开源的第一步。

大学期间,我也开始了第一次创业之旅。我的第一个创业合伙人叫徐来,他的座右铭“但行好事,莫问前程”深深的影响了我。他是我大学的班长兼舍友,当大部分同学都找到实习工作的时候,只有我在宿舍里写写程序,而他则在外面接一些做软件的私活,并让我和他一起做。后来他对我说要成立一家公司,询问我是否感兴趣一起干。那天,我们聊了很多,也聊得很投机。人生中的第一次创业便从这时展开。

没过多久,我就用到了大学自学过的几乎所有编程语言,俨然成为了一名“全能”工程师,而徐来也支持并认可我做的每一次技术选型。创业比打工要辛苦多了,最久一次工作时间是一个月只休息了一天,但一想到是为了自己而拼搏,也就不觉得累了。

大学的时光总是美好而短暂,很快就到了毕业的日子。临近毕业的前几天,老师找到我说,如果能够补齐此前拖欠的学费,可以给我补发毕业证和学位证。然而在人生的第二个拐点,我做了一个错误的决定。当时只是想着“既然我根本就没怎么去上课,为什么还要补交学费呢?”于是我拒绝了老师的要求,实则最主要的原因是当下确实没有钱,也因此没有拿到毕业证。

一万小时定律

从学校离开的两年后,我结婚了。结婚前的一个月,一直期待婚姻的我第一次有了恐婚心理。那时的我一无所有:没钱、没房、没车,甚至也没有给老婆买钻戒、拍婚纱照。

我们最初租了一间60多平米的房子,生活的大部分花销都是由老婆负责,我平时就是靠编程获得寥寥可数的工资,即使如此,老婆依然很支持我做的任何事情和决定。婚后我除了编程之外,也开始写写博客、在社区回答一些问题。

不过,有一年的结婚纪念日,我的老婆突然和我谈心时说道:“你知不知道之前咱们租房时,有一次我切着切着菜,把菜都扔地上了,在沙发上坐了一会儿才又继续切。你知道为什么吗?我在想,我要一辈子过这种日子吗?后来我想通了,既然我当初嫁给了你,就算跟你过一辈子这种日子,我也愿意”。

这段话深深地触痛了我,我不应该辜负一个深深爱着我的人,我应该做些改变。

不久后我在网上看到了一句话:一万小时定律,任何一个人只要在某个领域精益求精地钻研一万小时,那么他就能成为这个领域的专家。听上去有点像心灵鸡汤,但是不管它是“真鸡汤”还是“毒鸡汤”,我都喝定了。那晚我和老婆聊到很晚,我告诉她,“一万小时是多久?如果一个技术我每天钻研5小时,一年365天,那么一万小时差不多就是5年。而5年后我才三十岁左右,别人三十岁可能已经遇到中年危机了,而我三十岁能成为一个领域的专家。不过专家这个词比较虚,现实一点的说法就是虽然我现在一年赚不到3万,但是我一定要30岁的时候年薪30万”。

自此以后,我便把主要精力都放在了JavaScript 上,而且还更加深入的研究了 JavaScript的执行原理以及Chrome、V8、Node.js的底层机制。为了研究网页上的 JavaScript库,我开发并开源了一个Chrome插件LibrarySniffer(原 ChromeSnifferPlus),安装这个插件后,使用Chrome浏览任何网页时都会在插件页显示出当前页面用到了哪些JavaScript库。

2014年,在我办了一张双币信用卡并支付了5美元的费用后 ,LibrarySniffer终于在 Chrome Web Store上架了。同年我又开发了另一个插件ReplaceGoogleCDN,将国外的通过CDN直接引入的JavaScript资源替换为国内的镜像资源,可以达到2-50倍的加速效果。第二年,LibrarySniffer收到了一名巴西程序员提交的葡萄牙语言包,这也是我的开源项目第一次受到外国开发者的关注。

结识狼叔,深入Node.js后端

我以为LibrarySniffer能受到国外程序员关注是我的巅峰,没想到这仅仅只是开始。一个月后我收到了某个活动的邀请函,让我去他们公司做技术交流。该公司创始人说要上线一个新品,特邀我去做技术分享,如图2所示。

在这里插入图片描述

图 2 我的首次分享

之后,我也经常参加业界的一些开发者大会。还记得在天津举办的一场200人的开发者大会上,我在做完JavaScript前端相关主题演讲后,结识了阿里巴巴技术专家、国内知名Node.js技术布道者、《狼书:更了不起的Node.js》作者i5ting(狼叔)。

想必很多经常逛Node.js中文社区的开发者即使没听说过创始人alsotang,也一定听说过 i5ting。当得知狼叔也在天津创业时,我还是吃了一惊。天津被称为互联网的沙漠,而狼叔带领的Node.js团队可谓沙漠里面的一颗明珠。我经常使用Node.js,不过只是作为工具,真正生产环境里的后端服务依然是使用PHP或者Java。

我和狼叔深入聊了聊Node.js后端,随后狼叔更是邀请我去参观他们公司的技术团队。狼叔对我说,你研究V8那么深,其实对前端的作用不是非常大,但是对于Node.js后端则很有用。听完狼叔的劝告,我也开始在公司中引入Node.js作为后端服务,遇到问题则直接呼叫狼叔这个“免费的顾问”,几乎都可以解决。

谁曾想天有不测风云,一心研究Node.js的狼叔被合伙人给坑了。我约狼叔出来一起吃饭,心态佛系的狼叔也没有怨天尤人,只是说了句“程序员斗不过商人”。这句话我太有同感了,因为我第二次创业时也是被合伙人给坑了。我安慰他说,你虽然离开天津了,但是我继续留在天津扛下Node.js的大旗。狼叔笑道:“就算我不走,你也是天津 Node.js届的扛把子”。

狼叔比我小,平时他喊我哥,我喊他叔。在随后的几年里,每当狼叔来天津都会和我一起叙叙旧,而我如果去到了狼叔所在的城市也会找他一起聊聊天。最近几年,我在维护 Deno的过程中也向狼叔请教了很多Node.js的知识点。

在这里插入图片描述

成为Deno核心代码贡献者

2017年,我收到腾讯TFC前端大会的邀请,去分享V8、JavaScript相关内容,这是我第一次被BAT大厂邀请。会后知名前端开发者winter曾问我,“你在天津哪家公司任职,为什么会用到这么深入的V8场景”。我回应道,“其实我们公司根本用不到这些,研究V8纯粹是我的个人兴趣”。当他问为什么不去腾讯、阿里、字节跳动时,我回答说,比较恋家,娶了个天津老婆,所以也就不想去北上广了。

在这里插入图片描述

图4 上排中间 winter(寒冬),中排中间 justjavac(迷渡)

2018年,Ryan Dahl向社区宣布正在开发另一个JavaScript/TypeScript运行时平台——Deno。我第一时间下载了源码并编译了一个可执行文件,我在使用后发现Deno的Bug还非常多,毕竟才刚开发不久。彼时网上对Deno也存在两种截然不同的态度,一种是崇拜,另一种是质疑,甚至出现了Deno的issue被垃圾信息充斥的局面。但是,只顾在 issue上发泄不满解决不了任何问题。彼时,我便在思考,既然Deno问题这么多,为什么不帮它改进呢?于是,我开始了Deno开发之旅。

起初我也仅仅是帮Deno改一下Bug,但当我得知Deno是想做一个兼容浏览器及Web API平台后,我便新建了一个开源项目,为Deno开发WPT(Web-Platform-Tests Suite,Web平台测试套件),然后帮助Deno实现和改进了url、console、encode/decode、timmer等API。

随着越来越多的开发者开始使用Deno,新问题不断涌现。由于TypeScript的整套工具链都是基于Node.js开发,这就导致了当使用VSCode开发Deno时会出现波浪线标红警告,于是我开发了一个 VSCode扩展和一个TypeScript Service Plugin来解决这个问题,很快这个扩展便受到了国内外很多社区的推荐,甚至得到Deno之父Ryan Dahl的关注。

2019年,Ryan Dahl和我见面时也当面感谢我为Deno开发了这个扩展。与此同时,另一位开发者axetroy(铁手) 也一直为这个扩展添加功能。后来我老婆怀孕了,我对社区的参与也少了很多,于是axetroy基于我的代码新建了一个项目继续开发并完善这个扩展。

在Deno发布1.0正式版的当天,我联系Ryan Dahl并希望把该扩展放到Deno的官方仓库。我目前最遗憾的一件事就是由于当时选择了直接把我的项目复制到官方仓库而导致了axetroy代码没有合并进来。

后来,我又搭建了Deno中国加速镜像服务,让国内开发者更加方便地学习和使用 Deno。将deno.dev域名送给Ryan Dahl 作为Deno Deploy的官方域名。开发了Deno的多版本管理工具dvm(Deno Version Manager)。

这几年我不断被各种技术研讨会、组织、企业、个人邀请去做Deno技术演讲。

然而我并没有止步于Deno,2020年华为开源了HarmonyOS(鸿蒙)系统,当我得知鸿蒙系统也是用了一个轻量级JavaScript引擎时顿时来了兴致,当晚便下载了鸿蒙的源码开始研究,并写了一篇逐行分析鸿蒙JavaScript框架源码的文章,还为鸿蒙修复了多个bug,不久后收到了鸿蒙团队寄来的一个开发版,从此以后再也不用在模拟器上调试了,而可以直接使用真机了。

总结

自我第一次参与开源到现在十余年,已经在GitHub上开源300多个项目,根据第三方数据统计目前获得的总Star数排名全球前20。我感觉自己非常幸运,从后端转型到前端后就赶上了JavaScript的飞速发展,也见证了HTML5、ES6、CSS3等技术的发展历程。最后想送给每位开发者一句话“学历代表过去,能力代表现在,学习能力代表未来”。


二十年前,《新程序员》创刊时,我们要全面关注软件人的成长。今天,我们依然初心不变:在一行行代码的背后,是一颗颗鲜活的开发者想要改变世界的雄心壮志。

因此,《新程序员004》从 C++之父 Bjarne Stroustrup、C# 之父 Anders Hejlsberg、MySQL 之父 Michael “Monty” Widenius、PostgreSQL 全球开发组联合创始人 Bruce Momjian 等程序员祖师爷,到阿里巴巴副总裁贾扬清、指令集创始人兼董事长潘爱民、Vue.js 作者尤雨溪……48 位技术大咖,共创我们的程序人生、我们的技术时代。《新程序员004》已全面上市,欢迎订阅!

在这里插入图片描述

原文地址:https://newprogrammer.blog.csdn.net

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读5.3k次,点赞10次,收藏39次。本章详细写了mysql的安装,环境的搭建以及安装时常见的问题和解决办法。_mysql安装及配置超详细教程
文章浏览阅读1.8k次,点赞50次,收藏31次。本篇文章讲解Spark编程基础这门课程的期末大作业,主要围绕Hadoop基本操作、RDD编程、SparkSQL和SparkStreaming编程展开。_直接将第4题的计算结果保存到/user/root/lisi目录中lisipi文件里。
文章浏览阅读7.8k次,点赞9次,收藏34次。ES查询常用语法目录1. ElasticSearch之查询返回结果各字段含义2. match 查询3. term查询4. terms 查询5. range 范围6. 布尔查询6.1 filter加快查询效率的原因7. boosting query(提高查询)8. dis_max(最佳匹配查询)9. 分页10. 聚合查询【内含实际的demo】_es查询语法
文章浏览阅读928次,点赞27次,收藏18次。
文章浏览阅读1.1k次,点赞24次,收藏24次。作用描述分布式协调和一致性协调多个节点的活动,确保一致性和顺序。实现一致性、领导选举、集群管理等功能,确保系统的稳定和可靠性。高可用性和容错性Zookeeper是高可用的分布式系统,通过多个节点提供服务,容忍节点故障并自动进行主从切换。作为其他分布式系统的高可用组件,提供稳定的分布式协调和管理服务,保证系统的连续可用性。配置管理和动态更新作为配置中心,集中管理和分发配置信息。通过订阅机制,实现对配置的动态更新,以适应系统的变化和需求的变化。分布式锁和并发控制。
文章浏览阅读1.5k次,点赞26次,收藏29次。为贯彻执行集团数字化转型的需要,该知识库将公示集团组织内各产研团队不同角色成员的职务“职级”岗位的评定标准;
文章浏览阅读1.2k次,点赞26次,收藏28次。在安装Hadoop之前,需要进行以下准备工作:确认操作系统:Hadoop可以运行在多种操作系统上,包括Linux、Windows和Mac OS等。选择适合你的操作系统,并确保操作系统版本符合Hadoop的要求。安装Java环境:Hadoop是基于Java开发的,因此需要先安装和配置Java环境。确保已经安装了符合Hadoop版本要求的Java Development Kit (JDK),并设置好JAVA_HOME环境变量。确认硬件要求:Hadoop是一个分布式系统,因此需要多台计算机组成集群。
文章浏览阅读974次,点赞19次,收藏24次。# 基于大数据的K-means广告效果分析毕业设计 基于大数据的K-means广告效果分析。
文章浏览阅读1.7k次,点赞6次,收藏10次。Hadoop入门理论
文章浏览阅读1.3w次,点赞28次,收藏232次。通过博客和文献调研整理的一些农业病虫害数据集与算法。_病虫害数据集
文章浏览阅读699次,点赞22次,收藏7次。ZooKeeper使用的是Zab(ZooKeeper Atomic Broadcast)协议,其选举过程基于一种名为Fast Leader Election(FLE)的算法进行。:每个参与选举的ZooKeeper服务器称为一个“Follower”或“Candidate”,它们都有一个唯一的标识ID(通常是一个整数),并且都知道集群中其他服务器的ID。总之,ZooKeeper的选举机制确保了在任何时刻集群中只有一个Leader存在,并通过过半原则保证了即使部分服务器宕机也能维持高可用性和一致性。
文章浏览阅读10w+次,点赞62次,收藏73次。informatica 9.x是一款好用且功能强大的数据集成平台,主要进行各类数据库的管理操作,是使用相当广泛的一款ETL工具(注: ETL就是用来描述将数据从源端经过抽取(extract)、转换(transform)、加载(load)到目的端的过程)。本文主要为大家图文详细介绍Windows10下informatica powercenter 9.6.1安装与配置步骤。文章到这里就结束了,本人是在虚拟机中装了一套win10然后在此基础上测试安装的这些软件,因为工作学习要分开嘛哈哈哈。!!!!!_informatica客户端安装教程
文章浏览阅读7.8w次,点赞245次,收藏2.9k次。111个Python数据分析实战项目,代码已跑通,数据可下载_python数据分析项目案例
文章浏览阅读1.9k次,点赞61次,收藏64次。TDH企业级一站式大数据基础平台致力于帮助企业更全面、更便捷、更智能、更安全的加速数字化转型。通过数年时间的打磨创新,已帮助数千家行业客户利用大数据平台构建核心商业系统,加速商业创新。为了让大数据技术得到更广泛的使用与应用从而创造更高的价值,依托于TDH强大的技术底座,星环科技推出TDH社区版(Transwarp Data Hub Community Edition)版本,致力于为企业用户、高校师生、科研机构以及其他专业开发人员提供更轻量、更简单、更易用的数据分析开发环境,轻松应对各类人员数据分析需求。_星环tdh没有hive
文章浏览阅读836次,点赞21次,收藏19次。
文章浏览阅读1k次,点赞21次,收藏15次。主要介绍ETL相关工作的一些概念和需求点
文章浏览阅读1.4k次。本文以Android、java为开发技术,实现了一个基于Android的博物馆线上导览系统 app。基于Android的博物馆线上导览系统 app的主要使用者分为管理员和用户,app端:首页、菜谱信息、甜品信息、交流论坛、我的,管理员:首页、个人中心、用户管理、菜谱信息管理、菜谱分类管理、甜品信息管理、甜品分类管理、宣传广告管理、交流论坛、系统管理等功能。通过这些功能模块的设计,基本上实现了整个博物馆线上导览的过程。
文章浏览阅读897次,点赞19次,收藏26次。1.背景介绍在当今的数字时代,数据已经成为企业和组织中最宝贵的资源之一。随着互联网、移动互联网和物联网等技术的发展,数据的产生和收集速度也急剧增加。这些数据包括结构化数据(如数据库、 spreadsheet 等)和非结构化数据(如文本、图像、音频、视频等)。这些数据为企业和组织提供了更多的信息和见解,从而帮助他们做出更明智的决策。业务智能(Business Intelligence,BI)...
文章浏览阅读932次,点赞22次,收藏16次。也就是说,一个类应该对自己需要耦合或调用的类知道的最少,类与类之间的关系越密切,耦合度越大,那么类的变化对其耦合的类的影响也会越大,这也是我们面向对象设计的核心原则:低耦合,高内聚。优秀的架构和产品都是一步一步迭代出来的,用户量的不断增大,业务的扩展进行不断地迭代升级,最终演化成优秀的架构。其根本思想是强调了类的松耦合,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会波及有关系的类。缓存,从操作系统到浏览器,从数据库到消息队列,从应用软件到操作系统,从操作系统到CPU,无处不在。
文章浏览阅读937次,点赞22次,收藏23次。大数据可视化是关于数据视觉表现形式的科学技术研究[9],将数据转换为图形或图像在屏幕上显示出来,并进行各种交互处理的理论、方法和技术。将数据直观地展现出来,以帮助人们理解数据,同时找出包含在海量数据中的规律或者信息,更多的为态势监控和综合决策服务。数据可视化是大数据生态链的最后一公里,也是用户最直接感知数据的环节。数据可视化系统并不是为了展示用户的已知的数据之间的规律,而是为了帮助用户通过认知数据,有新的发现,发现这些数据所反映的实质。大数据可视化的实施是一系列数据的转换过程。