37 Plus Lesson 7 a Programmer's Growth Plan for 28

37 Plus Lesson 7 A Programmer’s Growth Plan for 28 #

Today, I am going to talk to you about the topic of developer growth in this live broadcast. From the time I started working after graduation till now, as a senior manager, I have been working in the internet industry for 15 years. I have summarized my own growth journey and experiences into “28 Tips for Developer Growth”.

Today, I will discuss these 28 tips with you one by one.

Getting Started for 0.5 Years #

Step 1: Don’t get too caught up in choosing a direction.

When starting out, we may all struggle with choosing between front-end and back-end development, or deciding whether to choose between Java, Go, or Python for back-end development.

In fact, I think it’s not worth getting too caught up in this. If you are interested in front-end development, start with that. If you are interested in database-related topics, start with back-end development. Once you have a solid foundation, switching directions or technologies will be much easier because the principles of programming are universal.

Step 2: Be brave enough to take the first real step in learning.

Here, the first step I’m referring to is not just starting to read books in a specific field. It’s about actually downloading an IDE, setting up the programming environment, and implementing a simple program. I’ve always believed that setting up the programming environment is already halfway to getting started.

If you only stay at the level of reading books, you will never really get started. Because this knowledge remains only on the pages of the books and has not truly become yours. Only by writing and practicing on your own can you truly grasp it.

Step 3: Find someone to guide you in the right direction.

When you are just getting started, you may feel lost when faced with various languages and technologies. For example, when you first start learning back-end development, there are multiple components in the Spring framework, as well as various database options. There are also Java syntax and frameworks to consider. In this case, finding someone to give you guidance on the order of learning and the main path to follow will save you a lot of time and energy.

Step 4: Find the right learning materials for beginners.

From my perspective, when choosing learning materials for beginners, two points need to be considered:

  • Choose materials that provide a step-by-step guide, starting from setting up the environment and including hands-on projects. In this case, video courses may be more suitable.

  • The difficulty level should be appropriate.

So, how do we understand “appropriate difficulty level”? Let’s take an example. The depth of knowledge in the book you are reading is at a level of 70, while your own depth of knowledge is at a level of 60. In this case, the book is very appropriate because it allows you to easily progress from 60 to 65. At a level of 60, you have the ability to absorb the knowledge in the book at a depth of 70, and as a result, you will reach a level of 65. However, if your current depth of knowledge is at a level of 20 and you attempt to read a book at a level of 70, or if your depth of knowledge is at a level of 75 but you choose to read a book at a level of 70, you won’t feel any progress or benefit. Therefore, many students resonate with my column courses for this reason as well.

2 Years as a Programmer #

Strategy 5: Find ways to learn systematically.

Once you reach the two-year mark, it’s time to start thinking about learning systematically. This could include studying design patterns, algorithms, and databases. Only through systematic learning can we establish a complete knowledge framework. Building a knowledge network is necessary before we can continue to expand on that network.

So, how can we find the motivation for systematic learning?

First of all, sharing can motivate us. For example, if you announce that you’re going to write a series of articles, then you’ll feel compelled to follow through and actually do it.

Secondly, investing money in courses can help us engage in systematic learning. When you spend a few hundred or even a few thousand dollars on a course, it will motivate you to study, otherwise the money will go to waste.

Strategy 6: Choose a good job.

Choosing a good job means choosing a good project that can help you build a network of connections. This is very important and may be even more important than technical growth.

For example, if you can get into a relatively large company, the most important thing it can provide you is a network of connections. This means you can meet more and superior people, and getting to know these people will be your future opportunity.

Strategy 7: Learning must rely on self-discipline.

We cannot rely solely on project experience to bring us technical improvement. Even if you have the opportunity to work on high-concurrency and complex projects, the improvement it brings will be limited, or the impact will usually be short-lived.

Because most companies care about your output, your abilities, and your experience. So, learning and growing must rely on self-discipline. This includes being conscious of how to learn systematically, how to plan your learning, and to always ask why.

Strategy 8: Read books that are suitable for you.

Here, it’s important to be discerning when reading books, selecting ones that are appropriate for your level of understanding.

Actually, during the first two years as a programmer, I don’t recommend reading extensively. Instead, focus on being able to concentrate and establish a solid foundation in your main programming language. Then, explore books related to your main programming language or the technologies you primarily use.

Strategy 9: Look for ways to accumulate technical breadth. Once you embark on the path of technical management in the future, it is possible that the team you will be leading may not be in your field of expertise. For example, if you have a background in backend development, you may need to lead a mobile team. If you don’t know the basics of mobile development, it will be difficult to communicate with team members. Therefore, while you can have your own expertise, you should also know the basics of other fields.

There are three main ways to broaden your technical breadth.

First, experience full-stack development. If you are a backend developer, you should have a general understanding of client-side, mobile, or front-end development; you can also learn about testing and operations, understanding operations can be especially helpful. You can also work on your own project, starting from purchasing a cloud server. During the process of building and deploying the project, you can learn about and set up the relevant operations infrastructure and even build some middleware yourself.

In large companies, there are usually automated release systems, engineering platforms, their own operations systems, monitoring systems, and more. However, if we only use these tools, we won’t have a holistic understanding because we don’t know how they work.

Second, learn multiple programming languages. But after learning several languages, you will find that each language has its own characteristics and weaknesses. This will lead to a lot of thinking, such as why a language doesn’t have a certain feature and how to solve it. In addition, each language has its own technology stack, and you will compare them. These thinking and comparisons are very useful for your personal growth.

If you have a deep understanding of one language, it won’t take long to learn another language. When I just graduated, I worked with .NET, then switched to Java, and later learned Python. Because the features of high-level languages are basically the same, you just need to learn some syntax, look up more content when needed, and then do a project. So learning a language may only take a month or even less.

Third, read extensively.

The 10th strategy: find ways to accumulate technical depth.

The main ways are building your own tools, reading source code, and learning about the underlying technologies.

First, build your own tools. Building your own tools doesn’t necessarily mean you have to finish using them. You can use building tools as practice, such as creating a framework from scratch. In this process, you will encounter many difficulties and may need to learn from the source code of existing technologies. This is very helpful for understanding technical depth.

Second, read source code. If you can understand the main thread of some source code, you can accumulate a lot of knowledge about design patterns.

Third, learn some low-level things to help you understand the essence of technology. Upper-level technologies depend on lower-level technologies, so after you learn low-level technologies, you will find that there is not much fundamental difference in upper-level technologies. Then your learning will be very fast.

The 11th strategy: learn to use search engines.

For programmers, it is best to use Google for searching, which means using English keywords for searching. On one hand, through Google, you can find more content, and on the other hand, there are more technical discussions in the international technical community or websites.

The 12th strategy: learn and adapt to drawing diagrams and writing documents.

I believe that writing documents is a way to improve your summarization and expression abilities, and drawing diagrams is a way to improve your abstract thinking. Writing documents and drawing architecture diagrams are not only skills needed by architects but also essential ways to accurately express your viewpoints. So, let’s not think that it’s better to write 100 lines of code than to write a single sentence.

3 Years as an Architect #

Strategy 13: Pay attention to the improvement of soft skills.

By now, you have several years of experience, so besides technical expertise, you should also focus on improving your soft skills, such as communication, self-drive, and summarization abilities. For example, communication skills entail being able to express your viewpoints fluently and proactively engage in communication.

These skills are crucial in daily work because as an architect, you will inevitably have to communicate with business stakeholders, technical teams, and even other team architects. If your soft skills are not strong, your ideas may not be recognized, and you may struggle to achieve your objectives.

Strategy 14: Accumulating domain experience is also essential.

After working in a specific field for several years, you will become extremely familiar with the products in that field, even more so than product managers. This means that even without assistance from others, you can ensure that the product develops in the right direction. If you intend to continue working in that field, accumulating domain experience will greatly benefit your professional growth.

Therefore, some people become business architects who may not excel in technical aspects but possess exceptional skills in system design or product design within that domain. If you do not wish to exclusively focus on technical work, you might consider accumulating more domain experience.

Strategy 15: Architectural work should remain grounded.

When I was working as an architect before, I found that some architects proposed brilliant solutions that were difficult to implement and practical. In my opinion, architectural work must be grounded, which includes three aspects: creating solutions that align with the actual circumstances, ensuring the implementation of solutions in real projects, and avoiding excessive technical complexity.

However, a contradiction arises: if you want to improve your experience and technical skills, you often need to introduce new technologies, which come with costs. These costs not only involve your own learning but also require the entire team to possess a certain level of experience.

For instance, introducing Kubernetes is not a matter of implementing it within the team alone; the entire team’s technical abilities must be enhanced to handle the system. If we introduce technologies mismatched with the company’s actual situation solely for our own benefit, it is irresponsible towards the company, and the plan may fail for the most part.

Therefore, I believe that architectural work should produce more grounded solutions. For example, when solving a problem, some architectural methods or designs may seem “old-fashioned,” but they are often more stable; while certain complex technologies may have advanced concepts and designs, the cost to master them is substantial, and they often come with various problems due to their “newness.”

This means that when designing architecture, we must consider whether the solutions are grounded.

Strategy 16: Establish a personal brand.

In my opinion, a personal brand consists of two aspects: reputation and influence.

Reputation refers to your daily work attitude, including your competence and communication skills, which will let people know whether you are reliable and capable enough. A good reputation combined with valuable connections is an essential resource for you. Individuals with a good reputation generally do not need to actively seek job opportunities because there will always be former leaders, friends, or colleagues who are eager to provide them with opportunities.

Many people have excellent technical skills, but nobody knows about them, and the problem lies in their influence. To enhance influence, the methods are nothing more than participating in technical conferences, giving presentations, writing blogs, and even publishing books.

With reputation and influence, more people will come into contact with you and get to know you, providing you with more opportunities.

Technical Management #

Tip 17: Master the methods of managing tasks.

“Managing tasks” refers to how you arrange things, including developing project management processes, establishing technical standards, and implementing tools and automation.

One common mistake when transitioning to technical management is trying to handle everything by yourself. At this point, you must realize that it’s not about you doing the work, but rather about the output of your team. Instead of doing everything yourself, it’s better to establish rules, processes, and guidance, and then let your team handle the tasks. Otherwise, you will easily become the bottleneck of the entire team.

Tip 18: Master the methods of leading a team.

First, recruit and empower. When leading a team, the most important thing is to hire excellent people, and then empower them. Do not be afraid of hiring someone better than yourself. Only when the team performs better, can the overall output of your team be maximized.

Second, promote an engineering culture. By establishing an engineering culture, encourage everyone to communicate and learn from each other, creating a positive learning and working environment.

Third, establish appropriate communication and reporting systems. This is also part of the process, where a system for communication and reporting needs to be established.

Tip 19: Stay abreast of cutting-edge technology and think about technological innovation.

After assuming a technical management role, your perspective needs to be broader. The members of your team might only see and be exposed to one specific aspect or module, lacking further information and the ability to think further ahead. In this case, you must be innovative, pay attention to more cutting-edge technologies, and consider whether your projects can incorporate these technologies.

Tip 20: Pay attention to the product.

In my opinion, the form of a product often determines the fate of a company. Generating more ideas about the product often brings greater benefits than technical refactoring. This not only includes how the product operates but also includes innovation within the product and whether you can explore some derivative products.

Advanced Technical Management #

At this level, our more advanced technical management may be at the director level or even higher. I have worked as a CTO in two small companies with more than 100 employees before. At that time, I felt that what I did should not be limited to the product technology itself.

Principle 21: Building a team is the most important.

This is different from recruiting. When recruiting, you are certainly recruiting subordinates, but building a team requires the team to have a talent pool. Once you solidify some core individuals, the whole team will develop. Therefore, you need to spend more effort on recruiting, not just limited to the interview process.

The most important part of building a team is that you yourself should have a clear idea of what position is needed to fill the gap, and what kind of person is needed for that position.

Principle 22: Cultivate a technical culture.

Although I emphasize the establishment of systems while doing technical management, culture is more dominant and not as stringent as systems. Systems are laid out and require everyone to comply, giving a feeling of “force”. Culture, on the other hand, emphasizes subtle influence and a sense of unanimity through repeated exposure. This way, gradually people won’t feel like this is culture, but rather that this is how things are done here.

Principle 23: Cultivate values.

Values mean that the company operates according to a certain philosophy and hopes to have like-minded people working together. Therefore, values are higher than culture and are at the level of the entire company, and have a greater influence on everyone.

Although values may not be as explicit, they can ensure that the entire team within the company is aligned for the long-term, and everyone knows how the company operates and shares the same goals.

Principle 24: Pay attention to operations and finance.

In the position of advanced technical management, you are not just an employee, but your fate is closely tied to the company. Therefore, you need to focus more on the company’s operations and finance.

When you feel that your team is small but has to do so many projects, you can try to think from a higher perspective. You may realize that what your team does is not as important as you think, and the scale of your team is already sufficient for the overall development of the company. If we continue to recruit a large number of people, it will lead to financial difficulties, and the overall situation of the company will certainly not be good.

Workplace Insights #

25th Strategy: Mastering the Way of Work Reporting.

Firstly, we should not treat reporting as a burden or a waste of time. Reporting is actually a two-way communication. If you communicate more with your superiors, they can provide you with more information. This information can be about the direction of your work, the resources available to you, or what your superiors want. Because you and your superiors are not on the same level in terms of information, they can receive information from higher levels, such as company strategies.

26th Strategy: Persistence + Belief.

Firstly, if your goal is success, then nothing can stop you. In the workplace, conflicts and blame games are unavoidable. Let me give you an example.

When I used to work in a company, others were unwilling to cooperate with my work. So, what should I do? I knew my goal was to get this thing done. At that time, many aspects of this project, such as operations, were not under my responsibility and required other colleagues’ involvement. But they just wouldn’t cooperate. They wouldn’t read the group chat messages or answer phone calls. So what did I do? I made more attempts to communicate. If all else failed, I would send an email to copy everyone’s superiors. Basically, I tried every means to communicate because my goal was success.

Secondly, many times, innovation comes from believing that something can be achieved.

Often, you may feel that something cannot be accomplished and reject it directly, thereby losing the opportunity for innovation. But if you believe that something can be accomplished, you will find ways to make it happen. What you come up with at that time will be groundbreaking and innovative.

27th Strategy: Continuous Thinking and Reflection.

In the workplace, it is crucial to distill methodologies. You should think about how you handle various things in your work and whether your approaches are appropriate. Try to extract and retain these methodologies because they will help you in the future. Many things, such as reviewing your work experiences and choices, require mental effort and writing; they should not just be forgotten once they are in the past. The methodologies derived from these experiences are your valuable lessons.

28th Strategy: Interacting with Peers.

When interacting with peers, especially those from different departments, it is important to adopt a mindset of helping others. Generally, there aren’t many issues when communicating with superiors or subordinates. However, when it comes to peers, especially those at the same level but different departments, conflicts of interest may hinder smooth cooperation.

In my opinion, the most important thing here is to collaborate with a mindset of helping others. For example, saying, “If you have any difficulties, feel free to ask me” or “Are you understaffed? I can help you complete this project together.” This approach will facilitate better collaboration, and others will not be as guarded.

Effective communication between individuals relies on breaking through a certain barrier. Once this barrier is broken, everyone will trust you and consider you a reliable person. In this way, peers will be willing to share things with you because they trust you.

Management Maxims #

Next, I want to recommend 8 management maxims that are the principles of management and talent management by Cao Cao, not something I came up with myself.

First, be sincere and genuinely connect with people. When communicating with others, whether it’s with superiors or subordinates, always communicate with a sincere attitude.

Second, be open and honest and treat people with sincerity. Don’t keep things to yourself and be a manager who is “very cunning”. I think a better approach is to let everyone know as much as possible, unify the front, and consider issues from a unified perspective.

Third, be open and transparent and convince people with reason. Make management strategies public, whether it’s rewards or punishments, so that team members feel fairness and justice.

Fourth, be consistent in words and deeds and gain trust through honesty. It is important in managing subordinates and communicating with others to do what you say.

Fifth, establish rules and enforce them fairly. In management, you need to establish relevant systems and make them public. If the rules are violated, punishment is necessary; if done well, there should be rewards.

Sixth, put yourself in others’ shoes and be tolerant. Often, the conflicts we have with others stem from a lack of sufficient empathy and consideration. If your subordinates make mistakes, think about whether to give them more opportunities and whether to be more tolerant.

Seventh, give credit to others and take responsibility for yourself. This is very important. If things are done together as a team, it is the team’s credit, even the subordinate’s credit. If someone does a good job, praise them more. Be stricter with yourself; often, team problems are the manager’s fault, not the subordinates'.

Eighth, reward based on merit. If someone does well, give them more rewards. This is also fair and just, and everyone can see it.

Finally, I have consolidated the 28 strategies for programmer growth into a mind map for you to easily collect and share.

img

I am Zhu Ye. Feel free to leave a comment and share your thoughts in the comment section. You are also welcome to share today’s content with your friends or colleagues for further discussion.