Author: HannahLin
Source: medium
Today, I want to talk to you about the abilities and characteristics of the "true senior engineers" around me, and what direction should an ordinary engineer work towards.
Practical ability
Since you are an engineer, whether you are working on a company project or outsourcing yourself after get off work, the most important task is to realize the idea in your mind by writing code, so practical ability is absolutely necessary. Just like Linus Torvalds ' famous saying "Talk is cheap. Show me the code" , it is useless to say that, only when the code is written, it can be regarded as a real completion of a thing.
What is the level of practical ability to be considered "senior"? There is no standard answer to this, but according to my observation, senior engineers are often very experienced in actual combat. As long as your needs are not too strict (hope the availability of the system has ten 9s and the like XD), there is almost no need to do it. something out .
Any ticket for them is probably only two kinds of "this is easy to get it done soon" and "I need to spend some time researching this thing", and they can usually work independently and won't suddenly come to you and ask you "Why can't my npm install run", "I haven't written a Dockerfile, can you teach me?".
Having said so much, how do you train your practical ability?
Regarding this issue, my idea is to keep learning new things and really apply them in actual combat.
For example, I am very familiar with writing Restful APIs with Node.js , so I can try GraphQL next time for the Side Project or simply switch to Rust , although the compiler will make it very painful to write Rust for the first time (want to smash the computer. The bad kind), but when you write it, you will find that "it turns out that there may be a data race in this place!", "it turns out that there are not only two processing methods for asynchronous synchronization, callback and promise", and these things will gradually improve after a long time. Your technical depth and breadth .
With sufficient technical depth and breadth, even if you encounter some untouched things in the future, it only takes five to ten minutes to understand what he is doing, and even guess the underlying technical principles, so When a need comes in, even if you are not familiar with it, you can write it out with more confidence.
Willing to spend time designing
Although senior engineers know how to write code, in addition to writing code, I think their greatest strength is actually design . The "design" here does not refer to the design on the UI, but the "system design" and "technical selection" before the actual start of construction.
Many senior engineers around me don't spend too much time writing code at work, because for them, "pre-design" is far more important than "practice". Once the wrong design starts, it may take the design stage It takes ten or even a hundred times as long to make up for it.
Just like a project I was helping the company a while ago, that project originally started in 2016, the year Python 3.6 was released, but the project was actually developed with Python 2, which has been officially abandoned, resulting in many later The suite could not be updated, and the entire project could not be maintained, so a new version had to be written.
Therefore, before really starting to practice, good senior engineers will carefully confirm the requirements, design the database schema, think about the back-end architecture, etc. After these general directions are determined, they will start to write the first line of code. I really appreciate this way of working with the "big direction first, and then the small details".
How to enhance the ability of system design?
In fact, I am still a novice in the aspect of system design, so I can't give a very clear answer. I think that in order to design the system well, in addition to having a certain technical depth and breadth, the most important thing is to discuss with others , otherwise it is easy to be limited by your past experience, and you will not be able to think of a better method.
For example, when I first started the Side Project many years ago, I used AWS EC2 to open a machine to run the API server. Because I didn't know that there was a service like S3 that could put static files, the data received by the server were all placed directly on the machine. And the price of doing this is that my service can't scale horizontally. If the performance is not enough, I can only upgrade to a better machine. Looking back now, it's really silly and naive XD.
Therefore, I think that before I have a complete grasp of the architecture, I should try to discuss it with others as much as possible. If there is really no discussion, I can read more articles and books, like I saw "System Design 101 - Evolution of Large-Scale Systems a while ago. " and "Introduction to System Design" are very good, there are many things that are very vague but can be understood at a glance.
After all this knowledge is prepared, you will accumulate experience through actual combat . As long as you carefully design every time you develop a new function, you will definitely be able to feel the development speed, deployment process, scalability and other aspects of each design. Whether it is good or bad, the system designed will become more and more complete over time.
Teams come before individuals
This is the most admirable thing I have observed from his "true senior engineer". A good senior engineer will think about how to improve the efficiency of the entire team, not just individual performance.
As far as documentation is concerned, each company will have its own development process, deployment process, where to put AWS passwords, and so on. And the senior engineer around me is happy to organize these things into documents. After all, if there is no document, I will ask him XD, so taking the time to write it not only saves my own time, but also saves the time of the whole team.
In addition, they are also very willing to write automated tests. Of course, it is impossible to test all the tests, but if the parts in the system that cannot be damaged can be protected by tests, then other colleagues in the team can feel more at ease when developing, and they will not Some people have to be dug up to fix bugs on holidays XD.
In addition to writing documentation and testing, in terms of technology selection, they also prioritize the entire team and carefully consider the benefits and learning curves of each technology.
For example, because Docker is easy to learn, you can learn to write Dockerfile in one afternoon, so the CP value of using it for deployment is very high; but if you use Rust to write API Server, although it can improve performance and save the company money Machine money, but firstly, it takes more time for new people in the team to get started, and secondly, it is really not easy to find engineers who can write Rust, so it is obviously not a good solution.
Is there anything else to do?
Although "putting the team first" sounds abstract, it is actually not difficult to do. As long as you have the mentality of pushing yourself and others, when you do anything, think about "Will others have the same problem?", and then Take the time to help out, it's not far from a senior engineer
Summarize
To become a senior engineer, it is definitely not about seniority or enough Leetcode. In addition to solid technical skills, good senior engineers must also be mature enough in communication skills and mentality (I am still working on this aspect), in order to lead the entire team forward together.
The above are the senior engineers I observed from my side. Of course, there are many kinds of senior engineers, and some of them will have their own special functions (especially psychics, bugs, etc. XD), so everyone has Sora can also observe more about the strengths of the seniors around him, and maybe learn a lot from them~
The bugs that may exist after the code is deployed cannot be known in real time. In order to solve these bugs afterwards, a lot of time is spent on log debugging. By the way, I recommend a useful bug monitoring tool , Fundebug .
Original: https://larry850806.medium.com/
comminicate
If you have dreams and dry goods, you can search for [Great Move to the World] on WeChat and pay attention to this Shawanzhi who is still washing dishes in the early hours of the morning.
This article GitHub https://github.com/qq449245884/xiaozhi has been included, there are complete test sites, materials and my series of articles for interviews with first-line manufacturers.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。