Frontend Canteen
Published in

Frontend Canteen

From A Dropout to A Core Contributor to Deno, Here’s The Story of My 10-year Programming Career

An inspirational story from justjavac.

Ryan Dahl and justjavac in Beijing

He couldn’t get a diploma in college because he couldn’t afford the tuition. During the hardest of times, he could only sleep on a park bench.

The visionary mother put him on the road of programming, and the gentle and wise wife inspired him with love and trust to stick to his original intention and move forward bravely.

After more than ten years of programming, he has open-sourced more than 300 projects on GitHub, became one of the top 10 users of GitHub, according to stars, and became a core code contributor of Deno.

His contribution to Deno.

He is justjavac , a programmer from China. From a dropout to a top developer, his story is very inspiring. With his permission, I’m sharing his story here in the hope that it will inspire you.

The following is his own statement.

In 2009, Ryan Dahl, the father of Node.js & Deno, introduced Node.js for the first time at JSConf EU. Since then, he has become a tech icon I adore.

In 2019, I received an email from Ryan Dahl saying he was coming to China and wanted to meet me for a cup of coffee to talk about the future direction of Deno. I was so excited that I didn’t sleep a wink and took the high-speed train from Tianjin to Beijing early the next morning for the appointment.

Looking back on more than ten years of my programming career, I dropped out of college because of tuition fees, and I used to sleep on the benches in Tianjin People’s Park when I was in the most difficult time.

Later, I found a computer repair job in a computer mall and studied all the computer-related courses in my spare time. After I got married, I started to work hard under the urging of my wife.

After more than ten years of hard work, I finally had my Aha moment: the views of my technical articles broke ten million. Now I was invited by the father of Node.js to develop the next generation Nodejs-like platform — Deno together.

My Student Years

In junior high school, I was introduced to computers, and the first programming language I used was BASIC. At this time, my junior high school was one of the only schools in my district that offered computer classes, and computers were still a luxury. You needed to wear shoe covers to enter the computer room for class.

There were very few computer classes each semester, only one class in two weeks. And there is often a situation: “because the computer teacher has something to do today, the class is changed to a math/language class.”

(Note from bytefish: Because the computer subject is not a major subject and does not participate in the final exam, many teachers do not pay attention to computer teaching. Computer courses are often replaced with other main subject courses, and “the computer teacher has something to do ” is a common excuse, which is an interesting phenomenon in China.)

The course content is also very simple: how to turn on and off the computer, text input, and other basic operations. No programming class is scheduled.

However, the last two chapters of the computer textbook were an introduction to BASIC programming, so I started to learn BASIC programming on my own after learning basic computer operations. And the first program I wrote was calculating the sum from 0 to 100.

My father bought me a second-hand computer in the third grade of junior high school. The first program I wrote on this computer was VBA, mainly using VBA scripts to process my grades in Excel for the entire first half of the third year of junior high school. I also play some games in my spare time, such as Command & Conquer: Red Alert.

By the time I was in high school, the school’s computer program was focused on teaching office software operation. I snapped off a 3.5-inch floppy disk from a computer magazine, installed a Pascal compiler on my computer, and tried some simple programming.

But the primary purpose of the computer at home was to play games. When I was on vacation, I often invited my tablemates to come over and play Raiden(a video game). But it was not long before the computer broke down for no reason, and it was never repaired. I do not know whether this computer is in disrepair or “human intentional” damage. Anyway, until the end of the college entrance examination, I never wrote any program.

My College Days

Once the college entrance exam is over, it is time to choose a college and major.

(Note from bytefish: In China, before entering college, students need to choose their major, and once they choose it, it is very hard to change it. After selecting a major, students are likely to pursue a career related to that major. So, in China, choosing a college major is no less important than choosing a marriage partner.)

When I was hesitating, my mother gave me a key piece of advice: “Bill Gates is the richest man in the world now, so learning programming is definitely not wrong. You should choose a computer-related major.”

So I chose a major called software engineering.

I never thought that my mother’s words would become a prophecy, and then I stepped into the footsteps of Bill Gates: but I did not become the wealthiest man in the world, but dropped out of college. Of course, these are all later stories.

2009 was the most embarrassing year for me. That year I spent the money my family gave me that I was supposed to pay for the next semester’s tuition to buy a high-end laptop. While I planned to spend the year working part-time to earn tuition, I was mercilessly defeated by reality. After the interview, HR told us that we needed to wear suits for the job. I had never worn a suit before. And just when I was hesitating to buy one, I received a call from the company saying I was rejected, while the other three classmates all applied for the job.

Later, I settled down to return to my regular university study and life. Personally, my favorite language is Java and C, so I gave myself a screen name: justjavac. The first open-source software I came into contact with was FireFox. I appreciate FireFox’s story of challenging IE’s authority, so I used their logo as my avatar.

https://github.com/justjavac

With the release of Node.js, Ryan Dahl became my role model and idol, and I dream of being a software engineer like Ryan Dahl in the future.

So, I started to pay attention to the latest technology and open source-related developments. After a year of college, I got up the courage to submit my first code patch to the Servlet component of the open-source software Tomcat. At that time, GitHub was not yet in existence. And after reviewing a lot of information about contributing code to open source software, I emailed the code patch to the Tomcat maintainer. After a few rounds of discussion, my patch was rejected. Although this participation in open source failed, it was my first step toward open source.

During my college years, I also started my first entrepreneurial journey. My first entrepreneurial partner is Xu Lai, whose motto “Do good, don’t ask about the future” deeply influenced me. He was my class president and roommate in college. When most of my classmates found internship jobs, I was the only one writing programs in the dormitory, while he was taking some programming odd jobs outside and asked me to do it with him.

Later he told me that he wanted to set up a company and asked if I was interested in doing it together. That day, we talked a lot and had a good conversation. This was when I started the first business in my life.

It didn’t take me long to use almost all the programming languages I had learned in college, and I became an “all-round” engineer, and Xu Lai also supported and approved every technical selection I made. The longest time I worked was one day off for a month, but when I thought I was fighting for myself, I didn’t feel tired.

The time of college is always good and short, and soon it was the day of graduation. A few days before graduation, my teacher approached me and said that if I could make up the tuition fees I had previously owed, I could get a replacement diploma and degree. But I didn’t have any money then, so I didn’t get my diploma.

10,000-hour rule

Two years after leaving college, I got married. A month before I got married, I was looking forward to marriage for the first time I had a fear of marriage. At that time, I had nothing: no money, no house, no car, not even to buy a diamond ring for my wife and take wedding photos.

We initially rented a house of about 60 square meters, and my wife was responsible for most of our living expenses, and I usually just got a very small salary from programming. Even so, my wife was still very supportive of anything I did or decided to do. After the marriage, I started to write blogs and answer some questions in the community, in addition to programming.

But one year on our anniversary, my wife and I were having a heart-to-heart conversation, and she suddenly said, “Do you know one day I was chopping vegetables, and all of a sudden I threw them on the floor, and then I sat on the couch for a while before I started chopping again. Do you know why? I was thinking, am I going to live like this forever? Then I realized that since I married you, I would like to live like this with you all my life.”

This passage touched me a lot, I should not let down someone who loves me deeply. I should do something to change.

Then I heard the 10,000-hour rule, which was popularized by Malcolm Gladwell’s blockbuster book “Outliers.” As Gladwell tells it, the rule goes like this: it takes 10,000 hours of intensive practice to achieve mastery of complex skills and materials, like playing the violin or getting as good as Bill Gates at computer programming.

I don’t know if this rule is correct, but I have no choice but to believe it. If I study a technology for 5 hours a day, 365 days a year, then 10,000 hours is about 5 years, and after 5 years, I will only be about thirty years old. If I can become an expert in a field at thirty, I think it’s worth it. A more utilitarian statement is: Although I can’t earn 30,000 (RMB) a year now, I must earn 300,000 a year when I am 30 years old.

Since then, I have mainly focused on JavaScript, and I have also studied the execution principle of JavaScript more deeply and the underlying mechanism of Chrome, V8, and Node.js. To study the JavaScript library on any web page, I developed an open-sourced Chrome extension called Library Sniffer (formerly ChromeSnifferPlus). After installing this extension, when you are browsing any webpage with Chrome, the extension page will display which JavaScript libraries are used on the current page.

In 2014, LibrarySniffer was finally available on the Chrome Web Store after I got a CNY/USD dual currency credit card and paid the $5 fee. In the same year, I developed another extension, ReplaceGoogleCDN. It can replace the foreign CDN resource link in the webpage with the mirrored resource in China, so that the acceleration effect can be achieved by 2–50 times. The following year, LibrarySniffer received a Portuguese language package submitted by a Brazilian programmer. This was the first time that my open source project received attention from developers outside of China.

Dive deep into the Node.js

I thought that LibrarySniffer’s attention from foreign programmers was my peak, but I didn’t expect this to be just the beginning. A month later, I received an invitation letter for an event, asking me to go to their company for a technical exchange. The company's founder said he was going to launch a new product and invited me to share the technology.

After that, I also often attended developer conferences in the industry. I still remember that at a 200-person developer conference held in Tianjin, after I gave a keynote speech on JavaScript, I met Uncle Wolf, a technical expert from Alibaba and a well-known Node.js technology evangelist in China.

I had an in-depth chat with Uncle Wolf about the Node.js backend, and he even invited me to visit their company’s technical team. Uncle Wolf told me that although I have a deep research on the V8 engine, its effect on the front end is not very large, but it is very useful for Node.js. After listening to Uncle Wolf’s advice, I also began to introduce Node.js as a back-end service in my company. If I encounter problems, I always call Uncle Wolf, a “free consultant”, and almost everything can be solved.

In fact, Uncle Wolf is younger than me. Usually, he calls me brother, and I call him uncle. In the following years, whenever Uncle Wolf came to Tianjin, he would reminisce with me, and if I went to the city where Uncle Wolf was located, I would chat with him. In recent years, I have also asked Uncle Wolf for a lot of Node.js knowledge in the process of maintaining Deno.

Become a core contributor to Deno

In 2018, Ryan Dahl announced to the community that another JavaScript/TypeScript runtime platform, Deno, is being developed. I downloaded the source code and compiled an executable file for the first time.

After using it, I found that there are still many bugs in Deno. After all, it has just been developed. At that time, there were also two completely different attitudes towards Deno on the Internet, one was worship, the other was questioning, and there was even a situation where Deno’s issues page was flooded with spam.

However, just venting your dissatisfaction on issues will not solve any problems. At that time, I was thinking, since Deno has so many problems, why not help it improve? So, I started the Deno development journey.

At first, I just helped Deno fix the bug. But when I learned that Deno wanted to be a compatible browser and Web API platform, I created an open source project to develop WPT (Web-Platform-Tests Suite) for Deno. And then helped Deno implement and improve APIs such as url, console, encode/decode, and timmer.

As more developers use Deno, new problems keep popping up. Since the entire toolchain of TypeScript is developed based on Node.js, this leads to a red warning with a wavy line when developing Deno with VSCode, so I developed a VSCode extension and a TypeScript Service Plugin to solve this problem. Very soon, this extension was recommended by many communities and even received the attention of Ryan Dahl.

Ryan Dahl met me in 2019 and thanked me in person for developing this extension for Deno. Meanwhile, another developer, axetroy, has been adding functionality to the extension. Later, my wife became pregnant, and my participation in the community was much less, so axetroy created a new project based on my code to continue to develop and improve this extension.

On the day Deno 1.0 was released, I contacted Ryan Dahl and wanted to put the extension into the official Deno repository. Since I chose to copy my project directly to the official repository at that time, the code of axetroy was not merged in, which is one of my most regrettable things at the moment.

Later, I built the Deno China accelerated mirror service to help Chinese developers learn and use Deno more easily. I gave the domain deno.dev to Ryan Dahl as the official domain name of Deno Deploy. Then I developed Deno’s multi-version management tool, Deno Version Manager.

However, I did not stop at Deno. In 2020, Huawei open-sourced the HarmonyOS system. I was immediately interested when I learned that the Harmony OS also uses a lightweight JavaScript engine. I downloaded the source code of Harmony that night and started researching, wrote an article analyzing the source code of the HarmonyOS JavaScript framework line by line, and fixed several bugs for HarmonyOS. Soon after, I received a development version from the HarmonyOS team. From now on, I no longer need to debug on the simulator. You can use the real machine directly.

Conclusion

It has been more than ten years since I first participated in open source, and more than 300 projects have been open-sourced on GitHub. According to third-party statistics, the total number of stars obtained currently ranks among the top 10 in the world. I feel very lucky. After transitioning from the backend to the frontend, I caught up with the rapid development of JavaScript and witnessed the development of HTML5, ES6, CSS3, and other technologies.

Finally, I would like to share an advice: Education represents the past, ability represents the present, and learning ability represents the future.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
bytefish

bytefish

Explain complex concepts with simple English and visual diagrams.