40 How Can We Maintain Competitiveness

40 How can we maintain competitiveness? #

Hello, I am Zheng Ye.

In the previous two lectures, I discussed how to integrate the knowledge we have learned by combining with scenarios that programmers directly face. The content of this lecture may not involve practical application scenarios, but it is closely related to the development of each individual. I would like to talk about how to excel on the path of being a programmer.

The Anxious Programmer #

Let’s analyze the problem again using a framework of thought. First, what is the current situation? Regarding this issue, I don’t intend to discuss individuals because everyone’s circumstances vary greatly. I am going to approach it from a broader perspective.

The IT industry is a rapidly developing and changing industry. On one hand, we see people achieving success quickly, but on the other hand, we also hear many anxious voices. Attaining significant success is always a low probability event, and most people are faced with the daily grind.

Our anxiety stems from the uncertainty of the future, which is a product of a specific era combined with a specific industry.

If we rewind time back to before the 1980s, although living conditions were average, few people would worry about future development because at that time, people could see their future lives clearly, even if that life may have been mundane.

However, we now find ourselves in an era of rapid development that is rare in human history. We can’t see our future lives clearly, yet our minds are still stuck in the thinking patterns of the previous generation.

The rapid development of the IT industry in China has only happened in the past two decades or so, and there are few programmers who have had a complete career in this field. It is because of this that we often feel various anxieties:

  • When I first entered the industry, someone asked if programmers can still work at 30 years old.
  • When I was almost 30, someone asked if I could still be a programmer at 35.
  • When I was 35, the discussion turned to what a programmer in their 40s should do.

It is estimated that as more and more programmers in China complete their entire careers, people will start to be concerned about what the life of a retired programmer should be like.

In the long run, as long as there are problems in life that need to be solved through automation, the group of programmers still has a promising future. But over time, the premium of this profession will decrease, and the possibility of achieving good development solely based on being in this industry will also decrease. To make your career path smoother, it is necessary to find better goals and constantly strive for improvement.

Becoming a T-Shaped Person #

Let’s answer the next question: what is the goal? Perhaps at this point, everyone has different thoughts on career development, but I am going to give you a unified answer: become a T-shaped person.

What does it mean to be a T-shaped person? In short, it means being both specialized and versatile.

Having “specialization” is meaningful only when combined with “versatility,” otherwise it is just low-level repetition. This is the real reason why many people’s careers stagnate.

Here, “specialization” does not mean being skilled, but rather going deep. You may be a programmer with 10 years of experience, but if you have been solving the same level of problem for the past 10 years, you have not gone deep, and you have not truly achieved “specialization.”

You will find that many outstanding individuals excel in many areas, thanks to the ability to apply knowledge from one area to another that comes from being specialized.

When you have specialization and expand your abilities, you will have a broader career path. For example, if you have a deep technical foundation and know how to develop software:

  • If you can work with others to achieve excellence, you become a technical leader.
  • If you can share your understanding of technology, you have the opportunity to become a trainer.
  • If you can help others solve problems through practical experience, you can become a consultant.

Conversely, when you have versatility, it can broaden your horizons and help you better understand how to leverage your specialization, instead of narrow-mindedly thinking that you have mastered everything just because you have technical skills. A narrow perspective and a lack of a big-picture view can hinder many programmers from advancing further. In fact, many contents in this column aim to help you open up your perspective and embrace versatility.

You may say, “I am already a key player in my company, doesn’t that count as having specialization?” But what I want to say is, it may not be enough. Being an expert only in one company makes you vulnerable to the company’s fluctuations, while becoming an industry expert can reduce the risks in your career.

Sometimes, during interviews, I ask candidates this question: “If you were asked to give a presentation at a technical conference, what would you talk about?” What I am really asking is, based on industry standards, which aspect do you consider yourself an expert in?

Most people have never thought about this question. They simply go through their routine work. Even if they are doing well in some areas, they cannot be considered experts because they lack deep thinking.

For example, you may be very familiar with Kafka, knowing all the parameters and having read about its implementation principles. But if I ask you why Kafka positions itself as a distributed streaming platform, and what it needs to improve on to become a better streaming platform, what would your answer be?

The difference between the two scenarios is that the so-called familiarity in the first case is simply familiarity with other people’s thought processes, while in the second case, there is no ready-made answer. Learning calculus is difficult, but it is not on the same level of difficulty as inventing calculus. Of course, I’m not saying that you have to be familiar with the development process of every tool, but you need to have deep thinking in a specific area.

You may say that this requirement is too high! Yes, it is indeed a high requirement. But “learning from those above, you become average; learning from those average, you become mediocre.”

In fact, many people’s anxiety stems from having low goals and not being able to find the motivation to move forward. Set long-term goals for yourself to avoid losing motivation quickly on your career path.

Growing in the Learning Zone #

Now let’s answer the third question: how to achieve goals. Since we want to strive towards becoming experts in the industry, we need to know what experts in the industry are like. My suggestion is to learn from the masters in the field.

You might say, “I do want to learn from the masters, but I don’t have the opportunity!” Fortunately, many people in the IT industry are willing to share their knowledge, and we can read a lot of content shared by master programmers.

When I first started out, I was fortunate enough to have read many classic works, such as the works of master programmers who came from Bell Labs, such as “The C Programming Language,” “The Practice of Programming,” “The UNIX Programming Environment,” etc. There are also works by people like Eric Raymond who have immersed themselves in programming for decades, such as “The Art of UNIX Programming,” as well as the works of Kent Beck, Martin Fowler, Robert Martin, and others mentioned earlier.

One benefit of reading these books is that it broadens your perspective. You won’t just focus on “using existing tools to meet specific needs,” although that may be a necessary step, it is just part of the journey rather than the end goal.

Next, we need to embark on a journey to continuously improve our skills. My answer is to find a good problem to solve, as solving a good problem can quickly enhance your skills. What is a good problem? It is a problem that is slightly more challenging than your current abilities, such as:

  • If you don’t know anything at all, getting a programming job is good enough.
  • If you can already write good code, you should try to write a library.
  • If you have no problem implementing a specific feature, then focus on design, making the program more organized.
  • If you can already complete a normal system design, then you should design a larger system.

Why choose a problem that is slightly higher than your current abilities? This is related to how we learn and grow. Noel Tichy proposed a “learning zone” model, as shown in the following figure:

  • The innermost layer is the comfort zone. Being in it feels good, but because there is no challenge, growth is minimal. You can think of it as doing things you are most familiar with.
  • The outermost layer is the panic zone. This is a place of extreme pressure that is completely beyond your ability range, causing immense anxiety.
  • The middle layer is the learning zone. Things are challenging, but they are just within your reach with some effort. This is the fastest area for growth.

According to this model, only by consistently staying in the learning zone can you achieve sufficient growth. Therefore, we should always choose problems that are slightly higher than our current abilities to solve. Don’t always do things you are comfortable with without any challenge, and don’t aim for grand achievements all at once, as it will scatter your enthusiasm.

When growing in the learning zone, we shouldn’t be satisfied with our current achievements, as they have become our comfort zone. We have ambitious goals guiding us forward, and completing daily tasks is just a stepping stone on our personal growth journey.

You may say, “My job cannot provide me with the opportunities for personal growth, what should I do?” The truth is, others only care if you can complete your work. Personal growth is your own responsibility, and many opportunities have to be fought for by yourself. The specific practices mentioned earlier are things you can strive for within your job scope.

If your current job cannot provide you with good enough problems, then find a more challenging job. In the IT industry, job hopping seems to be common, but many people don’t do it with the goal of self-improvement. As a result, they end up doing the same level of work continuously, making it difficult to improve their skills.

Why are programmers willing to work for top companies? It’s because they have high-level people and good problems there. But if you only go to a top company to do low-level work, then it’s a waste of time. Therefore, even if you really want to work for a top company, who you work with and what you do is much more important than just entering the company itself.

If you can continuously progress, you will eventually encounter a road that has not been paved ahead. At this point, it is up to you to create a tool for others to use. For example, in 2012, I encountered integration problems in a project and couldn’t find a mock server that met my needs and could be used in a unit testing framework. So I created Moco.

Lastly, I encourage you to share what you have learned. I have mentioned in “28 | Structured: Writing Documentation as a Learning Method” that output is a way to connect knowledge. It helps you break free from stagnation and also helps you create industry influence. Opportunities will gradually increase as your influence in the industry grows. With industry influence, you will be qualified to become an industry expert.

When you become an expert at the industry level, you can continue on this path without worrying about whether you can keep up with the younger generation, because you are constantly moving forward!

Summary #

Programmers are an anxious group, with anxiety rooted in uncertainty about the future. Programmers in this era are a special group. On one hand, this era has created countless opportunities for us. On the other hand, because programming is a new industry, many people don’t know what the future will look like, causing deep anxiety.

From the current development perspective, the IT industry is still a very promising industry. However, in order to excel in this field, we need to become “T-shaped” talents, meaning being “specialized in one area and versatile in many”. Specialization is the premise of being versatile, making ourselves an expert in a certain aspect. This expertise should be seen from the industry’s standards, so as to reduce the impact caused by fluctuations in one company.

To become an industry expert, we need to learn from the masters in the industry, set high goals for ourselves, and then work diligently to solve problems that suit us. This way, we can keep learning and growing.

If there is only one thing you can remember from today’s content, please remember: work and grow in the learning zone.

Finally, I would like to ask you to share your insights on how to maintain your competitiveness. Feel free to write down your thoughts in the comment section.

Thank you for reading. If you found this article helpful, please feel free to share it with your friends.