Self cultivation of embedded Engineer



The first article of the blog Garden is a beginning. This article summarizes some of my experience as an embedded Engineer in recent years and shares it with novices who have just started or are ready to join the industry!

First of all, I want to say that students who are embedded, regardless of their background, are basically computer science, electronic information and communication majors. Just graduated undergraduate students, learned knowledge, famous school and non famous school in the starting point is not much different, we are learning in the campus are several subjects, read books are almost the same, if not very small contact computer code, then the amount of code when graduation is almost the same.

For engineering homework, the requirement for academic ability is not so high. As long as you have certain learning ability, the technology is easy to master, so you don’t have to be self-confident about your education background.

For embedded software engineers, they are generally divided into two categories: Embedded Linux and embedded microcontroller. I will only talk about the part of microcontroller, and the part of Linux will be discussed again.

1、 Four stages of cognition

I don’t know

In the first year of working, it’s basically a learning process, and it’s difficult to produce effective output. This stage is to complete the identity transformation from an unsophisticated graduate to an enterprise employee. If you have been exposed to a lot of code on campus and have seen code at a level similar to Linux source code, it’s still very useful for you to learn quickly.

At this time, the code you wrote can also correctly light up an LED light, which can meet the needs of the boss. But in the future, it must be miserable. To put it mildly, it is “like shit”. these“Don’t know you don’t know”You think you’re doing well, and you may occasionally come up with the idea of “will this code be better written like this”.

binge-watch Some people, instead of letting the idea slip away, follow the idea to find the answer of “will this code be better written in a different way?”.

I don’t know

There are no more than three ways to find the answer: ask other people (including search engines), read a book and read the source code.

Of course, you can ask others, but you can’t always ask others, and others may not be able to solve everything.


You will be scared, you want to find a book to suppress shock, casually turn, even find yourself“I don’t know this”, “I don’t know that”

It’s also a good thing, at least you already know you don’t know.

Asking people is the fastest and most specific; Read the source code can not be achieved overnight, master’s code I and other ordinary people are just beginning to understand, it doesn’t matter, slowly, read several times; Reading is the most systematic. It would be better if you could read the specific chapters with questions.

Now, you have the motivation to learn. What you need to do is to start filling the knowledge gap. What are you waiting for? Let’s start!

3. Know what you know

Among the three ways listed above, the most systematic and effective is reading. I recommend several books here.

For the language level, of course, the most commonly used language is C. for example, Tan Ben’s “C programming” only introduces grammar, which is misleading. We should never read it. these


environment Note that these two books are very thick. Don’t force yourself to read them all.

The next step is to look at your major. Your company always has a specific direction, such as audio and video, image processing, home appliances, etc. from the security industry of Internet of things, of course, I pay most attention to embedded hardware and software, network, and security technology, so I need to look for books in these three aspects.

3.1 software and hardware

Do software engineer should also know some hardware knowledge, analog electricity, digital electricity or to understand the basis.

The hardware architecture uses arm more. It is recommended to read Joseph Yiu’s “arm Cortex-M3 and cortex-m4 authoritative guide”, and then the chip Manual of each chip. I still remember the feeling of reading the chip manual for the first time, “heavenly book!” I can’t understand what it’s written. Later, I found that all the chip manuals are the same routine. As long as I read one manual, I can read the others very quickly.

I also recommend that you learn some FPGA knowledge and try to do some simple hardware design with Verilog, which will let you have a deeper understanding of the working principle of hardware.

Operating system is the foundation of all software. For the study of embedded operating system, we recommend Zuo Zhongkai’s “FreeRTOS source code explanation and application development” and the source code of FreeRTOS and RT thread.

3.2 network


Next, I can see the implementation. I use LwIP more often. I recommend reading Zhu Shenglin’s embedded network and watching it together with LwIP source code. After reading this book, you can see “TCP / IP detailed explanation Volume 2” and “TCP / IP detailed explanation Volume 3”. These two books are also the works of W. Richard Stevens, a god level scientist. They are super thick, so don’t force yourself to read them all. Read them selectively.

3.3 security technology (change to your own field)

I only recommend an introduction to cryptography. Jiechenghao’s graphical cryptography is easy to understand, but not particularly in-depth. It is suitable for beginners. For others, we need to find more specific information. Readers who are engaged in various fields naturally know what books to look for.


Many books are translated. Some of them are not accurate and easy to read. I don’t have a good way. I can only advise you to calm down and read them slowly, repeatedly and several times;

I hope you can practice while reading. What is said in the confirmation is right. Only after practice can you internalize yourself.

Why do you want to be familiar? If you want to know what else this book says, you can read it purposefully if you have similar questions in the future.

In my opinion, there are three stages in learning one thing. These three stages may not be linear. In particular, the third stage may be achieved after you suddenly realize it for a long time.

3.4 the three stages of really knowing

3.4.1 be able to use


3.4.2 understanding how to achieve

After you know how to use it, you need to learn how to implement it. At this time, you need to look up more in-depth information and see more in-depth code.

3.4.3 understand why

The third stage is that you not only need to know how to realize it, but also need to explore why it is so realized.

This is the third stage of cognitionConstant learning, real learning。 This stage should run through the whole career. When someone asks a question, your first reaction is “know you know”, and then search for the answer in your mind.

4. I don’t know

After buying and reading a lot of books, you form the habit of buying books. When you see a new book and find a book you haven’t read, you want to buy it.

catalogue At this time, you don’t have to blame the author. Instead, you should congratulate yourself for coming to the fourth level of cognition: “don’t know what you know.”.

theseWhen you are solving problems, you don’t know that you are already using the knowledge you have learned!

For the cognition of embedded domain, I introduce a simple question,This is what I think is the ultimate problem in embedded technology, this problem can know which state you are in, and this problem is enough to make you “study all the time and work hard”. If you can explain this problem in detail, your embedded ability has been perfected, at least you won’t encounter problems that can’t be solved at the technical level.



2、 Upgrade to fight monsters


Of course not! This is just a small step in the long march. In my opinion, this small step generally takes about 5-10 years. Some people just have an idea, but never raise their feet.

It’s never too late to take this step. The most difficult thing is that you have the courage to lift your feet.

What kind of world will it be? I quote Dr. Wu Jun’s five level division of engineers to illustrate your career planning.

As shown in the figure, Dr. Wu Jun mentioned the division of level five engineers in many of his books. As we just said, after learning and solving problems, you can basically say that you are at the bottom of the pyramid.

Level five engineer, hello. Look at this tower. It’s not high at all.


At this time, what you should do is not just immerse yourself in the ocean of technological knowledge, because we are engineers, not scientists, after all. We should start to use knowledge to solve practical problems and then solve bigger practical problems.

To solve a bigger practical problem, you need to move forward to the level 4 engineer. At this time, you not only need to understand the technology yourself, but also need to find a way to give your “fish” and “fishing” to others as soon as possible.

You also need to learn management knowledge and master communication skills with superiors and subordinates. How to promote rapid progress of yourself and your team is your challenge.

For Level 3 engineers, in addition to the ability of level 4 engineers, they also need to be able to keep up with the times, predict the market, understand marketing, not only make products, but also sell products.

Secondary engineer refers to the ability to make things that have not been done before. The world will be a little different because of this. Dr. Wu Jun cited these two people as examples: Deng Feng, founder of Aurora Borealis venture capital, and Jeff Dean, inventor of Google cloud computing. I have limited experience and know little about the embedded field. The people I can think of include Wang Tao of Dajiang and Liu Zihong of Rouyu. Here I boldly and aggressively put them in the second level.

The first level is the people who started an industry, including Edison, Ford, bell and so on.

You should be curious what level I am in. I set myself at level 4.5. At present, I can independently complete the tasks assigned by my boss. I am also working hard to improve the overall efficiency of my team and produce more creative results.

3、 A little advice

Due to my limited practical experience, I am also exploring how to climb this tower. I dare not define it arbitrarily and lead people astray. I will just talk about some personal views below. The right is to throw bricks.

3.1 extensive reading

Students majoring in computer science should not only study technology, but also look at economy, politics, biology, astronomy, geography, art, medicine, history and so on. We should know that the knowledge of computer is only a few decades old. In the long history of mankind, it is just a drop in the ocean.

People who read more miscellaneous books have better understanding than those who read less. If they read more, they will have the ability of analogy.

For example, for “Object-Oriented”, if you know Aristotle’s realism and his exposition of “Commonness” before learning object-oriented, you will understand it very quickly. You don’t need teachers to teach ideas at all, just learn grammar, and you will inevitably mutter in your heart, Is the object-oriented designer inspired by Aristotle’s “commonality” to design such a software development method?

3.2 climb slowly and cleverly

Climbing the pyramid is the process of saving. Many people are impetuous and learn only half of the knowledge; Some people think they are smart and always want to find a shortcut; Some people work hard, but they can’t do it.


As long as a person has the ability to learn, he can solve most of the problems he encounters. The difference is no more than the speed of learning, the speed of saving and the speed of saving.

Some save faster. N years later, they are called “gods”, and the proportion is 1%;

Some people save more slowly. After n years, they are called “cattle”, and the proportion is 9%;

Some people have not saved much. After n years, they are still “farmers”, accounting for 90%.

N ≥ 20

I’m sorry, I made up the above proportion. I deliberately increased the proportion of “agriculture” in order to be alert to myself, and I hope readers will be alert not to become the 90%.

The “shortcut” to 9% is to accumulate slowly. As long as we keep learning and accumulating, we can achieve it.

As far as I know, the annual salary of a good engineer will be more than one million US dollars (stock + Bonus). Note that this is only an engineer. If you can reach the best level, don’t force it.

3.3 multiple refactoring

Summary is a good way to accelerate progress and smart progress. For programmers, the best summary of code is refactoring.

Refactoring code can bring at least two benefits. One is to optimize the code for the company, which is easy to maintain. If someone else takes over in the future, it will be faster to start; The other is for individuals, who will benefit from refactoring. This is the best way to learn. If you have written 10 projects without refactoring once, the data structure and module division method used in your 11th project may be the same as the first project.


Refactoring is not only to optimize the past, but also to guide the future.

This is the way to climb the pyramid, constantly repeating: Learning — practice — summary, this closed loop.

At the end of the article, I hope you can get more or less inspiration from it.