Preface Link to heading

Frankly, I did not expect to have another blog post so soon after the lengthy one just one year ago. However, what has happened over the last year at Sourcegraph was huge, some chaos, some excitement, and of course led me to some thinking (which is good).

Therefore, I decided to write another blog post focusing on my career learnings and thoughts, as a way of celebrating my fourth anniversary of both working at Sourcegraph and my professional career. Be warned to take my words with a grain of salt, the same way you would interact with ChatGPT.

Getting addicted Link to heading

I was by no means a genius kid, and not one who would have the luxury to get in touch with computer programming in my childhood. No single person in my family tree knows anything about computer programming either. Like how many Asian parents would be pleased, I wanted to be a lawyer, a doctor.

All of this changed after I came to Boston for high school study. Late junior year, I got really bored after school (classes ended at 2:30 PM, sometimes I got detention for being late, but that only took 30 minutes), so I looked around to see what else I could do. I looked at the Microsoft Excel, guess what, it can be programmed using the programming interface called Visual Basic for Application (VBA). I made myself a simple spending tracking system all within Excel, essentially to help myself to understand my spendings. Once I had played enough with the VBA, I asked myself why not do some “real” programming with the full power of Visual Basic, at the time, it was Visual Basic 6.0.

Coding is the habit that lasts the longest in my life so far, except breathing. Why? I think because it is really addicting to be able to solve problems with software for others. A little story that I will never forget, sharing with you today.

I was writing a tool for an online gaming guild, and there was a bug reported by the guild leader right before he went to sleep. The next day, he woke up and saw my message and a new version for the tool. He was like “holy shit, the problem is solved after a simple sleep?” Well, fixing the bug itself might be trivial here, but the positive “customer” feedback or reaction is really intriguing me, in a massive, indescribable, speechless way. You have to feel it yourself to really understand it, and I bet most of you know what I’m talking about.

Give away for what I got for free Link to heading

After programming in Visual Basic 6.0 for some time, I wanted to learn more about other programming languages that look more “advanced”, one of which I bought a video course for. I learned the unfortunate truth that those videos were encrypted and could only be played by a sophisticated player that only runs on Windows XP, but I had Windows 7 and no one was selling Windows XP in the United States in the year of 2011. Reasonably, I asked for a refund, and I got kicked out from the support group chat without an explanation. Outrageous! I was so upset that I still have the emails containing those videos in my archived folder, named “Screw them” (this is a very polite translation from a more violent Chinese), to remind myself what kind of person I definitely do not want to be.

While this could just be a small glitch in one’s life with all the other unfortunate things happening, now I look back, I believe it planted a seed in my heart that has influenced many decisions I made. For example, why I am so obsessed with sharing things I’ve learned, and open sourcing my work.

At the time, programming knowledge was mostly kept secret in the Chinese online community, some were really nice people to share what they’ve learned, but others would feel extremely privileged to know how to program something. This could be a non-legitimate criticism given the few-thousand-year long history of keeping knowledge from the general public in China’s history, the problem though, I was on the other side of the wall.

There was one particular thing that keeps recurring in my memory (part of the reason is it feels so hilarious after the fact), so-called “network authentication”. With the rise of web applications and web services, some people couldn’t stop talking about how they could do network authentication for their applications, yet literally no one, not a single person talked about how to actually do that, not even the technical definition of it. I was so confused, so frustrated, for weeks. I was researching it during the day, dreaming it through the night. Then one morning, as absurd as it could sound, I figured it out like a spark came to my mind. You might laugh out loud how this stupid thing could be kept secret if I tell you that’s just a simple HTTP POST request to the server with username and password, for the backend to validate against the database, what one would expect to have from any, single, web application today.

So I decided, screw them. While I was learning C#, I made a few dozen tutorial videos and gave away every single thing I knew, for free. I also spent the whole summer answering questions on Stack Overflow and Baidu Zhidao (Chinese clone of the former), that’s how I ended up having my 100 points on Stack Overflow. I couldn’t stop wondering how could knowledge one got from other generous people be sealed for sale? This is stealing for profit. Of course, this doesn’t mean everything should be free, nor one can’t do this, nor that no people are doing this, it’s just unethical to resell others’ goodwill to my moral standard. Developed countries like to advertise that we should “save the environment for the future generations”. We better save the spirit of development for the future generations as well.

Tango in the academic study Link to heading

It is too clear for me to not choose Computer Science as my major for my undergraduate study, so I did. During the first years, I was lucky enough to be an early adopter of the Go programming language. You may have heard my story about putting the ready-to-open PHP tutorial book under the monitor stand and going ahead with programming in Go, if not, now you do.

Then I did the same thing as when I was learning C#, I made another few dozen tutorial videos about Go while I was learning it myself. Coincidentally, I also wrote some libraries, packages and tools in Go that caught some eyes, like the founders of Sourcegraph.

But you know, every legendary story must make the characters suffer, the truth was untold, my bachelor diploma states my major is actually Information Technology. What happened?

Learned the hard way that the term “Computer Science” isn’t just about computers, it’s also about science, and it’s not even so much about computers, it’s all about math. I failed a required math class two times straight, and I needed an appeal to the Chairman of the Math Department in order to be permitted to take it the third time. I don’t know how I got the courage to email the Chairman, meet him, and look at each other in his office followed by minutes of silence, both knew the fact I was going to fail the third time. For a moment, I was ready to tell my parents that I would drop out after four years into college. So, I walked out.

Fortunately, I found out that the school just opened a new major, yep, Information Technology. I looked at the curriculum, teaching 90% of things that I already knew from doing my side projects, which allowed me to take as many courses as possible to shorten my total time to graduate, in 12 months (including the summer, the only summer I did not fly back to stay with my family). After that, I also decided to pursue a Master’s Degree which thankfully only took me 9 months to finish.

By the time of my day 1, I was already 26. A typical college graduate would have had roughly 3 years of working experience.

However, after taking the courses from Information Technology, I think I found a very important fact about the gap between college study and the real world working.

  • In CS, courses only teach about how to program, mostly articulate solutions to theoretical problems defined in an isolated world. It is not uncommon to see students don’t know what the domain name is, and servers are not in restaurants.
  • In contrast, IT courses only teach about how to get hands dirty down to low-level tasks, but students struggle to understand why things are the way they are, and are taught to “follow the manual”.

Students need both CS and IT knowledge to close the gap of being able to solve real world problems.

To finish this section, here is another fun story that I can now share since my professor couldn’t fail me afterwards. There was the system security class, and I only went four times for the entire semester, but I got 105 out of 100 points. How? I still couldn’t figure out how I managed to go to the only three classes that offered a bonus quiz (only the first solver wins), which I absolutely smashed because they were so dead simple. To get a sense of the level of difficulty, one of the solutions was “change the permission bits of a file to 600”. With all the bonus points, I covered up some homework I skipped, and left some extra unused. Take a deep breath and laugh out loud.

Running on a high-speed rail Link to heading

Sorry about me chattering about my very own past in preceding sections, let’s get to the point.

This is an analogy, obviously. In case you don’t get it, by just sitting on a high-speed rail, the ground speed is so fast that you are moving way faster than anyone on the ground can ever possibly compete. In this example though, you’re just sitting there, the relative speed between you and the train is, yes, zero. In other words, you’re merely taking advantage of the train.

Being on a high-speed rail is not a problem, and one should almost always take advantage of it whenever possible. However, it is important to realize that the train may stop, may go sideways, you may get off or be kicked off, whatever it is, you will be on your own. The biggest illusion one could have is taking the ground speed of the train for granted, and thought that was themselves making the move.

Always, always exercise your own skills, work hard, and do your own thinking. Don’t be fooled by all the fancy AI technologies, Aristotle already said thousands of years ago “I think therefore I am”. The tragedy of followers is that they don’t know where to go themselves, they don’t want to think because thinking is in fact a heavy brain-energy draining exercise.

Whenever people tell me they are jealous about high-paying computer programming jobs, I always tell them that software engineering is the type of field where the floor is high, but the ceiling is also low. The positive linear relation between years of experience in coding alone and the financial return ends far sooner than lawyers and doctors. You may have noticed that I used different terminologies here, “computer programming”, “software engineering”, and a predicate “coding alone”. That’s on purpose.

First of all, software engineering is an engineering exercise the same way as computer science is a science subject. It’s more about engineering than software, so what’s the most important part of engineering? Right, thinking.

Then, how to workaround the low-ceiling problem if you can’t rebuild the structure? Simple, go upstairs or go outside.

Coding is an excellent life-long hobby, but it will not get you far enough to your retirement for your professional career. So what can you do? Right, engineering solutions that solve real problems for others. The more worth the problem, the more your engineering effort is weighted. Notably, it has no direct relation to how fancy the technologies were used, or how clever the code was being written. It’s simply about, again, solving real problems for others. Some frame it as the “business impact”.

What’s outside? Quit your job, that is. Jokes aside, develop the breadth of your living skills. Like playing guitars, farming lands, being a real estate agent, building houses, whatever. The point is, while you’re in a superior situation, come up with a plan B, C, D, E. Life is very hard, but if you’re like me who are too afraid to end my life voluntarily, then find ways to move on.

I want work-life balance, Joe, that’s what people do, advocate, especially successful ones. Yeah, they do, because they have worked hard enough to establish their original capital if they are not living in their illusion by sitting on a high-speed rail. If you rest the same way as others who are ahead of you, you will never be able to catch up. Actually, you’ll be surprised how people smarter than you work even harder than you, if you look really closely. I wasn’t a genius kid, so my genes told me that I won’t be a genius adult either. The way I initially got around my stupidity was by diving into programming problems from 3PM to 6AM every day, the whole year (yeah I had to sleep during the classes), and consistently spent hours every day in the years after. You only get better at what you spend time on, when considering someone who is not a genius. There was this joke, a man was questioning why a painter charged him so much for a portrait in under five minutes. The painter said, “That wasn’t five minutes, that was twenty years and five minutes.”

I am very passionate about a problem at hand, but it’s after hours and everybody else is at the party! You have to understand that passion is a precious feeling with all the madness in life, when you feel it, just go with it, and get the shit done. Passion is the ultimate cure for productivity and quality, and after a few times, you’ll be surprised how far you have been.

Last words Link to heading

Read a bit of history, don’t need to be far back in time. Just reading a little back in 20 to 30 years from time to time is more than enough. You’ll learn how many illusions people have been living with, and how many basic facts are neglected. Because the more obvious the things are, the more likely they’re overlooked. As one joke says, “the only lesson humans took from history is that they don’t”, but you can.

Believe it or not, luck plays a much bigger role in one’s life than one could imagine, but when the luck comes to you that you have a chance to get on the train while it’s still accelerating, what do you do? You run.

Thanks for reading to the end, and wish you a wonderful life!