Writing programs is so fun.

When I was interviewing a lot a while back,
there was a guy with seven or eight years of work experience who wrote on his resume
that he learned Java in college,
and after work he did full-stack,
so he had more than ten years of Java development experience,
seven or eight years of frontend development experience,
plus some years of Blabla…

At that time Zhou Cheng and I were quite helpless.
If work experience really counted this way,
then classmates who started doing OI in middle school
would all have started with ten years of software development experience?

Experience

I’ve always felt that for software development,
or for programmers,
“work experience” is a really nonsense thing.
Because if a programmer stops learning, thinking, and progressing,
then someone with ten years of work experience
is just someone who learned a year of work experience in their first year of work
and then repeated it for nine years.
Real ten years of work experience
should belong to those who “renew daily, renew every day, renew again.”

There’s an old saying:
Hearing the Way in the morning, one can die at dusk.

The meaning of this saying is that someone heard a very scientific truth in the morning,
thought about it for a day,
and at dusk finally exclaimed “I can die” (sugoi).

Of course,
in one’s life it’s impossible to be learning brand new poses every day,
even if you happen to learn new knowledge one day,
you may not necessarily digest and absorb it,
maybe you’ll forget by the next day.

But we humans as living beings
are exactly the accumulation of all our past.
The books we read,
the food we eat,
the things we do will all vanish,
but our lives will become heavier and heavier.

For example,
I can’t remember every line of code I’ve written,
but I can clearly feel
there are certain traits in me
that have a certain bond with writing programs.

  1. Lazy
  2. Scientific
  3. Just try it
  4. Ask a question

Lazy

There’s a question on Quora:
Among smart people, do lazy ones contribute more than diligent ones?
There’s an answer I love very much:

“I divide my officers into four classes; the clever, the lazy, the industrious, and the stupid. Each officer possesses at least two of these qualities. Those who are clever and industrious are fitted for the highest staff appointments. Use can be made of those who are stupid and lazy. The man who is clever and lazy however is for the very highest command; he has the temperament and nerves to deal with all situations. But whoever is stupid and industrious is a menace and must be removed immediately!”
— General Kurt von Hammerstein-Equord

In my eyes, my subordinates have four attributes in total:
clever, lazy, industrious, stupid.
Each of them has at least two of these attributes.

Those who are both clever and industrious will do the most important things,
likewise, those who are both stupid and lazy will only do the least important things.
A clever lazy person can also do very important things, he has the ability to handle all kinds of situations.
If someone is not only stupid but also highly productive, he must be fired immediately!
by some maybe-famous general

I partially agree with this answer,
because I not only consider myself a clever lazy person,
I also think most good programmers are clever lazy people.

One thing programmers really love doing is “automation.”
There’s a really popular Repo on GitHub (NARKOZ/hacker-scripts)
about how, after a programmer left his job,
his other colleagues went through the programs he’d written.
They found he’d not only written a program to auto-brew coffee,
he’d also written one that goes “if the computer is still on at 9pm, randomly make up a reason and text the wife saying I’ll be home late…”

So the laziness I’m talking about
is actually “programmer-style laziness”:
not unwilling to work,
but unwilling to do repetitive work;
compared to simple but repetitive solutions,
more willing to choose the option with heavy workload but once-and-done.

After all, clever people hold up the world,
lazy people change the world.

Scientific

I have two catchphrases,
one is “this is scientific,”
the other is “this is unscientific.”

On one hand,
I believe “everything has its own laws,”
“there exists a grand unified theory in the physical world,”
“when something is abnormal, there must be a demon,”
“programs don’t produce bugs on their own, they’re all written by people,”
“use git blame more and we can find that person.”

On the other hand,
I also believe “humans are stupid and shortsighted,”
“so many laws have not been discovered by humans, such as those about humans themselves,”
“like teachers, HR, sales — those who deal with people are amazing,”
“not to mention art, that subject where a thousand people have a thousand freestyles.”

For example, when programmers fix bugs,
the first step is to ask:
“Can it be reproduced? How to reproduce?”
If a bug can’t be reproduced,
we’ll say:
“It’s fine on my side, can’t reproduce, not fixing.”
If a bug can’t be reproduced,
but it’s very serious,
must be fixed,
we’ll sigh:
“Damn, this is unscientific…”

Just Try It

Up to this point,
programs are made to serve people.
People live in real life,
so practice proves everything.

If two programmers battle,
basically one sentence can end it:
Talk is cheap, show me the code.

Because everything in the world has its laws,
under certain conditions,
trying it once and you can learn it.
Like what about compressed food? Just try it.
What does a startup look like? Just try it.
What’s the difference between Kotlin and Java? Just try it.

Just like Zhuge Liang used the mark-recapture method to discover that the Southern Barbarians produced Meng Huo in abundance,
programmers also often use the controlled-variable method to try things.
For example reproducing a bug as mentioned earlier,
try ios, try android,
try win xp, try a computer with 360 installed.
The world is big,
we’ll always meet again.

Ask a Question

When I was little I saw a metaphor
that said human knowledge is a circle,
what you know is the area,
what you don’t know is the circumference.
(Translated into chicken soup it’s “the more you know, the more you don’t know”)
Turns out chicken soup wrapped in the cloak of science
is extra charming…

Writing programs and doing tech is the same,
after learning more knowledge,
you feel the unknown world is bigger.

In my senior year I did my first internship,
before that I only understood git as an ftp-like tool for putting files,
I’d never used VIM,
so the questions in my heart were enormous.

The company I interned at, QAD, assigns each employee a Mentor,
analogous to the “master-apprentice” model.
On my first day I found my seat and sat down,
discovered that the colleague closest to me was named Justin,
so I asked him: “Are you my Mentor?”
(I had a strange Saber-asking-Shirou vibe at that moment…)
He smiled and said: “I don’t know either”
In the end it turned out he actually did know he was my Mentor -.-

At first I often asked him how to do git operations,
like if John pushed the latest code to the dev branch,
how do I use one of his functions.
He’d stand behind me,
spelling out the command letter by letter,
then making me type it out:
“Open Putty, git, G I T, space, rebase, R E B A S E…”
Because I felt like I was being treated as an idiot,
after I finished the operation under enormous pressure,
I went online to look up what the operation I just did meant…
After a few rounds like this,
I found I gained a lot,
and I asked fewer and fewer git questions afterwards.

So even now,
I’m still very willing to be an idiot curious-baby.
Look first, ask next, think after,
as long as you ask, you’ve learned.
Everyone has their own unique strengths,
this principle is the same as what our ancestor Su Shi said:

Above I can keep company with the Jade Emperor,
Below I can keep company with the beggars of the poorhouse,
In my eyes there is not a single person in the world who is not good.

If Su Shi can make such bold sighs while writing essays,
then I can be just as bold while writing programs :)