Excellent engineers must have a skill, you unlock it?

Ali sister REVIEW: Many programmers will encounter confusion at work for some period of time, although the technical near the body, it will inevitably produce anxiety, thought how to grow rapidly. On how to improve their thinking, using the power of thought to promote capacity building, in order to achieve the growth of technology, rock Alibaba horse box product technology department summed up a set of dynamic thinking, growing share to each programmer. (Benpian long article, read about 30 minutes after the collection is recommended to find a suitable time to slowly read what oh)

introduction

Let's look at several types of programmers in growth, development of common problems, there are some more or less if you are, then congratulations, you deserve this article carefully looked down:

  • You think you pay the same effort with others, but you do grow more slowly, such as slow to learn than others, troubleshoot slower than others, there are always loopholes in the program and so on;
  • Do you think you're just struggling to cope with the demand that he do no technical content (a lot of people feel that they do business development is no technical content, but I think that each area has its own technical content, but you do not get to);
  • You always find the same mistakes, or do things constantly at the same level cycle;
  • Every time you want a promotion, you find that simply could not speak (a lot of people think that is the ability to express the problem, but I think not);
  • When you change to a new area, you find yourself experience seems irrelevant;
  • You have been very difficult to get to know the veterans say "cognitive upgrade" in the end what is the concept? Different levels of technical thinking in the end what is the difference? Why promotion is him, not me?

In this article, I will tell you some of the techniques of growing misunderstanding, I would like to point out:

  • As long as things get, the growth is a natural thing - perhaps over time, you find errors committed before, then not one to avoid;
  • I'm just a little effort, 996 or even 007, I was able to grow faster than others - you may find that you have done up to, but did not get the best results;
  • I did my best, still slower than others, it should be my IQ is really worse - Congratulations, in fact, everyone's IQ does not have much difference;
  • Good performance of others, or a promotion, but it is stronger than me the ability to express - I can responsibly tell you that this is not only a matter of skills.

To throw a very important conclusion: "thinking" is a vital quality programmers need to have. Mastered thinking, you mastered in the Internet field, this highly "knowledge-intensive" growth of the industry key. Above these growing problems and errors, with no grasp thinking it has a very important relationship, and I found all relatively smooth development of the students, their thinking and learning ability is very powerful.

image

I personally work has been intentionally or unintentionally exercise their own thinking and team of students, including what is our most important thinking, thinking of how to train, there are a number of ideas, hoping to share with everyone.

Thinking about

Thinking is a very deep knowledge, including cognitive science, psychology, education, logic, if you want a systematic study is needed to see a lot of books, I recommend the following book:

1. "pyramid principle: thinking, expression and problem-solving logic" - [US] Barbara Minto, the book systematically expounded the thinking, problem solving and logical expression, but also the thinking ability of McKinsey basis, be regarded as a this relatively standard textbook thinking;

2. "McKinsey taught me thinking weapon" - [Japanese] Ataka and people, according to author professional background and rich experience accumulated in the brain to learn when their job at McKinsey & Company, to design a very logical problem-solving thinking mode;

3. "The essence of thinking" - [US] John Dewey, this book is a famous American educator John Dewey's masterpiece, describes the basic theory and practice of mental training;

This article does not explore the deep theoretical thinking, but to share our daily precipitation from technological learning and thinking during the project down, and how to develop these thinking, thinking of these we can use almost every day, as long as you have certain somatosensory, you will identify with.

What are the most important for programmers thinking

Principle thinking: find out knowledge of the principles behind

Some people will say, why should ponder the principles, rather than directly acquire knowledge on it? I just need to be used on the line ah.

Let's take some of the cases of technical solutions designed to :

  • Why create a single order must first create, then enable?

This is actually a two-phase commit protocol uses ideas to resolve distributed transactions, but extended from the general framework of the transaction to the trading areas;

  • Why use business system messages?

Because the message using the observer pattern, observer pattern is that the benefits of decoupling can implement multiple Consumer Affairs and trigger a transaction;

  • Why the business system will use DTS to do to compensate?

This is the final consistency BASE is essentially a theory of ideas to solve the distributed transaction;

  • Why, when the updated data must be added to the version in sql or status than comparison?

This is essentially an optimistic locking mechanism implemented by means of DB.

Further, you will find another large system architecture and top-level design of the case:

  • For example, Ali technical framework NBF, TMF, early webx, all kinds of framework design, able to escape design patterns, such as opening and closing principle, template method, the chain of responsibility, the factory model, opening and closing principle;
  • Whether the underlying middleware, complex business systems, in the design never leave the core of the business model, such as building entities and entity relationship; when analyzing the design of such systems, you will find the best tool is the UML!

In fact in addition to the principle of the field of software, as well as commercial design principles, such as the Case:

  • All of the sale before the refund must first cancel the performance, all the performance out of the process needs to take place a refund, and why? Because the basic principle of the transaction are: Change "money, goods balance", money and goods must be synchronized final (allow short-term imbalance), you have mastered the basic principles of money, goods balance, many complex transactions on process design well understood;
  • In the design of the financial system, inventory system time, business processes, business logic can be very complex, resulting in confusing you, at this time, "there must have borrowed loans, loans must equal" financial balance principle comes into play, you just know this principle soon we will be able to read all kinds of financial processes, inventory transfer process, and a variety of data reconciliation logic;
  • When my domain "high availability line cash register system" under the line of disaster recovery systems, there are a variety of disaster recovery program design, membership disaster recovery, disaster recovery commodity trading disaster recovery, disaster recovery ...... pay different capacity disaster means, you look dazzling, but they have no common principles to follow it? Yes, this is "to allow consumers the fastest speed to complete the transaction, but the ability to maintain last traceable." You just get to this basic principle, the design of various types of disaster recovery strategy will be handy.

image

In addition, our workflow management tools, also contains a deep principle, is very interesting, you can find time to pause and ponder carefully, such as:

  1. Why Team mechanisms should be transparent? Communication is transparent?
  2. Why should the owner of consciousness are at work, awareness owner what difference will it make?
  3. Why managers can not micromanagement, not sheep? Which in the end of the pipe, which should not control?

So, master the knowledge of the principles behind it, the benefits are:

  • Complexity of software systems have become increasingly demanding, we are facing more and more scenes, grasp the principle can actually significantly reduce the amount of memory for our knowledge, it is the amount of knowledge explosion, but the principle is absolutely controllable!
  • The principle There are more complex than the direct costs of knowledge! Remember that the core principle, when you are faced with a new scene, you will be pleasantly surprised to find that your understanding much faster! This is something we should be aware, for example, before we may have learned the basic principles underlying RPC communication framework dubbo, etc., but only if you understand his basic usage, you will find that now do business system did not help you! But when you understand how dubbo addressing how to do disaster recovery, how do extension, you then do business system and found that the design principle is the same, and there is no essential difference! Such research before you Middleware design business systems can quickly use it.
  • Also explore the principles of the process, itself a lot of fun! This is a very valuable mental training process, keep the system design thinking, business design, things do work, to pursue the principle behind and find commonality between them, in my opinion very fun for some time after the training, you will find that your ability to see through the essence of growing!

Well, then we programmers work, exactly what the principle is the knowledge we need to grasp it ? According to our experience in actual combat team point of view:

  • java, principle linux, data structures and algorithms, databases, network communication and distributed computing, these types of basic knowledge is more important, we are doing will have to use a lot of design, coding, troubleshooting in;
  • Design patterns, UML this is necessary to design the system architecture knowledge, when you go through a lot of large-scale software systems design, back to the root, you will find this one of the escape theory and tools;
  • The basic principles of the field, such as our above-mentioned "money, goods balance", "financial balance formula", "cash register at the fastest line to allow consumers to leave", this logic we need to get to these areas of design principle, even to himself summed up this principle;
  • About some of the basic principles of management, interpersonal communication, psychology, you can take a look according to their actual needs.

How to learn and apply these principles at work, I think there is a best practice :

  • First, you might use domain knowledge, establish a basic concept. Read books and articles, to find people to talk to industry veteran, you can get. Note that there need to have a basic concept you can, so you might have to touch these principles, you consciously, you will not spend a lot of time;
  • In practice, there is a sense of "many ask why," and has been "inquisitive", will eventually be able to track down to the final principle behind; there is also pay attention to thinking about why in this place will use this principle, that is, find the "scene" and association "principle", so you will understand more deeply;
  • After understanding the principle, in practice the use of it, so that your understanding of this principle will be very deep, and you know how to apply this principle;
  • If this is a very important principle, I suggest that you go to if spare capacity combined with a systematic study of classic books.

image

Structured thinking: Build your own tree of knowledge

Knowledge Tree problem to be solved, we look at some scenarios:

  1. Why do I know that a lot of things, but when will always remember the scene to be used;
  2. The completion of a program you can think of a number of point-like means, as well as other programs, are slipping;
  3. Say one thing when logic is very confusing, before and after no logical association.

But you probably know that knowledge is, why is there such a tragedy?

The brain just knowledge about the structure, which is the study of knowledge "index" is not established, that is to say, only your knowledge point, there is no line! Think about it, the things lost in the mess room, with no time to find clues and paths, how find it?

We look at the structure of a typical case scenario work, we taste:

MM test project raised a bug, I summed up the standard of comparison steps to locate the problem:

  1. Just to confirm whether there have been changes and deploy the code, because there is a relatively high probability is just changing code and ruining ......
  2. Link link tracking log to see if there is abnormal;
  3. RPC calls to see through the console interface input output is in line with expectations;
  4. The key method of tracking to the Senate and the Senate, to see if there is a problem;
  5. After positioning the methodological details, if there are problems inference logic;
  6. If you can not reason, it is a last resort, playback abnormal traffic debug, this would certainly be able to find out why.

A link takes longer, the need for performance optimization, my analysis steps are:

  1. The actual flow through a time-consuming manufacturing high trace;
  2. Conduct trace analysis, look at the causes of the most time-consuming, and sort by priority;
  3. The reason for looking for solutions, possible scenarios are:
  • Reduce the number of visits or the amount of calculation data, common means is to increase the cache: invokeCache within the thread; distributed cache tair; page caching ......
  • Enhanced processing speed, such as multi-threading acceleration;
  • Reduce cycle number of calls, such as requesting the merger after the distribution;
  • Reducing the range of data processing, such as reducing query, asynchronous loading tab;
  • Simplified logic, such as logic optimization, or induction of the non-core logic and the like;
    ......

4. After rid playback the same case, see consumption performance meets expectations, does not meet the expectations continue to optimize;

How familiar with a new system, my steps are:

  1. To a test account, the relevant functions to go again, so can understand the function of a system very quickly;
  2. Look critical core table structure, so you can quickly understand the domain model system;
  3. Interface external system to find a list of functional steps to understand the system L0 business processes;
  4. Download systems engineering, structural engineering and are familiar with the entire module duties;
  5. In one of the most important processes for the starting point, the code read, see execution logic core, can become edge see Videos timing chart;
  6. Create a debug scene to debug the way to go over the process, so it can actually deepen the understanding of the system;
  7. Do a little demand, acquire the relevant processes and rights;

image

Here a single new needs, a technical solution of Step:

  1. Prior to look at demand, and this demand is located approximately scene and link to read it again, get to know;
  2. Find a point of change needs;
  3. Analysis of the change program content may be involved:

Data structure will not change, how to change;

Interactive protocol will not change, how to change, interaction protocols are divided into: end components and do not want to change; and downstream interfaces do not want to change;

Execution logic will not change, how to change, perform logical change point of refinement consider: whether to change the domain service; whether to change the orchestration; whether to change the main logic; whether to change the extension point is to change the internal logic extension point, change internal logic time, and can be further disassembly:

a.重构原有的方法,覆盖之前的逻辑,那就需要进行回归;

b.通过逻辑路由到新的方法,这里需要增加路由逻辑;

4. 稳定性方案;

5. 发布方案;

You can see the face of any scene, no matter how small most of what we need knowledge or skills can build into a tree structure, the relationship between the sequence is the same, is the parent-child relationship (thickness or particle size) between the upper and lower .

When this tree to build up in the brain, you will find that what you do is have a clear analysis and execution logic, are less likely to produce confusion and missed!

So how to train their own knowledge trees? I will give some of the more effective practices:

  1. Be sure to summarize their knowledge tree, rather than blindly follow or someone else on the books, and why? First, because the speed of people's thinking and habits, there are some differences in skills, not every person is the same; and second, if not within the knowledge of others to become their own knowledge, the tree is not able to use it skillfully;
  2. Habitual summary, done any thing, habitually recall to own tree hanging above the new stuff, this is the tree of the knowledge necessary means to build, this summary does not need to spend a lot of time, such as after finishing things flower a few minutes to look back on it, but need to adhere to;
  3. Recommend a very common tool: xmind, record their own tree;
  4. Training their own thinking habits and ways of doing things become structured, when you do things, customary manner tree propulsion, force yourself to follow the same approach.

image

Scalability thinking: giving top priority to expand thinking

The core objective is to enhance the scalability of our thinking breadth of thinking, that is, let us become more open tree of knowledge;

I summed up the thinking at work scalability extensions of two key directions:

(1) giving top priority: to solve the problem of the same type of N

The benefits of giving top priority is: "Can we use the same knowledge and means to solve similar problems associated with several similar" to cite a number of cases:

  • When they find jvm parameters of a system configuration there is a configuration error, not just repair jvm configuration of the system, but the system is responsible for are a few to check whether you need to modify the unified;
  • A bug exists in the system results in a dirty data, the dirty data has been revised not directly found, but all of the dirty data taken pull the feature, a one-time process;

Characteristics of this way of thinking is by analogy, by analogy, the effect is equivalent to the batch process, can greatly improve the efficiency of solving the problem, avoid duplication process.

(2) seek more possibilities: expansion of different means to solve the problem

Means to expand the common thinking is: whether to change the way more understanding, more or solution, cite a number of cases:

  • When the failure of rapid hemostasis in addition to the rollback, what program? If Troubleshooting experienced people must know that, in addition to the rollback, there is also downgrade, downgraded from operating activities and other programs;
  • In addition to write more robust code, what means can improve the fault tolerance of the system? As well as data monitoring, closed loop documents and other means;

As a means to solve the problem more, thinking to open up.

Focuses on major thinking: to enhance the efficiency, easy to remember and pass

When we find the tree of knowledge built up in the future, how to make efficient use of memory and high? And when the external transfer of more easy to understand? Focuses on major scene is thought to be solved:

  1. If you do everything according to the way of the tree of knowledge, efficiency may not be particularly high, there are faster ways?
  2. When expressed in external communication, to express the core idea, or someone else will be difficult to understand the content of your expression; for example, we again promoted to the respondent, project reporting, when there will be experience.

These two types of puzzles to solve, the core idea is to seize the key and context.

But grasped between the focus and structure of knowledge is not in contradiction, and I think the priorities are, we must first establish a structured knowledge before screening focus from the inside out, otherwise the system of knowledge is incomplete.

So the focus of screening ideas, what does?

(1) induction

The inductive method, to hide the details, showing a knowledge of the context, this is a very good idea; especially when you prepare for promotion ppt, ppt each page are summarized need a core point of view, not all the details, this Very important! And the ability to generalize the training, knowledge itself is a reflection of the degree of understanding of the profound;

(2) Priority Method

Priority policy is often applied to find the most critical or greatest benefits that task item among a number of tasks, such as what might have completed a number of steps, which is the most effective step which, generally can do a sort. When implemented, you can go to implement the order of priority.

But finding the best of the task item, under different scenarios are different, with our proficiency and experience. Like the old Chinese pulse, the more experience the more prospective judge, this is no short cut, which can only continue to practice their task items found in what is more important scene.

image

Reflective thinking: Where can I do better to think

Reflective thinking is a key capability to enhance the quality and depth of knowledge. Because only continue to reflect once again on the basis of the next upgrade to make, rather than repeat the cycle.

Common Reflection Case:

  • There is a problem I checked two hours, the brothers took only 10 minutes, this is why? He is familiar with the business than I? Clear thinking than I am? I do not know or know of a tool? Be sure to find the key points of difference, then make up the gap off;
  • A project done, from program design, process development, quality assurance above and where we can do better next time? Found insufficient, the next time to avoid;

For our technical team, what worthy of reflection, the experience of our team are:

  • The commercial value of the project it OK? Whether it achieved the desired effect?
  • I have the ability to project what issues, what is going well and there are bad?
  • System design strengths and weaknesses?
  • Whether the project quality assurance can do better?
  • Whether the R & D process and project management deficiencies?

Practice of reflective thinking, that there are two more crucial points:

  • Reflective thinking the most important sense: process of doing things is always room for optimization, every time there is progress; if not this attitude, it is difficult to continue to reflect;
  • Reflection is a habit and subconscious, can often inadvertently, in fact, need not be very formal to spend a lot of time, sometimes done a thing, the habit of thinking what you can.

image

Effective Practice thinking exercise

1. consciousness

Consciousness is to enhance the most important point of thinking, I think. As long as the formation of such awareness, it has been successful in half.

Many students did not go up thinking, thinking is not aware of the concept, but mechanically do things, do things, do things ...... every time wandering in the same level of thinking above, there can be no lifting of the essence.

From the junior engineer, senior engineer, technical expert, senior expert, senior expert level up ...... you rely on? How much more then the demand? Write the number of the code? These factors have, but these are not the key factor, but thinking in continuous improvement, constantly evolving way of thinking, which led to output will become more outstanding performance, generating a multiplier effect.

Can stick to see the students here, it must be able to know the importance of thinking.

2. Keep the faith

Now know the importance of thinking, many students may think that he is a smart enough man. Why I tried, or not?

Give us a confidence: One master said: Under the same degree of civilization and ethnic backgrounds, the sum of every normal human subconscious and consciousness and, in the spiritual sense of energy are substantially equal.

I almost come into contact with very hard but growing fast enough students because they did not master the correct way;

Once you master the correct way and adhere to the training, thinking can definitely improve.

3. Empty cup mentality

In fact, the process of thinking of human knowledge constantly refreshed and reconstruction process, where we must ensure that empty cup mentality, new environment, new ideas, new technologies keep an open mind, or is creating obstacles for ourselves.

4. The time for thinking come from?

Common excuse is "I could not even demands are endless, but where's the time to think"?

In fact, do not need too much thinking training full time, my formulas are: "1 use of fragments of time; 2 Grasp the work process..."

  • The use of fragments of time, such as commute time, dinner, or can just think about things today, figured out, and then periodically summary of what you can;
  • Seize the work process, note that each time each time a technical solution, optimized code, troubleshoot problems, deal with failure, are ready to promotion opportunities ...... once trained, can think and do things quickly in the practice of the process.

5. Is there any thinking to enhance the criteria?

Yes, in general thinking there are three degrees: the breadth, depth, speed, which you will be able to feel out:

  • Breadth: is your own knowledge tree can grow much range, the more profound the more extensive knowledge; for example, from "how to write a multi-threaded program," raised to "how to optimize system performance," and "how to do to prepare for system stability "this is to enhance the breadth of one kind;
  • Depth: How deep is your own knowledge leaf nodes of the tree, the deeper the more thorough understanding of knowledge; such as "ideas to solve the problem of distributed transactions" from the "eventual consistency solved using the distributed transaction," and "use DTS resolve distributed transactions ", which is a deep upgrade;
  • Speed: is to build and refresh rate of the tree of knowledge. So you want to know such as a modeling program in a day, now only takes half an hour to think clearly, and that is the speed increase.

6. Good tools have recommended it?

It is recommended that a tool: Xmind, the most effective tool for most soils. You can download the mobile version and the PC version, recorded at any time.

7. Be sure to share each other

Although the main thinking on their own, but be sure to share with each other. Because thinking is intellectual activity, share each other perfectly capable of achieving the effect of 1 + 1> 2;

Note that sharing can take many forms, such as our team most often is:

  • Project Share: major projects is sure to share, including architectural design experience, experience in the process, enhance the quality of experience, we need to share out;
  • Zhou share: the team will focus on over-week schedule? That's too wasted it, about the progress and risks weekly look at it. Week would be a good time to learn to share some of the key programs that focus on architecture design, good tools, and even work-related content;
  • Share in the group: when a man stepped pit later, the group which remind everyone that this is a very timely sharing scheme;
  • Annual / Quarterly Share: this time to find a place for scenic tea, talk about the growth of their own thinking and, very helpful;
  • Coterie: everyone form their own small circle, you can always talk to each other about their feelings and experiences, in fact, this effect is also very good;

8. Technical Leader role in the training of everyone thinking

In the technical team, the technical Leader of consciousness thinking ability and practical action, determine a team's overall level of thinking and the growth rate!

A team to improve the ability to think and learn, first of all conscious thought this team would put up the Leader, Team Leader if there is no conscious thought, the team did not mind the growth of the students, then the whole team is thinking and growth rate definitely not up soon.

In practice, enhance the overall thinking of the team, the technical Leader's responsibilities:

  • To turn herself into a thinker that he set a good example and lead by example;
  • Mentality awareness to change over, one of the most important duties of the growth rate should team of students, we do not have this consciousness are empty;
  • Multi-create conditions and atmosphere to think, we must seize any opportunity (Code reivew, program evaluation, weekly can) encourage people to think about and share;
  • Control the rhythm of the team, for everyone to learn and set aside some time to think;
  • Timely guidance and demonstration, some students may be Pianman grasp some of this time need to have patience to guide students to find the feeling of thinking;
  • Does not have to interfere too much detail, we play to the collective wisdom, without having to do too much intervention, not to individual's will to force others to accept.

image

Summary of important points

Well, here may be a summary to the important points, the tight schedule of the students can directly read this paragraph:

  1. The growth of critical thinking programmers, teams and individuals need to intentionally or unintentionally enhance thinking skills.
  2. The most important for programmers thinking are: the principle of thinking, structured thinking, reflective thinking, expand thinking, focuses on major thinking.
  • Principle is the foundation of thinking, because the case can not understand all the knowledge construction are empty;
  • Structured thinking to help us build our knowledge tree;
  • Reflective thinking constantly reconstruct knowledge, is a prerequisite to achieve cognitive upgrade;
  • Scalability thinking can enhance the breadth and depth of knowledge;
  • Focuses on major thinking can speed up the efficiency and transmission efficiency knowledge;

    1. In practice, enhance the thinking of:
  • The key is thinking to enhance the transformation of consciousness;
  • To enhance confident in thinking of;
  • Multi thinking at work to exercise, do not need to spend too much extra time to rest;
  • Share more with each other;

Team Leader to be growing the team of students and enhance the thinking as the most important content, and take concrete action.

Original release time: 2019-06-13
author: rock and dynamic
article from Yunqi community partners, " Ali technology " for information may concern " Ali technology ."

Guess you like

Origin yq.aliyun.com/articles/705254