MY Year With Deno...
... and my internal struggles.
WARNING: This is a NON-technical article. Stop reading if you are here hoping to find anything useful about design of Deno.
WARNING 2: If you are an experienced software engineer, you might find this article very boring.
It has been slightly more than 1 year since I first heard about Deno and submitted my first PR, and it also has been almost one year since I actually started to take the project seriously and decided to become a frequent contributor. So yeah I think it might be cool for me to briefly look back into the journey in this article (although I doubt it would be interesting or relevant).
Who am I?
Guess not really anyone knows me, especially as I use this stupidly long Github handle which has no obvious correlation with me.
My name is Kun Qian (钱坤), using "Kevin" as a preferred name since nobody pronouces "Kun" correctly. I'm Chinese, spending my first 18 years of life in a mid-sized city in China and has been living in the US for 4 years in pursuit of some mediocre degrees.
I've never done any programming before I came to the US. Not a single line of code -- I had never even owned a computerbefore college, never heard of JS or C++, and once looked down upon programming -- there is a Chinese word "码农", literally meaning "peasants who code", to describe programmers, and that was my only idea about programming. I had aspired to become a professional violinist, a composer, a novelist (that's how I got the "Kassimo" pen name), or at least a physicist of some sort.
Yet I landed here working on software. I got admitted to UCLA with undeclared major, and after taking some Computer Science classes and under the influence of some of my friends, decided that a CS major wasn't so bad, and here I am, started with some game programming, then Web, and now trying to work on server side stuff.
How did I know about Deno?
I was under constant panic and (even today) suffer badly from "imposter syndrome": people around me thought I did well in classes, but I never believed I had written good code of any usefulness. I did a decent internship related to Web, but I never (even today) think I know enough to count as a true Web developer. Even worse, I felt I was too distant from the bare metal knowledge, worrying that at one point the whole Web would just go away and I would end up unemployed and live on the streets (that was radical lol).
I happened to read an article in Chinese written by @monkingxue about Deno immediately after JSConf EU last year (funny that Malte, one of its organizers, was my big boss at AMP). I had used Node.js before (since when I was learning JS, I used Express to write servers) but never actually know how "asynchronous operations" work. I also had a tiny little bit of experience with Go, so I thought, "yeah, working on a JS runtime sounds cool, plus I can figure out how things work in Node.js by working on a simpler version of it, and practice writing something on the server instead in the browsers. Maybe I will become less stupid after working on this."
And that was it. At that time I had never thought about if
Deno is ever to be "the future", if the project would be
glorified in flowers or dead in turmoil -- since I did not
know anything. I submitted my first PR to improve
Console, paused during the summer during internship,
came back realizing everything is rewritten in Rust,
panicked about knowing nothing about Rust, learned Rust,
and continued the work.
I still remembered the first time I sent out something to the Gitter chatroom. All other people in the chat seems to be way senior than me. I had to edit, delete and reenter my message quite a few time to make me sound less stupid -- especially that I did not want to look stupid in front of Ryan Dahl, who was at that time more or less like a distant idol, aka "Father of Node.js", to me.
As I am doing more work...
My whole year with Deno turns out to be a great experience for me to learn stuff. Limited by the scope in college, I now have a chance to peek into how people actually think about software development. Different people came to the chatroom and issue threads, some excited about the new project, some delighted by certain design decisions, some voicing their worry about if following a path is correct, some citing specs and articles trying to correct implementation or pursuade to adopt a different design, and some rushing in to blame everyone of stupidity. Through communication I started to understand how real world reasoning is done on software, how new ideas are drafted and formalized, how balance could be seeked from different viewpoints, and, also important, how things can be imperfect at the beginning and improved gradually without haste or panicking.
It is also interesting to think about how many new concepts and tools I learned throughout the process. I would never have imagined to learn Rust by myself, nor would I ever probably read WHATWG and W3C specs to understand a Web API design (mostly likely just stop at MDN). Sometimes when debating with people from a different background about if a design is acceptable, I actually need to go and get basic understanding about the other tools they mentioned about for comparison.
As I work on more aspects of the project, my mindset has also changed from "would be impressing if I could do A" to an obligation, that "I have to fix A since I know it well, and leaving it there slows down the development." As this happens, I no longer feel that I am oppressed to work and learn by panic -- I am actively trying to bring more creation by filling my knowledge repertoire.
... Something else around me changes
AKA I am less of a complete nobody in the world of programming.
I don't really care if people know me or not (being "famous" actually brought me fear due to some incidents in the past I do not want to talk about). But at least when I am with other developers, I have something to discuss that might stir up their interest. It turns out while people maybe do not explicitly judge others by title, they are more likely willing to respect and exchange ideas with one who work on stuff they heard about or somewhat relate to their job, than with a recent graduate who have never worked full time in the industry (unless you are their intern or relative) -- and that is totally understandable and reasonable. I feel I am now more of a member of the developer world.
And that's all I have in mind at this moment
I might add a few more paragraphs later, but above is all I have right now. I want to thank all the people I mentioned here, @TimothyGu for insights, and Ryan, Bert, Kitson, Bartek, 日野澤さん, Andy (both), JJC, Vincent, Axetroy, 櫻井さん, Dmitry, 木杉, and all others who worked on the project and who I learned a lot from.