How to become a better engineer?

Michael Malis, an early employee from Heap (a company that mainly provides user data analysis architecture for enterprises), gave his daily training methods on how to become a better engineer:

Read papers;

Learn a new tool;

read;

Screen recording.

Among them, the fourth point is more interesting. If you are interested, you can skip to the fourth part to see how it is implemented in detail. The following is the text.

My way to become a better engineer is to establish a training system. There are some fixed exercises in this system, which I will do every week. There are two very clear goals in designing this training system:

Learn to solve problems that will not be solved before;

Learn how to write programs faster and better.

The training plan is mainly composed of four exercises, each of which will help me move towards the two goals above. The four exercises are:

Read papers;

Learn new tools;

read;

Record the screen when writing a program. Then look back and see if you can write faster.

Below I will introduce in detail how I did it. I want to share the details of some exercises and the benefits I have gained from them.

Read papers

The goal of this exercise is to expand CS-related knowledge. In this, I found that there are two direct benefits. The first is that some papers can change the way I think about some fixed problems. For example, the paper The Tail at Scale verifies the nature of the counter-intuitive long tail delay.

Among them, what I think is more interesting is how to run a request on a large number of machines affects the delay. The author studied experimental data of a Google service. This service splits the request and distributes it to different services.

They evaluated the situation with data and distributed the request to 100 services. The author found that if you measure the time to get a response from 100 services, more than half of the time is spent waiting for responses from the last five services.

This is because the slowest 5% of requests are much slower than other requests. The paper also gives some methods to reduce the long tail delay. I found that these methods can also be used in some work on my side.

The second advantage is that I find that reading papers allows me to integrate knowledge of different systems. For example, Google's distributed database Spanner.

Spanner uses many different technologies, such as Paxos, two phase commit, MVCC and predicted locks. By reading related papers, I can build an understanding of these different technologies. This allows me to understand Spanner as a whole and compare the pros and cons of Spanner with other systems.

The papers I read mainly come from the references of the papers I have read before or the cover articles of Morning Paper. There are also many papers worth reading in the references of the book Designing Data Intensive Applications.

Learn new tools

One of the easiest ways to solve the problem is to use a tool to solve this problem. This exercise is to choose a tool, and then learn it.

Usually my practice process is to install tools, practice a few tutorials, and then simply look at the manual. The tools I have learned this way range from bash commands such as JQ and Sed to distributed systems such as Kafka and Zookeeper.

Learning bash commands has improved my efficiency in solving daily problems. Similarly, learning different distributed systems allows me to understand how to use different tools for different problems.

read

I use books to supplement the knowledge that I can't get from the thesis or learning tools. The topics of the books I have read are quite wide. For example, recently read:

Refactoring-This book made me understand what good code is and how to turn bad code into good code.

Getting Things Done-This book let me understand how to prioritize work and how to track work progress. It helped me establish a system to confirm the priority completion of important tasks.

The First Time Manager- I happened to be a team manager recently, and I need to coordinate different teams to work together and host team meetings. This book helps me understand the basic principles of management.

Screen recording

This training is my favorite. This exercise has also changed my problem solving the most. Athletes often watch their own videos to make themselves better.

So I decided to do the same to improve my programming ability. The experiences I learned from my own screen recording include:

It can help you test the code as you write it. This can reduce the time spent on DEBUG by quickly locating the bug. If there are no bugs in the previous code, then the bug must be in your newly written code.

When DEBUG, it is very necessary to add functions specifically for the object to be DEBUG. For example, in the previous toy project, I want to write an LRU cache. Wrote a bug, it cannot clear the correct element. At this time, I can quickly add a function to print the current cache status to see what went wrong. Then I can look at the difference between the expected state of the cache and the actual situation now. This allows me to quickly locate the bug.

Before you start writing code, it is very effective to spend five minutes deciding the direction. There are two advantages to this. The first is to be able to confirm that the direction is correct. More importantly, this can force yourself to choose a single direction. Because after watching my video, I found that I often hesitate for a long time in choosing the direction of realization. In fact, both directions are OK.

All these experiences are now obvious when looking back. But before I watched the video and found out where I was spending a lot of time, I was not able to systematically sum up these experiences.

My steps for doing this exercise are:

Record some videos of my writing programs. It can be at work, or when writing questions on a website such as LeetCode.

Watch the video at ten times the speed and record what I am doing at each moment.

Then count the time spent in each of the big categories. For example, how much time was spent on DEBUG, and how much time was spent on writing functions.

Look at the categories that took the longest time. Then carefully study why it took such a long time.

Suggest some ways to save me time. There are some ways that I can structure the code, and then I can write less code or find bugs faster.

I highly recommend recording the screen when writing code. This is the easiest way to keep making small changes to make yourself more efficient.

I have adhered to this training strategy for almost a year. I feel that I have changed a lot. I learned a lot about systems and tools that I haven't learned before.

The problem is solved now faster than before. I hope you can think about these exercises and try them yourself.

Round Smart Watch

Round Smart Watch

Round Smart Watch

everyone enjoys luck , https://www.eeluckwatch.com