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”. But you don’t know that yet. You even know that“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”.

Everyone may come up with such an idea. The difference is that some people go to do something else as soon as they think about it. It’s also a day to brush dramas and play with mobile phones; 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.

When you start to read the source code, you will find that you can’t understand the source code. If you open an open source project, you can’t understand a line.

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. I recommend that you read K & R’s C programming language, Bryant, R.E.’s deep understanding of computer systems, Andrew Koenig’s c traps and defects, Kenneth a.reek’s C and pointers, and linden, p.v.d.’s C expert programming. These are enough for the foundation of C language.

After reading these, you can at least understand how computer programs are generated step by step, and have a more detailed understanding of the language and the system.

At the same time, you can read some practical books, such as advanced programming in UNIX environment and unix network programming by W. Richard Stevens, to practice what you have learned in language, to understand compiler compilation process, basic linux commands, and firmware cross compilation. 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

First scan “TCP / IP detailed explanation Volume 1”, these undergraduate courses have been learned to scan again, did not learn to take a careful look.

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.

For these books, I hope you can read them with problems, close them when you solve problems, only read the parts you are interested in, and occasionally turn over other chapters to make you familiar;

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

For example, those network interface functions, hardware driver interfaces, you can use them to write bug free code, complete the project task, that is 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.

Buy a new book, with the passion of learning, look through the catalog, scan it, find the chapter you are interested in and start to read. While reading, you find that, eh, this is not the principle of XXX, which was introduced in the book of XXX. How did the author change his words and say it again? This book is really superfluous to buy. 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.”.

You don’t need to read too many basic technology books any more. When you come across a problem, you naturally have your own solution. You unconsciously integrate the knowledge you have absorbed from many books, arbitrarily combine them, and put them into practice. These are all natural things,When 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.

“There are two embedded devices a and B, which can communicate with each other through the network. A has external keys and B has small display screen. The two devices implement such a program: press a key on a keyboard, and B display screen will display the key value.

I would like to ask: from the moment a presses the key to the display screen B, you can see the key value. How does the data of “key value” transfer from the key of a to the display screen of B?

2、 Upgrade to fight monsters

After writing so much, can you be the best in the world?

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.

At the beginning of the article, I said that engineering homework is no better than scientists, whether it’s a famous university or not, and whether it’s good or not is not a big problem. Think about your undergraduate education is only four years, and four years is just a little bit of basic knowledge, and work is a life marathon, not just four years.

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.

And if you refactor even once, you will be more comfortable when you write down a 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.