Embedded learning and career development

Source: Internet
Author: User
To some extent, this article provides our development direction and tips. here specially reprinted. Original: http://blog.csdn.net/coolbacon/article/details/8521841 recently my work is too busy. My friends around me asked me how to learn embedded technologies and make healthy development in this industry. I have never been able to make a system answer. I want to write an article to answer this question thoroughly.

Embedded. This is a term. In my opinion, the embedded system is a computer system that customizes software and hardware to meet a series of specific application requirements. Embedded systems widely recognized in China are defined as: Application-centric, computer-based, software and hardware can be tailored, dedicated computer systems that meet strict requirements on functions, reliability, cost, volume, and power consumption of application systems. IEEE (International Association of Electrical and Electronics Engineers) defines embedded systems as "devices used to control, monitor, or assist in operating machines and equipment ". Original article: devices used to control, monitor or assist the operation of equipment, machinery
Or plants. (This section is from Baidu) from my personal understanding, to the general definition, and then to the authority of IEEE. We can see that the embedded system is a computer system first. We cannot ignore this issue. Since it is a computer system, do we need to learn the basic theoretical knowledge of embedded computers? For example, the compilation principle, data structure, operating system, discrete mathematics, and computer system architecture. I personally think that it is very difficult to learn to run. Many people do not realize this. In addition, many schools in China have not trained embedded majors and have no corresponding talent output. Many people who study embedded systems are transferred from electronics majors, automatic control majors, and so on. This transformation also represents a huge defect in theory. If you want to ask, there are several sorting algorithms, I am afraid I only know bubble and Hill, I don't know the heap sorting, fast sorting, and base chain sorting algorithms, and I don't even know the internal sorting and external sorting. The search algorithm only knows the basic 2-point search. No knowledge about tree search algorithms. What should I do? Maybe many programmers who work in the industry have excellent professional skills and think that this is not important. I can only say that you have a good life and do something more specific than theory. In fact, if you grow from an embedded programmer to a system designer or a higher technical position, you need to look at the problem at a deeper level. The theory has played a very supportive role.

For example, a common microwave oven control system is designed. To be honest, this code should be very simple. However, as a refined designer, we should not only consider whether the requirements are fulfilled. It also analyzes the space and time complexity of the entire program and reduces the complexity of the entire code. This further reduces the requirements of software structures and algorithms for processors and saves costs. Generally, the cost is not only the BOM cost, but also the labor cost, operation cost, development cost, and maintenance cost. All software systems must be tested. But how can we better test a piece of code? This question cannot be answered. I want to sell a customs first. I will go back and detail it in another article. Especially for Embedded Code, although the testing method follows some practices of PC, there are still many engineering restrictions. It is difficult to do this. Marx said that all savings can be attributed to savings of time. The code structure is simple and the space complexity is small. It also means smaller engineering quantities, shorter testing time, and more stable product quality. If it is a theoretically strong product, the vehicle navigation system. The path search algorithm of the map. It is not easy to search for positioning locations and optimize the classification loading of maps. It also requires a solid theoretical foundation. Many college students who have just left the school have returned their related knowledge to their teachers. In fact, I often ask new colleagues in the company what is the idea of designing algorithms? This is a solution to the problem from the computer perspective. Many new people who graduated from computer science cannot answer my questions completely. If they are disappointed, they would like to say that experience is very important! However, knowledge is more important than experience, and methods are more important than knowledge. Accumulate experience under theoretical guidance. Reduce the acquisition of knowledge from experience, reduce the situation of experiential learning, form a systematic approach to understanding and analyzing problems, associate theory with practice, and test truth through practice, experience must be interpreted theoretically.

So,This is the first suggestion. We hope that our embedded friends can learn all the basic computer courses systematically.

Let's look at the embedded definition, which is a relative concept. What computer systems are not "highly customized software and hardware computer systems? PC. Not strictly speaking. Embedded systems have many engineering features. Compared with PC systems, if we regard PC systems as a fully standard "Big embedded system", we will use Dapeng bird to describe them. Then, the smallest bird like a hummingbird, a common system like a sparrow. It is easy to understand. Technically speaking, the knowledge and difficulty of PC systems are all N orders of magnitude higher than that of general embedded systems. However, PC systems have developed earlier in computer history. Therefore, the extensive importance of its intellectual input, perfection, and application is unmatched by other system platforms. However, because of its long development, its platform's encapsulation stability is very high. Operating system level, supporting software level, application software level. Especially at the application software level, some platform-independent software rarely involves the knowledge of the operating system and some internal principles. For example, Javascript development in a browser basically does not involve operating system knowledge, but is affected by different browsers. Java, for example, only involves a small amount of system platform knowledge; even in the C/C ++ language, developing applications is an API application. The operating system involved is only the tip of the iceberg. It can be seen that the excellent encapsulation of the PC platform greatly simplifies the complexity of the problem, so that developers and applications can focus on their own business, and improve development efficiency. The embedded field is not so lucky. It is highly customized for applications, resulting in efficiency and application-oriented features. Too many encapsulation layers will inevitably hurt the efficiency. At the same time, the scale increases, and the test becomes complicated. The development cycle is longer. Therefore, the boundaries of embedded hierarchies are less clear than those of PC systems, and the encapsulation considerations are less comprehensive. To do the same job, you need to know more about the content to do better. If we need to compare embedded systems with PC systems, I think PC system development is sometimes more difficult than embedded systems. Because of the complete encapsulation, PC development has a low threshold, but it is much more difficult than embedded. Because embedded systems need to know a large number of things at the beginning, the entry threshold has become relatively high. Looking at these things, a large part of PC systems and embedded systems overlap.


So, second, I recommend that you read "Programmer self-cultivation" (Yu jiazi/Shi fan/PAN aimin).First of all, there is no difference between embedded systems and PC development. Half of them are related to specific projects. That is to say, there is not much reason to follow the process. If you have to ask why, it is actually some engineering requirements. Some embedded applications may be slightly different from each other, but the general process is similar. Having a good PC development skills and understanding of these processes, there should be no special obstacles to developing embedded systems. Second,This book is intended for PC platforms,Many things in the book are unique to PC platforms, such as dynamic loading. However, understanding the dynamic loading will also provide an intuitive comparison between the bootloader Loading application and the operating system. Because it is not for the embedded platform (I have not found a book dedicated to embedded), many things need to be realized in the embedded system. In addition, the description of some embedded problems is not detailed enough, such as the link script and Abi. These problems are well encapsulated on the PC platform. Therefore, some problems need to be further explored in the embedded field. This book is very suitable for the introduction of embedded systems.

The biggest problem of embedded systems in the engineering field is that software and hardware are both mature at the same time, and it is easy to kick the ball when problems arise. Debugging is very interesting here. The positioning of embedded problems is complicated, especially the complicated problems involving hardware and software. First, embedded debugging methods are relatively simple. Compared with the PC platform, the stability and reliability are reduced. This includes not only debugging Platform issues, but also the impact of some debugging methods on the Code, such as changing the code running time and changing the dynamic behavior (frequency and trigger time difference) of the code ). Embedded systems must have a comprehensive understanding. This section describes the design methods, design objectives, hardware design, and software design. The deeper the understanding, the more helpful the problem is. This involves one of the biggest problems, that is, the vision of many new students on their own: To Connect software and hardware.
I am also excited about this goal. When I am recruiting students, even some people with work experience say this goal. This goal is not wrong, but the two parts of computer software and hardware are very extensive fields. The goal is indeed a little higher. So here, I often give my colleagues the following advice: If your major is electronic, you can focus on the hardware, and the software is only used for both considerations, I learned some basic knowledge about C language and wrote some small code. I should not focus on full-time programming. If you are a computer professional, I suggest you focus on the software, learn to understand the schematic diagram, and understand some general functions of the circuit. Both sides are bottomless. If you are all connected, you really need some great skills. Here is just my suggestion. The reason is also very simple. people manage their own strengths and circumvent their weaknesses. A friend once asked me questions about embedded systems and wanted to become a person who can communicate both hardware and software. I want to plan my career. I will ask him a few software questions, such as the design idea of algorithms, the types of sorting algorithms, the types of search algorithms, and the nature of the operating system, I have no clue how to answer the basic questions such as mutex and multithreading. However, when asked about the circuit knowledge, KCl, kvl, Competitive Adventure, analysis methods of Op-ops, basic knowledge of Signals and Systems, the answer is like a stream. Such people focus on software, which is a great waste of resources. When you get started with the software, you may have forgotten the hardware design knowledge. Then, the business is facing a higher level of pressure. The software needs to learn a lot, the basic theory is poor, and everything is hard to learn. Hardware debugging and experience/accumulation are also difficult to make a difference. After a few years, you can only play a secondary role, with less energy and business frustration. You can only turn yourself into a zombie.

The Project Manager, Technical Director and other technical management positions are mentioned here. First of all, the two positions in various companies are different, but generally they are management-oriented. Since it is management, when you cannot use others to manage you, you need to learn management theory when you get the experience to manage others. Such as PMBOK and cmme. Take a good look at the excellent engineering practices in the industry, and take a good look at how the project objectives are aligned. These theoretical knowledge are the most effective means to guide our practice. Do not expect you to be a cool man, or create new theories. Let's take a look at the history. Every industry has a great startup. At that time, its level was relatively low. Then, after a period of development, there was a cool man who expanded the industry. This is not only because of the cool, but also because the industry has accumulated for a certain amount of time, so that such a cool can further expand the industry. This is an objective rule for the development of things, and we must respect it. However, in China, technicians are a special group of people who are proud of their technology and lack the proper respect and integrity for leaders who do not know the technology. It is easy to cause failure of government decrees. The Project Manager and director should have better technology to get the most recognized by their subordinates.


Therefore, the third point is to integrate your professional information, knowledge background, and reasonably choose your career goals. Find your own development space in the embedded field.


Finally, there are some miscellaneous which I will not classify.There are a variety of embedded learning methods.However, the best way is to turn to computers. Computers are the first teachers and the second teachers. Don't expect you to become a cool man. Learning knowledge is actually a process of building an understanding of the knowledge. Don't listen to Daniel's explanation immediately. First, you must have your own understanding. Even if it is wrong, I should identify it. You can learn more through Daniel's explanation and correct and adjust yourself to get twice the result with half the effort. If you do not have your own thinking, you are just a parrot, and lack the ability to be creative and face problems independently. Over time, it was terrible.


Don't try to get a high salary by taking all-around pills like Silk after several months of study at a training institution.If so, there are more people with time and money in the world. Why can't they use this method to become more competent and earn higher incomes? There are many connotations and extensions behind high salaries. These connotations and extensions include not only a little bit of knowledge and technology, but also attitudes and methods of doing things, and tenacity in the face of problems ...... Too many.In a word, when you want to make yourself stronger, you first seek comprehensive improvement in capabilities, not just a little bit of technology. Therefore, we must be steadfast in the face of such problems.The salary you ask is high, and the company has high expectations for you. Every company has special things that can be learned in a day or two, and it is not a substitute for technology. You can either end badly or barely complete the task, or surprise the four. You can do it yourself. If you think about it, your salary is not high or low. If you give yourself a little time, your company's expectations for you are low, and you can make some achievements, it is easy for others to look at it, which is conducive to your long-term development. There is still a lot of knowledge here. You must be cautious in your own life.


To learn embedded systems, you must be diligent. programming is a kind of physical and mental activity. This is common sense.The amount of programming in the 100,000 rows is the foundation. Write some complex algorithms, such as a *, tree, and so on. Then write some computer graphics algorithms to support up to 100,000 lines of programming with the goal of application software. Such strength can ensure that you are very skilled in the language used, and have a deep understanding of computer algorithm design and data structure, at the same time, you can be slightly familiar with the operating system APIs. If you can stick to this training to reach 0.3 million rows. Then it will be even better. It can lay a solid foundation for further industry development.


Let's have a simple chat. You are welcome to shoot bricks. Thank you. Recently, my work is too busy. My friends around me asked me how to learn embedded technologies and make healthy development in this industry. I have never been able to make a system answer. I want to write an article to answer this question thoroughly.

Embedded. This is a term. In my opinion, the embedded system is a computer system that customizes software and hardware to meet a series of specific application requirements. Embedded systems widely recognized in China are defined as: Application-centric, computer-based, software and hardware can be tailored, dedicated computer systems that meet strict requirements on functions, reliability, cost, volume, and power consumption of application systems. IEEE (International Association of Electrical and Electronics Engineers) defines embedded systems as "devices used to control, monitor, or assist in operating machines and equipment ". Original article: devices used to control, monitor or assist the operation of equipment, machinery
Or plants. (This section is from Baidu) from my personal understanding, to the general definition, and then to the authority of IEEE. We can see that the embedded system is a computer system first. We cannot ignore this issue. Since it is a computer system, do we need to learn the basic theoretical knowledge of embedded computers? For example, the compilation principle, data structure, operating system, discrete mathematics, and computer system architecture. I personally think that it is very difficult to learn to run. Many people do not realize this. In addition, many schools in China have not trained embedded majors and have no corresponding talent output. Many people who study embedded systems are transferred from electronics majors, automatic control majors, and so on. This transformation also represents a huge defect in theory. If you want to ask, there are several sorting algorithms, I am afraid I only know bubble and Hill, I don't know the heap sorting, fast sorting, and base chain sorting algorithms, and I don't even know the internal sorting and external sorting. The search algorithm only knows the basic 2-point search. No knowledge about tree search algorithms. What should I do? Maybe many programmers who work in the industry have excellent professional skills and think that this is not important. I can only say that you have a good life and do something more specific than theory. In fact, if you grow from an embedded programmer to a system designer or a higher technical position, you need to look at the problem at a deeper level. The theory has played a very supportive role.

For example, a common microwave oven control system is designed. To be honest, this code should be very simple. However, as a refined designer, we should not only consider whether the requirements are fulfilled. It also analyzes the space and time complexity of the entire program and reduces the complexity of the entire code. This further reduces the requirements of software structures and algorithms for processors and saves costs. Generally, the cost is not only the BOM cost, but also the labor cost, operation cost, development cost, and maintenance cost. All software systems must be tested. But how can we better test a piece of code? This question cannot be answered. I want to sell a customs first. I will go back and detail it in another article. Especially for Embedded Code, although the testing method follows some practices of PC, there are still many engineering restrictions. It is difficult to do this. Marx said that all savings can be attributed to savings of time. The code structure is simple and the space complexity is small. It also means smaller engineering quantities, shorter testing time, and more stable product quality. If it is a theoretically strong product, the vehicle navigation system. The path search algorithm of the map. It is not easy to search for positioning locations and optimize the classification loading of maps. It also requires a solid theoretical foundation. Many college students who have just left the school have returned their related knowledge to their teachers. In fact, I often ask new colleagues in the company what is the idea of designing algorithms? This is a solution to the problem from the computer perspective. Many new people who graduated from computer science cannot answer my questions completely. If they are disappointed, they would like to say that experience is very important! However, knowledge is more important than experience, and methods are more important than knowledge. Accumulate experience under theoretical guidance. Reduce the acquisition of knowledge from experience, reduce the situation of experiential learning, form a systematic approach to understanding and analyzing problems, associate theory with practice, and test truth through practice, experience must be interpreted theoretically.

So,This is the first suggestion. We hope that our embedded friends can learn all the basic computer courses systematically.

Let's look at the embedded definition, which is a relative concept. What computer systems are not "highly customized software and hardware computer systems? PC. Not strictly speaking. Embedded systems have many engineering features. Compared with PC systems, if we regard PC systems as a fully standard "Big embedded system", we will use Dapeng bird to describe them. Then, the smallest bird like a hummingbird, a common system like a sparrow. It is easy to understand. Technically speaking, the knowledge and difficulty of PC systems are all N orders of magnitude higher than that of general embedded systems. However, PC systems have developed earlier in computer history. Therefore, the extensive importance of its intellectual input, perfection, and application is unmatched by other system platforms. However, because of its long development, its platform's encapsulation stability is very high. Operating system level, supporting software level, application software level. Especially at the application software level, some platform-independent software rarely involves the knowledge of the operating system and some internal principles. For example, Javascript development in a browser basically does not involve operating system knowledge, but is affected by different browsers. Java, for example, only involves a small amount of system platform knowledge; even in the C/C ++ language, developing applications is an API application. The operating system involved is only the tip of the iceberg. It can be seen that the excellent encapsulation of the PC platform greatly simplifies the complexity of the problem, so that developers and applications can focus on their own business, and improve development efficiency. The embedded field is not so lucky. It is highly customized for applications, resulting in efficiency and application-oriented features. Too many encapsulation layers will inevitably hurt the efficiency. At the same time, the scale increases, and the test becomes complicated. The development cycle is longer. Therefore, the boundaries of embedded hierarchies are less clear than those of PC systems, and the encapsulation considerations are less comprehensive. To do the same job, you need to know more about the content to do better. If we need to compare embedded systems with PC systems, I think PC system development is sometimes more difficult than embedded systems. Because of the complete encapsulation, PC development has a low threshold, but it is much more difficult than embedded. Because embedded systems need to know a large number of things at the beginning, the entry threshold has become relatively high. Looking at these things, a large part of PC systems and embedded systems overlap.


So, second, I recommend that you read "Programmer self-cultivation" (Yu jiazi/Shi fan/PAN aimin).First of all, there is no difference between embedded systems and PC development. Half of them are related to specific projects. That is to say, there is not much reason to follow the process. If you have to ask why, it is actually some engineering requirements. Some embedded applications may be slightly different from each other, but the general process is similar. Having a good PC development skills and understanding of these processes, there should be no special obstacles to developing embedded systems. Second,This book is intended for PC platforms,Many things in the book are unique to PC platforms, such as dynamic loading. However, understanding the dynamic loading will also provide an intuitive comparison between the bootloader Loading application and the operating system. Because it is not for the embedded platform (I have not found a book dedicated to embedded), many things need to be realized in the embedded system. In addition, the description of some embedded problems is not detailed enough, such as the link script and Abi. These problems are well encapsulated on the PC platform. Therefore, some problems need to be further explored in the embedded field. This book is very suitable for the introduction of embedded systems.

The biggest problem of embedded systems in the engineering field is that software and hardware are both mature at the same time, and it is easy to kick the ball when problems arise. Debugging is very interesting here. The positioning of embedded problems is complicated, especially the complicated problems involving hardware and software. First, embedded debugging methods are relatively simple. Compared with the PC platform, the stability and reliability are reduced. This includes not only debugging Platform issues, but also the impact of some debugging methods on the Code, such as changing the code running time and changing the dynamic behavior (frequency and trigger time difference) of the code ). Embedded systems must have a comprehensive understanding. This section describes the design methods, design objectives, hardware design, and software design. The deeper the understanding, the more helpful the problem is. This involves one of the biggest problems, that is, the vision of many new students on their own: To Connect software and hardware.
I am also excited about this goal. When I am recruiting students, even some people with work experience say this goal. This goal is not wrong, but the two parts of computer software and hardware are very extensive fields. The goal is indeed a little higher. So here, I often give my colleagues the following advice: If your major is electronic, you can focus on the hardware, and the software is only used for both considerations, I learned some basic knowledge about C language and wrote some small code. I should not focus on full-time programming. If you are a computer professional, I suggest you focus on the software, learn to understand the schematic diagram, and understand some general functions of the circuit. Both sides are bottomless. If you are all connected, you really need some great skills. Here is just my suggestion. The reason is also very simple. people manage their own strengths and circumvent their weaknesses. A friend once asked me questions about embedded systems and wanted to become a person who can communicate both hardware and software. I want to plan my career. I will ask him a few software questions, such as the design idea of algorithms, the types of sorting algorithms, the types of search algorithms, and the nature of the operating system, I have no clue how to answer the basic questions such as mutex and multithreading. However, when asked about the circuit knowledge, KCl, kvl, Competitive Adventure, analysis methods of Op-ops, basic knowledge of Signals and Systems, the answer is like a stream. Such people focus on software, which is a great waste of resources. When you get started with the software, you may have forgotten the hardware design knowledge. Then, the business is facing a higher level of pressure. The software needs to learn a lot, the basic theory is poor, and everything is hard to learn. Hardware debugging and experience/accumulation are also difficult to make a difference. After a few years, you can only play a secondary role, with less energy and business frustration. You can only turn yourself into a zombie.

The Project Manager, Technical Director and other technical management positions are mentioned here. First of all, the two positions in various companies are different, but generally they are management-oriented. Since it is management, when you cannot use others to manage you, you need to learn management theory when you get the experience to manage others. Such as PMBOK and cmme. Take a good look at the excellent engineering practices in the industry, and take a good look at how the project objectives are aligned. These theoretical knowledge are the most effective means to guide our practice. Do not expect you to be a cool man, or create new theories. Let's take a look at the history. Every industry has a great startup. At that time, its level was relatively low. Then, after a period of development, there was a cool man who expanded the industry. This is not only because of the cool, but also because the industry has accumulated for a certain amount of time, so that such a cool can further expand the industry. This is an objective rule for the development of things, and we must respect it. However, in China, technicians are a special group of people who are proud of their technology and lack the proper respect and integrity for leaders who do not know the technology. It is easy to cause failure of government decrees. The Project Manager and director should have better technology to get the most recognized by their subordinates.


Therefore, the third point is to integrate your professional information, knowledge background, and reasonably choose your career goals. Find your own development space in the embedded field.


Finally, there are some miscellaneous which I will not classify.There are a variety of embedded learning methods.However, the best way is to turn to computers. Computers are the first teachers and the second teachers. Don't expect you to become a cool man. Learning knowledge is actually a process of building an understanding of the knowledge. Don't listen to Daniel's explanation immediately. First, you must have your own understanding. Even if it is wrong, I should identify it. You can learn more through Daniel's explanation and correct and adjust yourself to get twice the result with half the effort. If you do not have your own thinking, you are just a parrot, and lack the ability to be creative and face problems independently. Over time, it was terrible.


Don't try to get a high salary by taking all-around pills like Silk after several months of study at a training institution.If so, there are more people with time and money in the world. Why can't they use this method to become more competent and earn higher incomes? There are many connotations and extensions behind high salaries. These connotations and extensions include not only a little bit of knowledge and technology, but also attitudes and methods of doing things, and tenacity in the face of problems ...... Too many.In a word, when you want to make yourself stronger, you first seek comprehensive improvement in capabilities, not just a little bit of technology. Therefore, we must be steadfast in the face of such problems.The salary you ask is high, and the company has high expectations for you. Every company has special things that can be learned in a day or two, and it is not a substitute for technology. You can either end badly or barely complete the task, or surprise the four. You can do it yourself. If you think about it, your salary is not high or low. If you give yourself a little time, your company's expectations for you are low, and you can make some achievements, it is easy for others to look at it, which is conducive to your long-term development. There is still a lot of knowledge here. You must be cautious in your own life.


To learn embedded systems, you must be diligent. programming is a kind of physical and mental activity. This is common sense.The amount of programming in the 100,000 rows is the foundation. Write some complex algorithms, such as a *, tree, and so on. Then write some computer graphics algorithms to support up to 100,000 lines of programming with the goal of application software. Such strength can ensure that you are very skilled in the language used, and have a deep understanding of computer algorithm design and data structure, at the same time, you can be slightly familiar with the operating system APIs. If you can stick to this training to reach 0.3 million rows. Then it will be even better. It can lay a solid foundation for further industry development.


Let's have a simple chat. You are welcome to shoot bricks. Thank you.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.