Abstract: Every programmer, or every worker should have their own career planning, if you are not rich second generation, not official second generation, also have no career planning, I hope you can think about their future.

Every programmer or worker should have his or her own career plan. If you are not a rich second generation, or an official second generation, and have no career plan, I hope you can think about your future. Today I will share with you an article from Tencent C/C++ architect for the common programmer career advice, hope to inspire you.

For most programmers, there are three stages

Phase 1: Three years: No human thinking in the code

I think three years is the first threshold for programmers, and that phase will weed out a bunch of people who are not good enough to write code. At this stage, we go out of the campus, into the society, become a programmer, formally from the book content to the real enterprise development. We know how to work together as a team, how to use project management tools, how to control project version, how to test and run the code online and so on. We have accumulated certain development experience and gained a certain in-depth understanding of the code, which is a relatively pure Coder stage. An obvious divide is that beginners write code with computer thinking, while some keep improving and start to write code with artistic thinking. For example, I came across a question asked by a friend in a group:

If you think this is a common problem for beginners, and I think a lot of people infected with jianghu bad habits or liangshan hero stinks, one is like playing cool in the code, the two is random, just implement the function. So whether a programmer can move on to the second stage requires systematic knowledge and the ability to read good code, such as data structures, Linux systems, various components (such as Redis, mysql, ZooKeeper), an understanding of how applications call interfaces to surrounding systems, And learned a little bit about the general abstractions of peripheral systems.

Stage two five years: not deep enough, no pursuit

I think five years is the second threshold to distinguish programmers. In the past three years, some people, except to finish their work, do not study anything else in their spare time. They are keen on studying various technical implementation details, reading many good books, writing some blogs, and sharing technology on Github. However, most of them just follow the opinions of others, without the ability to identify technologies and in-depth thinking.

Like when you go out for an interview:

Interviewer: Are you familiar with TCP?

Programmer: Familiar! 【PS psychological activity 】 Hey hey! I’ve been watching TCP’s three handshakes and four waves.

Interviewer: How about TCP TIME_WAIT?

Programmer: TIME_WAIT, I think the book says so. [PS psychological activities] Mom, are not according to the routine card ah, the palm began to have han, the whole body began to feel uncomfortable……

Interviewer: How did you design the network IO processing model when your game faced high concurrency? [PS psychological Activities] It doesn’t matter if you don’t have an in-depth understanding of TCP. It may not involve business, so ask some questions related to the project.

Programmer: Well, we had a multi-threaded design, each thread was responsible for one socket, and we used a cache queue. [PS] I finally asked someone I’m familiar with. The main program of this project has a good relationship with me and explained his code to me.

Interviewer: Well, are you familiar with any other IO models?

Programmer: We have enough for that project. We haven’t tried any other models.

This is typical dish B, you say his dish he certainly refuses to accept you, even the war of words will come. I want to say, “It is because it is not serenity, not serenity.” Whether a person’s technology is awesome, in the temperament will not be the same, modest if valley, wisdom is like a fool, slow, or vision, quick thinking. When you get into the technology, when you get into it, when you get into it, when you get into it, when you get into it, when you get into it.

There is also a group of people who think that they know some design patterns as architectural design, and they combine various components as architecture. They talk about springMVC, Redis, mysql and so on. However, when you talk about system performance, business scalability and system consistency, you may have heard some design, but when you write code, you completely ignore it. And then there’s a bunch of bugs that you can’t solve.

Only a handful of these people will be able to be technically independent and clear about their future development direction in five years, moving from Coder to system analyst or architect, becoming indispensable to the project team, while the majority of the rest will. Stop moving forward, even into deep worry, but has become a frog in warm water.

The third stage is ten years

Ten years is another threshold, and that’s when you switch careers or continue to be a programmer. If you had stuck to the idea and worked hard in the first few years, at this point in the decade, someone would have grown up to be a programmer with deep knowledge of the industry, deep knowledge of the technology, and the ability to analyze a product from scratch. It’s an honor to be a CTO, a technical specialist, a chief architect, and other key positions in the company, and your boss will not take advantage of you financially.

I think with the growth of working years, the in-depth understanding of life, we should keep learning and thinking

**** About professional skills

Skills that programmers should have

I want to make it clear that not all of the following is required. But the more you learn, the better you’ll be at architecting.

** I. Source code analysis topics

Data structure: red-black tree, balanced binary tree, B tree and B+ tree, Bloom filter, KMP algorithm

Design pattern: Responsibility chain pattern, publish/subscribe pattern, Reactor pattern, filter pattern, agent pattern, engineering pattern

Open source source analysis: Nginx, zeroMQ

Introduce the classical design ideas used in the source code in detail, see how Daniu is to write code, enhance the technical aesthetic, improve the core competitiveness.

Distributed architecture

Architectural practice: Core disclosure of Douyu live video technology, implementation of netease portal high load balancing, Massive data storage engine of Taobao, open API design.

Architecture middleware: distributed RPC framework, distributed MQ

Architecture strategy: consistency, reliability, scalability, high concurrency mass data design.

Architecture principle: message-driven architecture design, dynamic domain name for high load balancing, P2P decentralization. As a technology developer, how to deal with the skill crisis brought by technological change. Based on the evolution of traditional architecture to distributed architecture brought about by the technical changes. In the depth and breadth of technology has been leaps and bounds.

3. Cluster architecture

In the face of massive data and high concurrency requests, cluster is the only way to ensure the level of scalability and system reliability.

4. Linux system

Understand the system at the kernel level, understand the system architecture design, use a series of tools to dig into the bottleneck of the system, rather than following the optimization and architecture design of others.

Five. Engineering

Performance tuning

7. Audio and video column