Learn And Improve The Right Technical Skills

Yisheng
4 min readJul 23, 2018

--

Note: This is a translation of an Alibaba engineering blog article. I have received the permission of OP to translate this into English. The original articleHow does the knowledge-gap become so big in the first few years after graduationcan be found here on Zhihu.

When we were at school, we read the same books, studied in the same classroom, taught by the same teachers, and had exactly the same amount of time. However, people ended up in different places, and gaps between people have grown. Why is that?

Why can’t I accumulate and maintain the knowledge?

If you often need to look up what you have learned before when encountering problems, or not are able to link problems with the right solution, it’s probably because you didn’t have the best understanding of the solution when you first found it. It doesn’t really count as solving a problem when you don’t end up understanding the solution itself. Just like how a group of students taking the same class ending up getting different grades, people always understand things to different extents. Therefore, most people need the practice to remember and understand the solution.

I practiced as much as the others. Why do we still end up with a huge gap between our understandings?

Assuming two people solved the exact same ten problems in a year and the understanding of the two ended up being different, it’s probably because the person with less understanding didn’t retrospectively try to understand the solutions.
If there were a problem that your colleague solves but you can’t, then I’d try to think about why and how he solved it:

  • What was he thinking when he first saw the problem?
  • What base knowledge led him to this thinking?
  • If it were something you already knew, why did you not think of it when you first saw the problem? (Probably because you didn’t understand the solution well enough)
  • If it were something you never heard of, then the next step is clearly to start investigating and understanding the problem and the existing solution.

After you can derive and go through your colleague’s knowledge and logic to solve the problem, then I’d start thinking about the correctness, the completeness, and the conciseness of the solution. If you think about all these for every problem, you probably wouldn’t complain about having knowledge gaps anymore. It’s also a much better way to understand while you’re facing these problems and thinking about these things in real life.

This is what I think is the best way to learn from talented people around me and what makes it possible for me to surpass them.

Knowledge + Logic = Your problem-solving ability. Knowledge would allow you to know something, and logic would allow you to link it with the problem. And for software engineers, those problems usually mean architecture, implementation, or process.

To gain knowledge, you can just try to find key points, then the tree of knowledge would start growing by itself.

To develop logic, it’s all about practice and retrospective analysis.

Story

I had a former colleague, who I would ask about anything I couldn’t solve. To me, his most admirable skill is his problem-solving skill. He might not have been the most knowledgeable person, but he could use Google and various source to try and confirm different solutions to overcome any unfamiliar challenges. During my career, I have also been trying to practice these methods to solve problems.

For instance, we had a problem once where the application connects to the database very slowly when it first starts up, but it’s not because of slow queries.

  1. He used tcpdump to analyze packets and found out where exactly the slowness happened.
  2. Professional DBAs might try to use show processlist to see what exactly is happening. If they see the connection status at the authentication state, they would look up Google and find out that establishing a connection on MySQL requires checks of IP address and host which are very time-consuming. They’d configure skip-name-resolve to solve the problem.
  3. Experienced MySQL developer would know to configure the default value of skip-name-resolve to start with.

These are all different ways of solving this problem. Option 3 is fast but requires strong experience, but it might not suffice other problems. Option 1, however, is the most generic solution which requires minimal domain-specific knowledge.

Whenever he helps me, I’d ask him to help me on my machine, so that after the problem is solved, I get to retroactively look at history in command-line and Google history. I’d analyze every one of his operations, think about why and how he did it, and ask him about all the reasoning and motivation behind his operations, if I don’t understand, to derive to the knowledge and logic that lead to his work.

Engineering Efficiency vs. Knowledge Efficiency

Some people can just learn the theories to grasp the skill and will be able to apply the knowledge in different scenarios. This is knowledge efficiency. But fewer people possess this kind of skill. (To me, they’re the so-called “smart people”)

Most people need to learn and practice repetitively to strengthen their understanding of skills. This is engineering efficiency. It usually requires a lot of practice and tools to achieve.

Unfortunately, I’m one of the latter. I can only envy the smart people who have stronger knowledge efficiency. However, if you get better at engineering efficiency, you’ll contain more knowledge and develop better logic, which will also make you look smart.

--

--