Pre-order
In the spare time to browse the company's technical website, see the following this article, carefully read to really feel good, write valuable is very real. So want to contact the author, ask whether it can be reproduced. Open nails A search, the author is a senior technical experts, almost the level of technical director, this is also from the side of the levy, the following content is a personal experience, practical experience, rather than chicken soup slogan flow. Compared with the author's level, I am really ashamed of shame, so no good direct chat inquiries but in the article under the message. After getting the author's consent to post the contents of the article here, as a share also as a spur and reminder of their own. Thank you for my colleague ^_^.
。。。。。。。。。。。。。。。。。。。。 The following is purely the original version of the author, the word is not moved ..... ..........
Write in front
Whether it is development, testing, operations, each technician psychological more or less have a technical Daniel Dream, after all, "dream always have to have, in case the realization of it"! It is the pursuit of technical dreams, prompting us to constantly strive and improve ourselves.
However, "The Dream is beautiful, the reality is cruel", many students in the actual work will find that the dream is to become Daniel, but do not seem to do things like Daniel, for example, the programmer said that "every day write business code also overtime, how to become a technical Daniel", testing said "every day there are no complete test cases", Yun-Dimensional said, "carry the machine to connect the network cable Knock Shell command, this is not what I want to the operation of life" ... Familiar with the question of " writing business code every day programmers, how to become technology Daniel, began to write technical code?" "The number of followers have 6k+, the answer is 120 +, at that time I also answered and point to praise the most, and then to do career grade promotion and communication, when the new findings and ideas, so there is a systematic arrangement of an article of the idea, I hope to let more students in the road of technology Daniel can take a few detours."
Because I am a programmer, so some of the following examples are based on program development, but the principles are interlinked, testing, operations can be used for reference.
A few typical misconceptions about Daniel as a teacher
Some people think that want to become technology Daniel the simplest direct, fast and effective way is "worship team technology Daniel for the teacher", let them usually give you special mess hall, assign you some difficult tasks.
I personally oppose this approach, mainly for several reasons:
- Daniel is very busy, not likely to give you special mess hall alone, it is not possible to give you 1 hours a day comparisonof, and a team, if Daniel usually give you special mess hall, will inevitably cause other team members doubt, I personally think if the team Daniel if really heart, more to the team training is the best. However, training is known that the preparation of a training is very time-consuming, courseware and materials at least 2 hours (not the debris time), explaining 1 hours, Daniel one months to do a training is very high frequency.
- Because the first reason, so generally to find Daniel, are with questions to consult or discuss. Because there is no need to answer or discuss the problem too much time, more rely on experience and accumulation, in this case, Daniel is very happy, after all, influence is an important indicator of Daniel. However, it is also important to note that if you often ask those books or Google can easily find the knowledge, Daniel will be very impatient, after all, time is precious. Often a netizen asked me, such as "How to configure the JVM's-xmn parameters," this kind of problem, I directly answer "please go to Google directly", because such a problem is too much, if they do not go to the system to learn, each to ask is very wasteful of their own and other people's time.
- Daniel is not many, it is unlikely that each team has a technical Daniel, can only say that there will be more than your level of people, even if he special mess hall you every day, eventually you can only ascend to his level, and if it is a cross-team technology Daniel, because of the work arrangement and the reasons for distribution, direct consultation and counseling opportunities are relatively small, It is unlikely that you will become a technical Daniel by taking the training of several Daniel's.
To synthesize the above reasons, I think for most people, to become a technical Daniel, first of all, it is necessary to understand the "main on their own" The truth, do not expect to have a kung fu like a master of the hand-in-hand to teach you a step-by-step. When appropriate, you can improve yourself by consulting Daniel or Daniel, but most of the time it is your own systematic and targeted promotion.
Business code is just as awesome.
The answer is that the written business code can be very good, the reason is that the business code can have a variety of skills, such as the use of encapsulation and abstraction to make business code more extensible, can be more communication with the product to better understand and realize the business, log records of the problem location efficiency can be increased by 10 times times ... Wait a minute.
Business code has the same technical content, this is certain, the business code in the technology is the basis of each programmer, but only mastered these skills, and can not become a technical Daniel, just like the game upgrade to play strange, start playing small strange, experience is very high, the more to the back of the experience is less, hit the little monster can not improve the experience, This time you need to hit some of the more advanced strange, brush some of the challenging copy, did not see which game as long as the small strange can be promoted to the top. The way to become a technology Daniel is similar, you have to constantly improve their level, and then face greater challenges, by coping with these challenges to make yourself level up, and so on, and finally to reach the realm of technology Daniel and even the industry Daniel, writing business code is just a challenge on the road to the strange upgrade, And I think it's a more elementary challenge.
So I think: The business code is not well written programmers will certainly not be a technology Daniel, but only the business code to write the programmer also can not become a technology Daniel.
Too busy at work and no time to study
Many people think that they have not become a technology Daniel is not smart, nor do they not work hard, but the Chinese environment, technical staff overtime is too much, resulting in no additional time to study.
This reason has certain objectivity, after all, compared with Europe and the United States, we do more overtime, but this factor is only a need to overcome the problem, not insurmountable gap, after all, we still have so many Daniel in China this environment has grown up.
I think there are several misconceptions that have led to the formation of this view:
1) To do all work is to repeat the work, to promote the need to learn their own extra
The main reason for this misunderstanding is still to think "write business code is no technical content", and I now work is to write business code, so I can not improve in the work.
2) learning requires a large segment of continuous time
Many people think that learning will be like school classes, give you a day to class to study, and we usually overtime and more, the weekend tired only want to sleep, or just want to see the movie play games to relax, so there is no time to learn.
In fact, the opposite is true: first of all, we should study and promote in the work, because the application of knowledge or examples of reference, the effect of learning is the best; second, work after the study does not need a large period of time, but to squeeze time, using time fragments to learn. I will be in the next section on "How to learn to improve at work", as to how to use time fragments to learn, you can refer to my other article, " Daniel Nurturance Guide (1): Eat enough grass, you can become Daniel "
The right way to do more
Do more and do more than the tasks your supervisor has assigned you.
I was in the HW, responsible for a version of the development, this version of the workload is about 2000 rows or so, but I have done this function, but also all the associated functions are fully understood, the code (about 10000 lines) also read all over, after this version, I am familiar with the whole set of business related to this version. After one or two meetings, we found that I am the most familiar with this piece, the next interesting: product discussion needs to find me, the test has a problem also to me, the eldest brother external support also look for me; later, not my function They also look for me, even if I did not know, I will look at the code or find documents to help them answer ... In the end, I became the "expert" of my system. Although I still do business at this time, or write business code, but I am already familiar with the whole business.
The above is just a simple example, in fact, is to say: to have the opportunity, first you have to emerge from the crowd, to want to come out, you have to do something different, to be different, you have to do more!
How to do more? You can start with the following:
1) be familiar with more business, whether you are responsible or not, be familiar with more code, whether you write it or not.
There are a number of advantages to this, and a few simple examples:
- Demand analysis is more accurate, can identify risks, impacts, difficulties in the demand phase
- Problem handling is faster because the relevant business and code are familiar, can quickly determine the cause of the problem and troubleshoot
- The design of the project is more thoughtful, because of the understanding of the global business, can design a better solution
2) be familiar with end-to-end
For example, you are responsible for web background development, but in fact the user initiates an HTTP request, to go through a lot of intermediate steps to your server (such as browser cache, DNS, nginx, etc.), the server will generally go through a lot of processing before you write that part of the code (routing, permissions, etc.) this whole process of many systems or steps, most people are not able to participate in writing code, but mastered the knowledge of your comprehensive level has a great effect, such as the design of the program, online fault handling these more valuable technical work needs a comprehensive level of technology.
"Systemic", "overall", "comprehensive" these words seem to be more virtual, but in fact all are the necessary qualities of technology Daniel, to achieve such a realm, must be familiar with more systems, business, code.
3) Self-study
Generally in the more mature team, because the framework or component has been a large number of packages, writing business code to use the technology is actually relatively small, but we have to understand that "the only constant change only", the framework may have to be improved, the component may be replaced, or you change a company, the new company has no components and no framework, I want you to do it from the beginning. These are opportunities and challenges, and opportunities and challenges will only be allocated to those who are prepared, so in this case we need to learn more by ourselves, because there is no time to really wait until we have to use them.
In Java, for example, most of the business code is if-else plus a database operation, but we can learn more about Java's knowledge, such as garbage collection, tuning, network programming, these may be temporarily useless, but really need to use, not Google a bit, At this time who has mastered the relevant knowledge and skills, the opportunity is whose.
Take garbage collection as an example, I myself usually take the time to learn these knowledge, learned 1 years are useless, but later used several times, each time solved the big problem of the card, and some students, wrote a few years of Java code, for Stop-the-world is what concept do not know, let alone to optimize.
Do better
To know that there is no perfect thing in the world, you are responsible for the system and business, there is always unreasonable and can improve the place, these "unreasonable" and "can improve" place, are more high-level monsters, after the play can add more experience value. Identify these places, and give a solution, and then ask the supervisor, not two times a time, a few more times, as long as there is a landing, this is your chance.
For example:
Too many duplicate codes, can you introduce design patterns?
Is the system performance generally, can optimize?
Now is a stand-alone, if it is better to make dual machine?
is the quality of the version development not high, the introduction of efficient unit testing and integration test plan?
is the current system too large to be changed to 3 systems by refactoring and decoupling?
Ali Middleware has some system feel we can also use, whether it can be introduced?
。。。。。。。。。。。。。。。。。。。
As long as you think, you can always find a place to improve, if you think the system where there is no improvement, it means that your level is not enough, you can learn more about the technology, more to see how other companies in the industry to do, bat how to do.
I deployed to nine in 2013, just started to take over a simple backstage system, every day is to cooperate with the foreground to do data additions and deletions, it looks completely boring, right? If this is really boring, but we took over and did a lot of things:
- Decoupling, a background split into 2 background, improve scalability and stability;
- Dual machine, the machine is changed to dual-system, improve the reliability;
- Optimized to optimize the original 5-hour interface to a time-consuming 5-minute
There were many other optimizations, and later our group assumed more systems, and later this group of 5 people, was responsible for 6 systems.
Do exercise
In the professional level of communication, found that a lot of students are really trying to do more, do better, but in the process of implementation, almost everyone encountered the same problem: light to see the effect is very poor, how to do?
For example:
- Learn the JVM garbage collection, but the line is less FGC caused by the problem of the lag, even if there is, recovery business is also the first, it is not likely to have problems on the line and let each classmate to practice a hand, how to practice the knowledge and skills of these JVMs?
- Netty I also read, also understand the principle of reactor, but I can not participate in Netty development, how to let oneself really master reactor asynchronous mode?
- Read "High-performance MySQL", but the database on the line is DBA Management, test environment of the database feel is casual configuration, how can I verify these technologies?
- The framework encapsulates the DAL layer, access to the database we don't need to worry about, how do we know the sub-database table implementation?
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
There are a lot of such questions, and I'm here to share my personal experience, which is actually 3 words: learning, trying, teaching!
1) Learning
This is the first stage, reading, Google, watching videos, watching other people's blogs can be, but note that one is "systematic", especially some basic things, such as the JVM principle, Java programming, Network programming, HTTP protocol ... Wait, these basic technology can not only through Google or blog learning, my practice is generally complete after reading a book comprehensive understanding, and then through Google, video, blog to targeted to find some questionable places, or some skills.
2) Trying
This step is to answer the previous mention of the doubts of many students the key point, the image is "self-clothed", that is, to try to build some simulation environment, write some of their own test procedures. For example:
- JVM Garbage Collection: You can write a simple test program, allocate memory does not release, and then adjust the various JVM startup parameters, and then run the process using Jstack, Jstat and other commands to view the JVM heap memory distribution and garbage collection situation. Such a program is very simple to write, a few simple lines, a little more complex is dozens of rows.
- Reactor principle: You really try to write a reactor mode of the demo, do not think this is difficult, the simplest reactor mode code (including comments) not more than 200 lines (can refer to Doug Lee ppt). After you finish writing, and then to see how Netty do, a comparative understanding is more profound.
- MySQL: Since the wired configuration can be referenced, it can directly let the DBA to send us the online configuration (attention to remove sensitive information), direct learning, and then build a MySQL environment, with the online configuration to start; You know, a lot of students have been using MySQL for many years, But even a simple MySQL environment can not get up.
- The framework encapsulates the DAL layer: You can use JDBC to try to write a simple implementation of a sub-library table, and then compare it to the implementation of the framework to see where the difference is.
- Use the browser's tools to view the HTTP cache implementation, to see the different kinds of Web sites, different types of resources, how to control the cache, or you can write a simple HTTP server in Python, simulate the return of various HTTP headers to observe the browser response.
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
There are many ways, not listed here, simply put, is to learn something really try to understand more profound, the Indians have a proverb: I hear and I forget. I see and I remember. I do and I understand, and "try" can actually be relatively simple, many times we can do it by ourselves.
Of course, if you can use in the actual work, the effect will be better, after all, the actual online environment and business complexity is not we write a simulation program can be simulated, but such opportunities can not be met, most of the situation we really can only rely on their own simulation, and then wait until the real business to use, can easily.
3) Teaching
Generally speaking, after learning and trying, can grasp about 70%, but to really master, I feel sure to be able to tell others clearly. Because when we speak, we need both to systematize a point of knowledge and to consider various details, which will prompt us to think and learn. At the same time, people who speak or listen can have different understandings or have new additions, which is equivalent to continuing to refine the entire knowledge and skill system.
Such examples are many, including my own blog when often encountered, originally I feel that I have mastered very comprehensive, but a write on the discovery of many points did not take into account, the group training often see, some students write PPT, but when speaking, we ask, or a discussion, you will find many points have not been clear, Or some of the points are actually misunderstood. Write ppt, speak ppt, discuss PPT, this process all go once, basically to a knowledge point master is more comprehensive.
Postscript
Become a technology Daniel dream although very good, but to pay a lot, whether it is do more or do better or do exercise, all need to spend time and energy, the process may be very bitter force, may be very dull, here I would like to emphasize: I said in front of a number of methodological things, But what really plays a decisive role, in fact, is our enthusiasm and interest in technology!
Write business code every day, how to become a technology Daniel