Where the gap between us and excellent engineers in Android?

作者:张磊

Where the gap between us and excellent engineers in Android?

I believe that every engineer had a dream of becoming a technology carries a large cattle, but true to the technology of the very few large cattle this way. We often find work, some students work a few years, but growing rapidly; the core of the team will soon be able to post to become a good engineer; and some students work a few years later but unknown in the company, and the ability to post not much improved, and just eventually reduced to code a mediocre farmers. So I often have mixed feelings, too many people (myself included) really just one or two years of experience in the workplace mix for five years or more.

So ordinary outstanding engineers and engineers in the end the gap Where? Those outstanding engineers is how to grow step by step it up? Following on my own observation and thinking to talk about, see if you can find out, the key to understanding leads to outstanding engineers; and then encourage one another, with the direction of the excellent engineers to work on.

Where is the gap?

We take a teacher to explain a Google interview questions in the column to expand the chat and see the face of the same problem, engineers and outstanding ordinary engineers are thinking how to solve the problem.

Question follows: How to design a map function to find the current away from the nearest gas station?

In a recent interview the company's hiring process, I could get a similar problem had to ask candidates part, most of the candidates want to regard the issue is too simple. General engineer solutions often given is: all gas stations to calculate the distance to the current location based on latitude and longitude, and these stations are sorted by distance from, and select from the nearest gas station a few.

The problem is traveling on the road, leading to the point B from point A, the distance is often not linear. Because both by car or on foot, we can not pass through building direct destinations, A to point B from point a lot from a combination of fragments, which may be thousands of combinations, then how from thousands of combinations select the route from the nearest route it? The use of dynamic programming algorithm can solve this problem, in thousands of combinations of only a few dozen steps can calculate the shortest route. This part of the engineers have a threshold.


Then you need to sort by distance, find the nearest gas station a few.

Most of the engineers face of such problems will think, the sort of course be able to solve the problem, but it is not the optimal solution. Even the most efficient use of quick sort, also need to calculate the amount of N by LogN. Assume that the city has a 1000 gas station, then LogN approximately equal to 10, which means that the computational complexity is almost 1000, of course, what the amount of calculation for 1000 is not really a computer, but considering the city on a road may be hundreds ten thousand moving vehicle, the calculation of the amount of consumption is very substantial.

Suppose we need only the most recent five gas stations, gas stations if all that sort obviously done a lot of wasted effort. There is a data structure called the binary tree data structure, there is a finer classification binary tree: "heap", we can only use the top few discharged through the heap sort, without ranking behind the tube. First time complexity of sorting is discharged through the stack N, the discharge second, third, fourth, fifth time complexity are LogN, much faster than 1000 gas stations sorted. For our needs: choose the nearest gas station 5, just about the same amount of computation required 1000, nearly 10 times faster than quick sort.


Here you are not think the problem has been solved was perfect?

When we resolve the issue of involuntarily made a hypothesis, it is to optimize the entire process of the algorithm is built around a user of one of its uses carried out. But in real life, a city where a lot of people will also find gas stations in different places. Similarly, while driving the same person at different times in different locations also need to find a gas station. Taking into account this reality scene, always have a lot of people are constantly looking for nearby gas station, then a lot of computing can actually be considered a good pre, until the result of providing services directly to tune out just fine, avoid duplication calculation.

For example, we can put all of Shanghai from the intersection point of the pre-calculate when a person looking for a gas station, there is no need to calculate the distance of the real-time dynamic programming to calculate, and only needs to be calculated from the current position distance to several nearby intersection, and then calculate the distance at a gas station to its location near the intersection, the distance of each point of intersection is computed in advance, so do a few simple additions can be, so calculate the distance the time will be able to save a few times. This is the problem of the above benefits of global optimization.

In fact, the face of such problems, outstanding engineers will not have problems directly set out to solve, but will be more comprehensive to consider the issue. For example, take into account the current direction of travel, such as the distance requirement does not in fact require too accurate in solving the problem, because the people who drive for 2.5 km and 2.3 km in fact there is no difference, taking into account the situation of road congestion, 200 meters away from the more negligible. But if you want to look for pedestrians nearby convenience store, a distance of 200 meters will have to consider them.

From then to solve the problem of where we can see the gap between ordinary engineers and excellent engineers in it?

1. good engineer is sure to have a solid basic knowledge of computer, such as a good grasp of the data structures, algorithms, these tools, these tools can help them solve problems in their work;

2. outstanding engineers will try to avoid doing useful work;

3. A good engineer will not just be satisfied with the job done, they will continue to think about exploring the best solution;

4. A good engineer will not be confined to thinking, to consider the issue more fully, to understand optimization solutions from a global perspective.

From this example we can see, a good engineer to solve the problem of performance may be hundreds of thousands of times ordinary engineer, a good solution can even help companies save millions of server costs.

Therefore, in the field of software engineering one hundred Stooges Zhuge Liang can not top one!

How do we as ordinary engineers to upgrade their?

Learn basic data structures, algorithms, operating systems theory, computer architecture, etc., to lay the foundation.

If you are a genius, faced with issues such as the above, even if you have not learned theoretical knowledge computer, even if you do not know the dynamic programming, binary trees, heap sort, may also be able to rely on intellectual superiority resolved. Unfortunately the vast majority of people are not a genius, so when you need to solve the problem with a variety of tools to do more with less. For developers, data structures, algorithms and mathematical knowledge it is in our hands tools.

To become a good engineer we need to calm down, sink, honest thoroughly understand the project you do. Do simple things, we have a chance to do more challenging work.

Many engineers complain that they have been doing business, no challenge, do not feel the growth. But the fact is it really? Too often our business needs like this pavement questions, seemingly simple actually want to do, it takes considerable effort behind. Even usually do business is really very simple, we can not think about it, I realized the code is there a better way? Face similar business whether I can improve efficiency? Bug out whether online can be collected online Log quickly locate and solve the problem? Are you various frameworks used to develop their own projects in really understanding the principle, really learned to turn the Code to achieve these excellent framework? Take the Android development, the various open source frameworks such as RxJava, Retrofit, OKHttp, ORM framework, hot repaired frame, plug-in framework and so on, if you really had to seriously study it again, I believe the industry has been far more than 90% the engineers.

Where the gap between us and excellent engineers in Android?

At the same time there must be at work not afraid to lose attitude, take the initiative to take on more responsibility; do more often means accepting more challenges, get more training opportunities.


Systematic use of fragments of time to learn

A lot of people opposed to the fragmentation of learning, but I do not entirely agree with this view. Fragmentation of time can be used both fragmented learning, it can also be used to make a systematic study. Many people expect to be able one day, there is a large time, good, systematic knowledge of the computer catching up again. So buy Introduction to Algorithms, in-depth understanding of computer systems and so on classic books at home, waiting for the day to have a large time, take a bath, sat to learn. But soon learned soon to be interrupted by other things, the results come back again next time. Finally, often just before dozens of pages repeatedly read a book many times, in fact, this is the real fragmentation of learning.

The so-called systematic use of fragmented time learning means learning program to develop a good sound, make good use of every scrap of time, such as the way to work, such as the time the bus, the subway ride time, queuing time, even squatting toilet time to according to plan, improve the system of learning.


Continuous learning, insist on reading, to maintain output

Technology update too fast iterative, complex computer science is far from the school in a few years will be able to completely and thoroughly, which requires us to maintain continuous learning. But a lot of people tend to leave school after never being eight children to learn too, crossed the electricity, which is why we will be graduating after the rejection of those outstanding engineers reasons farther. And I think the best way is to insist on continuous learning to read. Look! Excellent engineers even hanging from the brine must adhere to read! ! !

Where the gap between us and excellent engineers in Android?

In addition the knowledge learned only the output came out, is the real learned belly. To others about the knowledge, writing and so on are all good knowledge output.


Exercise their comprehensive ability

To become a good engineer, the light has excellent technology is not enough. A job well done study section is often a person's overall ability. Good presentation skills, excellent meeting organizational skills, the ability to push things, and so are the personal maturity that we need to deliberate and exercise training on the job. Take skills, if that is lacking on their own expression, you can by writing, technology sharing initiative to do so on the way in the team to exercise their own. Sometimes, do not force yourself one you do not know in the end how good!

Written in the last

As a technical rookie to write such an article is a bit ashamed. And considered himself set a tone, and we encourage each other well, so that can supervise their own progress.

Oh, right! Another point! ! ! Excellent engineers are not holding the phone to sound a brush shake a night. 23333 ~


Thank you for patience and ability, I read La miles long-winded article

Here I also share a copy of your favorite Android learning PDF + architecture + video + interview source document notes , as well as advanced technical architecture Advanced Brain Mapping, Android interview with thematic development, advanced materials advanced architecture to help you learn advanced upgrade, we also save time searching online information to learn, you can also share with close friends studying together

If you have a need, you can point like + comment , add me prestige: 15388039515 free access
Where the gap between us and excellent engineers in Android?

Where the gap between us and excellent engineers in Android?

Where the gap between us and excellent engineers in Android?

Where the gap between us and excellent engineers in Android?

Guess you like

Origin blog.51cto.com/14573572/2449852