Abstract:

Writing in the front

Whether it is development, testing, operation and maintenance, every technical personnel has a dream to become a technical bull more or less, after all, “the dream is always there, in case it is realized”! It is the pursuit of technical dream that drives us to strive and improve ourselves constantly. However, “the dream is beautiful, reality is cruel”, many students in the actual work, dream is to become, but do look like Daniel, for example, a programmer says “write business code also work overtime everyday, how to become a technical Daniel”, test said “every day have not finish the test case”, Operation and maintenance said, “Carrying the machine, connecting the network cable and tapping the shell command is not what I want in operation and maintenance life.” I’m also a programmer, so I hope to help you out with some examples of program-based development. The general principle is the same, testing, operation and maintenance can be used for reference.

A few typical misconceptions

We worship Daniel as our teacher

Some people think that the easiest, fastest and most effective way to become a technical leader is to “learn from the technical leader of your team” and have them give you some difficult tasks.

I personally oppose this approach for several main reasons:

Daniel is very busy, it is unlikely to give you a small cooking alone, let alone every day to give you an hour of cooking; Moreover, in a team, if Daniel often gives you a break, it will inevitably cause other team members’ doubts. Personally, I think it would be best for Daniel to give more training to the team if he really cares. However, those who have done training know that preparing for a training is very time consuming. The courseware and materials should be at least 2 hours (not fragments), and the explanation should be 1 hour. It is quite frequent for them to do training once a month.



Because of the first reason, we usually seek Daniel with questions to consult or discuss. It doesn’t take much time to answer or discuss questions, but more depends on experience and accumulation. In this case, They are very willing to answer questions. After all, influence is an important indicator of Niu. However, be careful: If you constantly ask for information that can be easily found in a book or On Google, they will get impatient. Time is precious. I often get asked questions such as “how to configure -XMN parameters for JVM”, and I always answer them directly, “Please go to Google”, because there are too many such questions. If you don’t systematically learn them by yourself, it is a waste of time for yourself and others to ask them all.



It is unlikely that every team will have a technical champion. There will be someone on the team who is better than you. Even if he gives you a little tutoring every day, eventually you will only be able to improve to his level. However, if you are a cross-team technical champion, due to the reasons of work arrangement and distribution, there are few opportunities for direct consultation and guidance, and it is unlikely to become a technical champion just by attending several training sessions.


To sum up the above reasons, I think for most people, if you want to become a master of technology, you should first understand the truth of “mainly depend on yourself”. You should not expect a master of martial arts to teach you step by step. When appropriate, I can improve myself by consulting Daniel or discussing with Him, but most of the time I still improve myself systematically and pertinently.

Business code is also awesome

Some people think that writing a business code can be very cow force, the reason is that business code can have a variety of skills, for example, you can use the encapsulation and more extensible abstraction allows business code, can be more exchanges and products in order to better understand and implement the business, good logging problems targeting efficiency can promote 10 times, and so on.

Business code has technical content, that is for sure, the business in the code technology is the foundation of every programmer, but only to master these skills, and can’t be technology, like the game upgrades have started playing small monster, experience value is very high, the more behind the experience value is less, a little strange already cannot ascend experience value, This time you need to play some more advanced strange, brush some of the challenges of the copy, did not see which game as long as always play small strange can be promoted to the top. As technology and the way is also similar, you want to constantly improve their level, then face greater challenges, through these challenges to levels more at the next higher level, and so on, finally reach the state of technology and the industry even Daniel, write business code just a challenge in the play blame upgrade road, And I think it’s a fairly elementary challenge.

So I think: a programmer who can’t even write good business code can’t be a technical genius, but a programmer who only writes good business code can’t be a technical genius either.

I’m too busy at work to study by myself

Many people think that they do not become technical masters because they are not smart or hard working, but because in this environment in China, technical personnel work too much overtime, so that they do not have extra time to study.

This reason has some objectivity, after all, compared with Europe and America, we do have to work more overtime, but this factor is only a problem to be overcome, not an insurmountable gap, after all, there are still so many talents around us who grew up in China.

I think there are several myths that contribute to this perception:

1) What I do at work is repetitive work. If I want to improve myself, I have to learn extra

The main reason for this myth is that “there is no skill in writing business code”, which is what I do now, so I can’t improve at work. 2) Learning requires large chunks of continuous time

Many people think that learning is like attending school, giving you a whole day to attend class is learning, but we usually work overtime and more tired on weekends, just want to sleep in, or just want to go to watch movies and play games to relax, so there is no time to study.

In fact, the opposite is true: first of all, we should learn and improve on the job, because learning is best when it can be applied or referenced by examples. Secondly, learning after work does not need a long period of time, but to squeeze out time and use time fragments to learn.

The right thing to do

Do more

Do more — do more than your supervisor gives you.

When I was in HW, responsible for the development of a version, this version of the workload is about 2000 lines or so, but I finish this function in addition to, also to master all clear, the associated function code (about 10000 lines) all looked again, after this version, I am familiar with this version of a complete set of business related all. After one or two meetings, everyone found that I was the most familiar with this area, and then it became interesting: product discussion needs to come to me, testing problems also come to me, boss external support to me; Later on, they would come to me for features I wasn’t responsible for, and EVEN if I didn’t know it at the time, I would look at the code or find the documentation to answer it for them. Eventually I became an “expert” on my system. I was still doing business and writing business code, but I was already familiar with the whole business.

The above is just a simple example, which is to say: to have a chance, you have to come out of the crowd. To come out of the crowd, you have to be different. To be different, you have to do more!

How can you do more? We can start from the following aspects:

1) Learn more about the business, whether you’re responsible for it or not; Get familiar with more code, whether you wrote it or not

There are many benefits to doing this, just a few simple examples:

Requirements analysis is more accurate and can identify risks, impacts and difficulties at the requirements stage



Troubleshooting is faster because you are familiar with related services and codes, and can quickly determine possible causes of problems and troubleshoot problems



More comprehensive consideration is given to the design of the scheme, and a better scheme can be designed due to the understanding of the overall business


2) Be familiar with end-to-end

Say you are responsible for web development background, but in fact user initiated an HTTP request, should pass a lot of intermediate steps to get your server (for example, the browser cache, DNS, nginx, etc.), the server is general passes through many process to get to the part of the code you write (routing, permissions, etc.) this many system or a step in the whole process, Most people can’t get involved in writing code, but having this knowledge will make a big difference in your overall skills, such as solution design, online troubleshooting, and more valuable technical work.

The words “systematic”, “global” and “comprehensive” seem quite empty, but in fact they are all necessary qualities for technical masters. To achieve such a state, one must be familiar with more systems, businesses and codes.

3) self-study

Generally in a more mature team, a direct result of the framework or component has a lot of encapsulation, write business code used technology is also less, but we need to understand that “the only constant is change”, the framework could be improved, and the component may be replaced, or you in a company, the new company neither components nor framework, want you to do from the very beginning. These are opportunities and challenges, and opportunities and challenges are only allocated to those who are prepared, so in this case we need to learn more by ourselves, because there is no time to learn when we really need to use it.

Code in Java, for example, most business is the if – else add a database operation, but we can learn more knowledge of the Java garbage collection, for example, tuning, network programming, and so on, these may be temporarily useless, but really want to use, not Google it is ok, this time who have mastered the knowledge and skills, Opportunity is who.

Taking garbage recycling as an example, I took the time to learn these knowledge, but it was useless after learning them for a year. However, I used them several times and solved the big problem of deadlock each time. However, some students, who have written Java code for several years, do not know what stop-the-world is, let alone optimize it.

Do better

Understand that nothing in this world is perfect. There are always unreasonable and improvable areas in the system and business you are in charge of. These “unreasonable” and “improvable” areas are monsters of higher level, which can add more experience points after playing. Identify those areas and come up with solutions, and then propose to your manager, not twice, but several times. If one of them lands, that’s your chance.

Such as:

Too much repetitive code, can you introduce design patterns?

The system performance is average. Can I optimize it?

At present, it is a single machine. Is it better to make it a double machine?

Release development quality is not high. Did you introduce efficient unit testing and integration testing solutions?

The current system is too large, can we change it to 3 systems through reconstruction and decoupling?

Ali middleware has some system feel we can also use, can we introduce?

There is always room for improvement if you think about it; If you don’t see any improvement in your system, then you’re not good enough. Learn more about the technology and see what other great companies in the industry are doing.

I was transferred to Jiuyou in 2013. At the beginning, I took over a simple background system. I cooperated with the front desk to add, delete, modify and check data every day, which seemed completely boring, right? It wouldn’t have been fun to just do that, but we’ve done a lot since we took over:

Decoupling, split one background into two background, improve scalability and stability;



Double machine, change single machine to double machine system, improve reliability;



Optimization: An interface that takes 5 hours is optimized to take 5 minutes


There were a lot of other optimizations, and then our group took on more systems, and then the group of five people took on six systems.

Do exercise

In the communication of occupational levels, I found that many students were indeed trying to Do more and better, but in the process of implementation, almost everyone met the same problem: the effect is not good just by looking at it, how to Do?

Such as:

I learned garbage collection of JVM, but there are few online problems caused by FGC, and even if there are, business recovery is the first, so it is unlikely to have online problems. Then I asked each student to practice, how to practice the knowledge and skills of JVM?



I also read Netty and understand the principle of Reactor, but I can’t participate in the development of Netty, how can I really master the asynchronous model of Reactor?



See “high performance MySQL”, but the online database is managed by the DBA, the database in the test environment feels randomly configured, how can I verify these technologies?



Framework encapsulates the DAL layer, database access we do not need to worry about, we how to understand the implementation of sub-library sub-table?


There are many other problems like this, so I would like to share with you my personal experience, which is actually three words: learning, trying, teaching!

1) Learning

This is the first stage, reading books, Google, watching videos, reading other people’s blogs can be, but we should pay attention to the “systematic”, especially some basic things, such as THE principle of JVM, Java programming, network programming, HTTP protocol and so on, these basic skills can not only learn through Google or blog. What I do is to read a book completely and have a comprehensive understanding of it first, and then search for some questionable places or skills through Google, videos and blogs. 2) Trying

This step is the key point to answer the doubts of many students mentioned before. Figuratively speaking, it is “to have enough food and clothing by yourself”, that is, to try to build some simulation environment and write some test procedures by yourself. Such as:

Jvm garbage collection: You can write a simple test program, allocate memory, do not free, then adjust the various Jvm startup parameters, and run the jstack, jstat and other commands to check the Jvm heap memory distribution and garbage collection. Such programs are easy to write, simple a few lines, complex a few dozen lines.



The Reactor Principle: Actually try to write a Reactor model Demo yourself. Don’t think it’s too hard. The simplest Reactor model has no more than 200 lines of code (including comments) (see Doug Lee’s POWERPOINT). After writing their own, go to see netty how to do, a contrast understanding is more profound.



MySQL: Now that you can refer to the wired configuration, you can directly ask the DBA to send us the online configuration (note that sensitive information is removed) and learn directly. Then set up a MySQL environment and start it with the configuration on the line. You know, many of you have been using MySQL for years, but you can’t even put together a simple MySQL environment.



The framework encapsulates the DAL layer: you can try writing a simple implementation of libraries and tables in JDBC yourself, and then compare it to the framework’s implementation to see where the differences lie.



Use the browser tools to look at HTTP caching implementation, see different types of sites, different types of resources, specific how to control caching; You can also write your own simple HTTP server in Python that simulates returning various HTTP Headers to see how the browser reacts.


There are many other methods, and I’m not going to list them all here, but in a nutshell, you have to really try what you have learned to understand more deeply. There is an Indian saying: I hear and I forget. I see and I remember. I do and I understand.

, of course, if can be used in the practical work, the effect will be better, after all, the actual online environment and business complexity is not we write a simulation program can simulate, but can not make such opportunity, most of the things we really can only depend on oneself, and then when the real business need to use, hand. 3) would

Generally speaking, I can master about 70% after Learning and Trying, but to really master, I think I must be able to explain clearly to others. Because when speaking, we need to systematize a knowledge point, but also need to consider all kinds of details, which will prompt us to further thinking and learning. At the same time, after speaking out, people watching or listening can have different understanding, or have new supplements, which is equivalent to continuing to improve the whole knowledge and skills system.

There are many such examples, including when I write my own blog. I thought I had a good grasp of it, but as SOON as I wrote, I found many points that I didn’t take into account. In group training, we often see that some students write PPT, but when they ask or discuss, they will find that many points are not clearly explained, or some points are actually misunderstood. Write PPT, talk PPT, discuss PPT, this process all go over, basically a knowledge point is more comprehensive.

Afterword.

Although the dream of becoming a technology champion is beautiful, it requires a lot of effort. No matter it is to Do more, Do better or exercise, it takes time and energy. This process may be helpless and painful, or boring. What I have said before is methodological, but what really determines it is our passion and interest in technology.

Author: Li Yunhua

The original link